DB2在做恢复数据库操作时,默认情况下,会使用原来数据库使用的表空间容器,如果需要指定到其他的容器,那么就需要做重定向恢复,虽然执行重定向恢复的命令后,可以获取表空间的容器情况,指定新的容器。该操作仍然比较复杂。
DB2从版本9.1开始,提供一个新的功能,可以从备份介质中产生一个重定向恢复的脚本,你可以通过修改这个脚本中需要重定向的容器,然后运行这个脚本就可以完成整个重定向恢复了。
下面我们通过重定向恢复sample数据库的一个例子,来详细讲解一下该功能。
1、创建一个例子数据库的备份。
D:/Temp>db2 backup db sample to .
备份成功。此备份映像的时间戳记是:20060626161457
2、使用RESTRORE ... REDIRECT GENERATE SCRIPT <SCRIPTNAME>产生重定向恢复数据库的脚本。
D:/Temp>db2 restore db sample from . redirect generate script redirect.db2
DB20000I RESTORE DATABASE命令成功完成。
3、此时我们查看生成的redirect.db2脚本,可以看到:
该脚本分为四个部分,第一部分:
--
*****************************************************************
--
**
自动创建了重定向复原脚本
--
********************************************************************
UPDATE COMMAND OPTIONS USING S ON Z ON SAMPLE_NODE0000.
out
V ON;
SET CLIENT ATTACH_DBPARTITIONNUM
0
;
SET CLIENT CONNECT_DBPARTITIONNUM
0
;
第一条语句更新了命令行选项,具体解释如下:
* S ON 指定错误出现时停止执行命令
* Z ON SAMPLE_NODE0000.out 指定命令的输出保存在SAMPLE_NODE0000.out
* V ON 指定当前命令打印到屏幕上
第二条和第三条语句指定该命令在数据库分区0上执行,在分区数据库环境下指定数据库分区非常重要。
该脚本的第二部分是重定向恢复数据库的命令:
--
****************************************************************
--
**
自动创建了重定向复原脚本
--
****************************************************************
RESTORE DATABASE SAMPLE
--
USER
<
用户名
>
--
USING
'
<密码>
'
FROM
'
D:/Temp
'
TAKEN AT
20060626161457
--
ON
'
C:
'
--
DBPATH ON
'
<目标目录>
'
INTO SAMPLE
--
NEWLOGPATH
'
C:/DB2/NODE0000/SQL00002/SQLOGDIR/'
--
WITH
<
缓冲区数目
>
BUFFERS
--
BUFFER
<
缓冲区大小
>
--
REPLACE HISTORY FILE
--
REPLACE EXISTING
REDIRECT
--
PARALLELISM
<
n
>
WITHOUT ROLLING FORWARD
--
WITHOUT PROMPTING
;
第三部分为表空间定义:
--
******************************************************************
--
**
表空间定义
--
*********************************************************************
--
*********************************************************************
--
**
表空间名
=
SYSCATSPACE
--
**
表空间标识
=
0
--
**
表空间类型
=
数据库管理空间
--
**
表空间内容类型
=
所有持久数据。常规表空间。
--
**
表空间页大小(以字节计)
=
4096
--
**
表空间扩展数据块大小(以页计)
=
4
--
**
使用自动存储器
=
是
--
**
启用自动调整大小
=
是
--
**
页总数
=
16384
--
**
可用页数
=
16380
--
**
高水位标记(页)
=
8252
--
********************************************************************
......
--
********************************************************************
--
**
表空间名
=
TESTDMS
--
**
表空间标识
=
4
--
**
表空间类型
=
数据库管理空间
--
**
表空间内容类型
=
所有持久数据。大型表空间。
--
**
表空间页大小(以字节计)
=
4096
--
**
表空间扩展数据块大小(以页计)
=
32
--
**
使用自动存储器
=
否
--
**
启用自动调整大小
=
否
--
**
页总数
=
5120
--
**
可用页数
=
5088
--
**
高水位标记(页)
=
96
--
****************************************************************
SET TABLESPACE CONTAINERS FOR
4
--
IGNORE ROLLFORWARD CONTAINER OPERATIONS
USING (
FILE
'
d:/temp/test.dat
'
5120
);
该部分会首先包含表空间的信息,显示表空间的基本情况。
如果这个表空间需要进行重定向操作的话,那么在说明性信息的后面会跟有SET TABLESPACE CONTAINERS语句。你可以根据需要修改表空间容器的重定向信息。如果这个表空间是系统管理的表空间或者使用自动存储器和启用自动调整大小的表空间 的话,那么不需要对这个表空间进行重定向操作。
该脚本的第四部分是继续进行重定向恢复的语句:
--
*****************************************************************
--
**
启动已重定向的复原
--
********************************************************************
RESTORE DATABASE SAMPLE CONTINUE;
--
********************************************************************
--
**
文件末尾
--
********************************************************************
4、我们修改上面的文件,将数据库恢复到D盘上,并改名为TEST。将表空间4的容器设置到"E:/temp/test.dat",然后运行这个脚本,顺利完成数据库的重定向恢复:
D:/Temp
>
db2
-
tvf redirect.db2
UPDATE COMMAND OPTIONS USING S ON Z ON SAMPLE_NODE0000.
out
V ON
DB20000I UPDATE COMMAND OPTIONS命令成功完成。
SET CLIENT ATTACH_DBPARTITIONNUM
0
DB20000I SET CLIENT命令成功完成。
SET CLIENT CONNECT_DBPARTITIONNUM
0
DB20000I SET CLIENT命令成功完成。
RESTORE DATABASE SAMPLE FROM
'
D:/Temp
'
TAKEN AT
20060626163444
ON
'
D:
'
INTO TEST
REDIRECT WITHOUT ROLLING FORWARD
SQL1277W 正在执行重定向复原操作。现在,可以查看表空间配置,并且不使用自动存储器
的表空间可以重新配置它们的容器。
DB20000I RESTORE DATABASE命令成功完成。
SET TABLESPACE CONTAINERS FOR
4
USING ( FILE
'
E:/temp/test.dat
'
5120
)
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
RESTORE DATABASE SAMPLE CONTINUE
DB20000I RESTORE DATABASE命令成功完成。