【前言】
遇到 oracle 異常 和 解決實踐 系列文章 整理分享
雜症一、oracle死鎖
一、症狀:
執行sql或程式時,程式沒有響應或sql執行一直處於執行狀態,沒有成功,也沒有報錯。
二、病理:
當對資料庫某個表的某一記錄做更新或刪除等操作,執行完畢後該條語句不提交事務,假如其他人同時也對該資料庫執行一條對於這一記錄做更新操作的語句。則在執行的時候就會處於等待狀態,便陷入死鎖,一直沒有執行成功,也沒有報錯。
三、**定位:
1)檢查資料庫確定 是否 真實存在死鎖,若有 哪台機器哪個程式。
username:死鎖語句所用的資料庫使用者;
lockwait :死鎖的狀態,如果有內容表示被死鎖。
status :狀態,active表示被死鎖
machine :死鎖語句所在的機器。
program :產生死鎖的語句主要來自哪個應用程式。
2)確定死鎖後,還可以檢查是哪個語句產生死鎖等待。
四、**:
方式一:查詢未提交事務的sql,大概率是其引起。
可以檢查到是誰在什麼時候執行哪條sql 沒有提交事務,找到對應的人,讓其提交事務,提交完成便問題解決。
方式二:若找不到對應的人,則可以通過kill掉死鎖的session程序
其中程序 sid=10 的sql為 未提交事務的sql;
程序 sid=133 的sql為 死鎖中的sql
方式三:獲取oracle程序,直接kill掉oracle程序然後重啟
不建議(或 直接重啟資料庫)
# ps -ef|grep ora_dbw0_$oracle_sid
# kill -9 sid
重啟資料庫
# su oracle
# sqlplus /nolog
sql>conn /as sysdba
sql>shutdown immediate;
sql> startup;
oracle資料庫簡易故障排查之死鎖處理
有時候我們的儲存過程執行很久,從日誌又沒辦法確定這個儲存過程是否正常的情況下,如何確定是否存在問題呢。後面想了下日常執行一些儲存過程或者資料庫執行緩慢的時候除了收集awr報告和看日誌外,簡易的處理方法,總結如下 1 查詢資料庫中有哪些鎖 select t2.username,t2.sid,t2.se...
疑難雜症小記 浮點運算的精度問題
先上一段c 有興趣的朋友可以人腦執行一遍 int num 160 float test 1.3f float result num test int result 1 int result int result 2 int num test int result 3 int float num te...
Oracle死鎖問題分析解決
死鎖發生的情況一般是資源存在環形依賴。oracle上的死鎖一般出現於 行級鎖 的環形依賴情況下 有記錄a b,事務t1 t2,現在t1 t2併發執行update 或delete a b 事務t1操作的順序為a b,正常情況下會先後鎖住a和b 事務t2操作的順序為b a,正常情況下會先後鎖住b和a t...