为什么作业 QZDASOINIT 用户 QUSER *SHRRD 锁定在 PF 上,即使在查询新的 PF 之后也是如此?

问题描述 投票:0回答:1

在使用 ACS 的运行 SQL 脚本查询 PF(比如 CUSTPF)时,为什么即使在我查询了一个新的 PF(比如 EMPPF)之后,共享读锁仍处于 HELD 状态?

当我尝试使用命令 DLCOBJ 时

DLCOBJ OBJ((TESTLIB/CUSTPF *FILE *SHRRD)) 

使用命令检查锁定状态没有变化

WRKOBJLCK OBJ(TESTLIB/CUSTPF) OBJTYPE(*FILE)
jdbc ibm-midrange db2-400
1个回答
0
投票

听起来像一个伪闭合光标...

伪闭合游标是性能优化的关键部分 IBM DB2 for i SQL 的特性。当应用程序关闭游标时,Db2 因为我通常关闭光标并关闭文件,删除 ODP (开放数据路径)。如果应用程序多次运行相同的语句 次,每次新的执行都需要完全打开目标文件。这 伪关闭游标背后的想法是不完全关闭游标和 文件,而是缓存游标以备将来使用。这 光标处于软关闭(或伪关闭)状态。当。。。的时候 游标是伪关闭的,底层文件和 ODP 保持打开状态。 释放所有记录锁;但是,共享锁仍然出现在 文件。 Db2 for i 然后可以根据需要重用游标,而无需 完全打开文件的成本。 db2 for i 也可以决定硬 需要时关闭伪关闭游标。

DLCOBJ
命令不起作用而言,您是从其他作业还是从 ACS 会话运行它?如果是另一份工作,那是行不通的。正确的方法是实际使用另一份工作中的
ALCOBJ

ALCOBJ OBJ((TESTLIB/CUSTPF *FILE *EXCL)) CONFLICT(*RQSRLS)

请注意,这当然会让您的 5250 会话对文件进行独占锁定,然后您可以使用

DLCOBJ
释放。

如果您尝试从 ACS 会话中

DLCOBJ
,那也不会奏效。从 ACS 强制关闭的正确方法是:

  • 断开与数据库服务器的连接。
  • 执行语句
    DISCONNECT ALL;
    CONNECT RESET
    实质上断开并重新连接到本地数据库。
© www.soinside.com 2019 - 2024. All rights reserved.