關於Oracle鎖的一些總結

2021-09-08 09:21:10 字數 1030 閱讀 4884

煙一支一支地點

酒一杯一杯的幹

請你要體諒我

我酒量不好別給我挖坑

不時會遇到,不小心把錶鎖住的情況。再此,相對oracle鎖相關的知識做一些粗淺的總結。

當不小心鎖表時:

1 查詢session被鎖的sql,簡要查詢,得到sid 

select object_name,machine,s.sid,s.serial# from v$locked_object l,dba_objects o ,v$session s 

where l.object_id = o.object_id and l.session_id=s.sid;

2.使用alter system kill session 'num1,num2'; (其中num1,num2分別是上面查詢出的sid,serial#)進行釋放 

alter system kill session 'num1,num2'

3.執行下面的語句獲得程序(執行緒)號,sid為第一步查詢出的sid號: 

select spid, osuser, s.program from v$session s,v$process p where s.paddr=p.addr and s.sid=num1; 

4.通過程序號。通過系統linux或者window的相關命令,來解決鎖

1.dml鎖:使用者保護資料的完整性,delete,update,insert

2.ddl鎖:用於保護資料庫物件的結構,如表,索引等的結構定義

3.內部鎖:保護資料的內部結構

單純按照鎖來分,分為表級鎖(tm),行級鎖(tx)。粗淺理解,就是當做建立索引,對整個表結構產生影響時,會使用到表級鎖。當影響,只是某些行時,用到行級別鎖。比如,插入,修改,刪除某些行。

讀永遠不會阻止寫,除了select * from dual for update.寫永遠不會阻塞讀。當一行被修改後,oracle通過回滾,提供資料的一致性讀。我的理解,當oracle在做寫操作時,資料已經寫入到表中。但還未提交事務時,讀操作,會讀取,資料庫,在提交事務前的資料。這裡的機制,我理解為oracle的回滾

關於分布式鎖的一些總結

為了防止分布式系統中的多個程序之間相互干擾,我們需要一種分布式協調技術來對這些程序進行排程。而這個分布式協調技術的核心就是來實現這個分布式鎖。分布式鎖實現的三個核心要素 加鎖 解鎖 鎖超時 1 加鎖 最簡單的方法是使用setnx命令。key是鎖的唯一標識,按業務來決定命名。比如想要給一種商品的秒殺活...

關於資料庫鎖的一些總結

在總結資料庫鎖之前先闡述一下 資料庫的集中隔離級別以及它們分別能避免哪些問題 1.未提交讀,最低階的隔離級別,不能避免丟失更新以及髒讀。2.提交讀,可以避免丟失更新以及髒讀。3.可重複讀,可以避免不可重複讀。4.可序列化,可以避免幻影讀。mysql預設級別是3,mysql的兩大主要引擎,1是inno...

關於MySQL鎖的一些試驗

1 共享鎖,也叫讀鎖,當前事務可以進行讀寫操作,而其他事務只能進行讀操作,不能寫操作,禁止其他事務對同樣的資料集加排他鎖,但允許加共享鎖。如 select from user where email 5122809388 163.com lock in share mode 2 排他鎖,只允許當前事...