Oracle MySql 資料庫表被鎖的原因分析

2022-08-30 21:33:19 字數 1290 閱讀 5799

記錄一次準備給客戶預演示出現的問題

事故的背景:

當所以功能開發完成後,開發人員在本地進行了測視已經沒問題了。就把所有開發的功能模組合併到dev分支,進行打包,發布到預演示的線上環境。當在給相關人員進行演示的時候,出現了問題。

我們使用https呼叫對方的介面傳送json資料,對方進行校驗馬上返回校驗的響應結果。問題出現在我們每次傳送資料都是成功的,但是對方傳送回來的資料,一直不能正常插入db(使用的是 oracle)

事故的真正原因:

因為有個同事在進行了delete後沒有進行commit提交。導致表一直被鎖住,不能被其他人使用。

但是殺死程序和本地commit幾次後,依舊無法插入資料,提示還是db被這個同事鎖住。

最後查出的真正原因是,這個同事首先使用了無線網路進行了db的操作,當時並沒有commit提交操作。而後又插上網線繼續工作,問題就出現在這裡。

首先,當我們使用無線網路操作db時,oracle會預設這是一次會話(session),當開發人員對db進行操作後(沒有commit),又切換到了有線網路狀態下,而這 2 種狀態下的本機ip是不一樣的(有興趣的朋友可以試試使用無線和有線連線狀態下,同一臺電腦的ip位址是否一樣)。

oracle會認為第一次session沒有關閉,會將表鎖住,等待這次session會話的提交直到結束。

所以當同事再連線上網線,使用有線網路進行commit時候會提示操作失敗。因為oracle資料庫認為這又是一次新的session會話。而第一次的session會話並沒有結束,就會導致出現了db一直被鎖的情況。

事故的解決辦法:

首先使用語句查詢(只有 admin 使用者才可以)出被鎖住的表和鎖表的開發人員的工號。

然後殺死這個程序或者進行db重啟即可。

oracle mysql資料庫分頁

mysql 分頁 groupunion.setpagestart pagestart groupunion.setpageend pageend selectunionlist groupunion selectunionlist resultmap baseresultmap parametert...

JDBC連線Oracle MySQL資料庫

在連線資料庫時,並不是所有的情況都適合使用hibernate等框架,比如單獨寫乙個報表服務,就需要使用簡單高效的jdbc來連線 1 資料庫連線jdbc原理 2 oracle class.forname class.forname oracle.jdbc.oracledriver string url...

ORACLE MYSQL資料庫的常用SQL命令

以下均是在建立乙個成功的連線後的操作。mysql資料庫在乙個連線下是通過不同的資料庫名稱來進行區分的,即乙個連線下可以有很多個庫 oracle資料庫連線時則是通過使用者名稱進行區分的,乙個使用者名稱下面只有乙個資料庫。1.返回某個資料庫 模式 中所有表的基本資訊 oracle資料庫 將yoursch...