DB2 学习笔记(四)

在AIX 系统上使用"db2 ? xxx" 命令查看帮助,需要加转移符"\" $ db2 \? list db2 get authorizations 用来获取当前用户的权限  Direct SYSADM authority                   ...
在AIX 系统上使用"db2 ? xxx" 命令查看帮助,需要加转移符"\"
$ db2 \? list
db2 get authorizations 用来获取当前用户的权限

 Direct SYSADM authority                    = NO
Direct SYSCTRL authority                   = NO
Direct SYSMAINT authority                  = NO
Direct DBADM authority                     = YES
Direct CREATETAB authority                 = YES
Direct BINDADD authority                   = YES
Direct CONNECT authority                   = YES
Direct CREATE_NOT_FENC authority           = YES
Direct IMPLICIT_SCHEMA authority           = YES
Direct LOAD authority                      = YES
Direct QUIESCE_CONNECT authority           = YES
Direct CREATE_EXTERNAL_ROUTINE authority   = YES
Direct SYSMON authority                    = NO
 Indirect SYSADM authority                  = NO
Indirect SYSCTRL authority                 = NO
Indirect SYSMAINT authority                = NO
Indirect DBADM authority                   = NO
Indirect CREATETAB authority               = NO
Indirect BINDADD authority                 = NO
Indirect CONNECT authority                 = YES
Indirect CREATE_NOT_FENC authority         = NO
Indirect IMPLICIT_SCHEMA authority         = NO
Indirect LOAD authority                    = NO
Indirect QUIESCE_CONNECT authority         = NO
Indirect CREATE_EXTERNAL_ROUTINE authority = NO
Indirect SYSMON authority                  = NO

DB2在编目节点(catalog node)时,可以在使用admin 关键字,指定admin 代表此节点对应了一个DB2系统的安装,称为系统(system),如果不指定admin,代表此节点对应了一个DB2的实例(instance),并需要至少指定服务名与端口号其中之一来映射此实例。

$ db2 catalog [admin] node 

Use "WITH HOLD" cause for cursor declaration would have more control on sources used by this cursor.

Use "LEAVE myloop" to stop execution in loop and go to the end of the loop.

Use "ITERATE myloop" to stop execution in loop and return to the begin of the loop to continue next loop.

Below db2 commands above need to attach to target node first before issuing them. 

$ db2 list active databases
$ db2 list applications
UNIQUNE cause in savepoint

the cause intend to that the same savepoint name can't be reused in the same savepoint level.

Units of work

A transaction is commonly referred to in DB2(R) Universal Database (DB2 UDB) as a unit of work. A unit of work is a recoverable sequence of operations within an application process. It is used by the database manager to ensure that a database is in a consistent state. Any reading from or writing to the database is done within a unit of work.

For example, a bank transaction might involve the transfer of funds from a savings account to a checking account. After the application subtracts an amount from the savings account, the two accounts are inconsistent, and remain so until the amount is added to the checking account. When both steps are completed, a point of consistency is reached. The changes can be committed and made available to other applications.

A unit of work starts when the first SQL statement is issued against the database. The application must end the unit of work by issuing either a COMMIT or a ROLLBACK statement. The COMMIT statement makes permanent all changes made within a unit of work. The ROLLBACK statement removes these changes from the database. If the application ends normally without either of these statements being explicitly issued, the unit of work is automatically committed. If it ends abnormally in the middle of a unit of work, the unit of work is automatically rolled back. Once issued, a COMMIT or a ROLLBACK cannot be stopped. With some multi-threaded applications, or some operating systems (such as Windows(R)), if the application ends normally without either of these statements being explicitly issued, the unit of work is automatically rolled back. It is recommended that your applications always explicitly commit or roll back complete units of work. If part of a unit of work does not complete successfully, the updates are rolled back, leaving the participating tables as they were before the transaction began. This ensures that requests are neither lost nor duplicated.


sql0010N state 42603

编译过程时出现此错误信息,可能是由于多余的单引号引起,行号指定处为错误点。

sql0104N state 42601

过程如果超过65535字节长度限制,编译时会抛出此错误信息,行号指定处为限制点。

对于两个整形变量作除法运算,结果可能并不是你希望得到的小数(如果分子小于分母)

select 2/4 from sysibm.sysdummy1
1
----
0


若希望得到小数,可在运算之前转换分子分母任意一个到DECIMAL 或者DOUBLE

select DECIMAL(2)/4 from sysibm.sysdummy1
1
----
0.5

"GET DIAGNOSTICS" must be the first next line after DML, otherwise the ROW_COUNT will not be the value you want.

DELETE FROM PRMS1.opprtnty_line_item;
GET DIAGNOSTICS v_affected_rows = ROW_COUNT;

It's impossible to change a column from not null to nullable by alter table statement.
But there's a way that meets this requirement by execute sys procedure.

It's not allowed to drop columns from a table without re-creation of the table.

db2 doesn't support following sql

select NULL as c1 from sysibm.sysdummy1

在DB2 中重命名表或者索引

RENAME TABLE EMP TO EMPLOYEE
RENAME TABLE ABC.EMP TO EMPLOYEE 
RENAME INDEX NEW-IND TO IND
RENAME INDEX ABC.NEW-IND TO IND

拥有检查约束和非主键自增列的表不允许重命名,在视图、触发器、函数或者物化查询表中被引用的表也不允许重命名,只能Drop 掉,重新创建。

使用DMS 表空间,DB2绕过操作系统,直接管理用于表空间的存储,可以保证数据页物理连续的存放。不过有个例外,如果是files类型的DMS表空间容器,则不能总是保证数据页是物理连续存放的,而对于裸设备(raw)容器,则可以完全保证。

db2fm run cpu 100% on linux

refer to DB2 Help, try below command. $ db2fm -k $ db2fm -f on|off $ db2fm...

refer to DB2 Help, try below command.

$ db2fm -k
$ db2fm -f on|off 
$ db2fm -a on|off 
$ db2fm -d 
$ db2fm -D

数据库设计经验总结

数据库设计的范式    1NF 属性不可分割    2NF 没有部分依赖    3NF 没有传递依赖反规范化设计 反规范化设计的前提 反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。 反规范化设计的优点 能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。 反规范化设计的缺点 反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。 反规范化设计的方法 增加冗余列 增加派生列...

数据库设计的范式

    1NF 属性不可分割
    2NF 没有部分依赖
    3NF 没有传递依赖

反规范化设计

反规范化设计的前提
反规范化设计是规范化设计之后的步骤,首先令所有关系满足规范化设计(一般到3NF),之后的反规范化设计才能是可控的。

反规范化设计的优点
能够减少数据库查询时SQL的连接次数,从而减少磁盘IO,提高查询效率。

反规范化设计的缺点
反规范化设计会带来数据的重复存储,浪费了额外的磁盘空间,并且由于多处存储,增加了数据维护的复杂性。

反规范化设计的方法
增加冗余列
增加派生列
表合并
表分割
水平分割
建立多个列定义相同的表,将一个表中的数据行分别保存在多个表中。水平分割可以降低单表索引的层数和大小。
水平分割应用的几种情况:
表记录数很多
表中的数据具有独立性,比如数据可明显按所属地区、年度等属性进行划分
表内容需要存储在多个介质上
垂直分割
把一个表的列定义拆分到多个表中,并且具有相同的主键列。水平分割可以降低数据行的大小。
比如一个表中列数太多,并且某些列数据常用,而某些列数据不常用,就可以进行垂直分割。

反规范设计的数据维护
反规范设计的数据需要额外的工作来维护数据的完整性,一般可以通过以下几种方式进行
应用逻辑
在应用程序的事务中对同一数据的多处存储进行维护。
这种方式比较难于管理,一个维护逻辑很容易出现在多个应用程序当中,容易遗漏。
批处理维护
由批处理程序批量的处理所有的非规范化关系涉及的数据。一般定期运行,运行间隔根据业务来决定,并且可以利用Job来自动运行批处理程序。可用于对冗余数据的实时性要求不高或者有一定规则的环境。
触发器
在数据库端建立触发器,对原数据的修改会立即触发对冗余列的修改。可用于对数据实时性要求较高的环境,但同时会降低数据的插入和更新速度。

扇形陷阱与深坑陷阱 (Fan Trap and Chasm Trap)

两个陷阱的解释  

设计过程中应注意避免扇形陷阱出现,在设计玩成之后也应检查所有连续顺序相邻的两个one to many关系,以确保没有实际的深坑陷阱出现。

 

升级DB2 UDB V8.1到新版本Stinger

正文 IBM DB2的新版本Stinger已经发布有一段时间了,从名字就可以嗅出火药味,Stinger,不知道是否真的能够刺痛对手的神经。虽然作为一个数据库的使用者——一个全部工作几乎都与数据库相关的人——的确应该关心自己所使用的软件产品是否会有一个更加光明的未来,但这似乎不用更多怀疑,把视线从冒着硝烟的战场挪开,放回到我们应该真正关心的事情上来,无论是DB2、Oracle,或是其它。 从v8.1升级到Stinger,即v8.2版本,只需要安装FixPack 级别7,简称FP7。升级到FP6的路并不十分好走,可参见另一篇文章: 升级DB2 UDB V8.1的补丁包到级别 6 照例,升级之前首先仔细阅读升级包附带的说明文档。 升级包与说明文档的下载地址如下:ftp://ftp.software.ibm.com/ps/products/db2/fixes/ 进入后选择合适的语言、版本以及升级包级别,我的升级环境是32位PC服务器,RH Linux系统,对于我的系统所合适的文件地址如下: ftp://ftp.software.ibm.com/ps/products/db2/fixes/english-us/db2linuxIA32v8/fixpak/FP7a_MI00086/FP7a_MI00086.tarftp://ftp.software.ibm.com/ps/products/db2/fixes/english-us/db2linuxIA32v8/fixpak/FP7a_MI00086/FixPackReadme.txt 升级包超过700M,最好使用断点续传工具下载。 下载完成后,把升级包转移到/tmp目录$...

正文

IBM DB2的新版本Stinger已经发布有一段时间了,从名字就可以嗅出火药味,Stinger,不知道是否真的能够刺痛对手的神经。虽然作为一个数据库的使用者——一个全部工作几乎都与数据库相关的人——的确应该关心自己所使用的软件产品是否会有一个更加光明的未来,但这似乎不用更多怀疑,把视线从冒着硝烟的战场挪开,放回到我们应该真正关心的事情上来,无论是DB2、Oracle,或是其它。

从v8.1升级到Stinger,即v8.2版本,只需要安装FixPack 级别7,简称FP7。升级到FP6的路并不十分好走,可参见另一篇文章:

升级DB2 UDB V8.1的补丁包到级别 6

照例,升级之前首先仔细阅读升级包附带的说明文档。

升级包与说明文档的下载地址如下:

进入后选择合适的语言、版本以及升级包级别,我的升级环境是32位PC服务器,RH Linux系统,对于我的系统所合适的文件地址如下:

升级包超过700M,最好使用断点续传工具下载。

下载完成后,把升级包转移到/tmp目录

$ mv FP7a_MI00086.tar /tmp
$ cd /tmp

查询一下包

$ tar -tvf FP7a_MI00086.tar

发现文件不是在同一个目录当中,所以新建一个目录:db2fp7

$ mkdir db2fp7

然后把文件解开放到新建的目录中

$ tar -xvf FP7a_MI00086.tar -C db2fp7

已经看过了升级说明文件,做安装前的准备工作。

升级DB2需要脱机进行,首先转到数据库管理员用户

$ su - iname

iname 是你的实例名,也是管理这个实例的用户,使用带force参数的命令停止实例

$ db2stop force

接下来停止许可证服务

$ db2licd end

停止DAS服务

$ exit
$ su - aname

aname 是DAS所有者的用户名

$ db2admin stop
$ exit

如果错误监视服务正在运行,也需要停止,使用如下命令查询服务状态(需要root权限)

$ su -
# /bin/db2fmcu

是你db2系统文件的安装路径,比如:/opt/IBM/db2/V8.1

如果此服务正在运行,会返回类似如下输出:

FMC: up: PID = 763

否则输出:

FMC: down

使用如下命令停止服务

# /bin/db2fmcu -d

最后查看是否还有正在运行的db2相关进程,如果有其他db2进程运行,可能会导致升级失败。

# ps -aux |grep db2

如果有,杀掉

# kill -s 9 <进程号>

准备工作已经完成,准备开始升级,需要在root用户下执行升级工作。

# cd /tmp/db2fp7
# ./installFixPak -y

接下来需要等待一会,待提示升级成功之后,需要升级实例和DAS,同样需要root权限

# /instance/db2iupdt iname
# /instance/dasiupdt dasname

接下来重新启动实例

# exit
$ su - db2
$ db2stop
$ db2start

升级工作至此完成,查看是否可以正常连接到样本数据库以及版本信息

$ db2 connect to sample
Database Connection Information

Database server = DB2/LINUX 8.2.0
SQL authorization ID = DB2
Local database alias = SAMPLE

参考资源

Uncommitted Read isolation level

10:50 2004-11-23In most cases, transactions using the Uncommitted Read isolation level can read changes made to...
10:50 2004-11-23
In most cases, transactions using the Uncommitted Read isolation level can read changes made to rows by other transactions before those changes have been committed. However, such transactions can neither see nor access tables, views, or indexes created by other concurrent transactions until those transactions themselves have been terminated. The same applies to existing tables, views, or indexes that have been dropped—transactions using the Uncommitted Read isolation level will only learn that these objects no longer exist when the transaction that dropped them is terminated. There is one exception to this behavior: When a transaction running under the Uncommitted Read isolation level uses an updatable cursor, the transaction will behave as if it is running under the Cursor Stability isolation level, and the constraints of the Cursor Stability isolation level will apply.
--------------------------------------------------------------------------------



试着翻译一下:

大多数情况下,在使用“未提交读”隔离级别的事务中,可以看到其他事务中被更改但还未提交记录,但对于创建表、视图或者索引例外,在创建动作提交之前,无法看到它们当然也无法存取。同样,这适用于删除一个表、视图或者索引——所以,使用“未提交读”的事务只有在那些执行了删除动作的事务结束之后,才能发现这些表、视图或者索引已经不存在。但有一个例外的情况,当在运行于“未提交读”隔离级别的事务中使用可更新游标时,事务将被强制运行在“游标稳定”隔离级别。

中心含义就是“一个运行在未提交读隔离级别的事务,可以看到其他并发事务对数据所做的未提交修改,但无法看到它们对表、视图或者索引所做的未提交删除,直到这些并发事务被结束”。

在Power Designer 中应用概念模型进行数据库第一阶段设计的示例(二)

谁适合阅读本文本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使是优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。本文是第二部分,接上篇:在 Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一) 假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本 。定义更复杂的关系使用依赖关系(Dependent)还是使用上面的例子,我们假定这样的业务描述:雇员享有假期,雇员每次休假,需要记录雇员休假的起始日与结束日,假期以天为单位,一个雇员和一个开 始日唯一确定一个假期。根据这个业务描述,我们知道,对于假期而言,其必须依存于实体“Employee”而存在,即一个休假,必定有一个主体雇员。我们 在上一个模型的基础之上,添加一个实体,名称是“Holiday”,定义假期的属性开始日与结束日,这里并不需要重复定义一个雇员编号,而是替代的,使用 依赖关系,来表示实体“Holiday”依赖于实体“Employee”,关系定义如下图: 在实体“Holiday”中,我们需要设置开始日为主键标识符,开始日与其依赖实体中的雇员编号一起作为实体“Holiday”的标识符,用来唯一确定一个假期。这种依赖关系在概念图中表现如下: 从途中可以看出,在实体“Holiday”一端多了一个朝外的三角▲箭头,这个含义就是这个实体“的依赖于三角箭头所指的另外一个实体,在转化出来 的物理模型当中,实体“Employee”的empNo,在Holiday实体中不仅会作为一个外键,还同时会作为主键出现(与startData一起作 为复合主键)。使用Dominant...

谁适合阅读本文

本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。

如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。

如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使是优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。

本文是第二部分,接上篇:在 Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一)

假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本

定义更复杂的关系

使用依赖关系(Dependent)

还是使用上面的例子,我们假定这样的业务描述:雇员享有假期,雇员每次休假,需要记录雇员休假的起始日与结束日,假期以天为单位,一个雇员和一个开 始日唯一确定一个假期。根据这个业务描述,我们知道,对于假期而言,其必须依存于实体“Employee”而存在,即一个休假,必定有一个主体雇员。我们 在上一个模型的基础之上,添加一个实体,名称是“Holiday”,定义假期的属性开始日与结束日,这里并不需要重复定义一个雇员编号,而是替代的,使用 依赖关系,来表示实体“Holiday”依赖于实体“Employee”,关系定义如下图:

 

在实体“Holiday”中,我们需要设置开始日为主键标识符,开始日与其依赖实体中的雇员编号一起作为实体“Holiday”的标识符,用来唯一确定一个假期。这种依赖关系在概念图中表现如下:

 

从途中可以看出,在实体“Holiday”一端多了一个朝外的三角▲箭头,这个含义就是这个实体“的依赖于三角箭头所指的另外一个实体,在转化出来 的物理模型当中,实体“Employee”的empNo,在Holiday实体中不仅会作为一个外键,还同时会作为主键出现(与startData一起作 为复合主键)。

使用Dominant role

当两个实体之间的关系是1..1 时(尽管这种关系比较少见,常见于面向对象的设计方法当中,依赖实体中的主键通常与外健重合),你需要明确指定这两个实体,哪一个是父实体,哪一个是依赖实体,否则,系统在由概念模型转化为物理模型时,将不能确定需要在哪一端生成外键,这时就需要用到“Dominant role”选项,这个选项只有在1..1 的关系中才允许进行设置。我们假定这样的业务描述,企业中的部分雇员拥有一个系统帐号,并且是唯一的一个帐号,这些雇员需要保存一些额外的信息,比如帐号名称、密码等等。我们添加了一个新的实体“User”,其与雇员之间为1..1 的关系,由于一个用户帐号必定属于一个雇员,而一个雇员则可能没有用户帐号,所以我们定义实体“Employee”支配实体“User”。同时,由于 “User”依赖于“Employee”而存在,所以再定义一个由前者到后者的依赖关系,如下图:

 

Dominant role 选项中,箭头所指的实体为被支配的实体,即作为依赖实体。在模型图中,支配实体的一方会出现一个用圆括号括起来的大写字母“D”。

 

转化出来的物理模型中,表User中,empNo作为单独的主键,同时也是引用Employee表的一个外键。

处理多对多(n..n)的关系

在概念模型中,一般很少看见两个实体之间是直接的n..n 的关系,一般这种情况下我们会增加一个中间实体,在Power Designer中,提供了一个专门的符号来对应,叫做“Association”。请考虑以下的情形:

企业中拥有帐号的雇员在系统中具有不同的操作权限,这通过用户角色来进行管理,权限已经分配给了多个不同的角色,一个用户帐号至少属于一个角色,并 且可能会同时属于多个角色,一个角色可以包含0个或多个用户帐号。根据以上描述,我们添加一个实体“Role”,它与实体“User”之间是n..n 的关系,为了表达这种关系,我们增加一个“Association”并分别使用“Association Link”与其他两个实体建立关系,表示如下:

使用一个普通的实体,合理定义关系,并选择“Dependent”选项,是可以替代“Association”的,但使用 “Association”更方便、直观,使模型更容易理解,并可以减少因不谨慎而可能导致的错误。

(完)

8/23/2005 更新了下载链接

参考资源

  • 《Database Solution-A Step by Step Guide to Building Database》by Thomas M.Connolly, Carolyn E.Begg, 译者: 何玉洁,梁琦等
  • 下载第三方 Power Designer 使用教程

 

在Power Designer 中应用概念模型进行数据库第一阶段设计的示例(一)

谁适合阅读本文本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。建立一个概念模型对于数据库的设计,我们一般从概念模型开始,在概念模型设计阶段,我们着重分析数据的逻辑结构,避免陷入具体的存储细节,所有的设计都与将来所要采用的具体数据库产品无关。假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本 。运行程序,使用“Ctrl+N” 新建模型,在弹出的窗口中选择“Conceptual Data Model”,点击“OK”。在窗口左侧浏览器中的当前工作区节点下会新增一个概念模型,自动建立了一个默认的概念图Diagram_1,并且已经在当前工作窗口打开。一个概念模型可以拥有多个这样的概念图,可以在模型的属性中指定其中一个作为默认。工作区中有一个元件面板,包含了在概念模型中可以使用的各种符号。最常用的是:实体(Entity)和关系(Relationship),如下图:定义实体用鼠标双击实体的符号,可以进入实体的属性页。General 项目 Name:是用来在模型中标识一个实体,一般用于模型在界面中的显示(这个可以通过更改选项设置进行改变)。在一个模型当中,实体的名字不能重复。Code:在模型转化时一般作为对象的物理名称,比如把实体属性的Code转化为数据库中的列名,当然我们现在不必为了这个实体将来叫什么而费神,一般采取与Name一致即可。Generate:默认是选择状态,如果取消,则在转化为其他模型时,会忽略这个实体。 Attributes 项目 窗口中下面表格里的各项很类似于一个表结构的定义,但数据类型是经过抽象化的,采用独立的表示方法,不与任何一个具体的数据库系统相关。在此项目中为当前实体添加属性。后面的三列CheckBox分别代表:M:此属性不允许为空值 P:此属性为主键标识...

谁适合阅读本文

本文适合已经掌握数据库基本设计理论或者已经具有实际经验,打算借助Power Designer进行辅助设计的读者。

如果你已经是一个Power Designer的熟练使用者,或者你期望的是一些数据库的设计理论,请跳过本文。

如果你还不清楚数据库的基本设计理论,比如关系模型,范式,又有志于数据库设计领域的话,最好能够先打好基础,先找些与上面有关的资料看看,即使优秀的辅助设计工具也并不能够替代我们设计出一个规范化的模型。

建立一个概念模型

对于数据库的设计,我们一般从概念模型开始,在概念模型设计阶段,我们着重分析数据的逻辑结构,避免陷入具体的存储细节,所有的设计都与将来所要采用的具体数据库产品无关。

假设您已经安装好Power Designer 9.5 版本,如果您还没有获得软件,请到Sybase网站下载试用版本 。运行程序,使用“Ctrl+N” 新建模型,在弹出的窗口中选择“Conceptual Data Model”,点击“OK”。

在窗口左侧浏览器中的当前工作区节点下会新增一个概念模型,自动建立了一个默认的概念图Diagram_1,并且已经在当前工作窗口打开。一个概念模型可以拥有多个这样的概念图,可以在模型的属性中指定其中一个作为默认。

工作区中有一个元件面板,包含了在概念模型中可以使用的各种符号。最常用的是:实体(Entity)和关系(Relationship),如下图:


定义实体

用鼠标双击实体的符号,可以进入实体的属性页。

  1. General 项目

    Name:是用来在模型中标识一个实体,一般用于模型在界面中的显示(这个可以通过更改选项设置进行改变)。在一个模型当中,实体的名字不能重复。

    Code:在模型转化时一般作为对象的物理名称,比如把实体属性的Code转化为数据库中的列名,当然我们现在不必为了这个实体将来叫什么而费神,一般采取与Name一致即可。

    Generate:默认是选择状态,如果取消,则在转化为其他模型时,会忽略这个实体。

  2. Attributes 项目

窗口中下面表格里的各项很类似于一个表结构的定义,但数据类型是经过抽象化的,采用独立的表示方法,不与任何一个具体的数据库系统相关。

在此项目中为当前实体添加属性。

后面的三列CheckBox分别代表:

  • M:此属性不允许为空值
  • P:此属性为主键标识
  • D:为可显示属性

按“Crtl+U”呼出“定制列过滤器”的窗口,可以根据自己的喜好和实际需要选择那些列出现在窗口中,那些隐藏。使用快捷键 “Crtl+E”可以允许或者禁止当前过滤器。

我们分别重新命名了以上两个实体为部门(Department)和雇员(Employee),并分别添加了属性,如下图:

默认的,概念图只显示作为主键标识的属性,并且隐藏了数据类型。这样是为了使概念图更加简洁、易于理解,你完全可以通过选项更改这些显示配置。

定义关系

双击关系(Relationship)的符号,进入关系的属性页,在Detail项目中,我们可以对两个实体的关系进行详细的定义,如下图:

  1. General 项目

    一般最好为关系取一个贴切的名字,本例的业务关系描述如下:一个部门有多个员工,我们使用“Has”作为这个关系的名字。

    同样的我们也可以描述为:多个员工属于一个部门,可不可以使用“Belong to”作为关系名字呢?一般不推荐这样做,在概念图中有一个约定,关系的名字采用从“1,n”中“1”所在的方向向“n”所在一方进行读取的语义。本例即 “1”在部门一方,从部门一方向雇员一方读取语义,即:部门有(Has)多个员工。

  2. Detail 项目

假定对于实体部门(Department)和雇员(Employee),具有如下关系:

  • 一个部门可以有多个雇员,新成立的部门也可以暂时没有任何雇员;
  • 一个雇员必须属于一个部门,并且同时只能属于一个部门;

根据以上关系,我们修改属性页,部门-雇员的方向采用默认的0,n,雇员-部门的方向修改为强制约束(Mandatory),或者从下拉框中选择“1,1”,如下图:

最后定义完成的关系(Relationship)在概念图中表示如下:

注:在Power Designer中,关系符号靠近实体端的一个“横线”代表强制性约束,“空心圆圈”代表无强制约束,即这一方可以无对象关联;“非分岔”线代表为“1” 的关系,“分岔”线代表“多”的关系。以上四个符号共可以组合出16种关系(包含反向)。其中“多对多”的关系一般通过给出一个中间实体来进行分解,所以在许多概念图中,是看不到实际的“多对多”的关系存在的。

另外在关系的属性中还有两项:Dominant role 和Dependent,可以表示更复杂的关系,会在后面讲到。

(待续)

8/23/2005 更新了下载链接

参考资源

  • 《Database Solution-A Step by Step Guide to Building Database》by Thomas M.Connolly, Carolyn E.Begg, 译者: 何玉洁,梁琦等
  • 下载第三方 Power Designer 使用教程

 

 


DB2 UDB V8.1 管理 学习笔记(一)

正文工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。DB2 基本概念在DB2中由上至下的几个概念:实例(Instance), 数据库(Database),表空间(TableSpace),容器(Container)在一个操作系统中,DB2数据服务可以同时运行多个实例(有别于Oracle在一个系统内只能起一个实例).数据库定义在实例中,一个实例可以包含多个数据库。在同一个实例中的不同数据库是完全独立的,分别拥有自己独立的系统编目表。表空间有2种管理方式:DMS(Database management Space)方式SMS(System manegement Space)方式DMS与SMS方式在表空间建立时指定,建好后不能转换。对于DMS方式,一个表空间对应了一个或多个容器(Container),容器指定了数据的物理存储位置。对于SMS方式,只能够指定一个目录,不能够增加。表空间具有以下类型:系统编目表空间(SysCatSpace)系统临时表空间(SysTempSpace)用户表空间(UserSpace)用户临时表空间(UserTempSpace)一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间与系统临时表空间。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现,对于临时表空间,其占用磁盘大小是根据使用情况动态伸缩的,即仅在需要时才分配磁盘空间,并在使用后进行回收。此外,若用户需要创建表,则需要创建用户表空间,若需要使用临时表,则需要创建用户临时表空间。容器分为三种类型:Files 文件Devices 设备Directory 目录文件与设备,用于DMS方式的表空间;目录,用于SMS方式的表空间,此种方式不需要人工管理数据存储文件,DB2可根据情况在目录中自动增加存储文件,只要磁盘空间允许。实质上,表空间是数据存储的逻辑位置定义,容器则是数据存储的物理位置定义。数据库的性能影响一个数据库的性能主要有以下因素:磁盘(Disk)内存(Memory)处理器(CPU)网络(Network)其中以磁盘最为显著,90%的性能瓶颈可能来自于磁盘的IO竞争;其次是内存,一方面是指物理内存的总量要满足需求,另一方面是指与内存相关的配置参数应正确配置;当然处理器的性能也很重要,多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果;网络不属于主要因素,属于客观的环境因素,是指过慢的网速会对数据的传输造成影响。以下列出一些对于提高数据库性能有效的方法:对于运行数据库服务的服务器可以尽可能的配置多块物理磁盘,每块的容量不必太大,这样可以有效的分担数据存储与读取操作过程的磁盘IO竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。如果条件允许,尽量使数据存储服务与操作系统分别运行在物理分开的磁盘上。采用DMS(Database Management Space)管理方式的表空间。在物理不同的磁盘上创建多个表空间。然后可以将数据和索引分别存放在不同的表空间,这样可以显著的提高性能。还可以把一个使用频繁的大表纵向拆成多个小表,分别存放在不同的表空间中,然后用一个视图进行联合。DB2服务器可以管理裸设备,即除系统以及DB2服务运行磁盘以外,为DB2数据存放单独准备磁盘,可以是多块,分区后不需要格式化,创建裸设备后直接交给DB2进行管理,用于存储数据。系统的临时表空间对数据库性能影响很大,当由管理的物理内存不能满足数据库操作的需要时,DB2便会把临时数据写到磁盘上,这时便用到了系统临时表空间,并且这种情况会经常发生。尽量在磁盘靠近最内层磁道的位置安放数据,因为此处磁盘的访问速度较快。与性能相关的主要参数DB2的参数配置分为两个级别,一个是实例级别,另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。以下是三个比较重要的内存配置参数:bufferpagelocklistsortheapbufferpage: 由同一个数据库中的所有对象共享。sortheap: 用于排序的内存交换区,非共享,不宜设置太大,否则,很容易引起内存耗尽,因为每一个事务都会申请独立的内存用于排序。locklist: 共享内存,用于记录数据服务运行中建立的锁。建议设置20Mb左右,需要时根据实际情况进行调整。DB2默认使用行级锁,如果设置太小,当锁的记录太多时,则会导致内存不足,此时DB2会把多个行锁升级为一个表锁,这样就会大大降低应用程序的并发性能。如果设置太大,则多分配的内存很少会被用到,导致浪费。其他的一些配置参数:numdb: 同时可以启动的实例数目DB2的常用命令db2ilist...

正文

工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。

DB2 基本概念

在DB2中由上至下的几个概念:

  • 实例(Instance),
  • 数据库(Database),
  • 表空间(TableSpace),
  • 容器(Container)

在一个操作系统中,DB2数据服务可以同时运行多个实例(有别于Oracle在一个系统内只能起一个实例).

数据库定义在实例中,一个实例可以包含多个数据库。在同一个实例中的不同数据库是完全独立的,分别拥有自己独立的系统编目表。

表空间有2种管理方式:

  • DMS(Database management Space)方式
  • SMS(System manegement Space)方式

DMS与SMS方式在表空间建立时指定,建好后不能转换。对于DMS方式,一个表空间对应了一个或多个容器(Container),容器指定了数据的物理存储位置。对于SMS方式,只能够指定一个目录,不能够增加。

表空间具有以下类型:

  • 系统编目表空间(SysCatSpace)
  • 系统临时表空间(SysTempSpace)
  • 用户表空间(UserSpace)
  • 用户临时表空间(UserTempSpace)

一个数据库中必须存在两个系统基本的表空间,分别是系统编目表空间与系统临时表空间。在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现,对于临时表空间,其占用磁盘大小是根据使用情况动态伸缩的,即仅在需要时才分配磁盘空间,并在使用后进行回收。此外,若用户需要创建表,则需要创建用户表空间,若需要使用临时表,则需要创建用户临时表空间。


容器分为三种类型:

  • Files 文件
  • Devices 设备
  • Directory 目录

文件与设备,用于DMS方式的表空间;

目录,用于SMS方式的表空间,此种方式不需要人工管理数据存储文件,DB2可根据情况在目录中自动增加存储文件,只要磁盘空间允许。

实质上,表空间是数据存储的逻辑位置定义,容器则是数据存储的物理位置定义。

数据库的性能

影响一个数据库的性能主要有以下因素:

  • 磁盘(Disk)
  • 内存(Memory)
  • 处理器(CPU)
  • 网络(Network)

其中以磁盘最为显著,90%的性能瓶颈可能来自于磁盘的IO竞争;

其次是内存,一方面是指物理内存的总量要满足需求,另一方面是指与内存相关的配置参数应正确配置;

当然处理器的性能也很重要,多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果;

网络不属于主要因素,属于客观的环境因素,是指过慢的网速会对数据的传输造成影响。以下列出一些对于提高数据库性能有效的方法:

  • 对于运行数据库服务的服务器可以尽可能的配置多块物理磁盘,每块的容量不必太大,这样可以有效的分担数据存储与读取操作过程的磁盘IO竞争。即采用多块小容量的磁盘在性能上要优于仅采用一块大容量的磁盘。
  • 如果条件允许,尽量使数据存储服务与操作系统分别运行在物理分开的磁盘上。
  • 采用DMS(Database Management Space)管理方式的表空间。
  • 在物理不同的磁盘上创建多个表空间。然后可以将数据和索引分别存放在不同的表空间,这样可以显著的提高性能。还可以把一个使用频繁的大表纵向拆成多个小表,分别存放在不同的表空间中,然后用一个视图进行联合。
  • DB2服务器可以管理裸设备,即除系统以及DB2服务运行磁盘以外,为DB2数据存放单独准备磁盘,可以是多块,分区后不需要格式化,创建裸设备后直接交给DB2进行管理,用于存储数据。
  • 系统的临时表空间对数据库性能影响很大,当由管理的物理内存不能满足数据库操作的需要时,DB2便会把临时数据写到磁盘上,这时便用到了系统临时表空间,并且这种情况会经常发生。
  • 尽量在磁盘靠近最内层磁道的位置安放数据,因为此处磁盘的访问速度较快。

与性能相关的主要参数

DB2的参数配置分为两个级别,一个是实例级别,另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。以下是三个比较重要的内存配置参数:

bufferpage
locklist
sortheap
  • bufferpage: 由同一个数据库中的所有对象共享。
  • sortheap: 用于排序的内存交换区,非共享,不宜设置太大,否则,很容易引起内存耗尽,因为每一个事务都会申请独立的内存用于排序。
  • locklist: 共享内存,用于记录数据服务运行中建立的锁。建议设置20Mb左右,需要时根据实际情况进行调整。DB2默认使用行级锁,如果设置太小,当锁的记录太多时,则会导致内存不足,此时DB2会把多个行锁升级为一个表锁,这样就会大大降低应用程序的并发性能。如果设置太大,则多分配的内存很少会被用到,导致浪费。

其他的一些配置参数:

numdb: 同时可以启动的实例数目

DB2的常用命令

db2ilist 列出当前系统中定义的DB2实例
daslist 列出系统中的DAS
db2 list database directory 列出当前实例中定义的数据库
db2 list tablespaces 列出当前数据库中定义的表空间
db2 list tabses [for all] 列出当前数据库中的表
db2 list active db 列出活动的数据库
db2 get dbm config
get db cfg for databasename
db2 update db cfg for databasename using bufferpage 600M
db2 alter bufferpool IABMDEFAULTBP size =1
db2 list applications show detail

以上命令可以在后面加 " show detail" 参数,显示详细信息。

DB2数据存储的页大小只能在表空间级别统一指定(区别于Oracle,可以定义在表级别), 并且建好后不能修改。

可以手工建立一个页大小为4K的DMS用户临时表空间,然后把系统默认的SMS系统临时表空间删除。为满足应用需求,一般还应再建立一个页大小在8K以上的用户临时表空间。

DB2 UDB V8.1 对RedHat Linux 9 的支持不好,默认情况下无法启动GUI安装程序(可以通过设置环境LD_ASSUME_KERNEL=2.2.5解决),并且不会安装Sample数据库,控制中心也无法正常启动。

DB2 SQL 相关

当使用COUNT()函数时,如果表中的记录数 > 2 147 483 647行,则函数可能返回错误的结果,这时可以使用返回类型为DECIMAL(31, 0)的COUNT_BIG()函数。

DISTINCT 关键字可以用在COUNT()函数中,如:

SELECT COUNT(DISTINCT id) FROM TABLE

这代表将不对id列的重复值进行计数。

ORDER BY子句后面如果写了多个列名,需要分别指定升序或是降序。

可以在load大量数据时,暂时关闭表的日志选项。使用:

ALTER TABLE ... ACTIVATE NOT LOGGED INITIALLY

DB2的几个特殊寄存器:

CURRENT DATE
CURRENT TIME
CURRENT TIMESTAMP
USER(用户ID)

有关日期的操作:

CURRENT TIMESTAMP + 2 DAYS(or HOURS, SECONDS, MONTHS, YEARS, etc.)

case 语句的使用:

case when 条件一 then 动作一 else 动作二 end; 

以上可以欠套使用。

在视图的创建语句中无法使用order by 子句与 fetch n rows 子句。但对于order by可以用如下方法替代实现,不过会影响效率。

create view v_name1(c1, c2, c3) as
select * from (
select column1, column2, column3
from t1
order by column1 ) as t1;

参考资源

 

DB2 UDB V8.1 管理 学习笔记(二)

正文工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。表空间类型分为SMS和DMS,分别是system management space, database management space. SMS使用方便,简单,无需手工创建和维护数据存储文件。DMS需要手动指定container和存储数据的文件名,并保证有足够磁盘空间可用。对于一个数据库,至少存在一个page size为4K的系统临时表空间,可以额外建立具有更大page size的用户临时表空间,系统会自动进行使用。无法用alter语句更改一个字段的数据类型,对某些字段可以更改数据长度,这一点上相对于Oracle,DB2的限制要多一些。可以使用: select 表达式 from sysibm.sysdummy; 替代的,以下语句是等价的:values 表达式;表和视图的创建、更新、删除操作,都写日志,因此可以commit或rollback。在update语句中,如果没有对定义了默认值的某个字段显式赋值,则更新时,此字段不会重新执行默认值中定义的表达式。为了让其重新执行默认值定义的表达式,可以采用以下方式:create table...

正文

工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。

表空间类型分为SMS和DMS,分别是system management space, database management space. SMS使用方便,简单,无需手工创建和维护数据存储文件。DMS需要手动指定container和存储数据的文件名,并保证有足够磁盘空间可用。
对于一个数据库,至少存在一个page size为4K的系统临时表空间,可以额外建立具有更大page size的用户临时表空间,系统会自动进行使用。

无法用alter语句更改一个字段的数据类型,对某些字段可以更改数据长度,这一点上相对于Oracle,DB2的限制要多一些。
可以使用: select 表达式 from sysibm.sysdummy; 替代的,以下语句是等价的:values 表达式;


表和视图的创建、更新、删除操作,都写日志,因此可以commit或rollback。

在update语句中,如果没有对定义了默认值的某个字段显式赋值,则更新时,此字段不会重新执行默认值中定义的表达式。为了让其重新执行默认值定义的表达式,可以采用以下方式:

create table t1 (c1 varchar(32), lastupdatetime with default current timpstamp);
update t1 set c1 = 'new string', lastupdatetime = default;

对于DB2数据库可以在创建时指定codepage参数,创建后不可修改。当应用程序访问数据库时,DB2会比较两者的codepage是否一致,不一致则进行代码页的自动转换。为了减少转换所带来的开销,应尽量保证应用程序所采用的代码页与数据库一致。

可以对DB2 CLP工具的codepage进行设置,使用:

$ db2set DB2CODEPAGE= 1386

本例中设置的是中文GBK字符集在Windows平台对应的值。注意,这个数字值是由DB2自己定义的。有关各种字符集在相应平台所对应的代码页值可在IBM网站查找。

在DB2 CLP中,对远程数据库编目的操作,首先把远程主机映射为本地节点,节点名自己指定,本例采用TCPIP连接。service_name一般定义在远程主机的/etc/services文件中。

$ db2 CATALOG TCPIP NODE local_node_name REMOTE hostname|ip SERVER service_name 

然后把已知的远程主机的数据库映射到本地别名,注意本地别名在主机级别不能重复。节点名指定上面刚编目的节点。

$ db2 CATALOG DATABASE db_name AS local_alias AT local_node_name USER username USING password 

现在就可以用刚才编目中定义的别名连接远程主机数据库

$ db2 CONNECT TO local_alias USER username USING password

获取数据库详细配置信息

$ db2 GET CONFIGURATION SHOW DETAIL 

对于DB2返回的错误号,可以用以下方法查阅说明(以sql 10008为例):

$ db2 ? sql10008

数据库的备份与恢复:

使用备份与恢复工具可以完成在不同的服务器见完整的转移数据库的工作,命令行方式如下:

备份

$ db2 BACKUP DATABASE db_name USER user_name USING password to backup_dir_name
$ db2 BACKUP DATABASE dlhdb USER dlh USING admindlh TO d:\backups

恢复

$ db2 RESTORE DATABASE source_db_name USER user_name USING password FROM backup_dir_name TAKEN AT backup_file_create_time TO driver_letter INTO new_db_name
$ db2 RESTORE DATABASE dlhdb USER dlh USING admindlh FROM d:\backups TAKEN AT 20031209141056 TO d: INTO newdb

有关实例的操作:

设置默认实例环境变量

$ db2 SET DB2INSTANCE=inst_name

启动当前实例

$ db2start

停止当前实例

$ db2stop [force]

连接到某个实例

$ db2 ATTACH TO ANSTANCE inst_name

获取实例的配置参数

$ db2 GET DBM CFG SHOW DETAIL

导出数据库完整的定义到脚本文件,包括表,视图,函数,数据库参数等

$ db2look -d sample(数据库) -a -e -l -x -m -f -o(参数)samplesql.out(输出文件)

load 一个表的数据时,有可能导致表空间处于backup pending(0x0020)状态。比如把整形数据load到double型的字段中。
处于backup pending状态的表空间不能被访问。
可以通过对此表空间运行一次backup操作,恢复到正常状态(0x0)。

对于自增字段,可以通过两种方式指定:

generated by default as identity
generated always as identity

区别是,第一种方式在插入数据时允许手工指定自增字段的值,只要不重复即可,并且数据库会自动设置下一个值;
第二种方式则不允许指定,只能由数据库自动分配并插入。


DB2 sql语句中转义符的使用:

select * from t1 where a like '%abc\%def' escape '\';

创建数据库时,出现SQL1043C错误,可能的问题:
指定容器所在的磁盘空间不足,
当容器为file类型时,后面的long-num参数不对,比如25600代表256Mb,但如果指定256则会导致以上错误。


平台 RH Linux 8
DB2 UDB v8.1
在WAS 5中建立到db2的数据源,但连接失败,返回以下错误:

[Servlet Error]-[SQLConnect]: java.lang.UnsatisfiedLinkError: SQLConnect

原因是没有为运行was服务的用户设置以下环境变量:

D_LIBRARY_PATH
LIBPATH
DB2INSTANCE
...

以上环境变量定义在 $INSTHOME/sqllib/db2profile文件中,可以采用的解决方案:

$ sh stopServer.sh servername

$ . $INSTHOME/sqllib/db2profile
$ sh startServer.sh servername

也可以把db2profile放到was启动脚本中首先执行。

如果只设置了LD_LIBRARY_PATH,LIBPATH两个环境变量,DB2会返回以下错误:

CLI0600E Invalid connection handle or connection is closed.
SQLSTATE S1000

对应于Oracle的Job包功能,DB2通过一个GUI工具-任务中心(task center)实现。使用任务中心前需要进行必要的工具设置,需要创建一些数据库对象,可以创建在已有的一个数据库中,也可以单独创建一个数据库。通过以下命令实现:

create catalog tools schema_name create new database db_name

此命令为编目工具创建一个名为db_name 的数据库,并指定了一个模式名。
注意:无法用using 子句指定一个codeset,系统会默认使用ISO8859-1字符集。


Quest Center for DB2带有数据库性能诊断功能,动态监视db内存,磁盘io, 表空间,负载等等。

DB2客户端的类型:

  • DB2运行时客户端 DB2 Runtime Client
  • DB2管理客户端 DB2 Administrator Client(包含运行时客户端的所有内容)
  • DB2应用程序开发客户端 DB2 Application Development Client(包含管理客户端的所有内容)
  • DB2瘦客户端 DB2 Thin Client
  • DB2 Relational Connect 联邦数据库,用于连接异种数据库。

参考资源

DB2 UDB V8.1 管理 学习笔记(三)

正文工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。强制断开已有连接,停止实例并删除。$ db2idrop -f instance_name 用于在UNIX下迁移实例。$ db2imigr instance_name 更新实例,用于实例获得一些新的产品选项或修订包的访问权。$ db2iupdt instance_name 获取当前所处的实例。$ db2 get instance 当更新实例级别或数据库级别的参数后,有些可以立即生效,有些需要重新启动实例才可生效。immediate 显式指明更改立即生效,deferred...

正文

工作学习之余对DB2使用知识的一点零散记录,包括DB2的基础知识、数据库管理、性能调优以及开发等方面,内容非常零散,而且有时不免理解有误,可能并未回头改掉,望见谅,仅供参考。

强制断开已有连接,停止实例并删除。

$ db2idrop -f instance_name 

用于在UNIX下迁移实例。

$ db2imigr instance_name 

更新实例,用于实例获得一些新的产品选项或修订包的访问权。

$ db2iupdt instance_name 

获取当前所处的实例。

$ db2 get instance 

当更新实例级别或数据库级别的参数后,有些可以立即生效,有些需要重新启动实例才可生效。immediate 显式指明更改立即生效,deferred 显式指明更改在重起实例后生效。

当需要配置许多台客户机与DB2服务器的连接时,可以用配置助手将服务器的概要文件导出,然后在每个客户机使用配置助手导入概要文件。若客户端只安装了运行时客户端,则可以使用以下命令导入概要文件。

$ db2cfimp access_profile_name

疑问:是否应该由已配置好的一台客户机导出概要文件?

列出所有的数据库连接

$ db2 list applications 

终止指定的连接句柄,事务被中断并回滚。同时操作多个句柄可以用逗号分开,或者指定关键字 all。此命令只终止指定的连接,不会阻止新的应用连接到数据库。

$ db2 force application (2) 

创建数据库时可以指定排序方式:

collate using identity

系统模式集是和每个数据库一起创建的,并且它们被放置到 SYSCATSPACE 表空间中。

  • SYSIBM:基本系统目录,建议不要进行直接访问
  • SYSCAT:PUBLIC 被授予该模式的 SELECT 权限,对只读视图编目,这是获取目录信息的推荐方式
  • SYSSTAT:可更新的目录视图 - 影响优化器
  • SYSFUN:用户定义的函数

如果表中的现有行不满足约束,则不能定义该约束。可以关闭约束检查以加快大量数据的添加,但是该表处于检查暂挂(CHECK PENDING)状态。

在创建表时,可以使用选项来指定一个或多个表空间,表和索引将被放置到其中:

CREATE TABLE TEST (
column 1 definition, column 2 definition, ...
) IN <tablespace name> INDEX IN <index space name>

这条命令为您提供了一个选项:指定创建表和索引的位置。如果没有指定单独的索引表空间,那么将在表所在的同一表空间中创建索引。创建表之后,就没有机会在不同的表空间中创建索引了。创建索引要提前作规划!

CREATE <UNIQUE> INDEX <index name> ON <table name>
(
column 1 <ASC | DESC> ,
column 2 <ASC | DESC> ...
)

UNIQUE 属性告诉 DB2,索引必须强制所有插入值的唯一性。
如果结果集是以升序和降序两种方式排序的,ALLOW REVERSE SCANS 会告诉 DB2 在索引中包括附加的指针,以允许在记录中有效地进行正向和反向链接。

DB2 能够向正在创建的索引中添加另外的列。CREATE INDEX 命令允许用户指定那些不属于实际索引但因为性能原因而保存在索引记录中的列。

CREATE UNIQUE INDEX ON EMPLOYEE (EMPNO) INCLUDE (LASTNAME,FIRSTNAME)

对于索引中包含的列而言,索引必须是 UNIQUE 的。当创建索引时,另外的列被添加到索引值中。索引不使用这些值进行排序或确定唯一性,但可以在满足 SQL 查询时使用它们。例如,下列 SELECT 语句将不需要读取实际数据行:

SELECT LASTNAME, FIRSTNAME FROM EMPLOYEE WHERE EMPNO < '000300'

要在表上创建群集索引,将 CLUSTER 关键字附加到 CREATE INDEX 命令的末尾,例如:

CREATE INDEX DEPTS-IX ON EMPLOYEE(WORKDEPT) CLUSTER

使用下列通用规则来决定为表定义的索引的经典数量。索引数量取决于数据库的主要用途:
对于在线事务处理(OLTP)环境,创建一到两个索引。
对于混合查询和 OLTP 环境,创建两到五个索引。
对于只读查询环境,创建五个以上索引。

在Windows平台上的DB2的命令行模式下,或者在类Unix平台下,使用命令db2cc启动控制中心。

db2move提供了在数据库之间批量移动数据的能力,可以指定某个表,也可以指定整个数据库的表。

$ db2move dbname action

action 可以指定为:export, import或者load
使用 -l 参数指定lob对象存储的文件夹

执行增量备份要求设置数据库配置参数“trackmod”的值为“YES”
执行在线备份要求设置数据库配置参数“logretain”的值为“YES”,在线备份语法:

$ db2 backup db dbname online to path

当删除了das用户的home目录,未先drop掉das服务,则再执行dasdrop则不成功,提示:
db2admin 命令无法找到,原因是db2admin命令保存在das的home目录中。
可以删除干净das用户的home目录后,重起服务器解决此问题。

$ dasupdt dasName 升级das
$ db2iupdt instName 升级实例
$ db2licd end 停止许可证守护进程

在Linux系统安装DB2 V8.1后,db2fmcd进程会自动启动,即使不启动实例和DAS,

在中文Linux环境下安装了DB2数据库服务,并使用GBK代码页(codepage)创建了一个数据库,完成后可以正常连接操作,若更改操作系统代码页为英语,则使用“db2 connect”时会报错,连接时无法转换代码页。

参考资源

 

升级DB2 UDB V8.1的补丁包到级别 6

对于一个第一次使用DB2修订包的用户,修订包的升级不是一件十分轻松的事情,本文记录了升级DB2 V8.1 修订包到级别6的一般过程,以及可能导致升级失败的问题。 下载修订包 DB2不要求逐个的安装不同级别的修订包,级别高的修订包包含低级别修订包中的所有代码,所以您可以挑选当前级别最高的修订包下载。 下载位置:ftp://ftp.software.ibm.com/ps/products/db2/fixes/ 选择相应的语言环境和产品版本 本文中示例在如下环境安装成功: IBM xSeriers 345(Inter 32位) RedHat Enterprise Linux 3.0...

对于一个第一次使用DB2修订包的用户,修订包的升级不是一件十分轻松的事情,本文记录了升级DB2 V8.1 修订包到级别6的一般过程,以及可能导致升级失败的问题。

下载修订包

DB2不要求逐个的安装不同级别的修订包,级别高的修订包包含低级别修订包中的所有代码,所以您可以挑选当前级别最高的修订包下载。

下载位置:ftp://ftp.software.ibm.com/ps/products/db2/fixes/

选择相应的语言环境和产品版本

本文中示例在如下环境安装成功:

准备工作

在准备升级修订包之前,应先将数据库进行完整的备份。

首先查看当前修订包级别,以确认是否需要升级

$ db2level

注释掉自动启动的db2的监视进程,如果此进程随系统自动启动的话

# su -
# vi /etc/inittab

找到相关的行注释掉

重起系统

# reboot

登录到DAS管理用户,停止DAS服务

# su - db2as
$ db2admin stop
$ exit

登录到实例所有者用户,停止实例

# su - db2
$ db2 force applications all
$ db2 terminate
$ db2stop
$ exit

停止许可证服务

$ db2licd end
$ exit

查看是否还有正在运行的db2相关进程,如果有其他db2进程运行,可能会导致升级失败。

# ps -aux |grep db2

如果有,杀掉

# kill -s 9 进程号

准备安装fixPack级别6,进入下载文件解压的目录

# cd FP6_MI00080/

升级

在root身份下开始安装fixPack级别6

# ./installFixPak

安装完成后升级实例和DAS服务

# su - db2
$ cd /opt/IBM/db2/V8.1/instance/
$ ./db2iupdt db2
$ ./dasupdt db2as

绑定需要的包

$ db2 connect to dlhdb
$ db2 bind /opt/IBM/db2/V8.1/bnd/db2schema.bnd blocking all grant public sqlerror continue

升级结束

参考资源

自己编写脚本, 让DB2 的命令行安装变得更轻松

正文在Linux平台下DB2 UDB V8.1提供了命令行和图形界面两种安装方式,图形界面虽然通过交互简化了安装的复杂性,但安装过程需要人工干预,耗时相对较长,并且在内核较新的Linux版本下还存在无法启动GUI安装界面的问题,虽然可以通过设置环境变量进行解决,还是显得有些麻烦。当然如果你用命令行方式手动安装就不存在这个问题,不过需要手动完成很多步骤,如果安装或卸载比较频繁的情况下,就不如把整个安装过程写入shell脚本执行方便。下面是我完成的一个用于安装和卸载的shell脚本,在数据库安装时,只需指定安装文件的源路径,即可完成全部安装。包括创建必要的用户和组,创建DAS服务以及实例,在系统注册服务名和服务端口,设置注册表变量,设置自动启动等。另外可以通过三个可选的参数指定忽略拷贝安装文件,或者忽略创建用户或者组,以节约安装时间。卸载功能可以用于卸载使用本安装脚本安装的数据库,包括删除实例和DAS服务,清除前面创建的用户和组,恢复系统的配置文件等,可通过可选的参数指定同时删除安装时拷贝的package文件。在脚本的开始部分,有一些参数可以自行根据实际环境修改,比如要创建的实例名、用于DAS的用户名及组名、数据库的默认建立路径等,在使用本脚本之前可以先进行修改。将本脚本保存为文件,本例存为instdb.sh,添加可执行属性,在root权限下运行,例如:使用源路径'/mnt/DB2UDB8FORLINUX' 进行安装;# ./instdb2 -d /mnt/DB2UDB8FORLINUX删除已经进行的DB2安装,同时删除所有已经拷贝到安装目录的package文件。# ./instdb2 -d /mnt/DB2UDB8FORLINUX -remove -all本文中脚本在如下环境测试通过:RedHat Enterprise Linux 3.0DB2 V8.1...

正文

在Linux平台下DB2 UDB V8.1提供了命令行和图形界面两种安装方式,图形界面虽然通过交互简化了安装的复杂性,但安装过程需要人工干预,耗时相对较长,并且在内核较新的Linux版本下还存在无法启动GUI安装界面的问题,虽然可以通过设置环境变量进行解决,还是显得有些麻烦。

当然如果你用命令行方式手动安装就不存在这个问题,不过需要手动完成很多步骤,如果安装或卸载比较频繁的情况下,就不如把整个安装过程写入shell脚本执行方便。

下面是我完成的一个用于安装和卸载的shell脚本,在数据库安装时,只需指定安装文件的源路径,即可完成全部安装。包括创建必要的用户和组,创建DAS服务以及实例,在系统注册服务名和服务端口,设置注册表变量,设置自动启动等。

另外可以通过三个可选的参数指定忽略拷贝安装文件,或者忽略创建用户或者组,以节约安装时间。

卸载功能可以用于卸载使用本安装脚本安装的数据库,包括删除实例和DAS服务,清除前面创建的用户和组,恢复系统的配置文件等,可通过可选的参数指定同时删除安装时拷贝的package文件。

在脚本的开始部分,有一些参数可以自行根据实际环境修改,比如要创建的实例名、用于DAS的用户名及组名、数据库的默认建立路径等,在使用本脚本之前可以先进行修改。

将本脚本保存为文件,本例存为instdb.sh,添加可执行属性,在root权限下运行,例如:

使用源路径'/mnt/DB2UDB8FORLINUX' 进行安装;

# ./instdb2 -d /mnt/DB2UDB8FORLINUX

删除已经进行的DB2安装,同时删除所有已经拷贝到安装目录的package文件。

# ./instdb2 -d /mnt/DB2UDB8FORLINUX -remove -all

本文中脚本在如下环境测试通过:

  • RedHat Enterprise Linux 3.0
  • DB2 V8.1 for Linux

参考资源

  • IBM DB2 开发者园地
    http://www-128.ibm.com/developerworks/cn/db2/

  • IBM DB2 信息中心
    http://publib.boulder.ibm.com/infocenter/db2help/index.jsp

  • 《DB2 UDB v8.1 for Linux, UNIX, Windows 数据库管理》George Baklarz, Bill Wong 合著,机械工业出版社出版

  • 《DB2数据库管理与应用教程》庄济诚 著,清华大学出版社出版

在DB2 UDB V8.1中使用裸(raw)设备

一般信息DB2提供了直接将裸(raw)设备作为表空间容器的功能,这样DB2可以绕过文件系统直接管理设备容器来获得更高的性能,这种方式用在一些对效能要求比较高的场合。本文介绍在Linux环境下,让DB2使用设备容器的一般步骤。本文中的命令和代码在以下环境编译执行通过:IBM xSeriers 345(Inter 32位) RedHat Enterprise Linux 3.0 DB2 V8.1 for Linux主机连接一个IBM EMP300 磁盘柜,用于数据库数据存储。磁盘柜共有6块磁盘,单块146GB,其中5块做成RAID5,剩余一块做备用盘。 RAID5中,校验信息不单独占用一个磁盘,而是根据算法平均分布在各个磁盘上,这样避免了读写校验信息产生的瓶颈。假设在主机上已经安装好了一个DB2服务,创建了一个实例,名为db2,还未建立数据库,并且磁盘柜已经在系统下安装好驱动程序,我们获得的设备名为sdb,还未进行分区。下面分步介绍在磁盘阵列上建立raw设备并进行数据规划和数据放置的操作步骤:规划磁盘分区以root登录,对磁盘阵列进行分区,在root提示符下键入:# fdisk...

一般信息

DB2提供了直接将裸(raw)设备作为表空间容器的功能,这样DB2可以绕过文件系统直接管理设备容器来获得更高的性能,这种方式用在一些对效能要求比较高的场合。本文介绍在Linux环境下,让DB2使用设备容器的一般步骤。

本文中的命令和代码在以下环境编译执行通过:

  • IBM xSeriers 345(Inter 32位)
  • RedHat Enterprise Linux 3.0
  • DB2 V8.1 for Linux

主机连接一个IBM EMP300 磁盘柜,用于数据库数据存储。磁盘柜共有6块磁盘,单块146GB,其中5块做成RAID5,剩余一块做备用盘。

RAID5中,校验信息不单独占用一个磁盘,而是根据算法平均分布在各个磁盘上,这样避免了读写校验信息产生的瓶颈。
假设在主机上已经安装好了一个DB2服务,创建了一个实例,名为db2,还未建立数据库,并且磁盘柜已经在系统下安装好驱动程序,我们获得的设备名为sdb,还未进行分区。

下面分步介绍在磁盘阵列上建立raw设备并进行数据规划和数据放置的操作步骤:

规划磁盘分区

以root登录,对磁盘阵列进行分区,在root提示符下键入:

# fdisk /dev/sdb

新增3个主分区sdb1,sdb2,sdb3,每个分区20GB,分别划分给系统目录表空间、默认的系统临时表空间和新增的32kb的临时表空间,
剩下空间约527GB全部划分给第4个扩展分区sdb4,在扩展分区中增加5个逻辑分区sdb5,sdb6,sdb7,sdb8,sdb9,前两个逻辑分区各160GB,用作表存储的用户表空间,第三个逻辑分区为20GB,用作专门放置索引的用户表空间,余下的2个逻辑分区分别为80GB、93GB,这两个逻辑分区使用ext3进行格式化,用于存放日志和数据库备份。
注意:sdb1-sdb7均未进行格式化操作,准备用作raw设备,由DB2自行管理。

以下是分好区的磁盘状态:

Disk /dev/sdb: 587.2 GB, 587257085952 bytes
254 heads, 63 sectors/track, 71677 cylinders
Units = cylinders of 16002 * 512 = 8193024 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 2501 20010469+ 83 Linux
/dev/sdb2 2502 5002 20010501 83 Linux
/dev/sdb3 5003 7503 20010501 83 Linux
/dev/sdb4 7504 71677 513456174 5 Extended
/dev/sdb5 7504 27502 160011967+ 83 Linux
/dev/sdb6 27503 47501 160011967+ 83 Linux
/dev/sdb7 47502 50002 20010469+ 83 Linux
/dev/sdb8 50003 60002 80009968+ 83 Linux
/dev/sdb9 60003 71677 93411643+ 83 Linux

创建RAW设备

打算用作raw设备的各个逻辑分区DB2不能够直接使用,需要使用raw命令创建raw设备名:
在root提示符下键入:

# raw -a

查询当前已经建立的raw设备名,目前为空,我们可以从第一个设备名用起,

在root提示符下键入:

# raw /dev/raw/raw1 /dev/sdb1 # 用于system catalog tablespace (4K)
# raw /dev/raw/raw2 /dev/sdb2 # 用于system temp tablespace (4K)
# raw /dev/raw/raw3 /dev/sdb3 # 用于system temp tablespace (32K)
# raw /dev/raw/raw5 /dev/sdb5 # 用于user tablespace1 (32K),存储表
# raw /dev/raw/raw6 /dev/sdb6 # 用于user tablespace1 (32K),存储表
# raw /dev/raw/raw7 /dev/sdb7 # 用于user tablespace2 (32K),存储索引

至此,我们创建了6个raw设备名,用于交给DB2直接管理,查看一下已经创建的raw设备名的情况:

# raw -a
/dev/raw/raw1: bound to major 8, minor 17
/dev/raw/raw2: bound to major 8, minor 18
/dev/raw/raw3: bound to major 8, minor 19
/dev/raw/raw5: bound to major 8, minor 21
/dev/raw/raw6: bound to major 8, minor 22
/dev/raw/raw7: bound to major 8, minor 23

如果想删除一个raw设备名(例如/dev/raw/raw1),在root提示符下键入:

# raw /dev/raw/raw1 0 0

接着修改系统的初始化文件,添加如下行到 /etc/rc.d/sysinit 文件:

raw /dev/raw/raw1 /dev/sdb1
raw /dev/raw/raw2 /dev/sdb2
raw /dev/raw/raw3 /dev/sdb3
raw /dev/raw/raw5 /dev/sdb5
raw /dev/raw/raw6 /dev/sdb6
raw /dev/raw/raw7 /dev/sdb7

这样系统在下次启动时,会重新建立需要的raw设备名。

默认建立的raw设备拥有者是disk,必须让数据库实例的拥有者具有此设备的存取权限,在root提示符下键入:

# chown db2:disk /dev/raw/raw[1,2,3,4,5,6,7]

将db2用户更改为7个裸设备的拥有者,至此,这些裸设备已经可以为DB2所引用。

创建数据库

下面准备使用以上raw设备创建一个名为newdb的数据库,包含页size为4kb系统目录表空间、系统临时表空间以及用户表空间各一个;
然后新建页size为8kb、16kb、32kb的缓冲池各一个;
删除4kb的用户表空间,新建2个32kb页size的用户表空间,用于用户表的存储;
新建一个32kb页size的用户表空间,用于存储索引;
新建一个32kb页size的系统临时表空间;

我们将完成以上功能的脚本保存为newdb.sql,并通过如下方式执行此脚本:

在root提示符下键入如下命令,转到db2用户下:

# su - db2

执行上面的脚本:

$ db2 -td";" -f newdb.sql

至此数据库创建完成。下载脚本代码

规划日志以及备份文件存储

接下来,还需要规划日志和数据库备份的存储,首先将用于日志和数据库备份的分区进行格式化(此过程花费时间较长):
在root提示符下键入:

# mkfs.ext3 /dev/sdb8
# mkfs.ext3 /dev/sdb9

创建DB2数据库的目录:

# mkdir /db2
# chown db2:db2 /db2
# su - db2
$ mkdir /db2/db2log
$ mkdir /db2/db2backup
$ exit

mount逻辑分区到目录:

# mount /dev/sdb8 /db2/db2log
# mount /dev/sdb9 /db2/db2backup

更新数据库的log文件路径:

# su - db2
$ db2 connect to newdb
$ db2 update db cfg using newlogpath '/db2/db2log'

停顿数据库使修改生效,使用defer参数继续执行已有的事务,拒绝新的连接,停顿成功后发布激活数据库的命令:

$ db2 quiesce db defer
$ db2 unquiesce db
$ exit

至此我们完成了利用raw设备进行数据规划和数据放置的任务。

额外信息

当已经在raw设备上创建容器之后,若没有通过正常的步骤删除表空间所在数据库,也没有直接删除容器或者容器所在表空间,则再次利用这些raw设备时,DB2会报错:

The container is already in use

此时应使用db2untag命令释放container标志,而采用重新对磁盘进行分区或者格式化的操作是无济于事的。

释放已经在raw设备raw1上建立的container标志:

# su - db2
$ db2untag /dev/raw/raw1

 

参考资源

  • IBM DB2 开发者园地
    http://www-128.ibm.com/developerworks/cn/db2/

  • IBM DB2 信息中心
    http://publib.boulder.ibm.com/infocenter/db2help/index.jsp

  • dbforums 论坛
    http://dbforums.com/

  • 《DB2 UDB v8.1 for Linux, UNIX, Windows 数据库管理》George Baklarz, Bill Wong 合著,机械工业出版社出版

  • 《DB2数据库管理与应用教程》庄济诚 著,清华大学出版社出版

数据库设计中英文术语表

索引A B C D E F G H I J K L M N O P...

索引

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

正文

  1. Access method(访问方法):此步骤包括从文件中存储和检索记录。
  2. Alias(别名):某属性的另一个名字。在SQL中,可以用别名替换表名。
  3. Alternate keys(备用键,ER/关系模型):在实体/表中没有被选为主健的候选键。
  4. Anomalies(异常)参见更新异常(update anomalies)
  5. Application design(应用程序设计):数据库应用程序生命周期的一个阶段,包括设计用户界面以及使用和处理数据库的应用程序。
  6. Attribute(属性)(关系模型):属性是关系中命名的列。
  7. Attribute(属性)(ER模型):实体或关系中的一个性质。
  8. Attribute inheritance(属性继承):子类成员可以拥有其特有的属性,并且继承那些与超类有关的属性的过程。
  9. Base table(基本表):一个命名的表,其记录物理的存储在数据库中。
  10. Binary relationship(二元关系):一个ER术语,用于描述两个实体间的关系。例如,panch Has Staff。
  11. Bottom-up approach(自底向上方法):用于数据库设计,一种设计方法学,他从标识每个设计组建开始,然后将这些组件聚合成一个大的单元。在数据库设计中,可以从表示属性开始底层设计,然后将这些属性组合在一起构成代表实体和关系的表。
  12. Business rules(业务规则):由用户或数据库的管理者指定的附加规则。
  13. Candidate key(候选键,ER关系模型):仅包含唯一标识实体所必须得最小数量的属性/列的超键。
  14. Cardinality(基数):描述每个参与实体的可能的关系数目。
  15. Centralized approach(集中化方法,用于数据库设计):将每个用户试图的需求合并成新数据库应用程序的一个需求集合
  16. Chasm trap(深坑陷阱):假设实体间存在一根,但某些实体间不存在通路。
  17. Client(客户端):向一个或多个服务器请求服务的软件应用程序。
  18. Clustering field(群集字段):记录总的任何用于群集(集合)航记录的非键字段,这些行在这个字段上有相同的值。
  19. Clustering index(群集索引):在文件的群集字段上定义的索引。一个文件最多有一个主索引或一个群集索引。
  20. Column(列):参加属性(attribute)。
  21. Complex relationship(复杂关系):度数大于2的关系。
  22. Composite attribute(复合属性):由多个简单组件组成的属性。
  23. Composite key(复合键):包含多个列的主健。
  24. Concurrency control(并发控制):在多用户环境下同时执行多个十五并保证数据完整性的一个DBMS服务。
  25. Constraint(约束):数据库不允许包含错误数据的一致性规则。
  26. Data conversion and loading(数据转换和加载):数据库应用生命周期重的一个阶段,包括转换现有数据到新数据库中以及酱下耨应用程序转换到新的数据库上运行。
  27. Data dictionary(数据字典):参见系统目录(system catalog)。
  28. Data independence(数据独立性):使用数据的应用程序的数据描述部分。这意味着,如果将新的数据结构添加到数据库中,或者数据库中现有的结构被修改了,那么使用此数据库的就会受到影响,除非应用程序不直接依赖于被修改的部分。
  29. Data model(数据模型):描述数据、数据间关系以及数据的约束的概念的一个集成的集合。
  30. Data redundancy(数据冗余):参见冗余数据(redundant data)。
  31. Data security(数据安全):包括对数据库对象(如表和视图)的访问和使用以及用户可以在这些对象上实施的操作。
  32. Database(数据库):是逻辑上相关的数据(以及这些数据的描述)的一个共享的集合,用于解决公司对信息的需求。
  33. Database design(数据库设计):数据库应用生命周期中的一个阶段,包括创建一个支持公司的操作和目标的数据库的设计。
  34. Database integrity(数据库完整性):指存储数据的正确定和一致性。完整性通常用约束来表达。
  35. Database Management System,DBMS(数据库管理系统):一个能够让用户定义、创建和维护数据库并控制对数据库的访问的软件系统。
  36. Database planning(数据库规划):能尽可能有效的实现数据库应用的各阶段的管理活动。
  37. Database server(数据库服务器):同服务器。
  38. DBMS engine(DBMS引擎):同服务器。
  39. DBMS selection(DBMS选择):数据库应用生命周期中的一个阶段,包括选择一个合适的DBMS来支持数据库应用。
  40. Degree of a relationship(关系的度):一个关系中参与的实体的个数。
  41. Denormalization(反规范化):形式上,这个术语指的是对基本表结构的修改,这样新的表比原始的表的规范化程度要低。但也可以用此属于更宽泛地形容将两个表和并成一个新表的情形,而这个新表与原来的表具有相同的范式,但比原表包含更多的空值。
  42. Derived attribute(派生属性):表示其值可以从一个相关属性和属性集的值派生得到的属性,这个属性在实体中不是必须的。
  43. Design methodology(设计方法学):一种结构化的方法,它使用过程、工具和文档来支持和简化设计过程。
  44. Disjoint constraint(无连接约束):描述子类的成员间的关系,并指明超类某个成员是否有可能成为一个或多个子类的成员。
  45. Domain(域):一个或多个属性的取值范围。
  46. Entity(实体):具有相同性质的对象的集合,它是由用户或公司标识并可独立存在的。
  47. Entity integrity(实体完整性):在一个基本表中,主健列的值不能为空。
  48. Entity occurrence(实体出现):实体中的一个唯一可标识的对象。
  49. Entity-Relationship model(实体关系模型):公司的实体、属性和关系的详细逻辑表示。
  50. Fact-finding(事实发现):使用诸如面谈和提问等技术收集关于系统的事实、需求和性能的形式化过程。
  51. Fan trap(扇形陷阱):但从第三个实体扇出的两个实体有1:*关系时出现扇形陷阱,但这两个实体在他们之间应该有直接关系以提供必要的信息。
  52. Field(字段):同元组(Tuple)。
  53. File(文件):存储在副主存储器中的相关记录的一个命名集合。
  54. File-based system(基于文件的系统):一个文件集合,用来管理(创建、插入、删除、更新和检索)一个或多个文件中的数据,并产生基于这些文件中的数据的应用(通常是报表)。
  55. File organization(文件组织):当文件存储在磁盘上时,对文件中的记录的安排方式。
  56. First normal form(1NF,第一范式):表中的每个列的交叉处以及记录包含切进包含一个值的表。
  57. Foreign key(外健):一个表中的一个列或者多个列的集合,这些列匹配某些其他(也可能是同一个)表中的候选键。
  58. 4GL, Fourth-Generation Language(第四代语言):一种非过程化语言,比如SQL,他只需要用户定义必须完成什么操作,4GL负责将所进行的操作翻译成如何实现这些操作。
  59. Full functional dependency(完全函数依赖):一个列在功能上依赖于复合主健,但不依赖于主健的任何一个子集的条件。
  60. Functional dependency(函数依赖):描述表中列之间的关系。
  61. Generalization(泛化):通过标识实体间的公共特征使实体间差别最小化的过程。
  62. Generalization hierarchy(泛化层次结构):同类型层次(type hierarchy)。
  63. Global data model(全局数据模型):代表整个公司(和被模型化的公司的一部分)的数据模型。
  64. Implementation(实现):数据库应用生命周期中的一个阶段,包括数据库和应用程序设计的物理实现。
  65. Index(索引):一种允许DBMS将特定的记录更快的放置到文件中,从而加快对用户查询的响应的数据结构。
  66. Infomation system(信息系统):能够在整个公司范围内收集、管理、控制和分发数据/信息的资源。
  67. Inheritance(继承):参见属性继承(attribute inheritance)。
  68. Integrity constaints(完整性约束):防止出现数据库中的数据不一致的约束。
  69. IS-A hierarchy(IS-A层次结构):同类型层次结构(type hierarchy)。
  70. Local logical data model(局部逻辑数据模型):代表特定用户视图或用户视图的组合的数据模型。
  71. Logical database design(逻辑数据库设计):基于特定的数据模型构建公司的数据的模型的过程,但不依赖于特定的DBMS以及其他的物理条件。
  72. Meta-data(元数据):关于数据的数据,参见系统目录(system catalog)。
  73. Mision objective(使命目标):标识数据库必须支持的特定任务。
  74. Mission statement(使命语句):定义数据库应用程序的主要目标。
  75. Multiplicity(多样性):定义与某个相关实体的一次出现有关的实体的出现数目。
  76. Multi-valued attribute(多值属性):为一个实体的出现保存多个值的属性。
  77. Nonkey attribute/column(非键属性/列):不是键的一部分的属性/列。
  78. Normal forms(范式):规范化过程的一个阶段。前三个范式分别为第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。
  79. Normalization(规范化):一种产生带有需要的特性的技术,这种特性能支持用户和公司的需求。
  80. Null(空值):表示当前不知道或对于这条记录来说不可使用的一个列的值。
  81. Operational maintenance(操作维护):数据库应用生命周期的一个阶段,包括监视和维护系统安装后的运行。
  82. Participation constraint(参与约束,EER模型):