db2 的重定向恢复可以用于同操作系统服务器的数据迁移以及同服务器之间的库的复制。http://it.chinawin.net/database/article-e3db.html 已经对此作了详细的介绍,但还有一些事项需要注意。
我在此文的基础上增加了一些要注意的地方。红色字体的部分为我增加的部分。
db2的重定向恢复
db2的重新定向恢复是一个比较快的数据库迁移方式,它通过类似克隆的方式,在新的环境中建立和当前数据库一致的一个新数据库,这里说的
新的环境包括:1.当前实例下;2不同实例下或者别的服务器下,今天抽了点时间做了一个重新定向恢复的例子,现在分享给大家。
首先,重新定向恢复的大致包括如下4个步骤:
(一)
备份数据库BACKUPDATABASEOLDDB 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为
第一个例子:当前实例下的重定向恢复
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
备份前还应记录数据库的信息,包括以下命令
db2 get db cfg 记录数据库的配置信息
db2 list tablespaces 记录数据的表空间结构
db2 list TABLESPACE CONTAINERS FOR (id 在db2 list tablespaces 中查到) show detail 记录表空间的路径及类型(包括path,file,disk),及file类型文件的page大小
C:>db2 force applications all
DB20000I FORCE APPLICATION命令成功完成。
DB21024I 该命令为异步的,可能不会立即生效。
C:>db2 backup database dwzxt to e:dbres
备份成功。此备份映像的时间戳记是:20080223144514
4. 恢复数据库,对应第二步骤
恢复中文数据库时因编码的问题,需要先新建数据库,否者会产生SQL1205N错误以下为例子:
db2 create db dwzxt on e:dbres using codeset GBK territory CN
其中codeset territory可以用db2 get db cfg查看
C:>db2 restore database dwzxt from e:dbres
taken at 20080223144514 into dwz REPLACE
EXISTING (因前面已经使用db2 create db
创建数据库,如不增加该参数会提示数据库已经存在,会询问是否要覆盖该数据库) 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
path名称可以自己定,如果仍要保持和原数据库相同的结构,可以用
C:>db2 set tablespace containers for 0 using
(path "E:dwzxSYSCTBS")
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
C:>db2 set tablespace containers for 1 using
(path "E:dwzxSYSTMPTBS1")
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
C:>db2 set tablespace containers for 2 using
(path "E:dwzxUSERTBS1")
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
C:>db2 set tablespace containers for 3 using
(path "E:dwzxUSERTMPTBS")
DB20000I SET TABLESPACE CONTAINERS命令成功完成。
对于type 为file的tablespace 使用 C:>db2 set tablespace containers for 4 using (file "E:dwzxdata01.dat" 524288)命令恢复524288为page大小,可以自己指定,但不能小于原tablespace大小。
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
备用服务器端口号
=<SP
此时使用db2 get db cfg 会发现database_consistent=no,此时使用db2 restart database 重置该节点后数据库正常。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞0
添加新评论0 条评论