达梦数据库 表被锁的处理办法
1、查看锁语句
SELECT * FROM V$LOCK WHERE BLOCKED = '1';
字段说明:
【ADDR 】列 表示锁的内存地址;
【TRX_ID 】列 表示锁所属的事务 ID;
【LTYPE 】列 表示锁的类型,可能是 OBJECT(对象锁)或者 TID(TID 锁);
【LMODE】列 表示锁的模式,可能的取值有 S(共享锁)、X(排他锁)、IS(意向共享锁)、IX(意向排他锁);
【BLOCKED 】列 表示锁是否处于上锁等待状态,0 表示已上锁成功,1 表示处于上锁等待状态;
【TABLE_ID 】列
对于对象锁,表示 表对象或字典对象的 ID;
对于 TID 锁,表示封锁记录对应的表 ID;
【ROW_IDX】列 表示TID 锁封锁记录的行信息;
【TID 】列为 TID 锁对象事务 ID
2、查看锁的会话内容
select * from v$sessions where trx_id in (select trx_id from V$LOCK WHERE BLOCKED = '1');
主要字段说明:
【SESS_ID】:会话ID
【SESS_SEQ】:会话序列号,用来唯一标识会话
【SQL_TEXT】:取 sql 的头 1000 个字符
【STATE】:会话状态。共 6 种状态:CREATE 创建、STARTUP 启动、IDLE 空闲、ACTIVE 活动、WAIT 等待、UNKNOWN 未知
【TRX_ID】:事务 id
【CREATE_TIME】:会话创建时间
【ISO_LEVEL】:隔离级。0:读未提交;1:读提交;2:可重复读;3:串行化
3、根据【2】中的会话id【SESS_ID】释放锁
-- 停止一个活动的会话 sp_close_session(SESSION_ID)