在使用 ACS 的运行 SQL 脚本查询 PF(比如 CUSTPF)时,为什么即使在我查询了一个新的 PF(比如 EMPPF)之后,共享读锁仍处于 HELD 状态?
当我尝试使用命令 DLCOBJ 时
DLCOBJ OBJ((TESTLIB/CUSTPF *FILE *SHRRD))
使用命令检查锁定状态没有变化
WRKOBJLCK OBJ(TESTLIB/CUSTPF) OBJTYPE(*FILE)
听起来像一个伪闭合光标...
伪闭合游标是性能优化的关键部分 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
实质上断开并重新连接到本地数据库。