日期:2014-05-16  浏览次数:20618 次

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 tabl