技术开发 频道

DB2 LOAD命令中COPY NO/COPY的说明


IT168技术文档】 
    3. 关于 COPY YES: 

    在 LOAD 操作结束时,DB2 自动对表所在的表空间进行一次备份操作,因而 LOAD 结束后,表所在的表空间不会再处于“备份暂挂”状态,而为“正常”状态。但由于要进行备份操作,所以这种 LOAD 操作的时间会较没有备份的长。如: 

    E:\TEST>db2 connect to sample 

    E:\TEST>db2 load from staff.del of del insert into staff copy yes to . 

    E:\TEST>db2 list tablespaces 
    : 
    表空间标识 = 2 
    名称 = USERSPACE1 
    类型 = 系统管理空间 
    内容 = 任何数据 
    状态 = 0x0000 
    详细解释: 
    正常 
    : 

    E:\TEST>db2 select count(*) from staff 
    1 
    ----------- 
    105 
    1 条记录已选择。 

    此时可在当前目录下看到一个 SAMPLE.4 的子目录,表明产生的是一个由 LOAD 操作生成的备份,而这份备份将在数据库进行前滚恢复操作时用于重新创建 LOAD 操作对数据库的修改。如: 

    E:\TEST>db2 restore db sample taken at 20051230174105 
    DB20000I RESTORE DATABASE 命令成功完成。 

    E:\TEST>db2 rollforward db sample to end of logs and stop 

    前滚状态 

    输入数据库别名 = sample 
    节点数已返回状态 = 1 

    节点号 = 0 
    前滚状态 = 未暂挂 
    下一个要读取的日志文件 = 
    已处理的日志文件 = S0000002.LOG - S0000003.LOG 
    上次落实的事务 = 2005-12-30-11.48.26.000000 

    DB20000I ROLLFORWARD 命令成功完成。 

    E:\TEST>db2 connect to sample 

    E:\TEST>db2 list tablespaces 
    : 
    表空间标识 = 2 
    名称 = USERSPACE1 
    类型 = 系统管理空间 
    内容 = 任何数据 
    状态 = 0x0000 
    详细解释: 
    正常 
    : 

    E:\TEST>db2 select count(*) from staff 
    1 
    ----------- 
    105 
    1 条记录已选择。 

    这表明在 SAMPLE.4 下的备份被用于了前滚恢复操作,而重新创建了 LOAD 操作对数据库插入的记录。 

    4. 关于 NONRECOVERABLE: 

    该选项会将 LOAD 操作标志为不可恢复,即数据库不能通过后续的前滚操作而被恢复。LOAD 操作结束后,数据库既不会处于“备份暂挂”状态,也不会产生任何的备份。 

    E:\TEST>db2 connect to sample 

    E:\TEST>db2 load from staff.del of del insert into staff nonrecoverable 

    E:\TEST>db2 list tablespaces 
    : 
    表空间标识 = 2 
    名称 = USERSPACE1 
    类型 = 系统管理空间 
    内容 = 任何数据 
    状态 = 0x0000 
    详细解释: 
    正常 
    : 

    虽然 LOAD 之后表空间和表的状态都正常,但如果今后需要执行前滚命令恢复数据库时,前滚操作将跳过 LOAD 事务的处    理,而将 LOAD 的表标记为无效,是对表的任何操作都不能进行。如: 

    E:\TEST>db2 restore db sample taken at 20051230174105 
    DB20000I RESTORE DATABASE 命令成功完成。 

    E:\TEST>db2 rollforward db sample to end of logs and stop 

    前滚状态 

    输入数据库别名 = sample 
    节点数已返回状态 = 1 

    节点号 = 0 
    前滚状态 = 未暂挂 
    下一个要读取的日志文件 = 
    已处理的日志文件 = S0000002.LOG - S0000003.LOG 
    上次落实的事务 = 2005-12-30-12.19.55.000000 

    DB20000I ROLLFORWARD 命令成功完成。 

    E:\>db2 connect to sample 

    E:\TEST>db2 list tablespaces 
    : 
    表空间标识 = 2 
    名称 = USERSPACE1 
    类型 = 系统管理空间 
    内容 = 任何数据 
    状态 = 0x0000 
    详细解释: 
    正常 
    : 

    E:\>db2 select * from staff 

    ID NAME DEPT JOB YEARS SALARY COMM 
    ------ --------- ------ ----- ------ --------- --------- 
    SQL1477N 不能存取表 "LIWENLI.STAFF"。 SQLSTATE=55019 

    这表明该表已不可操作,此时只有将表删除,重新构建,或使用 LOAD 操作时间点之后所做的数据库全备份或表空间备份来恢复该表。
0
相关文章