GBASE南大通用数据库GBase 8s常见问题解析 -- 查找锁会话并解锁

发布时间:2024年01月23日

本文摘自GBASE南大通用社区,by:wty,原文请点击:GBase 8s常见问题 -- 查找锁会话并解锁|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商

问题现象

执行SQL时报错

244: Could not do a physical-order read to fetch next row.

154: ISAM error: Lock Timeout Expired

或者

107: ISAM error: ?record is locked.

或者

106: ISAM error: non-exclusive access.

这些报错都与锁相关,当你的一个SQL偶尔报类似错误,可能只是运气不好,碰巧执行的时候被锁了。

如果多次执行一直报锁,就需要考虑是不是有会话长时间锁住数据没有释放,需要强制结束掉这个会话来解锁。

解决方法

1)通过GBase Data Stdio解锁

打开数据库导航中,数据库连接下面的会话页面,在右侧会话页面中选择锁

找到被锁的表对应的锁会话ID

切换到会话页面找到刚才的会话ID,点右键,选择结束强制结束会话

2)通过SQL和命令行解锁

连接sysmaster系统库,查询syslocks系统表,查询锁信息,推荐使用where条件来筛选结果

[gbasedbt@test ~]$ dbaccess sysmaster -

Database selected.

> select * from syslocks;

dbsname  wty_utf8
tabname  aaa
rowidlk  0
keynum   0
type     IX
owner    160
waiter 

找到备锁表那一行数据对应的owner列里的会话ID

执行命令强制结束会话解锁

onmode -z 160

相关要点

107: ISAM error: ?record is locked.

这个报错一般是没有配置锁等待时间,导致碰到锁立刻就报错结束查询,配置锁等待时间可以大幅度减少锁相关的报错

106: ISAM error: non-exclusive access.

这个报错一般是正在对表执行alter table之类的修改表结构操作,也可能是正在创建索引,贸然强制结束锁会话可能会导致回滚,相关操作失败。建议先确定操作源头再考虑等待执行完毕还是强制解锁。

如果不需要获取特别准确的数据时,可以暂时将隔离级别设置为DIRTY READ,此模式不管数据是否已经提交都会直接读取,不需要进行解锁就可以查出数据。

文章来源:https://blog.csdn.net/weixin_47390342/article/details/135777841
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。