DB2AIX恢复指南


-----------------***--------------------
----------------------------------------
-- DB2AIX恢复指南
-- BY SJ
----------------------------------------
-----------------***--------------------
昨日刚刚完成了对AIX机上DB2数据库的恢复工作,当然这个是在同事的帮助下完成的,但是本人受益匪浅。
废话不多说,先了解下过程。。
备份文件有4G,使用的是在线的压缩全备份。所需的恢复的空间大概需要40G左右。。。忒大了!
没办法,清理出了40G左右的空间。。哎。。。悲剧
上传备份文件到aix机上。
1.因为此备份文件的所有表都在actuser这个模式下,所以创建用户actuser。
建立用户和实例(使用root用户,aix命令)
mkgroup actgroup
mklv -y actuserlv -t jfs2 rootvg 2G
(make a logical volume, -y 指定使用逻辑卷名代替系统生成的名称 -t 设置逻辑卷的类型 在卷组rootvg中建立actuserlv 大小2G,)
mkdir /home/actuser (建立文件夹 /home/actuser)
2.在前面创建的逻辑卷actuserlv上创建文件系统作为actuser的主目录
添加新文件系统
crfs -v jfs2 -d /dev/actuserlv -m /home/actuser
(添加一个文件系统。-v 指定虚拟文件系统的类型 -d 在一个已存在的逻辑卷上创建一个文件系统 -m 指定安装点)
mount /home/actuser
mkuser pgrp=actgroup groups=actgroup home=/home/actuser actuser
passwd actuser (修改密码)
chown -R actuser:actgroup /home/actuser (把/home/actuser及下面所有文件的属主修改为actuser)
3.使用db2实例用户登录,通过db2level获得db2的安装路径,然后创建db2实例
$ db2level
DB21085I Instance "db2inst1" uses "64" bits and DB2 code release "SQL08020"
with level identifier "03010106".
Informational tokens are "DB2 v8.1.1.64", "s040812", "U498350", and FixPak "7".
Product is installed at "/usr/opt/db2_08_01".
然后使用root执行
/usr/opt/db2_08_01/instance/db2icrt -p 51000 -s ese -w 64 -u db2fenc1 actuser
(-p 端口 51000 -s 指定所创建的实例的类型:ese 对于企业服务器版
wse 对于工作组服务器版
client 表示客户机
standalone 表示带有本地客户机的数据库服务器
-u 用于指定 DB2 服务的帐户名和密码。创建 ese实例时需要此选项。
如果正在使用服务器认证,受防护用户为 db2fenc1,并且拥有实例的用户为 actuser )

4.建立表空间容器(root执行)
首先查看VG卷组的信息 lsvg datavg;
$ lsvg datavg
VOLUME GROUP: datavg VG IDENTIFIER: 00071df90000d600000
001211ef16cc1
VG STATE: active PP SIZE: 256 megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 546 (139776 megabytes)
MAX LVs: 256 FREE PPs: 7 (1792 megabytes)
LVs: 8 USED PPs: 539 (137984 megabytes)
OPEN LVs: 4 QUORUM: 2 (Enabled)
TOTAL PVs: 1 VG DESCRIPTORS: 2
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 1 AUTO ON: yes
MAX PPs per VG: 32512
MAX PPs per PV: 1016 MAX PVs: 32
LTG size (Dynamic): 256 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY: relocatable
这里可以看到PP的值为256M
执行:mklv -y LVDBJSZPRD23 -t raw -L rLVDBJSZPRD23 datavg 30G(30G)
mklv -y LVDBJSZPRD24 -t raw -L rLVDBJSZPRD24 datavg 1G(0.5G)
mklv -y LVDBJSZPRD25 -t raw -L rLVDBJSZPRD25 datavg 5G(1G)
或:mklv -y LVDBJSZPRD23 -t raw -L rLVDBJSZPRD23 datavg 120 也可以
然后使用chown改变文件的属主
chown actuser:actgroup /dev/rLVDBJSZPRD23
chown actuser:actgroup /dev/rLVDBJSZPRD24
chown actuser:actgroup /dev/rLVDBJSZPRD25
5.执行恢复操作
首先,修改上传的备份文件的权限,使actuser用户能够访问
chown actuser:actgroup FUNDACCT.0.db2iact.NODE0000.CATN0000.20100701000002.001
然后,使用命令得到备份文件的全路径
我这里是:
# pwd
/ud0
切换用户 su - actuser ,在/home/actuser创建db目录用于数据库恢复,archivelog文件夹用来保存恢复出来的事务日志
使用命令执行。。。
db2 "restore db fundacct from /ud0 to /home/actuser/db into fundacct logtarget '/home/actuser/archivelog' redirect without prompting"
发现,错误
$ db2 "restore db fundacct from /ud0 to /home/actuser/db into fundacct logtarget
'/home/actuser/archivelog' redirect without prompting"
ksh: db2: not found.(这个错误是su actuser导致,应该是su - actuser)
原来是新建的实例,但是没有启动db2 。所以先启动:db2start 先启动DB2
然后执行上面的命令发现:
SQL1277N Restore has detected that one or more table space containers are
inaccessible, or has set their state to 'storage must be defined'.
DB20000I The RESTORE DATABASE command completed successfully.
OK,第一步完成。
为所有表空间都成功设定容器,这里表空间1的页是4K,3的页是8K,4的页是32K。然后根据容器的大小算出一共多少个页。
然后执行
db2 "set tablespace containers for 0 using (device '/dev/rLVDBJSZPRD25' 1310720)"
db2 "set tablespace containers for 1 using (path 'TEMPSPACE1')"
db2 "set tablespace containers for 2 using (path 'SYSTOOLSPACE')"
db2 "set tablespace containers for 3 using (device '/dev/rLVDBJSZPRD23' 3932160)"
db2 "set tablespace containers for 4 using (device '/dev/rLVDBJSZPRD24' 32768)"
db2 "set tablespace containers for 5 using (path 'ACTSYSTMP32K')"
db2 "set tablespace containers for 6 using (path 'ACTUSRTMP8K')"
当这些全部成功之后,开始真正的恢复工作!这个时间相对长点。。
使用命令:db2 restore db fundacct continue
DB20000I The RESTORE DATABASE command completed successfully.
给出上面的信息就是表示数据库的恢复过程完成了,另外由于数据库是在线备份的,恢复后处于备份暂挂状态,需要前滚
使用命令前滚:db2 "rollforward db fundacct to end of logs and complete overflow log path ('/home/actuser/archivelog')"
把数据库fundacct沿着/home/actuser/archivelog下面的日志前滚到日志末尾
Rollforward Status

Input database alias = fundacct
Number of nodes have returned status = 1

Node number = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = S0012793.LOG - S0012793.LOG
Last committed transaction = 2010-06-30-16.20.45.000000

DB20000I The ROLLFORWARD command completed successfully.
OK。一切搞定!呵呵
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值