背景:
基于块级别的灾备存储恢复环境中,数据库起来之后查询数据提示表空间不可访问。

分析:
该问题可能的原因有很多,可能有:
1.相关文件属主、权限设置不当
2.灾备系统恢复的时间点选择不当
3.非正常的终止对表空间的访问

在本次案例中,应该是由于灾备系统恢复的时间点碰巧在不合适的时间点上,解决方法就是选择该时间点附近的快照尝试恢复。

报错:
db2 =>  select count(*) from test
1          
-----------
SQL0290N  Table space access is not allowed.  SQLSTATE=55039


查看表空间状态:
Tablespace ID                        = 3
 Name                                  = music
 Type                                  = Database managed space
 Contents                            = All permanent data. Regular table space.
 State                                 =  0x4080                           ----状态异常
 Detailed explanation:
 Roll forward pending
 Offline


查看容器信息:

$ 
 db2 list tablespace containers for 3 


 Tablespace Containers for Tablespace 3 

 Container ID                         = 0 

 Name                                  = /dev/music 

 Type                                   = Disk




查看容器文件的属主和读写权限:

$  
ls -lt /dev/music 

crw-rw----    1  
root     system 
       48, 14 Nov 20 16:09 /dev/music              
----属主有问题



修改属主和权限:

root@eric/#  
chown db2inst1.db2iadm1 /dev/music 

root@eric/#  
chmod 777 /dev/music 

root@eric/# 
 su - db2inst1


重启数据库实例:

$  
db2stop force 

12/29/2014 14:30:38     0   0   SQL1064N  DB2STOP processing was successful. 

SQL1064N  DB2STOP processing was successful. 



$  
db2start 

12/29/2014 14:30:43     0   0   SQL1063N  DB2START processing was successful. 

SQL1063N  DB2START processing was successful.


连接数据库:

$  
db2 connect to music 

 Database Connection Information 

 Database server           = DB2/AIX64 9.5.6 

 SQL authorization ID   = DB2INST1 

 Local database alias     = MUSIC

该问题一般来说可以尝试回滚数据库:
db2  rollforward db music to end of logs


在这次项目中,单纯的回滚无法解决无法访问的问题,最终方案为:
关闭数据库实例---卸载文件系统---varyoffvg---灾备系统追一下日志或者找一个其他的时间点尝试恢复---varyonvg---挂载文件系统---调整相关文件的权限和属主---启动数据库---连接数据库

执行查询语句:

db2 => 
 select count(*) from test 

1           

----------- 

 9821 
  1 record(s) selected.