中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > DB2
DB2 LOAD命令中COPY NO/COPY的说明
作者:diablo2 时间:2007-06-22 15:02 出处:ccidnet.com 责编:月夜寒箫
              摘要:DB2 LOAD命令中COPY NO/COPY的说明

内容提要

主要介绍 DB2 LOAD 命令所提供的 COPY NO/COPY YES/NONRECOVERABLE 选项,以及与之相关的注册表变量 DB2_LOAD_COPY_NO_OVERRIDE 的功能和使用方法等。

正文

当 DB2 的数据库启用了前滚恢复模式,即将日志由循环日志方式改为归档日志,以便用户在进行恢复操作时,可在恢复了数据库或表空间的备份后,再通过前滚归档日志中的事务,恢复数据库备份时间点之后提交的事务,最大程度的保护数据库的数据。

而 DB2 的 LOAD 实用程序为实现快速导入数据的功能,除采用了通过直接向数据库中写入格式化的数据页装载数据,导入过程中不激活触发器,不会检查参考完整性和表检查约束当等方式外,还最小化了记录事务日志的操作。在 LOAD 的 LOAD、BUILD、DELETE 和 INDEX COPY 四个处理阶段中,仅在 DELETE 阶段记录对每个删除事件记日志,即只对每个违反唯一约束的行的删除操作记日志,因此整个 LOAD 操作仅记录了极少的日志。

由于 LOAD 最小化了日志的记录,有因启用了前滚恢复的数据库在恢复在线备份时需要归档日志的特性,对于这种数据库的 LOAD 操作,为避免执行 LOAD 操作后,表在使用 ROLLFORWARD 命令前滚归档日志的过程中因缺少日志而被置为非正常状态,DB2 为 LOAD 命令提供了如下选项:

·COPY NO(缺省)

·COPY YES

·NONREVERABLE

为更清楚地说明这些选项的作用,这里将以举例的方式进行说明。而在开始操作之前,首先了解一下 DB2 备份操作所产生的映象文件的形式和命名特点:

在 UNIX 环境下是文件的形式:

 

Databasealias.Type.Instancename.Nodename.Catnodename.Timestamp.number

在 Windows 环境下是子目录及文件的形式:

 

Databasealias.Type\Instancename\Node0000\Catn0000\yyyymmdd\hhmmss.number

而其中的 Type 则因备份类型的不同而不同:

0 -- 数据库全备份

3 -- 表空间备份

4 -- 由 LOAD 操作产生的备份

1. 进行一次数据库的全备份:

首先对已启用前滚恢复模式的 SAMPLE 数据库进行一次全备份:

 

E:\TEST>db2 backup db sample

备份成功。此备份映像的时间戳记是:20051230174105

这时看到在当前目录下产生了一个 SAMPLE.0 的子目录,表明产生的是一个数据库全备份。下面将对这些现象逐个予以举例说明:

2. 关于 COPY NO:

在 LOAD 操作结束时,将表所在的表空间置于“备份暂挂”状态,此时虽然其中的表可以进行 SELECT 操作,但不能进行 UPDATE 和 DELETE 操作。为使该表状态恢复正常,除去备份暂挂状态,必须手动对其表空间执行一个 BACKUP 命令。由于该选项为缺省选项,如果 LOAD 命令中未指明,则默认为使用该选项,如:

 

E:\TEST>db2 connect to sample
            E:\TEST>db2 load from staff.del of del insert into staff
            E:\TEST>db2 list tablespaces
            :
            表空间标识 = 2
            名称 = USERSPACE1
            类型 = 系统管理空间
            内容 = 任何数据
            状态 = 0x0020
            详细解释:
            备份暂挂
            :
            E:\TEST>db2 select count(*) from staff
            1
            -----------
            70
            1 条记录已选择。
            E:\TEST>db2 update staff set id=335 where id=340

DB21034E 该命令被当作 SQL 语句来处理,因为它不是有效的“命令行处理器”命令。在 SQL 处理期间,它返回:

SQL0290N 不允许存取表空间。 SQLSTATE=55039

在手动对 USERSPACE1 表空间进行一次备份操作后,表空间状态将正常,再次尝试更新操作就会成功:

 

E:\TEST>db2 backup db sample tablespace (userspace1)

备份成功。此备份映像的时间戳记是:20051230184841

命令完成后可以在当前目录下看到产生了一个 SAMPLE.3 的子目录,表明产生的是一个表空间级的备份。








 

E:\TEST>db2 connect to sample
            E:\TEST>db2 list tablespaces
            表空间标识 = 2
            名称 = USERSPACE1
            类型 = 系统管理空间
            内容 = 任何数据
            状态 = 0x0000

详细解释:

正常

而所产生这份关于表空间的备份可在数据库因前滚操作将表空间置为“复原暂挂”状态时用于将表空间状态恢复为正常,并恢复 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
            SQL1271W 已恢复数据库 "SAMPLE",但在节点 "0"上有一个或多个表空间脱机
            E:\TEST>db2 connect to sample
            E:\TEST>db2 list tablespaces
            表空间标识 = 2
            名称 = USERSPACE1
            类型 = 系统管理空间
            内容 = 任何数据
            状态 = 0x0100
            详细解释:
            复原暂挂
            此时可利用这一表空间级的备份进行恢复操作:
            E:\TEST>db2 restore db sample tablespace (userspace1) taken at 20051230184841
            DB20000I RESTORE DATABASE 命令成功完成。
            E:\TEST>db2 connect to sample
            E:\TEST>db2 list tablespaces
            :
            表空间标识 = 2
            名称 = USERSPACE1
            类型 = 系统管理空间
            内容 = 任何数据
            状态 = 0x0080
            详细解释:
            前滚暂挂
            :
            E:\TEST>db2 rollforward db sample to end of logs and stop tablespace (userspace1)
            前滚状态
            输入数据库别名 = sample
            节点数已返回状态 = 1
            节点号 = 0
            前滚状态 = 未暂挂
            下一个要读取的日志文件 =
            已处理的日志文件 = -
            上次落实的事务 = 2005-12-30-10.47.10.000000
            DB20000I ROLLFORWARD 命令成功完成。
            E:\TEST>db2 list tablespaces
            :
            表空间标识 = 2
            名称 = USERSPACE1
            类型 = 系统管理空间
            内容 = 任何数据
            状态 = 0x0000
            详细解释:
            正常
            :
            E:\TEST>db2 update staff set id=335 where id=340

DB20000I SQL 命令成功完成。

可见表空间状态已正常,表也可执行更新操作了。

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 命令成功完成。
            前滚状态
            输入数据库别名 = 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 操作对数据库插入的记录。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有