查看: 7945|回复: 19

[精华] 今天做的关于db2的重定向恢复的2个例子

[复制链接]
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
跳转到指定楼层
1#
发表于 2008-2-23 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 编辑 ]
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
2#
 楼主| 发表于 2008-2-23 17:12 | 只看该作者
花了将近3个小时(包括记录整个过程1个小时),累啊!

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
3#
 楼主| 发表于 2008-2-23 17:12 | 只看该作者
希望对大家有用处!

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
4#
 楼主| 发表于 2008-2-23 17:13 | 只看该作者
附上整理的文档!

db2的重定向恢复.doc

65.5 KB, 下载次数: 96

使用道具 举报

回复
论坛徽章:
3
生肖徽章2007版:牛
日期:2009-02-17 13:26:03祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:19:09
5#
发表于 2008-2-23 18:22 | 只看该作者
谢谢,很有用。
有点疑问,
1,在第二个例子中,restore命令中“to f ”,必须要用吗?
2,在新环境建立数据库,用一般的恢复是否更好。

使用道具 举报

回复
论坛徽章:
233
天枰座
日期:2016-02-02 09:36:332012新春纪念徽章
日期:2012-01-04 11:49:54ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41灰彻蛋
日期:2011-06-22 19:28:30现任管理团队成员
日期:2011-05-07 01:45:082010广州亚运会纪念徽章:拳击
日期:2011-04-08 16:56:552011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:15
6#
发表于 2008-2-23 19:19 | 只看该作者
支持原创,授精

使用道具 举报

回复
论坛徽章:
7
授权会员
日期:2008-02-15 09:21:13ITPUB元老
日期:2009-02-04 13:29:39
7#
发表于 2008-2-23 22:00 | 只看该作者
支持原创~~~

使用道具 举报

回复
招聘 : c/c++研发
论坛徽章:
45
技术图书徽章
日期:2014-03-10 14:09:192012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-01-04 11:51:22ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15现任管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:50
8#
发表于 2008-2-23 22:53 | 只看该作者
不错,现在市面上最缺乏的就是这种step by step的例子

使用道具 举报

回复
招聘 : Linux运维
论坛徽章:
235
紫蜘蛛
日期:2007-09-26 17:05:46玉兔
日期:2007-09-26 17:05:05现任管理团队成员
日期:2011-05-07 01:45:08玉兔
日期:2006-08-29 20:38:48紫蜘蛛
日期:2007-09-26 17:05:34阿斯顿马丁
日期:2013-11-19 10:38:16奔驰
日期:2013-10-16 09:08:58红旗
日期:2014-01-09 11:57:39路虎
日期:2013-08-13 14:52:35林肯
日期:2015-05-19 13:01:16
9#
 楼主| 发表于 2008-2-24 11:57 | 只看该作者
原帖由 fck 于 2008-2-23 18:22 发表
谢谢,很有用。
有点疑问,
1,在第二个例子中,restore命令中“to f ”,必须要用吗?
2,在新环境建立数据库,用一般的恢复是否更好。


1.to f 的意思是把数据库恢复到某一个盘符
2.我觉得根据个人的喜好或者业务需求了,这种恢复就是类似克隆的一种方式,如果在新建库中的表空间管理模式等要和原来的库可能要做修改阿(SMS到DMS等),那么个人为不是很合适了!

使用道具 举报

回复
论坛徽章:
5
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章2007版:鼠
日期:2008-01-02 17:35:532009新春纪念徽章
日期:2009-01-04 14:52:282011新春纪念徽章
日期:2011-02-18 11:43:33
10#
发表于 2008-2-24 13:41 | 只看该作者
原帖由 diablo2 于 2008-2-23 19:19 发表
支持原创,授精



那天也来搞个原创,搞点精

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表