




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、事務(wù)事務(wù)目標(biāo)目標(biāo)通過本章學(xué)習(xí),您將可以通過本章學(xué)習(xí),您將可以:使用使用 DML 語句語句向表中插入數(shù)據(jù)向表中插入數(shù)據(jù)更新表中數(shù)據(jù)更新表中數(shù)據(jù)從表中刪除數(shù)據(jù)從表中刪除數(shù)據(jù)將表中數(shù)據(jù)和并將表中數(shù)據(jù)和并控制事務(wù)控制事務(wù)事務(wù)概念事務(wù)概念包含一組數(shù)據(jù)庫命令,構(gòu)成單一邏輯工包含一組數(shù)據(jù)庫命令,構(gòu)成單一邏輯工作單元的操作集合作單元的操作集合訪問并可能更新各種數(shù)據(jù)項(xiàng)的一個程序訪問并可能更新各種數(shù)據(jù)項(xiàng)的一個程序執(zhí)行單元,是不可分割的工作邏輯單元執(zhí)行單元,是不可分割的工作邏輯單元執(zhí)行并發(fā)操作的最小控制單位執(zhí)行并發(fā)操作的最小控制單位事務(wù)的特性事務(wù)的特性原子性(原子性(AAtomicity)一致性(一致性(CCons
2、istency)隔離性(隔離性(IIsolation)持久性(持久性(DDurability)原子性、原子性、一致性一致性原子性原子性: :就是事務(wù)應(yīng)作為一個工作單元就是事務(wù)應(yīng)作為一個工作單元, ,事務(wù)處理完成事務(wù)處理完成,所有的工作要么都在數(shù)據(jù)庫中保存下來,要,所有的工作要么都在數(shù)據(jù)庫中保存下來,要么完全回滾,全部不保留么完全回滾,全部不保留一致性一致性: :事務(wù)完成或者撤銷后,都應(yīng)該處于一致的狀態(tài)事務(wù)完成或者撤銷后,都應(yīng)該處于一致的狀態(tài)隔離性、永久性隔離性、永久性隔離性隔離性多個事務(wù)同時進(jìn)行,它們之間應(yīng)該互不干擾多個事務(wù)同時進(jìn)行,它們之間應(yīng)該互不干擾. .應(yīng)該防止一個事務(wù)處理其他事務(wù)也要修
3、改的數(shù)應(yīng)該防止一個事務(wù)處理其他事務(wù)也要修改的數(shù)據(jù)時,不合理的存取和不完整的讀取數(shù)據(jù)據(jù)時,不合理的存取和不完整的讀取數(shù)據(jù)永久性永久性事務(wù)提交以后,所做的工作就被永久的保存下事務(wù)提交以后,所做的工作就被永久的保存下來來事務(wù)并發(fā)處理會產(chǎn)生的問題事務(wù)并發(fā)處理會產(chǎn)生的問題 丟失更新丟失更新當(dāng)兩個或多個事務(wù)選擇同一行,然后基于最初當(dāng)兩個或多個事務(wù)選擇同一行,然后基于最初選定的值更新該行時,會發(fā)生丟失更新問題、選定的值更新該行時,會發(fā)生丟失更新問題、每個事務(wù)都不知道其它事務(wù)的存在。最后的更每個事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)
4、據(jù)丟失。據(jù)丟失。丟失更新:丟失更新:假設(shè)產(chǎn)品的當(dāng)前庫存假設(shè)產(chǎn)品的當(dāng)前庫存60,現(xiàn)有兩個事務(wù):,現(xiàn)有兩個事務(wù):T1購入購入400個,個,T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲的值存儲的值1T1讀在庫數(shù)量讀在庫數(shù)量602T2讀在庫數(shù)量讀在庫數(shù)量603T1在庫數(shù)量在庫數(shù)量=60+4004T2在庫數(shù)量在庫數(shù)量=60-405T1寫在庫數(shù)量寫在庫數(shù)量460(將被丟失)(將被丟失)6T2寫在庫數(shù)量寫在庫數(shù)量20正常執(zhí)行過程:正常執(zhí)行過程:假設(shè)產(chǎn)品的當(dāng)前庫存假設(shè)產(chǎn)品的當(dāng)前庫存60,現(xiàn)有兩個事務(wù):,現(xiàn)有兩個事務(wù):T1購入購入400個,個,T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲的值存儲的值1T1讀在庫
5、數(shù)量讀在庫數(shù)量602T1在庫數(shù)量在庫數(shù)量=60+4003T1寫在庫數(shù)量寫在庫數(shù)量4604T2讀在庫數(shù)量讀在庫數(shù)量4605T2在庫數(shù)量在庫數(shù)量=460-406T2寫在庫數(shù)量寫在庫數(shù)量420臟讀臟讀 當(dāng)?shù)诙€事務(wù)選擇其它事務(wù)正在更新的行時,當(dāng)?shù)诙€事務(wù)選擇其它事務(wù)正在更新的行時,會發(fā)生未確認(rèn)的相關(guān)性問題。會發(fā)生未確認(rèn)的相關(guān)性問題。 第二個事務(wù)正在讀取的數(shù)據(jù)還沒有確認(rèn)并且可第二個事務(wù)正在讀取的數(shù)據(jù)還沒有確認(rèn)并且可能由更新此行的事務(wù)所更改。能由更新此行的事務(wù)所更改。T2使用使用T1未提交數(shù)據(jù):未提交數(shù)據(jù):假設(shè)產(chǎn)品的當(dāng)前庫存假設(shè)產(chǎn)品的當(dāng)前庫存60,現(xiàn)有兩個事務(wù):,現(xiàn)有兩個事務(wù):T1購入購入400個,在沒
6、有提交前撤消了該操作,個,在沒有提交前撤消了該操作,T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲的值存儲的值1T1讀在庫數(shù)量讀在庫數(shù)量602T1在庫數(shù)量在庫數(shù)量=60+4003T1寫在庫數(shù)量寫在庫數(shù)量4604T2讀在庫數(shù)量讀在庫數(shù)量460(讀未提交數(shù)據(jù))(讀未提交數(shù)據(jù))5T2在庫數(shù)量在庫數(shù)量=460-406T1rollback606T2寫在庫數(shù)量寫在庫數(shù)量420正常執(zhí)行過程:正常執(zhí)行過程:假設(shè)產(chǎn)品的當(dāng)前庫存假設(shè)產(chǎn)品的當(dāng)前庫存60,現(xiàn)有兩個事務(wù):,現(xiàn)有兩個事務(wù):T1購入購入400個,在沒有提交前撤消了該操作,個,在沒有提交前撤消了該操作,T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲的值存儲的值1
7、T1讀在庫數(shù)量讀在庫數(shù)量602T1在庫數(shù)量在庫數(shù)量=60+4003T1寫在庫數(shù)量寫在庫數(shù)量4604T1RollBack605T2讀在庫數(shù)量讀在庫數(shù)量606T2在庫數(shù)量在庫數(shù)量=60-407T2寫在庫數(shù)量寫在庫數(shù)量20臟讀臟讀會話會話AUpdate emp set sal=2000 where ename=SCOTT;會話會話BSelect sal from emp where ename=SCOTT;數(shù)據(jù)庫事務(wù)數(shù)據(jù)庫事務(wù)數(shù)據(jù)庫事務(wù)由以下的部分組成數(shù)據(jù)庫事務(wù)由以下的部分組成:一個或多個一個或多個DML 語句語句一個一個 DDL 語句語句一個一個 DCL 語句語句數(shù)據(jù)庫事務(wù)數(shù)據(jù)庫事務(wù)以第一個以第一
8、個 DML 語句的執(zhí)行作為開始語句的執(zhí)行作為開始以下面的其中之一作為結(jié)束以下面的其中之一作為結(jié)束:COMMIT 或或 ROLLBACK 語句語句DDL 或或 DCL 語句(自動提交)語句(自動提交)用戶會話正常結(jié)束用戶會話正常結(jié)束系統(tǒng)異常終了系統(tǒng)異常終了打開事務(wù)的自動提交打開事務(wù)的自動提交show autocommitset autocommit on;Commit事務(wù)提交命令。事務(wù)提交命令。在在OracleOracle中,在內(nèi)存中將為每個客戶機(jī)建立工作區(qū),客中,在內(nèi)存中將為每個客戶機(jī)建立工作區(qū),客戶機(jī)對數(shù)據(jù)庫進(jìn)行操作處理的事務(wù)都在工作區(qū)內(nèi)完成,戶機(jī)對數(shù)據(jù)庫進(jìn)行操作處理的事務(wù)都在工作區(qū)內(nèi)完成,
9、只有在輸入只有在輸入commitcommit命令后,工作區(qū)內(nèi)的修改內(nèi)容才寫入命令后,工作區(qū)內(nèi)的修改內(nèi)容才寫入到數(shù)據(jù)庫上,稱為物理寫入到數(shù)據(jù)庫上,稱為物理寫入. .這樣可以保證在任意的客戶機(jī)沒有物理提交修改以前,這樣可以保證在任意的客戶機(jī)沒有物理提交修改以前,別的客戶機(jī)讀取的后臺數(shù)據(jù)庫中的數(shù)據(jù)是完整的、一致別的客戶機(jī)讀取的后臺數(shù)據(jù)庫中的數(shù)據(jù)是完整的、一致的的. .COMMIT和和ROLLBACK語句的優(yōu)點(diǎn)語句的優(yōu)點(diǎn)使用使用COMMIT 和和 ROLLBACK語句語句,我們可以我們可以: 確保數(shù)據(jù)完整性。確保數(shù)據(jù)完整性。數(shù)據(jù)改變被提交之前預(yù)覽。數(shù)據(jù)改變被提交之前預(yù)覽。將邏輯上相關(guān)的操作分組。將邏輯
10、上相關(guān)的操作分組。當(dāng)執(zhí)行了當(dāng)執(zhí)行了Commit語句之后,會確認(rèn)事務(wù)變化、結(jié)束事語句之后,會確認(rèn)事務(wù)變化、結(jié)束事務(wù)、刪除保存點(diǎn)、釋放鎖。當(dāng)使用務(wù)、刪除保存點(diǎn)、釋放鎖。當(dāng)使用commit語句后,其語句后,其他會話將可以看到事務(wù)變化后的新數(shù)據(jù)他會話將可以看到事務(wù)變化后的新數(shù)據(jù)ORACLEORACLE事務(wù)控制事務(wù)控制- -回退段回退段ORACLE為了適應(yīng)事務(wù)控制設(shè)置了為了適應(yīng)事務(wù)控制設(shè)置了回退段這一數(shù)據(jù)庫對象這一數(shù)據(jù)庫對象.系統(tǒng)利用回退段來確保諸如讀一致性、數(shù)據(jù)庫恢復(fù)等管理系統(tǒng)利用回退段來確保諸如讀一致性、數(shù)據(jù)庫恢復(fù)等管理功能。功能。ORACLE在缺省情況下在缺省情況下,讀數(shù)據(jù)不加鎖讀數(shù)據(jù)不加鎖,通過
11、回退段通過回退段(Rollback Segment)保證用戶不讀臟數(shù)據(jù)和可重復(fù)讀保證用戶不讀臟數(shù)據(jù)和可重復(fù)讀.表空間中的數(shù)據(jù)按段來組織表空間中的數(shù)據(jù)按段來組織,數(shù)據(jù)段、索引段、暫存段和回?cái)?shù)據(jù)段、索引段、暫存段和回退段,回退段是一塊磁盤存儲區(qū)域,退段,回退段是一塊磁盤存儲區(qū)域,回退段可以由用戶創(chuàng)建,但只能由系統(tǒng)進(jìn)程使用。,但只能由系統(tǒng)進(jìn)程使用。ORACLEORACLE事務(wù)控制事務(wù)控制- -回退段回退段事務(wù)的執(zhí)行過程(采用日志和回退段雙重記錄事務(wù)活動):事務(wù)的執(zhí)行過程(采用日志和回退段雙重記錄事務(wù)活動):進(jìn)入回退段進(jìn)入回退段, ,寫入回退信息寫入回退信息從數(shù)據(jù)段讀入緩沖區(qū)從數(shù)據(jù)段讀入緩沖區(qū), ,S
12、QLSQL處理處理記載日志文件記載日志文件提交提交, ,寫更改結(jié)果到磁盤寫更改結(jié)果到磁盤 回退回退, ,寫回退信息到磁盤寫回退信息到磁盤 事務(wù)第一條更新語句事務(wù)第一條更新語句事務(wù)結(jié)束事務(wù)結(jié)束NYUpdate t set col=0 where col=123;commit;數(shù)據(jù)庫首先把該語句的整個操作包括數(shù)據(jù)數(shù)據(jù)庫首先把該語句的整個操作包括數(shù)據(jù)0與與123寫入日志緩沖區(qū)寫入日志緩沖區(qū)然后把然后把123和一些信息寫入回滾段,和一些信息寫入回滾段,最后把最后把0修改到數(shù)據(jù)緩沖區(qū)。修改到數(shù)據(jù)緩沖區(qū)。當(dāng)發(fā)出提交命令時,如果日志緩沖區(qū)內(nèi)容沒有寫入日志當(dāng)發(fā)出提交命令時,如果日志緩沖區(qū)內(nèi)容沒有寫入日志文件則
13、必須寫入日志文件,回滾段把該事務(wù)標(biāo)記為已經(jīng)文件則必須寫入日志文件,回滾段把該事務(wù)標(biāo)記為已經(jīng)提交,數(shù)據(jù)緩沖區(qū)中的這個事務(wù)也標(biāo)記為已提交提交,數(shù)據(jù)緩沖區(qū)中的這個事務(wù)也標(biāo)記為已提交如果回退這個事務(wù),則數(shù)據(jù)庫將回滾段中如果回退這個事務(wù),則數(shù)據(jù)庫將回滾段中123讀出寫回讀出寫回?cái)?shù)據(jù)緩沖區(qū),這個回退變化也被寫入日志文件。數(shù)據(jù)緩沖區(qū),這個回退變化也被寫入日志文件。自動提交事務(wù)自動提交事務(wù)當(dāng)執(zhí)行當(dāng)執(zhí)行DDL語句時會自動提交事務(wù),語句時會自動提交事務(wù),當(dāng)執(zhí)行當(dāng)執(zhí)行DCL語句(語句(grant revoke)當(dāng)退出當(dāng)退出SQL*Plus時時將某一事務(wù)設(shè)為只讀事務(wù)將某一事務(wù)設(shè)為只讀事務(wù)Set transaction
14、 read only只讀事務(wù),不生成回滾信息,在整個事務(wù)中就不能有修只讀事務(wù),不生成回滾信息,在整個事務(wù)中就不能有修改操作改操作注意是針對當(dāng)前事務(wù),不是另一個事務(wù)注意是針對當(dāng)前事務(wù),不是另一個事務(wù)Set transaction read only | read write通過通過rollback取消設(shè)定。取消設(shè)定。只讀事務(wù)只讀事務(wù)只讀事務(wù)只允許執(zhí)行查詢操作,而不允許執(zhí)行任何只讀事務(wù)只允許執(zhí)行查詢操作,而不允許執(zhí)行任何DML操作事務(wù)。操作事務(wù)。當(dāng)使用只讀事務(wù)可以確保取得特定的時間點(diǎn)的數(shù)據(jù)。當(dāng)使用只讀事務(wù)可以確保取得特定的時間點(diǎn)的數(shù)據(jù)。例如:例如:假定企業(yè)需要在每天假定企業(yè)需要在每天16點(diǎn)統(tǒng)計(jì)最近
15、點(diǎn)統(tǒng)計(jì)最近24小時的銷售信息,小時的銷售信息,而不統(tǒng)計(jì)當(dāng)天而不統(tǒng)計(jì)當(dāng)天16點(diǎn)之后的銷售信息,那么用戶可以使用點(diǎn)之后的銷售信息,那么用戶可以使用只讀事務(wù)。只讀事務(wù)。在設(shè)置了只讀事務(wù)之后,盡管其他事務(wù)可能會提交新事在設(shè)置了只讀事務(wù)之后,盡管其他事務(wù)可能會提交新事務(wù),但只讀事務(wù)不會取得新的數(shù)據(jù)變化。務(wù),但只讀事務(wù)不會取得新的數(shù)據(jù)變化。示例:示例:會話會話A:Set transaction read only;會話會話B:Update emp set sal=3000 where ename=SMITH;會話會話A:Select sal from emp where ename=SMITH;Set t
16、ransaction isolation level serializable;順序事務(wù),在只讀事務(wù)的基礎(chǔ)特性上還可以對數(shù)據(jù)進(jìn)行順序事務(wù),在只讀事務(wù)的基礎(chǔ)特性上還可以對數(shù)據(jù)進(jìn)行DML操作操作控制事務(wù)控制事務(wù)保存點(diǎn)保存點(diǎn) B保存點(diǎn)保存點(diǎn) ADELETEINSERTUPDATEINSERTCOMMITTime 事務(wù)事務(wù)ROLLBACK to SAVEPOINT BROLLBACK to SAVEPOINT AROLLBACKUPDATE.SAVEPOINT update_done;INSERT.ROLLBACK TO update_done;回滾到保留點(diǎn)回滾到保留點(diǎn)使用使用 SAVEPOINT S
17、AVEPOINTname語句在當(dāng)前事務(wù)中語句在當(dāng)前事務(wù)中創(chuàng)建保存點(diǎn)。創(chuàng)建保存點(diǎn)。使用使用 ROLLBACK TO SAVEPOINTname 語句回滾到創(chuàng)建語句回滾到創(chuàng)建的保存點(diǎn)。的保存點(diǎn)。用于取消部分事務(wù)用于取消部分事務(wù)自動提交在以下情況中執(zhí)行自動提交在以下情況中執(zhí)行:DDL 語句。語句。DCL 語句。語句。不使用不使用 COMMIT 或或 ROLLBACK 語句提交或回滾,正常結(jié)語句提交或回滾,正常結(jié)束會話。束會話。會話異常結(jié)束或系統(tǒng)異常會導(dǎo)致自動回滾。會話異常結(jié)束或系統(tǒng)異常會導(dǎo)致自動回滾。事務(wù)進(jìn)程事務(wù)進(jìn)程提交或回滾前的數(shù)據(jù)狀態(tài)提交或回滾前的數(shù)據(jù)狀態(tài)改變前的數(shù)據(jù)狀態(tài)是可以恢復(fù)的改變前的數(shù)據(jù)
18、狀態(tài)是可以恢復(fù)的其他用戶不能看到當(dāng)前用戶所做的改變,直到當(dāng)前用戶結(jié)束事其他用戶不能看到當(dāng)前用戶所做的改變,直到當(dāng)前用戶結(jié)束事務(wù)。務(wù)。DML語句所涉及到的行被鎖定,語句所涉及到的行被鎖定, 其他用戶不能操作。其他用戶不能操作。提交后的數(shù)據(jù)狀態(tài)提交后的數(shù)據(jù)狀態(tài)數(shù)據(jù)的改變已經(jīng)被保存到數(shù)據(jù)庫中。數(shù)據(jù)的改變已經(jīng)被保存到數(shù)據(jù)庫中。改變前的數(shù)據(jù)已經(jīng)丟失。改變前的數(shù)據(jù)已經(jīng)丟失。所有用戶可以看到結(jié)果。所有用戶可以看到結(jié)果。鎖被釋放,鎖被釋放, 其他用戶可以操作涉及到的數(shù)據(jù)。其他用戶可以操作涉及到的數(shù)據(jù)。所有保存點(diǎn)被釋放。所有保存點(diǎn)被釋放。COMMIT;改變數(shù)據(jù)改變數(shù)據(jù)提交改變提交改變DELETE FROM em
19、ployeesINSERT INTO departments VALUES (290, Corporate Tax, NULL, 1700);提交數(shù)據(jù)提交數(shù)據(jù)數(shù)據(jù)回滾后的狀態(tài)數(shù)據(jù)回滾后的狀態(tài)使用使用 ROLLBACK 語句可使數(shù)據(jù)變化失效語句可使數(shù)據(jù)變化失效:數(shù)據(jù)改變被取消。數(shù)據(jù)改變被取消。修改前的數(shù)據(jù)狀態(tài)可以被恢復(fù)。修改前的數(shù)據(jù)狀態(tài)可以被恢復(fù)。鎖被釋放。鎖被釋放。DELETE FROM copy_emp;ROLLBACK;語句級回滾語句級回滾單獨(dú)單獨(dú) DML 語句執(zhí)行失敗時,只有該語句被回滾。語句執(zhí)行失敗時,只有該語句被回滾。Oracle 服務(wù)器自動創(chuàng)建一個隱式的保留點(diǎn)。服務(wù)器自動創(chuàng)建一個隱
20、式的保留點(diǎn)。其他數(shù)據(jù)改變?nèi)员槐A?。其他?shù)據(jù)改變?nèi)员槐A?。用戶?yīng)執(zhí)行用戶應(yīng)執(zhí)行 COMMIT 或或 ROLLBACK 語句結(jié)束事務(wù)。語句結(jié)束事務(wù)。鎖鎖Oracle 數(shù)據(jù)庫中,鎖是數(shù)據(jù)庫中,鎖是 :并行事務(wù)中避免資源競爭。并行事務(wù)中避免資源競爭。避免用戶動作。避免用戶動作。自動使用最低級別的限制。自動使用最低級別的限制。在事務(wù)結(jié)束結(jié)束前存在。在事務(wù)結(jié)束結(jié)束前存在。兩種類型兩種類型: 顯示和隱式。顯示和隱式。鎖鎖兩種模式兩種模式:獨(dú)占鎖獨(dú)占鎖: 屏蔽其他用戶。屏蔽其他用戶。共享鎖共享鎖: 允許其他用戶操作。允許其他用戶操作。高級別的數(shù)據(jù)并發(fā)性高級別的數(shù)據(jù)并發(fā)性:DML: 表共享,行獨(dú)占表共享,行獨(dú)占
21、Queries(查詢)(查詢): 不需要加鎖不需要加鎖DDL: 保護(hù)對象定義保護(hù)對象定義提交或回滾后鎖被釋放。提交或回滾后鎖被釋放。排它鎖:若事務(wù)排它鎖:若事務(wù)T T對數(shù)據(jù)對數(shù)據(jù)D D加加X X鎖鎖(獨(dú)占鎖獨(dú)占鎖),則其它任何事務(wù)都不能再對則其它任何事務(wù)都不能再對D D加任何類型的鎖加任何類型的鎖,直至,直至T T釋放釋放D D上的上的X X鎖;一般要求在修改數(shù)據(jù)鎖;一般要求在修改數(shù)據(jù)前要向該數(shù)據(jù)加排它鎖,所以排它鎖又稱為寫前要向該數(shù)據(jù)加排它鎖,所以排它鎖又稱為寫鎖。鎖。共享鎖:若事務(wù)共享鎖:若事務(wù)T T對數(shù)據(jù)對數(shù)據(jù)D D加加S S鎖(鎖(共享鎖共享鎖),),則其它事務(wù)只能對則其它事務(wù)只能對D
22、 D加加S S鎖,而不能加鎖,而不能加X X鎖,直鎖,直至至T T釋放釋放D D上的上的S S鎖;一般要求在讀取數(shù)據(jù)前要鎖;一般要求在讀取數(shù)據(jù)前要向該數(shù)據(jù)加共享鎖,所以共享鎖又稱為讀鎖。向該數(shù)據(jù)加共享鎖,所以共享鎖又稱為讀鎖。加鎖方法加鎖方法自動加鎖自動加鎖INSERT UPDATE DELETE人工加鎖人工加鎖SELECT FOR UPDATE OFLOCK TABLE IN 鎖類型鎖類型MODE基本的鎖類型有兩種:基本的鎖類型有兩種:排它鎖排它鎖 Exclusive locksExclusive locks記為記為X X鎖鎖共享鎖共享鎖 Share locksShare locks記為記為
23、S S鎖鎖Oracle DMLOracle DML鎖共有兩個層次,即行級鎖和表級鎖。鎖共有兩個層次,即行級鎖和表級鎖。 Oracle的的TX鎖(行級鎖、事務(wù)鎖)鎖(行級鎖、事務(wù)鎖)TM鎖(表級鎖)鎖(表級鎖)OracleOracle的的DMLDML鎖(數(shù)據(jù)鎖)鎖(數(shù)據(jù)鎖)其行級鎖雖然只有一種(即其行級鎖雖然只有一種(即X X鎖),鎖),但其但其TMTM鎖(表級鎖)類型共有鎖(表級鎖)類型共有5 5種,種, 共享鎖(共享鎖(S S鎖)、排它鎖(鎖)、排它鎖(X X鎖)、行級共享鎖鎖)、行級共享鎖(RS RS 鎖)、行級排它鎖(鎖)、行級排它鎖(RXRX鎖)、共享行級排鎖)、共享行級排它鎖(它鎖(
24、SRXSRX鎖),鎖), 注意注意: :OracleOracle在行級只提供在行級只提供 X X鎖,所以與鎖,所以與RSRS鎖(鎖(通過通過SELECT SELECT FOR UPDATE FOR UPDATE語句獲得)對應(yīng)的語句獲得)對應(yīng)的行級鎖也是行級鎖也是X X鎖(但是該行數(shù)據(jù)實(shí)際上還沒有被鎖(但是該行數(shù)據(jù)實(shí)際上還沒有被修改)。修改)。當(dāng)當(dāng)OracleOracle執(zhí)行執(zhí)行SELECTSELECTFOR UPDATEFOR UPDATE、INSERTINSERT、UPDATEUPDATE、DELETEDELETE等等DMLDML語句時,系統(tǒng)自動在所語句時,系統(tǒng)自動在所要操作的表上申請表級要
25、操作的表上申請表級RSRS鎖(鎖(SELECTSELECTFOR FOR UPDATEUPDATE)或或RXRX鎖(鎖(INSERTINSERT、UPDATEUPDATE、DELETEDELETE),當(dāng)表級鎖獲得后,系統(tǒng)再自動申請當(dāng)表級鎖獲得后,系統(tǒng)再自動申請TXTX鎖,并鎖,并將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位置位(指向該將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位置位(指向該TXTX鎖);鎖);也可以通過也可以通過LOCK TABLELOCK TABLE語句來指定獲得某種類語句來指定獲得某種類型的型的TMTM鎖。下表總結(jié)了鎖。下表總結(jié)了OracleOracle中各中各SQLSQL語句產(chǎn)語句產(chǎn)生生TMTM鎖的情況
26、:鎖的情況:OracleOracle中各中各SQLSQL語句產(chǎn)生語句產(chǎn)生TMTM鎖的情況:鎖的情況:自動加鎖自動加鎖Oracle自動加鎖有自動加鎖有4種類型種類型數(shù)據(jù)鎖數(shù)據(jù)鎖行級鎖行級鎖數(shù)據(jù)鎖是防止多個事務(wù)對同一個表或表中同一行操作時數(shù)據(jù)鎖是防止多個事務(wù)對同一個表或表中同一行操作時產(chǎn)生的沖突產(chǎn)生的沖突當(dāng)事務(wù)執(zhí)行以下當(dāng)事務(wù)執(zhí)行以下DML語句,語句,INSERT UPDATE DELETE SELECT FOR UPDATE OF.表級鎖表級鎖當(dāng)事務(wù)獲得行鎖后,此事務(wù)也自動獲得表級共享鎖,以當(dāng)事務(wù)獲得行鎖后,此事務(wù)也自動獲得表級共享鎖,以防止其他事務(wù)進(jìn)行防止其他事務(wù)進(jìn)行DDL語句語句同樣可以使用同
27、樣可以使用LOCK TABLE人工定義表級共享鎖人工定義表級共享鎖Lock table table_name in row exclusive mode行加鎖加重服務(wù)器的負(fù)擔(dān)行加鎖加重服務(wù)器的負(fù)擔(dān)Lock table table_name in exclusive mode鎖定命令可以一次鎖定多個表鎖定命令可以一次鎖定多個表Lock table tab1,tab2 in exclusive mode鎖類型:鎖類型:Row share、row exclusive、share updateShare、share row exclusive、exclusive封鎖機(jī)制的監(jiān)控封鎖機(jī)制的監(jiān)控v$lock
28、v$lock視圖列出當(dāng)前系統(tǒng)持有的或正在申請的所有鎖的情視圖列出當(dāng)前系統(tǒng)持有的或正在申請的所有鎖的情況,其主要字段說明如下:況,其主要字段說明如下:v$locked_objectv$locked_object視圖列出當(dāng)前系統(tǒng)中哪些對象正被鎖定視圖列出當(dāng)前系統(tǒng)中哪些對象正被鎖定查看鎖等待的進(jìn)程查看鎖等待的進(jìn)程查看當(dāng)前的用戶會話和對應(yīng)的鎖信息查看當(dāng)前的用戶會話和對應(yīng)的鎖信息Select s.sid,s.serial#,s.username,s.status,l.id1,l.lmode,l.request from v$session s,v$lock l where s.sid=l.sid and s.username is not null動態(tài)性能試圖動態(tài)性能試圖v$session查看造成鎖等待的鎖信息查看造成鎖等待的鎖信息Select l.id1,l.lmode,l.request from v$session s,v$lock l where s.lockwait=l.kaddr刪除無效的會話進(jìn)程刪
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年公司理財(cái)試題
- 基于寬相界面停輸熱歷史下的再啟動水力特性研究
- 重陽節(jié)文化傳承
- Unit 5 What an adventure!Developing ideas Reading 課件(內(nèi)嵌音視頻)高一英語外研版必修3
- 阿里java面試題及答案2025年
- 單位人員面試題及答案
- 應(yīng)城中考試題及答案
- 課堂訓(xùn)練考試題及答案
- 用電營銷考試:電力負(fù)荷管理考試答案
- 端午節(jié)日記模板錦集九篇
- 2024年上海浦東新區(qū)公辦學(xué)校儲備教師教輔招聘真題
- 2025年高考?xì)v史全國卷試題評析-教育部教育考試院
- 貴州省貴陽市2023?2024學(xué)年度第二學(xué)期期末監(jiān)測試卷高一 數(shù)學(xué)試題(含解析)
- 城市管理公司管理制度
- 觸電急救97課件
- T/CAQI 96-2019產(chǎn)品質(zhì)量鑒定程序規(guī)范總則
- 醫(yī)療行業(yè)注塑車間的數(shù)字化改造實(shí)踐
- 俱樂部授權(quán)協(xié)議書
- 園林植物病蟲害防治技術(shù)操作質(zhì)量標(biāo)準(zhǔn)
- 快遞郵寄申請表
- 蒸壓灰砂磚抗壓、抗折強(qiáng)度檢驗(yàn)記錄1
評論
0/150
提交評論