on = Database Rollforward Recovery
Start Time = 10/25/2010 01:45:44.392021
State = Executing
Invocation Type = User
Progress Monitoring:
Phase Number [Current] = 1
Description = Forward
Completed Work = 824384727 bytes
Start Time = 10/25/2010 01:45:44.392051
Phase Number = 2
Description = Backward
Completed Work = 0 bytes
Start Time = Not Started
DB2 重定向恢复常见问题解析
在 DB2 重定向恢复的三个阶段中,错误常常发生在第二阶段,也就是 set tablespace containers 的时候。在这里列举了一些常见的错误,和这些错误的解决方法及预防。供大家参考。
对裸设备类型的容器,大小计算错误
命令及结果:
db2 set tablespace containers for 8 using( DEVICE '/dev/rsample_1G' 262144 )
SQL1422N The size of the container is invalid. SQLSTATE=54039
解决方法以及预防:
容器大小 262144 不正确。结合 lslv 的检查结果和表空间的 pagesize,重新计算容器大小。
lslv rsample_1G
LOGICAL VOLUME: rsample_1G VOLUME GROUP: datavg3
LV IDENTIFIER: 00c790ea00004c000000011fb9a36069.112 PERMISSION: read/write
VG STATE: active/complete
LV STATE: opened/syncd
TYPE: raw
WRITE VERIFY: off
MAX LPs: 512
PP SIZE: 64 megabyte(s)
COPIES: 1
SCHED POLICY: parallel
LPs: 16
PPs: 16
STALE PPs: 0
BB POLICY: relocatable
INTER-POLICY: minimum
RELOCATABLE: yes
INTRA-POLICY: middle
UPPER BOUND: 1024
MOUNT POINT: N/A
LABEL: None
MIRROR WRITE CONSISTENCY: on/ACTIVE
EACH LP COPY ON A SEPARATE PV : yes
Serialize IO : NO
DEVICESUBTYPE : DS_LVZ
计算公式如下:PPs * PP Size / pagesize
此处,pagesize 按照8 K 计算 。
db2 set tablespace containers for 8 using( DEVICE '/dev/rsample_1G' 131072 )
DB20000I The SET TABLESPACE CONTAINERS command completed successfully.
指定的容器,已经被使用了
命令及结果:
db2 set tablespace containers for 64 using( DEVICE '/dev/rsample_4G' 524288 )
SQL0294N The container is already in use. SQLSTATE=42730
解决方法以及预防:
通过 lslv 检查裸设备的状态,注意其中 LV STATE 的值。如果是 opened/syncd,意味着这个容器正在被其他的系统占用。如果是 closed/syncd,就可能是可用的设备。这里说“可能”是因为有些时候,比如
数据库停掉以后,它所使用的所有的裸设备就都是 closed/syncd 状态,但如果这时其他应用使用了这个裸设备,就会让这个
数据库受损。所以在使用前一定要确认,没有其他系统在使用这个裸设备。
DB2 在使用一个裸设备的时候会设置一些标志位,表明哪一个实例的数据库正在使用这个裸设备。但是当 DB2 删除一个表空间或者其中一个容器的时候,有时候这些标志位不会被清空,这时候虽然没有其他的数据库在使用这个设备,依然会出现上面的错误。在确认没有其他系统使用之后,就可以用下面的 DB2 命令手动清空这些标志位。
db2untag -f /dev/rsample_4G
指定的容器类型,与原有容器不一致
命令及结果:
db2 set tablespace containers for 3 using( PATH '/db2inst1/SAMPLE/TBS/SYSTOOL’)
SQL0298N Bad container path. SQLSTATE=428B2
解决方法以及预防:
原有容器是 FILE 类型,如果在重定向恢复的时候指定为 PATH,就会报错。
修改后:
db2 set tablespace containers for 3
using( File '/db2inst1/SAMPLE/TBS/SYSTOOL.DAT' 100 )
DB20000I The SET TABLESPACE CONTAINERS command completed successfully.
指定的容器名发生错误
命令及结果:
db2 set tablespace containers for 106
using( DEVICE '/dev/dev/rsample_500M' 65536 )
SQL0298N Bad container path. SQLSTATE=428B2
解决方法以及预防:
确保容器名及路径的正确性。
db2 set tablespace containers for 106
using( DEVICE '/dev/rsample_500M' 65536)
DB20000I The SET TABLESPACE CONTAINERS command completed successfully.
Restore db continue 的时候发生错误,数据库恢复目录满
db2 restore db sample continue
SQL2544N The directory where the database is being restored has become full.
解决方法以及预防:
检查包含 PATH 的语句,
set tablespace containers for 0 using(
PATH '/db2inst1/SAMPLE'
) ;
可能的原因: