連結伺服器到 DB2 表鎖
我在連接到 AS400 IBM iSeries 上的 DB2 數據庫的 SQL 連結伺服器時遇到問題。
我從 ODBC 數據源實用程序配置了一個 ODBC 連接。配置 ODBC 後,我創建了 LinkedServer 並開始使用它來使用
SELECT * FROM OPENQUERY([LINKED_SERVER], 'SELECT * FROM [TABLE] FOR READ ONLY')
.一旦執行了查詢,DB2 表就會被鎖定,而當查詢結束時,鎖定不會被釋放。我暫時解決了將 ODBC 連接類型設置為只讀而不是預設的問題。
此外,連結伺服器使用的所有 DB2 表在每次查詢時都被鎖定,即使它們不參與查詢。
有人可以幫我弄清楚如何不鎖定所有表並將連結伺服器設置為讀/寫而不是只讀模式。就像圖片中一樣,我只在 SHPAV20F 上執行了一個查詢,但也為查詢中不涉及的 TTB03ACF 和 TTB0301P 獲取了鎖。
送出模式的 ODBC 設置為 *CHG,啟用查詢數據的 PREFETCH 並禁用 LAZYCLOSE。
如果“表鎖”是指“共享讀鎖”(*SHRRD)……那麼游標很可能已被偽關閉
偽封閉游標是 IBM DB2 for i SQL 性能優化特性的關鍵部分。當應用程序關閉游標時,DB2 for i 通常會關閉游標並關閉文件,從而刪除 ODP(打開數據路徑)。如果應用程序多次執行同一語句,則每次新執行都需要完全打開目標文件。偽關閉游標背後的想法是不完全關閉游標和文件,而是記憶體游標以備將來使用。游標處於軟關閉(或偽關閉)狀態。當游標被偽關閉時,底層文件和 ODP 保持打開狀態。所有記錄鎖都被釋放;但是,共享鎖仍然出現在文件上。DB2 for i 然後可以根據需要重用游標,而無需完全打開文件的成本。
除非您有一個需要獨占訪問權限的程序,例如使用清除物理文件成員 (CLRPFM)的程序,否則它們不會引起問題
鑑於大多數業務的 24/7 特性,現在應該避免這種過程。
如果您必須有一個獨占程序,請修改該程序以在需要時請求釋放鎖……
ALCOBJ OBJ((MYFILE *FILE *EXCL)) CONFLICT(*RQSRLS)