|
db2的重定向恢复
db2的重新定向恢复是一个比较快的数据库迁移方式,它通过类似克隆的方式,在新的环境中建立和当前数据库一致的一个新数据库,这里说的新的环境包括:1.当前实例下;2不同实例下或者别的服务器下,今天抽了点时间做了一个重新定向恢复的例子,现在分享给大家。
首先,重新定向恢复的大致包括如下4个步骤:
(一) 备份数据库BACKUP DATABASE OLDDB TO XX
(二) 恢复数据库RESTORE DATABASE,这里需要加上重新定向的参数REDIRECT,类似:RESTORE DATABASE OLDDB FROM OLDDBBACKUPDIR TAKEN AT XX [TO F(F代表盘符:即需要将数据库恢复到那个盘符) ] INTO NEWDB REDIRECT [WITHOUT ROLLING FORWARD]
(三) 定义新数据库的表空间容器 SET TABLESPACE CONTAINERS 0—tablesapceid USING( FILE/[PATH] “F:\ssss”----容器目录 [4096 ---对于DMS必须设置容器大小])
(四) 再次恢复数据库,这时候需要增加一个参数:CONTINUE 类似:RESTORE DATABASE OLDDB CONTINUE
我这边用到了2个例子,其一:在当前实例下把当前的数据库DWZXT重新定向恢复为DWZ;其二:在新的实例下恢复重新定向恢复数据库DWZXT为DWZ
第一个例子:当前实例下的重定向恢复
1. 得到当前实例
C:\>db2 get instance
当前数据库管理器实例是:DB2
2. 查看实例下的数据库
C:\>db2 list db directory
系统数据库目录
数据库 1 条目:
数据库别名 = DWZXT
数据库名称 = DWZXT
数据库驱动器 = D:\DB2
数据库发行版级别 = a.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
3. 连接到数据库,并进行数据库备份,对应第一步骤
C:\>db2 connect to dwzxt
数据库连接信息
数据库服务器 = DB2/NT 8.2.0
SQL 授权标识 = ADMINIST...
本地数据库别名 = DWZXT
C:\>db2 force applications all
DB20000I FORCE APPLICATION 命令成功完成。
DB21024I 该命令为异步的,可能不会立即生效。
C:\>db2 backup database dwzxt to e:\dbres
备份成功。此备份映像的时间戳记是:20080223144514
4. 恢复数据库,对应第二步骤
C:\>db2 restore database dwzxt from e:\dbres taken at 20080223144514 into dwz r
edirect without rolling forward
SQL1277N 复原已检测到一个或多个表空间容器是不可访问的,或者已将它们的状态设置为
“必须定义存储器”。
DB20000I RESTORE DATABASE 命令成功完成。
5. 查看新数据库需要定义的表空间容器,并生成容器目录[文件](在当前命令行编辑器中)
C:\>db2 list tablespaces
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
表空间标识 = 2
名称 = USERSPACE1
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
表空间标识 = 3
名称 = USERTMPSP
类型 = 系统管理空间
内容 = 用户临时数据
状态 = 0x2001100
详细解释:
复原暂挂
必须定义存储器
可以定义存储器
由以上可以看出我们需要定义4个系统管理表空间的容器:0:SYSCATSPACE、1:TEMPSPACE1、2:USERSPACE1、3:USERTMPSP,最终建好如下目录:
C:\>dir E:\dwzx
驱动器 E 中的卷没有标签。
卷的序列号是 0E00-006F
E:\dwzx 的目录
2008-02-23 14:48 <DIR> .
2008-02-23 14:48 <DIR> ..
2008-02-23 14:49 <DIR> SYSCTBS
2008-02-23 14:49 <DIR> SYSTMPTBS1
2008-02-23 14:50 <DIR> USERTMPTBS
2008-02-23 14:50 <DIR> USERTBS1
0 个文件 0 字节
6. 定义新数据库的表空间容器,对应步骤3
C:\>db2 set tablespace containers for 0 using (path "E:\dwzx\SYSCTBS")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 set tablespace containers for 1 using (path "E:\dwzx\SYSTMPTBS1")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 set tablespace containers for 2 using (path "E:\dwzx\USERTBS1")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 set tablespace containers for 3 using (path "E:\dwzx\USERTMPTBS")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 list tablespaces
当前数据库的表空间
表空间标识 = 0
名称 = SYSCATSPACE
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x2000100
详细解释:
复原暂挂
可以定义存储器
表空间标识 = 1
名称 = TEMPSPACE1
类型 = 系统管理空间
内容 = 系统临时数据
状态 = 0x2000100
详细解释:
复原暂挂
可以定义存储器
表空间标识 = 2
名称 = USERSPACE1
类型 = 系统管理空间
内容 = 任何数据
状态 = 0x2000100
详细解释:
复原暂挂
可以定义存储器
表空间标识 = 3
名称 = USERTMPSP
类型 = 系统管理空间
内容 = 用户临时数据
状态 = 0x2000100
详细解释:
复原暂挂
可以定义存储器
7. 再次恢复数据库,对应步骤4
C:\>db2 restore database dwzxt continue
DB20000I RESTORE DATABASE 命令成功完成。
Ok,搞定下来看一下连接会不会出问题
C:\>db2 list db directory
系统数据库目录
目录中的条目数 = 2
数据库 1 条目:
数据库别名 = DWZ
数据库名称 = DWZ
数据库驱动器 = C:\DB2
数据库发行版级别 = a.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
数据库 2 条目:
数据库别名 = DWZXT
数据库名称 = DWZXT
数据库驱动器 = D:\DB2
数据库发行版级别 = a.00
注释 =
目录条目类型 = 间接
目录数据库分区号 = 0
备用服务器主机名 =
备用服务器端口号 =
C:\>db2 connect to dwz
数据库连接信息
数据库服务器 = DB2/NT 8.2.0
SQL 授权标识 = ADMINIST...
本地数据库别名 = DWZ
C:\>db2 terminate
DB20000I TERMINATE 命令成功完成。
C:\>db2 connect to dwzxt
数据库连接信息
数据库服务器 = DB2/NT 8.2.0
SQL 授权标识 = ADMINIST...
本地数据库别名 = DWZXT
C:\>db2 terminate
DB20000I TERMINATE 命令成功完成。
那么搞定第一个例子
第二个例子:不同实例下重新定向的恢复
这个例子中新建了DB2实例myinst,在myinst实现重新定向的恢复,恢复的数据库名也为dwz,为了不混淆我们把这个数据库存储到F盘上,这个例子跳过对数据库的备份(第一步)
1. 新建实例myinst,并设置系统当前实例为myinst
C:\>db2 get instance
当前数据库管理器实例是:DB2
C:\>db2icrt myinst
DB20000I DB2ICRT 命令成功完成。
C:\>set db2instance=myinst
C:\>db2 get instance
当前数据库管理器实例是:MYINST
2. 恢复数据库,对应第二步
C:\>db2 restore database dwzxt from e:\dbres taken at 20080223144514 to f into d
wz redirect without rolling forward
SQL1277N 复原已检测到一个或多个表空间容器是不可访问的,或者已将它们的状态设置为
“必须定义存储器”。
DB20000I RESTORE DATABASE 命令成功完成。
3. 生成容器目录,此步骤手动完成,最终定义的容器目录如下:F:\MYINST\NODE0000\SQL00001\SYSCTBS;F:\MYINST\NODE0000\SQL00001\SYSTMPTBS1;F:\MYINST\NODE0000\SQL00001\USERTBS1;F:\MYINST\NODE0000\SQL00001\USERTMPTBS
4. 定义新数据库的表空间容器,对应步骤3
C:\>db2 set tablespace containers for 0 using (path "F:\MYINST\NODE0000\SQL00001
\SYSCTBS")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 set tablespace containers for 1 using (path "F:\MYINST\NODE0000\SQL00001
\SYSTMPTBS1")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 set tablespace containers for 2 using (path "F:\MYINST\NODE0000\SQL00001
\USERTBS1")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
C:\>db2 set tablespace containers for 3 using (path "F:\MYINST\NODE0000\SQL00001
\USERTMPTBS")
DB20000I SET TABLESPACE CONTAINERS 命令成功完成。
5. 再次恢复数据库,对应步骤4
C:\>db2 restore database dwzxt continue
DB20000I RESTORE DATABASE 命令成功完成。
那么第二个例子也ok!
这边做的几个例子比较简单,对于数据库的再现备份、多分区数据库等几个角度都没有涉及到,不过相信基本上的步骤也就如上总结的4个步骤,无非多注意一些地方,比如日志的处理,比如恢复时间的选择等等。
2008-02-23
Z.X.T(myfriend2010)
[ 本帖最后由 myfriend2010 于 2008-2-23 17:23 编辑 ] |
|