WEB开发网
开发学院数据库DB2 DB2的数据移动详解 阅读

DB2的数据移动详解

 2007-06-05 14:57:03 来源:WEB开发网   
核心提示:例十四:关于DUMP文件 格式不正确的行会被拒绝,通过指定DUMPFILE文件类型修饰符可以使这些被拒绝的记录单独放在指定的文件里,DB2的数据移动详解(3), 用SAMPLE数据库中的STAFF表做实验 1. 创建一个结构与STAFF表相同的表STAFF1 CREATE TABLE STAFF1 LIKE STAFF

例十四:关于DUMP文件

格式不正确的行会被拒绝。通过指定DUMPFILE文件类型修饰符可以使这些被拒绝的记录单独放在指定的文件里。

用SAMPLE数据库中的STAFF表做实验

1. 创建一个结构与STAFF表相同的表STAFF1

CREATE TABLE STAFF1 LIKE STAFF

2. 把STAFF表中的一部分数据插入到STAFF1中

INSERT INTO STAFF1 SELECT * FROM STAFF WHERE ID<=160

3. 再创建一个结构与STAFF1相同的表STAFFEXP,作为异常表

CREATE TABLE STAFFEXP LIKE STAFF1

4. 给该异常表添加一列

ALTER TABLE STAFFEXP ADD COLUMN TIME TIMESTAMP

5. 为STAFF1表创建一个唯一索引

CREATE UNIQUE INDEX IDXSTAFF ON STAFF1(ID)

6. 先运行导出命令做出一个文本文件

EXPORT TO D:STAFF.TXT OF DEL SELECT * FROM STAFF

到D盘上打开STAFF.TXT文件,把第一列等于320的行替换为:"abcf","aaa","sdfg"

7. 然后运行装入命令把数据再装入到STAFF1表中

LOAD FROM D:STAFF.TXT OF DEL MODIFIED BY DUMPFILE=d:dump INSERT INTO STAFF1 FOR EXCEPTION STAFFEXP

装入的结果报告中会有如下一条:

SQL3118W 在行 "32" 列 "1" 中的字段值不能转换为 SMALLINT 值,但是目标列不可为空。未装入该行。

SQL3185W 当处理输入文件的第 "32" 行中的数据时发生先前的错误。

打开D盘的dump.000文件,会看到造成异常的那一行数据:"abcf","aaa","sdfg"

通过这个例子,我们可以理解,如果一行数据的格式不正确,在装入的时候会遭到拒绝,该行记录会放到DUMP文件中;而如果数据格式正确,但是不满足表的约束条件,该行记录会放到异常表中。

例十五:限制装入行数

用ROWCOUNT选项可以指定从文件开始处装入的记录数

LOAD FROM D:STAFF.TXT OF DEL ROWCOUNT 3 INSERT INTO STAFF1

例十六:出现警告信息时强令装入操作失败

在某些情况下,文件中的数据必须全部成功输入到目标表中才算成功,即使有一条记录出错也不行。在这种情况下,可以使用WARNINGCOUNT选项。

到D盘上打开STAFF.TXT文件,把第一列等于320的行替换为:"abcf","aaa","sdfg"

LOAD FROM D:STAFF.TXT OF DEL WARNINGCOUNT 1 INSERT INTO STAFF1

运行结果包含下面的警告:

SQL3118W 在行 "32" 列 "1" 中的字段值不能转换为 SMALLINT值,但是目标列不可为空。未装入该行。

SQL3185W 当处理输入文件的第 "32" 行中的数据时发生先前的错误。

SQL3502N 实用程序遇到了 "1" 个警告,它超过了允许的最大警告数。

此时无法对表STAFF1进行操作,例如

SELECT * FROM STAFF1

会返回:

ID NAME DEPT JOB YEARS SALARY COMM

------ --------- ------ ----- ------ --------- ---------

SQL0668N 由于表 "USER.STAFF1" 上的原因代码 "3",所以不允许操作。

SQLSTATE=57016

原因是:表处于“装入挂起”状态。对此表的先前的 LOAD 尝试失败。在重新启动或终止 LOAD 操作之前不允许对表进行存取。

解决方法为:通过分别发出带有 RESTART 或 TERMINATER 选项的 LOAD 来重新启动或终止先前失败的对此表的 LOAD 操作。

包含TERMINATER的LOAD命令可以终止装入进程,使目标表恢复正常可用状态:

LOAD FROM D:STAFF.TXT OF DEL TERMINATE INTO STAFF1

包含RESTART的LOAD命令可以在源文件修改正确的时候使用,使装入进程重新开始:

LOAD FROM D:STAFF.TXT OF DEL RESTART INTO STAFF1

例十七:防止产生警告信息

使用NOROWWARNINGS文件类型修饰符可以禁止产生警告信息,当装入过程可能出现大量警告信息,而用户对此又不感兴趣的时候,可以使用该选项,这样可以大大提高装入的效率

到D盘上打开STAFF.TXT文件,把第一列等于320的行替换为:"abcf","aaa","sdfg"

LOAD FROM D:STAFF.TXT OF DEL MODIFIED BY NOROWWARNINGS INSERT INTO STAFF1

运行完的结果中,第32行出错,该行无法装入,但是不产生警告信息。

例十八:生成统计数据

使用STATISTICS选项可以在装入的过程中生成统计数据,这些统计数据可以供优化器确定最有效的执行SQL语句的方式。

可以对表和索引产生不同详细程度的统计数据:

① 对表和索引产生最详细的统计数据:

LOAD FROM D:STAFF.TXT OF DEL REPLACE INTO STAFF1 STATISTICS YES WITH DISTRIBUTION AND DETAILED INDEXES ALL

② 对表和索引都产生简略的统计:

LOAD FROM D:STAFF.TXT OF DEL REPLACE INTO STAFF1 STATISTICS YES AND INDEXES ALL

其它组合可以参考DB2文档。

注意:STATISTICS选项只能和REPLACE兼容,与INSERT选项不兼容。另外,通过STATISTICS选项做完统计,我们看不到任何直接的结果,如果想查看其结果,需要到系统表中自己查询。

例十九:解除检查挂起状态

1. 连接到SAMPLE数据库上:

Connect to sample

2. 创建一个结构与staff表相同的表:

CREATE TABLE STAFF1 LIKE STAFF

3. 给该表添加一个检查约束:

alter table staff1 add constraint chk check(dept<100)

4. 到D盘上打开STAFF.TXT文件,把最后一行数据的第三列改为150,这样该条数据就不满足第3步加上的检查约

束条件了,然后用Load命令从文件中装入数据到staff1表中:

LOAD FROM D:STAFF.TXT OF DEL INSERT INTO STAFF1

5. 此时运行查询命令:

Select * from staff1

会得到错误信息:

SQL0668N 由于表 "USER.STAFF1" 上的原因代码 "1",所以不允许操作。

SQLSTATE=57016

原因是装入时有数据违反了检查约束,造成表处于检查挂起状态。

6. 解除表的检查挂起状态,使用:

set integrity for staff1 check immediate unchecked

再次运行查询命令:

Select * from staff1

发现表可以正常使用了,其中的违反检查规则的数据也存在。

例二十:性能因素

在从文件向表导入数据的时候,当数据量特别大的情况下,装入命令会明显体现出优势,原因是它不像导入命令每次插入一行,并且在每行都要检查是否满足约束条件,装入命令从输入文件读出数据构建页,把这些页直接写入数据库,并且在每一行数据装入时不判断是否满足约束,另外装入命令不写日志,所有这些因素都导致装入的效率高于导入。

另外,装入命令还有一些选项可以控制性能因素:

1. COPY YES/NO和Nonrecoverable

① Nonrecoverable(不可恢复的):指定装入操作不可恢复,并且不能由后续的前滚操作恢复。前滚操作忽略事务并且标记正在装入数据的表为“无效”。

② Copy No(默认选项):在这种情况下,如果表所在数据库的归档日志处于启用状态,则装入完成后,表所在的表空间将处于备份挂起状态,直到数据库或表空间备份完毕,该表空间才成为可写表空间。原因是装入操作造成的变化没有被记录,所以要恢复装入操作完成后发生的故障,备份数据库或表空间是必要的。

③ Copy Yes:在这种情况下,如果数据库的归档日志启用,装入操作的改变将被保存到磁带、目录或TSM服务器,并且表空间将不再处于备份挂起状态。

2. Fastparse

该文件类型修饰符用于减少数据检查次数。它只能用于在数据已知正确的情况下,尤其适用于DEL和ASC类型的文件。

3. Anyorder

如果SAVECOUNT选项没有使用,该参数允许不遵照输入文件中的数据顺序进行装入,在SMP(对称多处理机)系统上CPU_PARALLELISM选项大于1的时候,该参数会提高装入的性能。 Data Buffer

该参数用于指定从堆栈分配得到的4K大小的内存页面。

上一页  1 2 3 

Tags:DB 数据 移动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接