用户informix持有表锁

时间:2017-08-18 12:22:40

标签: sql informix aix

我在AIX上运行Informix v12.10。 当用户informix登录时,我遇到了问题。我将在SQL中运行一个简单的查询,例如“从海洋中选择颜色;”

这显然会在该表上放置一个打开的光标锁 - 很棒。现在要查找锁是否实际在桌面上,我使用:

onstat -g opn > filename.txt

将输出重定向到文件,以便我们可以筛选它。然后

cat filename.txt | grep -p hexnumber

其中hexnumber是表的十六进制数。然后我用

给用户
onstat -u | grep session id

现在,锁定由用户informix持有,当我关闭会话并等待任何时间并重做处理时,锁定仍然存在。

请告知没有释放此锁的原因。

2 个答案:

答案 0 :(得分:1)

正在打开的表不是锁。有了明显的“自我推销”警告,我建议您使用“ixtableuse”(https://github.com/domusonline/InformixScripts/blob/master/scripts/ix/ixtableuse)。如果有任何事情阻止ALTER表,它应该给你信息。

如果你觉得它没用,请告诉我原因。如果您发现它有用但发现任何问题,请同样做。

答案 1 :(得分:1)

当后端Informix会话终止时,对该表的引用将消失。

“关闭会话”是什么意思?

如果您只是关闭应用程序并且应用程序没有关闭连接,那么会话可以暂时激活

  1. 服务器会话可能仍在处理sql - 如果是这样,服务器将不会注意到客户端应用程序已经消失,直到sql完成并且服务器收到错误,它无法将结果发送到客户端应用程序。

  2. 如果服务器会话未处理sql,则服务器将等待来自客户端的命令。在TCP / IP之类的事情中,服务器会话中的keepalive踢将被卡在网络读取呼叫中,并且会话不会消失。

  3. 一旦服务器收到客户端消失的错误,服务器仍然必须回滚任何活动的事务(这可能需要花费数小时GB的活动事务!)。

    一旦事务回滚完成,服务器将清除/释放活动游标/准备好的sql语句,之后服务器会话就会消失。

    您可以在会话线程上使用onstat -g sesonstat -g stk来查看发生的情况。