当前位置: 代码迷 >> DB2 >> db2数据库里面的一张表被锁定,怎么解锁呢
  详细解决方案

db2数据库里面的一张表被锁定,怎么解锁呢

热度:9154   发布时间:2013-02-26 00:00:00.0
db2数据库里面的一张表被锁定,如何解锁呢?
我的是银行后台数据库db2 8.2,在往一张表如 lslsfl 插入批量导入大量数据时发生了锁表。现在打不开,请问各位高手如何解锁这张表呢? 命令行还是db2控制中心里面做? 万分紧急,打不开的话就麻烦了。请高手给出详细的解答!

------解决方案--------------------------------------------------------
1 表处于“检查暂挂”状态。未强制表的完整性并且表的内容可能是无效的
。如果从属表处于检查暂挂状态,则对于未处于检查暂挂的父表或基础表的
操作也可能接收到此错误。 
2 表处于“无数据移动”状态。当处于此状态时,禁止导致数据移动的操作
。数据移动操作包括 REDISTRIBUTE、
分区键的更新、多维群集键的更新和 REORG TABLE。 
3 表处于“装入暂挂”状态。对此表的先前的 LOAD
尝试失败。在重新启动或终止 LOAD 操作之前不允许对表进行存取。 
4 表处于“只读”状态。此状态可以在联机装入(LOAD)处理(带有 READ
ACCESS 选项的 LOAD
INSERT)期间发生,或在联机装入(LOAD)操作后发生,除了在使用 SET
INTEGRITY 语句在表的新追加的部分验证所有约束之前。不允许对此表的更
新活动。 
5 表处于“正在装入”状态。LOAD 实用程序当前对此表进行操作,直到
LOAD 完成才允许存取。 
6 不能在 ESE 中刷新引用昵称的具体查询表。 
用户响应: 

1 对表 "<表名>" 执行带有 IMMEDIATE CHECKED 选项的 SET INTEGRITY
语句,以消除表的“检查暂挂”状态。对于用户维护的具体查询表,执行带
有 IMMEDIATE UNCHECKED 选项的语句,而不是带 IMMEDIATE CHECKED
选项。 
2 对表 "<表名>" 的从属立即具体查询表和分级表执行 REFRESH TABLE
语句。可以通过先前 LOAD INSERT 操作根据 "<表名>"
的追加数据以增量方式维护这些从属立即具体化查询表和分级表的内容。 
3 通过分别发出带有 RESTART 或 TERMINATER 选项的 LOAD
来重新启动或终止先前失败的对此表的 LOAD 操作。 
4 发出 LOAD QUERY 命令以检查该表是否正在装入。如果是,则一直等到
LOAD 实用程序完成,或如有必要,重新启动或终止先前失败的“装入”操作
。如果“装入”当前未在进行,则发出带有 IMMEDIATE CHECKED 选项的
SET INTEGRITY 命令以验证表的新装入部分中的约束。 
5 一直等到当前 LOAD 操作完成。可用使用 LOAD QUERY
命令来监视装入的进度。 
6 使用 MAINTAIN BY USER
选项定义具体查询表。然后,使用带有子查询的 INSERT
语句填充具体查询表。 
sqlcode : -668 
sqlstate : 57016 

------解决方案--------------------------------------------------------
“批量导入大量数据”,是LOAD操作?

LOAD数据遇到过“SQL0668N”错误,此错误的说明5楼已贴出
当时是第3种“装入暂挂”情况

后按说明使用了以下命令解除
db2 load from XXX.ixf of ixf terminate into XXXX

但已导入的数据是被撤销掉了,需重新导入
------解决方案--------------------------------------------------------
探讨

导入数据建议使用import命令进行导入,load容易发生表的死锁,如果死锁了 :
db2 “list applications”
db2 "force application(进程号)"
就可以解除死锁了。
  相关解决方案