1. DB2中如何使用sql語句進行表鎖
寫sql語句的時候 在後面加上一個 for update 你在去執行 增加 刪除的操作 這樣子表就會容易鎖住啦。
2. db2 導入數據之後,有幾張表被鎖住,提示是表不活動,不能被訪問,請問是什麼原因
請問你是用LOAD還是IMPORT導入數據,如果用LOAD就可能存在這種情況。
LOAD鎖表大概有兩種情況,
一是你的資料庫日誌為歸檔日誌,但是在使用LOAD的時候沒有指定LOAD之後數據不可恢復,導致你的表空間被鎖定,處於Backup pendding 狀態,這種情況資料庫會要求你做資料庫備份或者表空間備份。
二是數據裝載時有主外鍵的表違反了主外鍵約束,表被鎖定,這種情況可以使用語句來解除表的鎖定
SET INTEGRITY FOR <table_schema>.<table_name> IMMEDIATE CHECKED
3. db2資料庫裡面的一張表被鎖定,怎麼解鎖
步驟一:使用命令get snapshot來查詢哪些進程鎖了哪些表。
步驟二:使用春渣命令force來斷開這些進行了死鎖的進程來。
步驟三: 使用命令list application查看是否已經斷開了哪些進行了死鎖的進程。
4. db2資料庫裡面的一張表被鎖定,怎麼解鎖
請教各位:DB2資料庫里如何判斷一個表被鎖
1、執行命令打開鎖的監視開光
UPDATE
MONITOR
SWITCHES
USING
lock
on==>;>;
2、查看資料庫的鎖的情況
get
snapshot
for
locks
on
tberp
3、某一個用戶的鎖的情況
get
snapshot
for
application
applid
C0A8084A.040A.031015144751
4、如果表被鎖可以關閉該應用連接
force
application
ID1
5、看正在運行的程序有沒有處於鎖等待狀態的
list
applications
for
db
tberp
show
detail
5. DB2鎖方面的SQL語句分析
鎖表和mc_mer_trad_incom的更新頻率有關系的
可以在mc_payment_flow,mc_payment_flow表上建索引減少mc_mer_trad_incom的鎖表時間
如果有頻繁的mc_payment_flow,mc_payment_flow表的更新操作可以直接使用X鎖避免NS鎖的升級
可以在select中加入with rs use and keep exclusive locks避免鎖升級
資料庫的參數可調整locktimeout,locklist,maxlocks
6. DB2資料庫發生死鎖了怎麼辦
db2 get snapshot for locks on sample
db2 get db cfg for sample
db2 update db cfg using dlchktime 10000
-查看資料庫管理器級別快照信息
db2 get snapshot for dbm
-查看資料庫級別快照信息
db2 get snapshot for database on dbname
-查看應用級別快照信息
db2 get snapshot for application agentid appl-handler
註:appl-handler可以從list applicaitions的輸出中得到
-查看錶級別快照信息
db2 get snapshot for tables on dbname
註:需要把tables快照開關設為ON才會有作用
-查看鎖快照信息
db2 get snapshot for locks on dbname
或
db2 get snapshot for locks on for application agentid appl-handler
-查看動態sql語句快照信息
db2 get snapshot for dynamic sql on dbname
db2 get monitor switches
db2 update monitor switches using lock on statement on
create event monitor mymonitor for deadlocks,statements write to file 'c:/temp'
set event monitor mymonitor state 1
db2evmon - path 'c:/temp'
--轉自:http://blog.csdn.NET/rodjohnsondoctor/article/details/4323514
---
第1頁:上線前的准備
第2頁:維護時的注意事項
第3頁:發生死鎖後的對策
【IT168 技術文檔】在新的資料庫應用系統上線初期,由於測試不完善或不熟悉DB2的機制,常會出現鎖等待死鎖等現象存在於我們的應用系統中,如何捕獲鎖等待或死鎖信息並解決鎖問題,是保證平穩上線必須面對的問題。目前應用系統最常使用的DB2資料庫版本有多個,有8.1,8.2,9.1還有新推出的9.5,對於不同版本的DB2資料庫提供的解決辦法不盡相同,下面對於上述問題的解決作了一個簡單說明,希望對大家有用。
首先在上線前有幾件跟鎖相關的事情需要開發設計人員一定要做好
1. 相關參數的更改
注冊表變數參數:
DB2_EVALUNCOMMITTED=on 當啟用此變數時,在可能的情況下,它將進行表或索引訪問掃描以延遲或避免行鎖定,直到知道數據記錄滿足謂詞求值為止。
DB2_SKIPDELETED=on 當啟用此變數時,在可能的情況下,它允許使用無條件地跳過已刪除的鍵或跳過已刪除的行。
DB2_SKIPINSERTED=on 當啟用此變數時,在可能的情況下,它允許跳過未落實的已插入行,就好像從未插入這些行一樣。
資料庫參數:
LOCKLIST 鎖定列表的內存量,當此參數設置為 AUTOMATIC 時,就啟用了自調整功能。這允許內存調整器根據工作負載需求變化動態地調整此參數控制的內存區大小。如果不是自動,需要設置相對大一些;DB2默認是行鎖,每個行鎖大約佔64或128個位元組(64位資料庫),計算鎖定列表內存的大小公式是: ( 每個應用程序的平均鎖定數目的估計值 * 每個鎖定所需的位元組數(128或64) * maxappls(或者max_coordagents) /4096 ) * 120%,這里只是建議公式,實際情況還要視操作系統實際的內存量來定。
MAXLOCKS 升級前鎖定列表的最大百分比,默認是22%(windows)或10%(unix),可以根據要求自行改動,計算公式是 2 * 100 / maxappls
DLCHKTIME 死鎖檢測時間間隔,默認是10000毫秒(10秒),可以根據要求自行改動,也可不動。增大此參數以降低檢查死鎖的頻率,因此增加應用程序必須等待消除死鎖的時間。 減小此參數會增大檢查死鎖的頻率,從而減少應用程序必須等待死鎖解決的時間,但是會增加資料庫管理器檢查死鎖所花的時間。
LOCKTIMEOUT 鎖等待時間,默認是 -1,也就是永遠等待,請改成固定的值,在事務處理(OLTP)環境中,可以使用 30 秒的初始啟動值。在一個只查詢的環境中,您可以從一個較高的值開始。
LOGFILSIZ 日誌文件大小,此參數定義每個主日誌文件和輔助日誌文件的大小。如果資料庫要運行大量更新、刪除或插入事務,而這將導致日誌文件很快變滿,則應增大日誌文件,了解您的並發應用程序的日誌記錄需求,來確定一個不會分配過量而浪費空間的日誌文件大小。
LOGPRIMARY 主日誌文件數,了解您的並發應用程序的日誌記錄需求,適當增大日誌文件數。
注意: 在更新參數時,需要注意有些參數在更改後需要重新啟動資料庫DB2實例才可以生效;有些參數需要斷開當前所有的應用程序,重新鏈接才能生效;有些參數可以立即生效,使用者請參考相關文檔,注意參數生效特性。
2. 應用程序設計
-程序盡量短小精悍
-程序盡量晚地訪問關鍵資源
-程序盡可能快地提交工作
-程序盡可能快地關閉游標
-建立合適索引
3. 性能測試
要根據將來實際的並發用戶數和數據量進行測試
上線之後維護時我們要做的幾件事情
1. 做好定期維護
通過使用如下命令進行維護:
-reorg表和索引定期重組
-runstats表和索引的統計信息定期更新
-rebind 程序包定期重新編譯
7. DB2 死鎖怎麼測試 具體的測試方法是什麼
你要模擬一個 DB2 的死鎖?
那麼首先, 先創建一個測試表
CREATE TABLE test_main (
id INT NOT NULL,
value VARCHAR(10),
PRIMARY KEY(id)
);
和測試數據...
開2個 DB2 的命令行窗口
會話1:
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
5 Five-5
3 THREE-5
4 條記錄已選擇。
db2 => UPDATE test_main SET value='Two-5' WHERE id=2@
DB20000I SQL 命令成功完成。
會話2:
db2 => UPDATE test_main SET value='THREE' WHERE id=3@
DB20000I SQL 命令成功完成。
會話1:
db2 => UPDATE test_main SET value='THREE-55' WHERE id=3@
由於 id=3 的行,已經被會話2修改,並鎖定,因此會話1當前進入等待狀態。
會話2:
db2 => UPDATE test_main SET value='Two-2' WHERE id=2@
由於 id=2 的行,已經被會話1修改,並鎖定,因此會話2當前進入等待狀態。
等待一段時間後
DB21034E 該命令被當作 SQL 語句來處理,因為它是無效的「命令行處理器」命令。在
SQL 處理期間,它返回:
SQL0911N 因為死鎖或超時,所以當前事務已回滾。原因碼為 "2"。 SQLSTATE=40001
db2 =>
會話1
DB20000I SQL 命令成功完成。
db2 =>
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 Two-5
5 Five-5
3 THREE-55
4 條記錄已選擇。
會話2:
db2 => select * from test_main@
ID VALUE
----------- ----------
1 ONE
2 TWO
5 Five-5
3 THREE-5
4 條記錄已選擇。
顯示會話二的更新已丟失。
8. 如何解鎖DB2中被鎖定的表
1 表處於「檢查暫掛」狀態。未強製表的完整性並且表的內容可能是無效的
。如果從屬表處於檢查暫掛狀態,則對於未處於檢查暫掛的父表或基礎表的
操作也可能接收到此錯誤。
2 表處於「無數據移動」狀態。當處於此狀態時,禁止導致數據移動的操作
。數據移動操作包括 REDISTRIBUTE、
分區鍵的更新、多維群集鍵的更新和 REORG TABLE。
3 表處於「裝入暫掛」狀態。對此表的先前的 LOAD
嘗試失敗。在重新啟動或終止 LOAD 操作之前不允許對表進行存取。
4 表處於「只讀」狀態。此狀態可以在聯機裝入(LOAD)處理(帶有 READ
ACCESS 選項的 LOAD
INSERT)期間發生,或在聯機裝入(LOAD)操作後發生,除了在使用 SET
INTEGRITY 語句在表的新追加的部分驗證所有約束之前。不允許對此表的更
新活動。
5 表處於「正在裝入」狀態。LOAD 實用程序當前對此表進行操作,直到
LOAD 完成才允許存取。
6 不能在 ESE 中刷新引用昵稱的具體查詢表。
用戶響應:
1 對表 "<表名>" 執行帶有 IMMEDIATE CHECKED 選項的 SET INTEGRITY
語句,以消除表的「檢查暫掛」狀態。對於用戶維護的具體查詢表,執行帶
有 IMMEDIATE UNCHECKED 選項的語句,而不是帶 IMMEDIATE CHECKED
選項。
2 對表 "<表名>" 的從屬立即具體查詢表和分級表執行 REFRESH TABLE
語句。可以通過先前 LOAD INSERT 操作根據 "<表名>"
的追加數據以增量方式維護這些從屬立即具體化查詢表和分級表的內容。
3 通過分別發出帶有 RESTART 或 TERMINATER 選項的 LOAD
來重新啟動或終止先前失敗的對此表的 LOAD 操作。
4 發出 LOAD QUERY 命令以檢查該表是否正在裝入。如果是,則一直等到
LOAD 實用程序完成,或如有必要,重新啟動或終止先前失敗的「裝入」操作
。如果「裝入」當前未在進行,則發出帶有 IMMEDIATE CHECKED 選項的
SET INTEGRITY 命令以驗證表的新裝入部分中的約束。
5 一直等到當前 LOAD 操作完成。可用使用 LOAD QUERY
命令來監視裝入的進度。
6 使用 MAINTAIN BY USER
選項定義具體查詢表。然後,使用帶有子查詢的 INSERT
語句填充具體查詢表。
9. 如何查詢db2資料庫表是否被鎖
1、首先點擊桌面上的SQL server資料庫。