赞
踩
一、出现场景
锁表通常发生在 DML( insert 、update 、delete )语句中,例如:程序 A 对 A 表的 a 数据 进行修改,修改过程中产生错误,没有 commit 也没有 rollback ,这个时候程序 B 对 A 表的 a 数据进行修改,会产生资源正忙的异常,也就是锁表。
锁表表现形式:对其表进行增删改查及涉及到该表其他操作一直在进行跑,就是不出结果,如图
二、 造成锁表原因
当多个事务处理对多个资源同时访问时,若双方已锁定一部分资源但也都需要对方已锁定的资源时,无法在有限的时间内完全获得所需的资源,就会处于无限的等待状态,从而造成其对资源需求的死锁,导致锁表。
具体参考:数据库锁表(包括mysql解锁及oracle解锁表)
三、 查询是否锁表
select oid from pg_class where relname='可能锁表了的表';
select pid from pg_locks where relation='上面查出的oid'; --查询出结果则被锁
四、如果查询到了结果,表示该表被锁 则需要释放锁定
select pg_cancel_backend(上面查到的pid)
五、查看是否解锁成功
解锁步骤参考:pg库解锁表
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。