GBase 8s常见问题 -- 查找锁会话并解锁
.png)
问题现象
执行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,此模式不管数据是否已经提交都会直接读取,不需要进行解锁就可以查出数据。
评论


热门帖子
- 12023-05-09浏览数:16814
- 22019-04-26浏览数:10235
- 32020-05-11浏览数:10143
- 42023-09-25浏览数:9543
- 52023-07-04浏览数:9446