达梦8数据库---------锁超时----------非一般情况解决办法(真实案例)
数据库删除表时报错:锁超时第一阶段(方法一:会话锁):1)使用命令查看被锁会话select a.*,b.NAME,c.SESS_ID from v$lock a left join sysobjects b on b.ID=a.TABLE_ID left join v$sessions c on a.TRX_ID=c.TRX_ID2)查到SESS_ID后使用下面函数KILL掉对应的SESSIONs
·
数据库删除表时报错:锁超时
第一阶段(方法一:会话锁):
1)使用命令查看被锁会话
select a.*,b.NAME,c.SESS_ID from v$lock a left join sysobjects b on b.ID=a.TABLE_ID left join v$sessions c on a.TRX_ID=c.TRX_ID
2)查到SESS_ID后使用下面函数KILL掉对应的SESSION
sp_close_session(sess_id);
第二阶段(方法二:阻塞)
3)执行完上述操作后再查看被锁会话,发现仍然存在,使用命令查看阻塞情况,但内容为空,
with locks as(
select o.name,l.*,s.sess_id,s.sql_text,s.clnt_ip,s.last_send_time from v$lock l,sysobjects o,v$sessions s
where l.table_id=o.id and l.trx_id=s.trx_id ),
lock_tr as ( select trx_id wt_trxid,row_idx blk_trxid from locks where blocked=1),
res as( select sysdate stattime,t1.name,t1.sess_id wt_sessid,s.wt_trxid,
t2.sess_id blk_sessid,s.blk_trxid,t2.clnt_ip,SF_GET_SESSION_SQL(t1.sess_id) fulsql,
datediff(ss,t1.last_send_time,sysdate) ss,t1.sql_text wt_sql from lock_tr s,locks t1,locks t2
where t1.ltype='OBJECT' and t1.table_id<>0 and t2.ltype='OBJECT' and t2.table_id<>0
and s.wt_trxid=t1.trx_id and s.blk_trxid=t2.trx_id)
select distinct wt_sql,clnt_ip,ss,wt_trxid,blk_trxid from res;
第三阶段(方法三:事务锁)
4)使用命令查询会话中等待事务
select * from v$trxwait
发现有一条数据,而WAIT_FOR_ID列为0
5)查询其正在执行的超过2秒以上的sql,查询得出有230条。。。
select * from (
SELECT sess_id,sql_text,datediff(ss,last_recv_time,sysdate) Y_EXETIME,
SF_GET_SESSION_SQL(SESS_ID) fullsql,clnt_ip
FROM V$SESSIONS WHERE STATE='ACTIVE' and user_name<>'SYSDBA')
where Y_EXETIME>=2 order by Y_EXETIME desc;
第四阶段(方法四:重启)
6)经上述排查无果后,因是测试环境,告知其备份并重启数据库再试,但重启数据库报错
Stopping DmServiceDMSERVER [ FAILED ]
kill the process(pid:3836) had timeout!
DmServiceDMSERVER (pid:3836) is running.
7)重启服务器后再启动数据库,报错
Starting DmServiceDMSERVER: [ FAILED ]
ARCH_DEST[/home/dmdba/guidang] will be out of space.
Validate dmarch.ini error, code=-523
dmserver startup failed, code= -523 [Out of space]
nsvr_ini_file_read failed, [code: -523]
第五阶段(此问题实际解决办法)
根据此错误提示找到了问题所在,归档目录空间满了,释放存储空间后再启动,一切正常,表删除操作成功
总结:
遇到锁超时,并且
sp_close_session(sess_id);命令杀不掉session时,可以先查看下是否是归档目录空间满了。若有其他类似问题的解决方法,欢迎在下方留言,或留链接。
更多推荐




所有评论(0)