当DB2的数据库启用了前滚恢复模式,即将日志由循环日志方式改为归档日志,以便用户
在进行恢复操作时,可在恢复了数据库或表空间的备份后,再通过前滚归档日志中的事务,
恢复数据库备份时间点之后提交的事务,最大程度的保护数据库的数据。
而DB2的LOAD实用程序为实现快速导入数据的功能,除采用了通过直接向数据库中写
入格式化的数据页装载数据,导入过程中不激活触发器,不会检查参考完整性和表检查约束
当等方式外,还最小化了记录事务日志的操作。在LOAD的LOAD、BUILD、DELETE和
INDEXCOPY四个处理阶段中,仅在DELETE阶段记录对每个删除事件记日志,即只对每
个违反唯一约束的行的删除操作记日志,因此整个LOAD操作仅记录了极少的日志。
由于LOAD最小化了日志的记录,有因启用了前滚恢复的数据库在恢复在线备份时需要归
档日志的特性,对于这种数据库的LOAD操作,为避免执行LOAD操作后,表在使用
ROLLFORWARD命令前滚归档日志的过程中因缺少日志而被置为非正常状态,DB2为
LOAD命令提供了如下选项:
·COPYNO(缺省)
·COPYYES
·NONREVERABLE
为更清楚地说明这些选项的作用,这里将以举例的方式进行说明。而在开始操作之前,首先
了解一下DB2备份操作所产生的映象文件的形式和命名特点:
在UNIX环境下是文件的形式:
在Windows环境下是子目录及文件的形式:
而其中的Type则因备份类型的不同而不同:
0--数据库全备份
3--表空间备份
4--由LOAD操作产生的备份
1.进行一次数据库的全备份:
首先对已启用前滚恢复模式的SAMPLE数据库进行一次全备份:
E:TEST>db2backupdbsample
备份成功。此备份映像的时间戳记是:25
这时看到在当前目录下产生了一个SAMPLE.0的子目录,表明产生的是一个数据库全备份。
下面将对这些现象逐个予以举例说明:
2.关于COPYNO:
在LOAD操作结束时,将表所在的表空间置于“备份暂挂”状态,此时虽然其中的表可以进
行SELECT操作,但不能进行UPDATE和DELETE操作。为使该表状态恢复正常,除去
备份暂挂状态,必须手动对其表空间执行一个BACKUP命令。由于该选项为缺省选项,如
果LOAD命令中未指明,则默认为使用该选项,如:
E:TEST>db2connecttosample
E:TEST>elinrtintostaff
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0020
详细解释:
备份暂挂
:
E:TEST>db2lectcount(*)fromstaff
1
-----------
70
1条记录已选择。
E:TEST>db2updatestafftid=335whereid=340
DB21034E该命令被当作SQL语句来处理,因为它不是有效的“命令行处理器”命令。在SQL
处理期间,它返回:
SQL0290N不允许存取表空间。SQLSTATE=55039
在手动对USERSPACE1表空间进行一次备份操作后,表空间状态将正常,再次尝试更新操
作就会成功:
E:TEST>db2backupdbsampletablespace(urspace1)
备份成功。此备份映像的时间戳记是:21
命令完成后可以在当前目录下看到产生了一个SAMPLE.3的子目录,表明产生的是一个表
空间级的备份。
E:TEST>db2connecttosample
E:TEST>db2listtablespaces
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0000
详细解释:
正常
而所产生这份关于表空间的备份可在数据库因前滚操作将表空间置为“复原暂挂”状态时用于
将表空间状态恢复为正常,并恢复LOAD操作对该表的修改。如当前滚数据库超过LOAD
时间点后,表空间将被置为复原暂挂状态:
E:TEST>db2restoredbsampletakenat25
DB20000IRESTOREDATABASE命令成功完成。
E:TEST>db2rollforwarddbsampletoendoflogsandstop
SQL1271W已恢复数据库"SAMPLE",但在节点"0"上有一个或多个表空间脱机
E:TEST>db2connecttosample
E:TEST>db2listtablespaces
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0100
详细解释:
复原暂挂
此时可利用这一表空间级的备份进行恢复操作:
E:TEST>db2restoredbsampletablespace(urspace1)takenat21
DB20000IRESTOREDATABASE命令成功完成。
E:TEST>db2connecttosample
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0080
详细解释:
前滚暂挂
:
E:TEST>db2rollforwarddbsampletoendoflogsandstoptablespace(urspace1)
前滚状态
输入数据库别名=sample
节点数已返回状态=1
节点号=0
前滚状态=未暂挂
下一个要读取的日志文件=
已处理的日志文件=-
上次落实的事务=2005-12-30-10.47.10.000000
DB20000IROLLFORWARD命令成功完成。
E:TEST>db2connecttosample
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0000
详细解释:
正常
:
E:TEST>db2updatestafftid=335whereid=340
DB20000ISQL命令成功完成。
可见表空间状态已正常,表也可执行更新操作了。
3.关于COPYYES:
在LOAD操作结束时,DB2自动对表所在的表空间进行一次备份操作,因而LOAD结束
后,表所在的表空间不会再处于“备份暂挂”状态,而为“正常”状态。但由于要进行备份操作,
所以这种LOAD操作的时间会较没有备份的长。如:
E:TEST>db2connecttosample
E:TEST>elinrtintostaffcopyyesto.
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0000
详细解释:
正常
:
E:TEST>db2lectcount(*)fromstaff
1
-----------
105
1条记录已选择。
此时可在当前目录下看到一个SAMPLE.4的子目录,表明产生的是一个由LOAD操作生成
的备份,而这份备份将在数据库进行前滚恢复操作时用于重新创建LOAD操作对数据库的
修改。如:
E:TEST>db2restoredbsampletakenat25
DB20000IRESTOREDATABASE命令成功完成。
E:TEST>db2rollforwarddbsampletoendoflogsandstop
前滚状态
输入数据库别名=sample
节点数已返回状态=1
节点号=0
前滚状态=未暂挂
下一个要读取的日志文件=
已处理的日志文件=
上次落实的事务=2005-12-30-11.48.26.000000
DB20000IROLLFORWARD命令成功完成。
E:TEST>db2connecttosample
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0000
详细解释:
正常
:
E:TEST>db2lectcount(*)fromstaff
1
-----------
105
1条记录已选择。
这表明在SAMPLE.4下的备份被用于了前滚恢复操作,而重新创建了LOAD操作对数据库
插入的记录。
4.关于NONRECOVERABLE:
该选项会将LOAD操作标志为不可恢复,即数据库不能通过后续的前滚操作而被恢复。
LOAD操作结束后,数据库既不会处于“备份暂挂”状态,也不会产生任何的备份。
E:TEST>db2connecttosample
E:TEST>elinrtintostaffnonrecoverable
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0000
详细解释:
正常
:
虽然LOAD之后表空间和表的状态都正常,但如果今后需要执行前滚命令恢复数据库时,
前滚操作将跳过LOAD事务的处理,而将LOAD的表标记为无效,是对表的任何操作都
不能进行。如:
E:TEST>db2restoredbsampletakenat25
DB20000IRESTOREDATABASE命令成功完成。
E:TEST>db2rollforwarddbsampletoendoflogsandstop
前滚状态
输入数据库别名=sample
节点数已返回状态=1
节点号=0
前滚状态=未暂挂
下一个要读取的日志文件=
已处理的日志文件=
上次落实的事务=2005-12-30-12.19.55.000000
DB20000IROLLFORWARD命令成功完成。
E:>db2connecttosample
E:TEST>db2listtablespaces
:
表空间标识=2
名称=USERSPACE1
类型=系统管理空间
内容=任何数据
状态=0x0000
详细解释:
正常
:
E:>db2lect*fromstaff
IDNAMEDEPTJOBYEARSSALARYCOMM
--------------------------------------------------
SQL1477N不能存取表""。SQLSTATE=55019
这表明该表已不可操作,此时只有将表删除,重新构建,或使用LOAD操作时间点之后所
做的数据库全备份或表空间备份来恢复该表。
5.关于注册表变量DB2_LOAD_COPY_NO_OVERRIDE的介绍:
另外DB2还提供了一个注册表变量:DB2_LOAD_COPY_NO_OVERRIDE,可将LOAD的
缺省选项COPYNO设置为NONRECOVERABLE或COPYYES。具体使用方法举例为:
设置为COPYYES的方法:
E:TEST>db2tDB2_LOAD_COPY_NO_OVERRIDE="COPYYESTOE:TEST"
E:TEST>db2terminate
E:TEST>db2t
DB2_LOAD_COPY_NO_OVERRIDE=COPYYESTOE:TEST
:
E:TEST>elinrtintostaff
SQL27966WDB2_LOAD_COPY_NO_OVERRIDE注册表变量值"COPYYESTOE:TEST"将覆盖在
Load中指定的COPYNO参数。
:
:
设置为NONRECOVERABLE的方法:
E:TEST>db2tDB2_LOAD_COPY_NO_OVERRIDE=NONRECOVERABLE
E:TEST>db2terminate
E:TEST>db2t
DB2_LOAD_COPY_NO_OVERRIDE=NONRECOVERABLE
:
E:TEST>elinrtintostaff
SQL27966WDB2_LOAD_COPY_NO_OVERRIDE注册表变量值"NONRECOVERABLE"将覆盖在
Load中指定的COPYNO参数。
:
:
通过上述对LOAD的COPYNO,COPYYES和NONRECOVERABLE参数,以及DB2
注册表变量DB2_LOAD_COPY_NO_OVERRIDE的详细和举例说明,到此我们已经掌握了
它们的功能和使用方法。由于LOAD操作几乎不记日志的特性,在对启用了前滚恢复的数
据库实现LOAD操作时应注意从中选择适当的选项,以保证执行了LOAD操作的表的可用
性。
本文发布于:2023-01-04 16:20:38,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/91625.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |