load命令

来源:互联网 发布:马鞍山电视网络大学 编辑:程序博客网 时间:2024/06/05 13:23
1、DB2数据库事物回滚、数据恢复、数据备份等,所有与数据安全有关的工作都是通过日志来完成的。
2、DB2数据库日志分为:循环日志、归档日志。
3、load命令实现了快速导入数据的功能,除去采用了通过直接向数据库中写入格式化的数据页来装载数据,而且导入过程
中不激活触发器,不会检查参考完整性、表检查约束等,同时还最小化了记录事务日志的操作。在 LOAD 的 LOAD、BUILD、DELETE 和 INDEX COPY 四个处理阶段中,
仅在 DELETE 阶段记录对每个删除事件记日志,即只对每个违反唯一约束的行的删除操作记日志,因此整个 LOAD 操作仅记录了极少的日志。
4、为了配合rollforward命令,load命令有copy no、copy yes、nonreverable这3个选项
5、copy no选项
load命令默认选项,在LOAD操作结束时,将表所在的表空间置于“备份暂挂”状态(这里是表空间),此时虽然其中的表可以进行 SELECT 操作,
但不能进行 UPDATE 和 DELETE 操作。为使该表状态恢复正常,一方面除去备份暂挂状态,另一方面必须手动对其表空间执行一个 BACKUP 命令。
由于该选项为缺省选项,如果 LOAD 命令中未指明,则默认为使用该选项。通过db2 list tablespaces命令来查看表空间信息。
COPY NO :此选项会导致load表所在的表空间处于backup pending状态,可以读数据,但不能对表进行增删改。load操作一旦开始,表就会处于backup pending状态,即使终止Load,也不会使表空间脱离此状态。load完成后,需要进行表空间backup
6、copy yes选项
在 LOAD 操作结束时,DB2 自动对表所在的表空间进行一次备份操作,因而 LOAD 结束后,表所在的表空间不会再处于“备份暂挂”状态,而为“正常”状态。
但由于要进行备份操作,所以这种 LOAD 操作的时间会较没有备份的长。
COPY YES: 此选项会将load变化的数据进行自动备份。在前滚恢复阶段(rollforward),会使用这个备份重建load过程产生的数据。
7、NONRECOVERABLE选项
该选项会将 LOAD 操作标志为不可恢复,即数据库不能通过后续的前滚操作而被恢复。LOAD 操作结束后,数据库既不会处于“备份暂挂”状态,也不会产生任何的备份。
NONRECOVERABLE:此选项表明此表是不能通过rollforward恢复的,当rollforward完成后,此表只能被删除或从备份介质中恢复。此选项不会使表空间处于backup pending状态,也不会产生数据的备份。
8、load的4个阶段
load过程分为4个阶段:load/build/delete/index copy。load阶段是将源文件parser成物理数据存储的格式,直接装入到页中,而不通过db2引擎,
load阶段会检查表定义,违背定义的数据不会装入到表中。build阶段建议索引(如果装入表有索引的话),会检查唯一性约束,
违背了唯一性的数据会在delete阶段删除。index copy阶段将index数据从指定的临时表空间拷贝到初始的表空间里,index copy只适应于allow read access场景。
load的4个阶段会记录在messages文件里。
9、online 与 offline load
缺省情况下,load过程不允许其他应用访问表,即allow no access,或叫offline load(离线加载)。
Allow read access,或叫online load(在线加载),只有在load ...insert into的时候才允许使用,
其他应用读到的数据是加载前的数据,load ... replace into会将数据先删除,再load,只能是离线加载。
10、load表的状态
load可能出现的几种状态,某一时刻可能会同时处于几种状态。只有当表是normal状态时,表才能进行正常的增删改查操作。
normal: 正常状态
set integrity pending: 如果目标表有check约束或reference约束,那么Load后此表处于set integrity pending,表明表有约束还未检查。
load in progress:load正在数据加载过程中。
load pending:数据提交前出现了故障,需要通过load..terminate,load..replace或load..restart解除暂挂状态
read access only:目标表数据是可以读的,当load时指定了allow read access,那表就会处于read access only状态
unavailable:表可能被删除了或从backup中恢复了。
unknown:通过load..query命令无法得知表的状态。
可以通过load..query命令查看表的状态,
(1).当表处于load pending的时候,需要检查pending的原因,然后通过load..terminate终止load操作,或通过load..replace将表数据清空,或通过load..restart重启load操作。记住不要删除load的临时数据文件。load pending的原因很多,如表空间没有足够的空间等。
(2).当表处于set integrity pending状态的时候,意味着要求用户去检查数据的一致性(check constraint和reference constraint)。可通过 set integrity for immediate checked将set integrity pending去掉。
(3).load..replace会将数据先清空,再load数据。如果中间出现故障,那么通过load..terminate命令后,表里的数据会变空,因此建议load之前进行数据库备份或单表备份。
11、load replace快速清空大表
对于大表数据的清空,如果用delete,由于会产生大量的日志,导致效率很慢,而且容易出现log full。可以考虑用load from /dev/null of del replace into
(Unix/Linux) 或者load from empty.del of del replace into
(Windows,empty.del是一个空的文本文件即可) 
原创粉丝点击