本文讨论的内容限于同一平台下的 DB2 数据库迁移。关于不同平台下的 DB2 数据库迁移参见《不同平台之间的 DB2 数据库迁移一例》。
数据库恢复操作使用数据库备份映象来重新创建数据库。如果要将数据库从一台机器克隆到另一台,最简单的方法就是从备份映象恢复数据库。除非源系统上的数据库引用的文件系统和物理设备与目标系统的设置方法完全相同,否则在目标系统上还原数据库就需要执行重定向恢复操作。
重定向恢复操作包括两步数据库恢复过程,并且中间有一个表空间容器定义步骤:
1. 带 REDIRECT 选项发出 RESTORE DATABASE 命令。
2. 使用 SET TABLESPACE CONTAINERS 命令来定义被恢复的数据库的表空间容器(DB2 需要知道您想要让表空间驻留在目标系统上的什么位置)。
3. 再次发出 RESTORE DATABASE 命令,这次指定 CONTINUE 选项。
重要!整个重定向恢复操作必须在同一个会话中调用;否则,将返回 SQL0900N,恢复操作会失败,记住这一点很重要。确保不会发生这种情况的一个方法是创建并运行包含重定向恢复过程中全部三部分的脚本。
下面是一次相同平台的 DB2 数据库使用重定向恢复的示例,脚本如下:
第一步,在源系统中离线完全备份数据库
--源系统 ZYSJK
--源数据库 YNDC
C:\Documents and Settings\Administrator>cd /d D:\backup\autobak\db2
D:\backup\autobak\db2>db2 backup db YNDC
这个映象的时间戳记是 20070315165040 ,该映象在 D:\backup\autobak\YNDC.0\DB2\NODE0000\CATN0000\20070315 中。
DB2 在发出 BACKUP DATABASE 命令的目录中创建这个子目录树。子目录名称表示以下含义:
\\\\
在这个子目录树中,将会有一个表示实际备份映象的文件(165040.0)。文件名表示获取备份的时间。
第二步,在目标系统中创建相似的目录,并将备份文件拷贝至 165040.0 的文件至该目录下
C:\Documents and Settings\Administrator>cd\
C:\>mkdir D:\backup\autobak\YNDC.0\DB2\NODE0000\CATN0000\20070315
注意!这是关键步骤:如果没有正确创建这个路径,后续的数据库恢复操作就会失败。
第三步,查看源系统的数据库表空间情况
C:\Documents and Settings\Administrator>db2 list tablespaces
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 2
名称 = USERSPACE1
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 3
名称 = YNDC
类型 = 数据库管理空间
内容 = 任何数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 4
名称 = SYSTOOLSPACE
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 5
名称 = USERTEMPSP
类型 = 数据库管理空间
内容 = 用户临时数据
状态 = 0x0000
详细解释:
正常
表空间标识 = 6
名称 = TEMPSPACE8K
类型 = 数据库管理空间
内容 = 系统临时数据
状态 = 0x0000
详细解释:
正常
其中,标识为 0,1,2 的表空间是系统缺省的默认表空间,无需进行重定向操作,这里可以不必“理会”它。
标识为 3,5,6 的表空间需要进行重定向操作,脚本如下(以下语句必须写在一个脚本中执行):
第四步,在目标系统中创建数据库 YNDC ,然后通过表空间重定向还原数据库
db2 create db YNDC;
执行下面的脚本,脚本清单:
restore db YNDC from d taken at 20070315165040 to d redirect;USING ( 'D:\DB2\Container\TestDB\SysData\' )
set tablespace containers for 4 using (PATH 'G:\DB2Containner_2\YNDC\sys' );
set tablespace containers for 3 using (FILE "G:\DB2Containner_2\YNDC\YNDC" 5242880);
set tablespace containers for 5 using (FILE "G:\DB2Containner_2\YNDC\USERTEMPSP" 51200);
set tablespace containers for 6 using (FILE "G:\DB2Containner_2\YNDC\TEMPSPACE8K" 51200);
restore db YNDC continue;
第五步,验证目标系统中还原的数据库的表空间
db2 list db directory
db2 connect to YNDC
db2 list tablespace containers for 3
db2 list tablespace containers for 5
db2 list tablespace containers for 6
db2 connect reset
db2 terminate
Edit by pjj in 2007-03-16 9:09 关于数据库重定向恢复数据库还有一点补充:如果源数据库的缓冲池较大,还原后目标数据库启动不了的情况下,在还原成功之后请修改缓冲池的大小。另外,在指定表空间容器的时候,需要注意目标表空间和源表空间的管理类型必须一致,系统管理表空间对应系统管理表空间,数据库管理表空间对应数据库管理表空间。就本例来说,标识为 3,5,6的表空间为数据库管理表空间,其它的为系统管理表空间。具体的设置语句也有不同,详细内容请参考上面的语句。