Oracle ORA-00060: Deadlock Detected

ORA-00060: Deadlock Detected

標籤: 
ORA-00060: Deadlock Detected
 
關於資料庫鎖死的檢查方法
 
一、 資料庫鎖死的現象
程式在執行的過程中,點擊確定或保存按鈕,程式沒有回應,也沒有出現報錯。
二、鎖死的原理
當對於資料庫某個表的某一列做更新或刪除等操作,執行完畢後該條語句不提
交,另一條對於這一列資料做更新操作的語句在執行的時候就會處於等待狀態,
此時的現象是這條語句一直在執行,但一直沒有執行成功,也沒有報錯。
三、鎖死的定位方法
通過檢查資料庫表,能夠檢查出是哪一條語句被鎖死,產生鎖死的機器是哪一台。
 
 

 
當從alter log發現ORA-00060,代表Deadlock已經解除Detected.
Alter log:發生Deadlock,查看此檔案
Wed Nov  6 10:10:04 2013
ORA-00060: Deadlock detected. More info in file /orasys/product/admin/c5prpt/udump/c5prpt_ora_32569.trc.
Wed Nov  6 10:12:10 2013
 
 
$ more /orasys/product/admin/c5prpt/udump/c5prpt_ora_32569.trc
DEADLOCK DETECTED ( ORA-00060 )
[Transaction Deadlock]
The following deadlock is not an ORACLE error. It is a
deadlock due to user error in the design of an application
or from issuing incorrect ad-hoc SQL. The following
information may aid in determining the deadlock:
Deadlock graph:àsession707 wait 868, session 868 wait 707形成deadlock
                       ———Blocker(s)——–  ———Waiter(s)———
Resource Name          process session holds waits  process session holds waits
TX-000a0018-001d63aa        23     707     X             19     868           X
TX-000b0029-0023f388        19     868     X             23     707           X
session 707: DID 0001-0017-0AA762A9     session 868: DID 0001-0013-167D753A
session 868: DID 0001-0013-167D753A     session 707: DID 0001-0017-0AA762A9
Rows waited on:
Session 868: obj – rowid = 0000CF8E – AAAM+OABDAAAALVAAB
  (dictionary objn – 53134, file – 67, block – 725, slot – 1)
Session 707: obj – rowid = 0000CFCC – AAAM/MABDAAAASnAAF
  (dictionary objn – 53196, file – 67, block – 1191, slot – 5)
Information on the OTHER waiting sessions:
Session 868: àc5dw1這一台主機,ap為w3wp.exe(IIS)
  pid=19 serial=50969 audsid=160057031 user: 60/STDMAN
  O/S info: user: NETWORK?SERVICE, term: C5DW1, ospid: 3768:5276, machine: C5FAB\C5DW1
            program: w3wp.exe
  application name: w3wp.exe, hash value=2799981571
  Current SQL Statement:
  DELETE FROM QRTZ_FIRED_TRIGGERSàsession 868執行的SQL
End of information on OTHER waiting sessions.
Current SQL statement for this session:
UPDATE QRTZ_TRIGGERS SET TRIGGER_STATE = :state WHERE JOB_NAME = :jobName AND JOB_GROUP = :jobGroup AND TRIGGER_STATE = :oldStateàsession 707執行的SQL
 
確認是否有Deadlock:
1)用dba用戶執行以下語句
select username,lockwait,status,machine,program from v$session where sid in (select session_id from v$locked_object);
 
如果有輸出的結果,則說明有鎖死,且能看到鎖死的機器是哪一台。欄位說明:
Username:鎖死語句所用的資料庫用戶;
Lockwait:鎖死的狀態,如果有內容表示被鎖死。
Status: 狀態,active表示被鎖死
Machine: 鎖死語句所在的機器。
Program: 產生鎖死的語句主要來自哪個應用程式。
2)用dba用戶執行以下語句,可以查看到被鎖死的語句。
select sql_text from v$sql where hash_value in (select sql_hash_value from v$session where sid in (select session_id from v$locked_object));
 
鎖死的解決方法
 一般情況下,只要將產生鎖死的語句提交就可以了,但是在實際的執行過程中。用戶可能不知道產生鎖死的語句是哪一句。可以將程式關閉並重新啟動就可以了。
 
1)查找鎖死的進程:
sqlplus "/as sysdba"
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS 
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;
  2)kill掉這個鎖死的進程:
  alter system kill session ‘sid,serial#’; (其中sid=l.session_id)
  3)如果還不能解決:
        找尋pid,從os的下手kill掉此process(#kill -9 pid)
  其中pid是這個進程的進程號,kill掉這個Oracle進程。
 
##########查詢PID/SID
Oracle sid and Linux pid
Sometimes we found Oracle process that has been running too long using top command on Linux. We know it has PID. But how to know the SID of the process?
Here is the script:
Select substr(a.spid,1,9) pid, substr(b.sid,1,5) sid, substr(b.serial#,1,5) ser#, substr(b.machine,1,6) box, substr(b.username,1,10) username, substr(b.osuser,1,8) os_user, substr(b.program,1,30) program from
v$session b, v$process a where
b.paddr = a.addr and type='USER' order by spid;
 
參考資料:
 
 
 

Read more

How to migrate Raspberry Pi 5 OS from micro SD to NVME m.2 SSD

首先我買了Raspberry Pi CM5後來買了Raspberry Pi CM5 I/O board來當個人電腦使用,系統是安裝在256GB SD卡上運行的很好。用久了在開啟較肥的程式像Web Browser或LiberOffice會有慢半拍的反應,而有了升級NVME m.2 SSD念頭。 因為Raspberry Pi 5支援的最快PCIe gen3 x 4就不去考慮快的Gen4 or Gen5 m.2 SSD。找了ADATA出的 LEGEND 710入門級的產品,會利用HMB(Host Memory Buffer)來加速I/O速度,因為是Raspberry Pi OS kernel會認不得而無法正常使用 事先在SD卡的/boot/firmware/cmdline.txt 加入 kernel command line參數如下,然後重開機m.

By Phillips Hsieh

How to document Home Lab and Network

運維機房和跨域的網路,會遇到各式需求與問題,用對工具才能分析問題,個人覺得最重要的是使用能處理問題的工具。 推薦目前想學和正在使用的平台與軟體,協助將公司/家用機房文件化 佈告欄任務管理 Focalboard 白板可管理任務指派 網路架構文件編寫 netbox 精細管理網路設備與連接線路 IP 資源管理 phpipam 專注網路IP分配 邏輯塊文件編寫 draw.io 視覺化概念圖 機房設備管理 ITDB 管理設備生命週期與使用者

By Phillips Hsieh

如何在Raspberry Pi4上安裝Proxmox for ARM64

第一步 準備好Raspberry Pi 4 / CM4 4GB RAM,這裡要留意CM4如果是買有內建eMMC storage會限制不能使用SD卡開機而限制本地空間容量,如果沒有NAS外接空間或使用USB開機的話,建議買CM4 Lite插上大容量SD卡 第二步 去Armbian官網下載最小化Debian bookworm image https://www.armbian.com/rpi4b/ Armbian 25.2.2 Bookworm Minimal / IOT 然後寫入SD/USB開機碟,寫入方法參考官方文件 https://github.com/raspberrypi/usbboot/blob/master/Readme.md Note: 官方提供的預先設定系統方法,可以在Armbian初次啟動自動化完成系統設定。連結在此 https://docs.armbian.com/User-Guide_Autoconfig/

By Phillips Hsieh

世界越快心越慢

在晚飯後的休息時間,我特別享受在客廳瀏灠youtube上各樣各式創作者的影音作品。很大不同於傳統媒體,節目多是針對大多數族群喜好挑選的,在youtube上我會依心情看無腦的動畫、一些旅拍記錄、新聞時事談論。 尤其在看了大量的Youtube的分享後,我真的感受到會限制我的是我的無知,特別是那些我想都沒想過的實際應用,在學習後大大幫助到我的生活和工作層面。 休息在家時,我喜歡想一些沒做過的菜,動手去設計生活和工作上的解決方案,自己是真的很難閒著沒事做。 如創作文章,陪養新的習慣都能感覺到成長的喜悅,是不同於吃喝玩樂的快樂的。 創作不去限制固定的形式,文字是創作、影像聲音也是創作,記錄生活也是創作,我想留下的就是創造—》實現—》回憶,這樣子的循環過程,在留下的足跡面看到自己一路上的成長、失敗、絕望、重新再來。 雖然大部份的時候去做這些創作也不明白有什麼特別的意義,但不去做也不會留下什麼,所以呀不如反事都去試試看,也許能有不一樣的水花也許有意想不到的結果,投資自己永遠不會是失敗的決定,不是嗎?先問問自己再開始計畫下一步,未來沒人說得準。 像最近看youtube仍大一群人在為DOS開

By Phillips Hsieh