DB2 9.7 数据库迁移方案(重定向恢复)

DB2数据库使用率越来越低了,从一开始的大面积使用到现在只剩一部分电信,政府,企业在坚持使用,网上能看到的资料也越来越少,而且能搜索到的资料都是很多版本之前的,已经失去了参考价值。而比较常用的数据库迁移,归档日志设置等,已经是错误的方法,下面主要介绍一下DB2数据库重定向恢复方法。主要用于将DB2数据库从一台主机迁移到另外一台主机,同时修改数据库的安装路径,表空间路径,表空间容器路径,默认缓冲池大小,归档日志路径,Active的归档日志路径。

 

首先,如果要做全库的备份,一般使用db2 backup命令,其余的还有db2 export命令和db2move命令都不是全库导出,只有数据被导出,而触发器,函数等等都没有导出,所以如果做全库迁移首选db2 backup

但是db2 backup命令有个难点,就是迁移后的主机要与原机器目录结构相似,尤其是表空间,表空间容器的目录或者设备,磁盘要一模一样,数据库安装的位置默认在restore的时候也是原有位置,表空间和缓冲池的设置也是原数据库的设置,这样就会非常的不灵活,因为新的服务器往往会缺少原库的一些磁盘,目录。有时候我们也故意的想把表空间换一换位置,所以db2 restore往往会伴随着重定向恢复,这样我们可以重新指定表空间和表空间容器的位置,迁移起来就灵活多了。

 

第一步:停止应用,备份数据库

这里有两种备份方式,一种是停机备份,也就是将数据库外部应用停止,这种方式最为稳妥,因为可以保证数据是最新的。另一种是在线备份,可以不停止现有的业务,但是需要给数据库开启归档日志和在线备份的功能。

首先介绍离线备份

1、停止外部服务,如中间件tomcat,数据库客户端,终止db2 connect命令等

终止完成后可以用netstat -an | grep 50000 ;来看是否还有连接在数据库上,50000是我的数据库的监听端口

2、如果外部的连接无法彻底断开,那么就可以使用如下语句强行断开

db2 connect to 数据库名
db2 quiesce db immediate force connections
db2 terminate

网上有的资料说需要使用

db2stop force 

db2start 

这样做也可以,但是没有必要,不需要通过重启数据库来断开连接,反而这样重启之后外部系统还会自动重连回来,不如上面的方法干净彻底。

3、导出数据库到特定路径

为了防止此次导出的数据库与原来的备份混淆,我们最好是建立一个新的路径来存放导出的文件

mkdir /home/db2inst1-m/export
db2 backup db 数据库名 to /home/db2inst1-m/export/

然后等待一会(视数据量大小而确定),就可以在上面的路径下看到我们备份出的数据库导出文件,同时还会给一个时间戳,把这个时间戳记录下来

ls /home/db2inst1-m/export/
数据库名.0.db2inst1.NODE0000.CATN0000.20180409173115.001

然后把这个数据库备份文件传输到新机器上备用

scp /home/db2inst1-m/export/* db2inst1@192.168.1.2:/home/db2inst1/import/

下面再介绍一下在线备份

首先需要开启在线备份和归档日志的功能(已经开启的数据库可以跳过这一步)

db2 update db cfg for 数据库名 using userexit on 启用用户出口 
db2 update db cfg for 数据库名 using logretain on 启用归档日志 
db2 update db cfg for 数据库名 using trackmod on 启用增量备份功能

开启开关之后需要重启一下数据库,然后再做一次冷备,就可以看到有归档日志产生了

然后执行导出语句

db2 "backup db 数据库名 online to /home/db2inst1-m/export" include logs

这样导出就不需要断开数据库全部的连接,可以在不停止业务的情况下进行导出,一般用于生产数据往测试库上导出的场景。

导出之后就和上面离线备份的方法一样,将备份文件传输到,另一台机器上。

 

然后我们到另一台服务器上准备恢复数据库,使用db2 restore命令,并且要有redirect关键字,注意,在执行db2 restore命令之前不需要新建这个库,而是有实例即可。

db2 RESTORE DATABASE 原数据库名 FROM '/home/db2inst1/import' TAKEN AT 时间戳 ON '/db2data/wf/' INTO 新数据库名 REDIRECT

这一步执行完毕之后我们就需要配置表空间容器的位置了,由于我原来的数据库用的全都是DB2的系统默认表空间,所以都是自动的,无需设置,而如果你原数据库使用了自定义表空间,就需要再执行其他语句重新定义表空间容器的位置了。

如下,首先登录原数据库查看各个表空间的位置,查看方法如下

1、先连接数据库

db2 connect to 数据库名

2、执行

db2pd -tablespaces -db 数据库名

3、查看表空间和表空间容器的分布状况和ID

Tablespace Configuration:
Address            Id    Type Content PageSz ExtentSz Auto Prefetch BufID BufIDDisk FSC NumCntrs MaxStripe  LastConsecPg Name
0x00007FAA321FA720 0     DMS  Regular 4096   4        Yes  4        1     1         Off 1        0          3            SYSCATSPACE
0x00007FAA32
  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值