今天一个同事报告一个问题,表都不能使用了,检查了一下,发现
问题 db2 => select * from test
ACTNO ACTKWD ACTDESC
------ ------ --------------------
SQL0290N Table space access is not allowed. SQLSTATE=55039
其他表也不能使用
在db2cc里查看表空间状态为: 停顿的独占
解决方法:
到命令行状态,首先connect 到需要处理的数据库
◆1、db2 => list tablespaces show detail 显示表空间状态
Tablespaces for Current Database
Tablespace ID = 0
Name = SYSCATSPACE
Type = System managed space
Contents = Any data
State = 0x0000
Detailed explanation:
Normal
Total pages = 2519
Useable pages = 2519
Used pages = 2519
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
Tablespace ID = 1
Name = TEMPSPACE1
Type = System managed space
Contents = System Temporary data
State = 0x0000
Detailed explanation:
Normal
Total pages = 1
Useable pages = 1
Used pages = 1
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
Tablespace ID = 2
Name = USERSPACE1
Type = System managed space
Contents = Any data
State = 0x0004 这个代码意义就是“停顿的独占”,正常状态为0x0000,
非0就是有问题,都可以用下面方法解决。
Detailed explanation:
Quiesced: EXCLUSIVE
Total pages = 687
Useable pages = 687
Used pages = 687
Free pages = Not applicable
High water mark (pages) = Not applicable
Page size (bytes) = 4096
Extent size (pages) = 32
Prefetch size (pages) = 32
Number of containers = 1
Number of quiescers = 1 注意下面几行
Quiescer 1:
Tablespace ID = 2
Object ID = 50 “object id是造成死锁表的id”
◆2、db2 => select tabname from syscat.tables where tableid=50 通过所住的id号找出是哪个表。
TABNAME
--------------------------------------------
SYSINDEXEXTENSIONPARMS
TEST 就是这个表
2 record(s) selected.
◆3、db2 => quiesce tablespaces for table test reset 执行该命令清除错误的状态
DB20000I The QUIESCE TABLESPACES command completed successfully.
◆4、重新select,问题解决
◆5、比较常见导致改种问题的原因是,非正常的中止正对表进行的操作,导致对表空间的使用没有正常的释放