版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、事務(wù)事務(wù)目標(biāo)目標(biāo)通過(guò)本章學(xué)習(xí),您將可以通過(guò)本章學(xué)習(xí),您將可以:使用使用 DML 語(yǔ)句語(yǔ)句向表中插入數(shù)據(jù)向表中插入數(shù)據(jù)更新表中數(shù)據(jù)更新表中數(shù)據(jù)從表中刪除數(shù)據(jù)從表中刪除數(shù)據(jù)將表中數(shù)據(jù)和并將表中數(shù)據(jù)和并控制事務(wù)控制事務(wù)事務(wù)概念事務(wù)概念包含一組數(shù)據(jù)庫(kù)命令,構(gòu)成單一邏輯工包含一組數(shù)據(jù)庫(kù)命令,構(gòu)成單一邏輯工作單元的操作集合作單元的操作集合訪問(wèn)并可能更新各種數(shù)據(jù)項(xiàng)的一個(gè)程序訪問(wèn)并可能更新各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元,是不可分割的工作邏輯單元執(zhí)行單元,是不可分割的工作邏輯單元執(zhí)行并發(fā)操作的最小控制單位執(zhí)行并發(fā)操作的最小控制單位事務(wù)的特性事務(wù)的特性原子性(原子性(AAtomicity)一致性(一致性(CCons
2、istency)隔離性(隔離性(IIsolation)持久性(持久性(DDurability)原子性、原子性、一致性一致性原子性原子性: :就是事務(wù)應(yīng)作為一個(gè)工作單元就是事務(wù)應(yīng)作為一個(gè)工作單元, ,事務(wù)處理完成事務(wù)處理完成,所有的工作要么都在數(shù)據(jù)庫(kù)中保存下來(lái),要,所有的工作要么都在數(shù)據(jù)庫(kù)中保存下來(lái),要么完全回滾,全部不保留么完全回滾,全部不保留一致性一致性: :事務(wù)完成或者撤銷后,都應(yīng)該處于一致的狀態(tài)事務(wù)完成或者撤銷后,都應(yīng)該處于一致的狀態(tài)隔離性、永久性隔離性、永久性隔離性隔離性多個(gè)事務(wù)同時(shí)進(jìn)行,它們之間應(yīng)該互不干擾多個(gè)事務(wù)同時(shí)進(jìn)行,它們之間應(yīng)該互不干擾. .應(yīng)該防止一個(gè)事務(wù)處理其他事務(wù)也要修
3、改的數(shù)應(yīng)該防止一個(gè)事務(wù)處理其他事務(wù)也要修改的數(shù)據(jù)時(shí),不合理的存取和不完整的讀取數(shù)據(jù)據(jù)時(shí),不合理的存取和不完整的讀取數(shù)據(jù)永久性永久性事務(wù)提交以后,所做的工作就被永久的保存下事務(wù)提交以后,所做的工作就被永久的保存下來(lái)來(lái)事務(wù)并發(fā)處理會(huì)產(chǎn)生的問(wèn)題事務(wù)并發(fā)處理會(huì)產(chǎn)生的問(wèn)題 丟失更新丟失更新當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問(wèn)題、選定的值更新該行時(shí),會(huì)發(fā)生丟失更新問(wèn)題、每個(gè)事務(wù)都不知道其它事務(wù)的存在。最后的更每個(gè)事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)
4、據(jù)丟失。據(jù)丟失。丟失更新:丟失更新:假設(shè)產(chǎn)品的當(dāng)前庫(kù)存假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入購(gòu)入400個(gè),個(gè),T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲(chǔ)的值存儲(chǔ)的值1T1讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量602T2讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量603T1在庫(kù)數(shù)量在庫(kù)數(shù)量=60+4004T2在庫(kù)數(shù)量在庫(kù)數(shù)量=60-405T1寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量460(將被丟失)(將被丟失)6T2寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量20正常執(zhí)行過(guò)程:正常執(zhí)行過(guò)程:假設(shè)產(chǎn)品的當(dāng)前庫(kù)存假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入購(gòu)入400個(gè),個(gè),T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲(chǔ)的值存儲(chǔ)的值1T1讀在庫(kù)
5、數(shù)量讀在庫(kù)數(shù)量602T1在庫(kù)數(shù)量在庫(kù)數(shù)量=60+4003T1寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量4604T2讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量4605T2在庫(kù)數(shù)量在庫(kù)數(shù)量=460-406T2寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量420臟讀臟讀 當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),會(huì)發(fā)生未確認(rèn)的相關(guān)性問(wèn)題。會(huì)發(fā)生未確認(rèn)的相關(guān)性問(wèn)題。 第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒(méi)有確認(rèn)并且可第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒(méi)有確認(rèn)并且可能由更新此行的事務(wù)所更改。能由更新此行的事務(wù)所更改。T2使用使用T1未提交數(shù)據(jù):未提交數(shù)據(jù):假設(shè)產(chǎn)品的當(dāng)前庫(kù)存假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入購(gòu)入400個(gè),在沒(méi)
6、有提交前撤消了該操作,個(gè),在沒(méi)有提交前撤消了該操作,T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲(chǔ)的值存儲(chǔ)的值1T1讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量602T1在庫(kù)數(shù)量在庫(kù)數(shù)量=60+4003T1寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量4604T2讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量460(讀未提交數(shù)據(jù))(讀未提交數(shù)據(jù))5T2在庫(kù)數(shù)量在庫(kù)數(shù)量=460-406T1rollback606T2寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量420正常執(zhí)行過(guò)程:正常執(zhí)行過(guò)程:假設(shè)產(chǎn)品的當(dāng)前庫(kù)存假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入購(gòu)入400個(gè),在沒(méi)有提交前撤消了該操作,個(gè),在沒(méi)有提交前撤消了該操作,T2賣出賣出40順序順序事務(wù)事務(wù)步驟步驟存儲(chǔ)的值存儲(chǔ)的值1
7、T1讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量602T1在庫(kù)數(shù)量在庫(kù)數(shù)量=60+4003T1寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量4604T1RollBack605T2讀在庫(kù)數(shù)量讀在庫(kù)數(shù)量606T2在庫(kù)數(shù)量在庫(kù)數(shù)量=60-407T2寫在庫(kù)數(shù)量寫在庫(kù)數(shù)量20臟讀臟讀會(huì)話會(huì)話AUpdate emp set sal=2000 where ename=SCOTT;會(huì)話會(huì)話BSelect sal from emp where ename=SCOTT;數(shù)據(jù)庫(kù)事務(wù)數(shù)據(jù)庫(kù)事務(wù)數(shù)據(jù)庫(kù)事務(wù)由以下的部分組成數(shù)據(jù)庫(kù)事務(wù)由以下的部分組成:一個(gè)或多個(gè)一個(gè)或多個(gè)DML 語(yǔ)句語(yǔ)句一個(gè)一個(gè) DDL 語(yǔ)句語(yǔ)句一個(gè)一個(gè) DCL 語(yǔ)句語(yǔ)句數(shù)據(jù)庫(kù)事務(wù)數(shù)據(jù)庫(kù)事務(wù)以第一個(gè)以第一
8、個(gè) DML 語(yǔ)句的執(zhí)行作為開(kāi)始語(yǔ)句的執(zhí)行作為開(kāi)始以下面的其中之一作為結(jié)束以下面的其中之一作為結(jié)束:COMMIT 或或 ROLLBACK 語(yǔ)句語(yǔ)句DDL 或或 DCL 語(yǔ)句(自動(dòng)提交)語(yǔ)句(自動(dòng)提交)用戶會(huì)話正常結(jié)束用戶會(huì)話正常結(jié)束系統(tǒng)異常終了系統(tǒng)異常終了打開(kāi)事務(wù)的自動(dòng)提交打開(kāi)事務(wù)的自動(dòng)提交show autocommitset autocommit on;Commit事務(wù)提交命令。事務(wù)提交命令。在在OracleOracle中,在內(nèi)存中將為每個(gè)客戶機(jī)建立工作區(qū),客中,在內(nèi)存中將為每個(gè)客戶機(jī)建立工作區(qū),客戶機(jī)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作處理的事務(wù)都在工作區(qū)內(nèi)完成,戶機(jī)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作處理的事務(wù)都在工作區(qū)內(nèi)完成,
9、只有在輸入只有在輸入commitcommit命令后,工作區(qū)內(nèi)的修改內(nèi)容才寫入命令后,工作區(qū)內(nèi)的修改內(nèi)容才寫入到數(shù)據(jù)庫(kù)上,稱為物理寫入到數(shù)據(jù)庫(kù)上,稱為物理寫入. .這樣可以保證在任意的客戶機(jī)沒(méi)有物理提交修改以前,這樣可以保證在任意的客戶機(jī)沒(méi)有物理提交修改以前,別的客戶機(jī)讀取的后臺(tái)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是完整的、一致別的客戶機(jī)讀取的后臺(tái)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是完整的、一致的的. .COMMIT和和ROLLBACK語(yǔ)句的優(yōu)點(diǎn)語(yǔ)句的優(yōu)點(diǎn)使用使用COMMIT 和和 ROLLBACK語(yǔ)句語(yǔ)句,我們可以我們可以: 確保數(shù)據(jù)完整性。確保數(shù)據(jù)完整性。數(shù)據(jù)改變被提交之前預(yù)覽。數(shù)據(jù)改變被提交之前預(yù)覽。將邏輯上相關(guān)的操作分組。將邏輯
10、上相關(guān)的操作分組。當(dāng)執(zhí)行了當(dāng)執(zhí)行了Commit語(yǔ)句之后,會(huì)確認(rèn)事務(wù)變化、結(jié)束事語(yǔ)句之后,會(huì)確認(rèn)事務(wù)變化、結(jié)束事務(wù)、刪除保存點(diǎn)、釋放鎖。當(dāng)使用務(wù)、刪除保存點(diǎn)、釋放鎖。當(dāng)使用commit語(yǔ)句后,其語(yǔ)句后,其他會(huì)話將可以看到事務(wù)變化后的新數(shù)據(jù)他會(huì)話將可以看到事務(wù)變化后的新數(shù)據(jù)ORACLEORACLE事務(wù)控制事務(wù)控制- -回退段回退段ORACLE為了適應(yīng)事務(wù)控制設(shè)置了為了適應(yīng)事務(wù)控制設(shè)置了回退段這一數(shù)據(jù)庫(kù)對(duì)象這一數(shù)據(jù)庫(kù)對(duì)象.系統(tǒng)利用回退段來(lái)確保諸如讀一致性、數(shù)據(jù)庫(kù)恢復(fù)等管理系統(tǒng)利用回退段來(lái)確保諸如讀一致性、數(shù)據(jù)庫(kù)恢復(fù)等管理功能。功能。ORACLE在缺省情況下在缺省情況下,讀數(shù)據(jù)不加鎖讀數(shù)據(jù)不加鎖,通過(guò)
11、回退段通過(guò)回退段(Rollback Segment)保證用戶不讀臟數(shù)據(jù)和可重復(fù)讀保證用戶不讀臟數(shù)據(jù)和可重復(fù)讀.表空間中的數(shù)據(jù)按段來(lái)組織表空間中的數(shù)據(jù)按段來(lái)組織,數(shù)據(jù)段、索引段、暫存段和回?cái)?shù)據(jù)段、索引段、暫存段和回退段,回退段是一塊磁盤存儲(chǔ)區(qū)域,退段,回退段是一塊磁盤存儲(chǔ)區(qū)域,回退段可以由用戶創(chuàng)建,但只能由系統(tǒng)進(jìn)程使用。,但只能由系統(tǒng)進(jìn)程使用。ORACLEORACLE事務(wù)控制事務(wù)控制- -回退段回退段事務(wù)的執(zhí)行過(guò)程(采用日志和回退段雙重記錄事務(wù)活動(dòng)):事務(wù)的執(zhí)行過(guò)程(采用日志和回退段雙重記錄事務(wù)活動(dòng)):進(jìn)入回退段進(jìn)入回退段, ,寫入回退信息寫入回退信息從數(shù)據(jù)段讀入緩沖區(qū)從數(shù)據(jù)段讀入緩沖區(qū), ,S
12、QLSQL處理處理記載日志文件記載日志文件提交提交, ,寫更改結(jié)果到磁盤寫更改結(jié)果到磁盤 回退回退, ,寫回退信息到磁盤寫回退信息到磁盤 事務(wù)第一條更新語(yǔ)句事務(wù)第一條更新語(yǔ)句事務(wù)結(jié)束事務(wù)結(jié)束NYUpdate t set col=0 where col=123;commit;數(shù)據(jù)庫(kù)首先把該語(yǔ)句的整個(gè)操作包括數(shù)據(jù)數(shù)據(jù)庫(kù)首先把該語(yǔ)句的整個(gè)操作包括數(shù)據(jù)0與與123寫入日志緩沖區(qū)寫入日志緩沖區(qū)然后把然后把123和一些信息寫入回滾段,和一些信息寫入回滾段,最后把最后把0修改到數(shù)據(jù)緩沖區(qū)。修改到數(shù)據(jù)緩沖區(qū)。當(dāng)發(fā)出提交命令時(shí),如果日志緩沖區(qū)內(nèi)容沒(méi)有寫入日志當(dāng)發(fā)出提交命令時(shí),如果日志緩沖區(qū)內(nèi)容沒(méi)有寫入日志文件則
13、必須寫入日志文件,回滾段把該事務(wù)標(biāo)記為已經(jīng)文件則必須寫入日志文件,回滾段把該事務(wù)標(biāo)記為已經(jīng)提交,數(shù)據(jù)緩沖區(qū)中的這個(gè)事務(wù)也標(biāo)記為已提交提交,數(shù)據(jù)緩沖區(qū)中的這個(gè)事務(wù)也標(biāo)記為已提交如果回退這個(gè)事務(wù),則數(shù)據(jù)庫(kù)將回滾段中如果回退這個(gè)事務(wù),則數(shù)據(jù)庫(kù)將回滾段中123讀出寫回讀出寫回?cái)?shù)據(jù)緩沖區(qū),這個(gè)回退變化也被寫入日志文件。數(shù)據(jù)緩沖區(qū),這個(gè)回退變化也被寫入日志文件。自動(dòng)提交事務(wù)自動(dòng)提交事務(wù)當(dāng)執(zhí)行當(dāng)執(zhí)行DDL語(yǔ)句時(shí)會(huì)自動(dòng)提交事務(wù),語(yǔ)句時(shí)會(huì)自動(dòng)提交事務(wù),當(dāng)執(zhí)行當(dāng)執(zhí)行DCL語(yǔ)句(語(yǔ)句(grant revoke)當(dāng)退出當(dāng)退出SQL*Plus時(shí)時(shí)將某一事務(wù)設(shè)為只讀事務(wù)將某一事務(wù)設(shè)為只讀事務(wù)Set transaction
14、 read only只讀事務(wù),不生成回滾信息,在整個(gè)事務(wù)中就不能有修只讀事務(wù),不生成回滾信息,在整個(gè)事務(wù)中就不能有修改操作改操作注意是針對(duì)當(dāng)前事務(wù),不是另一個(gè)事務(wù)注意是針對(duì)當(dāng)前事務(wù),不是另一個(gè)事務(wù)Set transaction read only | read write通過(guò)通過(guò)rollback取消設(shè)定。取消設(shè)定。只讀事務(wù)只讀事務(wù)只讀事務(wù)只允許執(zhí)行查詢操作,而不允許執(zhí)行任何只讀事務(wù)只允許執(zhí)行查詢操作,而不允許執(zhí)行任何DML操作事務(wù)。操作事務(wù)。當(dāng)使用只讀事務(wù)可以確保取得特定的時(shí)間點(diǎn)的數(shù)據(jù)。當(dāng)使用只讀事務(wù)可以確保取得特定的時(shí)間點(diǎn)的數(shù)據(jù)。例如:例如:假定企業(yè)需要在每天假定企業(yè)需要在每天16點(diǎn)統(tǒng)計(jì)最近
15、點(diǎn)統(tǒng)計(jì)最近24小時(shí)的銷售信息,小時(shí)的銷售信息,而不統(tǒng)計(jì)當(dāng)天而不統(tǒng)計(jì)當(dāng)天16點(diǎn)之后的銷售信息,那么用戶可以使用點(diǎn)之后的銷售信息,那么用戶可以使用只讀事務(wù)。只讀事務(wù)。在設(shè)置了只讀事務(wù)之后,盡管其他事務(wù)可能會(huì)提交新事在設(shè)置了只讀事務(wù)之后,盡管其他事務(wù)可能會(huì)提交新事務(wù),但只讀事務(wù)不會(huì)取得新的數(shù)據(jù)變化。務(wù),但只讀事務(wù)不會(huì)取得新的數(shù)據(jù)變化。示例:示例:會(huì)話會(huì)話A:Set transaction read only;會(huì)話會(huì)話B:Update emp set sal=3000 where ename=SMITH;會(huì)話會(huì)話A:Select sal from emp where ename=SMITH;Set t
16、ransaction isolation level serializable;順序事務(wù),在只讀事務(wù)的基礎(chǔ)特性上還可以對(duì)數(shù)據(jù)進(jìn)行順序事務(wù),在只讀事務(wù)的基礎(chǔ)特性上還可以對(duì)數(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語(yǔ)句在當(dāng)前事務(wù)中語(yǔ)句在當(dāng)前事務(wù)中創(chuàng)建保存點(diǎn)。創(chuàng)建保存點(diǎn)。使用使用 ROLLBACK TO SAVEPOINTname 語(yǔ)句回滾到創(chuàng)建語(yǔ)句回滾到創(chuàng)建的保存點(diǎn)。的保存點(diǎn)。用于取消部分事務(wù)用于取消部分事務(wù)自動(dòng)提交在以下情況中執(zhí)行自動(dòng)提交在以下情況中執(zhí)行:DDL 語(yǔ)句。語(yǔ)句。DCL 語(yǔ)句。語(yǔ)句。不使用不使用 COMMIT 或或 ROLLBACK 語(yǔ)句提交或回滾,正常結(jié)語(yǔ)句提交或回滾,正常結(jié)束會(huì)話。束會(huì)話。會(huì)話異常結(jié)束或系統(tǒng)異常會(huì)導(dǎo)致自動(dòng)回滾。會(huì)話異常結(jié)束或系統(tǒng)異常會(huì)導(dǎo)致自動(dòng)回滾。事務(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語(yǔ)句所涉及到的行被鎖定,語(yǔ)句所涉及到的行被鎖定, 其他用戶不能操作。其他用戶不能操作。提交后的數(shù)據(jù)狀態(tài)提交后的數(shù)據(jù)狀態(tài)數(shù)據(jù)的改變已經(jīng)被保存到數(shù)據(jù)庫(kù)中。數(shù)據(jù)的改變已經(jīng)被保存到數(shù)據(jù)庫(kù)中。改變前的數(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 語(yǔ)句可使數(shù)據(jù)變化失效語(yǔ)句可使數(shù)據(jù)變化失效:數(shù)據(jù)改變被取消。數(shù)據(jù)改變被取消。修改前的數(shù)據(jù)狀態(tài)可以被恢復(fù)。修改前的數(shù)據(jù)狀態(tài)可以被恢復(fù)。鎖被釋放。鎖被釋放。DELETE FROM copy_emp;ROLLBACK;語(yǔ)句級(jí)回滾語(yǔ)句級(jí)回滾單獨(dú)單獨(dú) DML 語(yǔ)句執(zhí)行失敗時(shí),只有該語(yǔ)句被回滾。語(yǔ)句執(zhí)行失敗時(shí),只有該語(yǔ)句被回滾。Oracle 服務(wù)器自動(dòng)創(chuàng)建一個(gè)隱式的保留點(diǎn)。服務(wù)器自動(dòng)創(chuàng)建一個(gè)隱
20、式的保留點(diǎn)。其他數(shù)據(jù)改變?nèi)员槐A?。其他?shù)據(jù)改變?nèi)员槐A?。用戶?yīng)執(zhí)行用戶應(yīng)執(zhí)行 COMMIT 或或 ROLLBACK 語(yǔ)句結(jié)束事務(wù)。語(yǔ)句結(jié)束事務(wù)。鎖鎖Oracle 數(shù)據(jù)庫(kù)中,鎖是數(shù)據(jù)庫(kù)中,鎖是 :并行事務(wù)中避免資源競(jìng)爭(zhēng)。并行事務(wù)中避免資源競(jìng)爭(zhēng)。避免用戶動(dòng)作。避免用戶動(dòng)作。自動(dòng)使用最低級(jí)別的限制。自動(dòng)使用最低級(jí)別的限制。在事務(wù)結(jié)束結(jié)束前存在。在事務(wù)結(jié)束結(jié)束前存在。兩種類型兩種類型: 顯示和隱式。顯示和隱式。鎖鎖兩種模式兩種模式:獨(dú)占鎖獨(dú)占鎖: 屏蔽其他用戶。屏蔽其他用戶。共享鎖共享鎖: 允許其他用戶操作。允許其他用戶操作。高級(jí)別的數(shù)據(jù)并發(fā)性高級(jí)別的數(shù)據(jù)并發(fā)性:DML: 表共享,行獨(dú)占表共享,行獨(dú)占
21、Queries(查詢)(查詢): 不需要加鎖不需要加鎖DDL: 保護(hù)對(duì)象定義保護(hù)對(duì)象定義提交或回滾后鎖被釋放。提交或回滾后鎖被釋放。排它鎖:若事務(wù)排它鎖:若事務(wù)T T對(duì)數(shù)據(jù)對(duì)數(shù)據(jù)D D加加X(jué) X鎖鎖(獨(dú)占鎖獨(dú)占鎖),則其它任何事務(wù)都不能再對(duì)則其它任何事務(wù)都不能再對(duì)D D加任何類型的鎖加任何類型的鎖,直至,直至T T釋放釋放D D上的上的X X鎖;一般要求在修改數(shù)據(jù)鎖;一般要求在修改數(shù)據(jù)前要向該數(shù)據(jù)加排它鎖,所以排它鎖又稱為寫前要向該數(shù)據(jù)加排它鎖,所以排它鎖又稱為寫鎖。鎖。共享鎖:若事務(wù)共享鎖:若事務(wù)T T對(duì)數(shù)據(jù)對(duì)數(shù)據(jù)D D加加S S鎖(鎖(共享鎖共享鎖),),則其它事務(wù)只能對(duì)則其它事務(wù)只能對(duì)D
22、 D加加S S鎖,而不能加鎖,而不能加X(jué) X鎖,直鎖,直至至T T釋放釋放D D上的上的S S鎖;一般要求在讀取數(shù)據(jù)前要鎖;一般要求在讀取數(shù)據(jù)前要向該數(shù)據(jù)加共享鎖,所以共享鎖又稱為讀鎖。向該數(shù)據(jù)加共享鎖,所以共享鎖又稱為讀鎖。加鎖方法加鎖方法自動(dòng)加鎖自動(dòng)加鎖INSERT UPDATE DELETE人工加鎖人工加鎖SELECT FOR UPDATE OFLOCK TABLE IN 鎖類型鎖類型MODE基本的鎖類型有兩種:基本的鎖類型有兩種:排它鎖排它鎖 Exclusive locksExclusive locks記為記為X X鎖鎖共享鎖共享鎖 Share locksShare locks記為記為
23、S S鎖鎖Oracle DMLOracle DML鎖共有兩個(gè)層次,即行級(jí)鎖和表級(jí)鎖。鎖共有兩個(gè)層次,即行級(jí)鎖和表級(jí)鎖。 Oracle的的TX鎖(行級(jí)鎖、事務(wù)鎖)鎖(行級(jí)鎖、事務(wù)鎖)TM鎖(表級(jí)鎖)鎖(表級(jí)鎖)OracleOracle的的DMLDML鎖(數(shù)據(jù)鎖)鎖(數(shù)據(jù)鎖)其行級(jí)鎖雖然只有一種(即其行級(jí)鎖雖然只有一種(即X X鎖),鎖),但其但其TMTM鎖(表級(jí)鎖)類型共有鎖(表級(jí)鎖)類型共有5 5種,種, 共享鎖(共享鎖(S S鎖)、排它鎖(鎖)、排它鎖(X X鎖)、行級(jí)共享鎖鎖)、行級(jí)共享鎖(RS RS 鎖)、行級(jí)排它鎖(鎖)、行級(jí)排它鎖(RXRX鎖)、共享行級(jí)排鎖)、共享行級(jí)排它鎖(它鎖(
24、SRXSRX鎖),鎖), 注意注意: :OracleOracle在行級(jí)只提供在行級(jí)只提供 X X鎖,所以與鎖,所以與RSRS鎖(鎖(通過(guò)通過(guò)SELECT SELECT FOR UPDATE FOR UPDATE語(yǔ)句獲得)對(duì)應(yīng)的語(yǔ)句獲得)對(duì)應(yīng)的行級(jí)鎖也是行級(jí)鎖也是X X鎖(但是該行數(shù)據(jù)實(shí)際上還沒(méi)有被鎖(但是該行數(shù)據(jù)實(shí)際上還沒(méi)有被修改)。修改)。當(dāng)當(dāng)OracleOracle執(zhí)行執(zhí)行SELECTSELECTFOR UPDATEFOR UPDATE、INSERTINSERT、UPDATEUPDATE、DELETEDELETE等等DMLDML語(yǔ)句時(shí),系統(tǒng)自動(dòng)在所語(yǔ)句時(shí),系統(tǒng)自動(dòng)在所要操作的表上申請(qǐng)表級(jí)要
25、操作的表上申請(qǐng)表級(jí)RSRS鎖(鎖(SELECTSELECTFOR FOR UPDATEUPDATE)或或RXRX鎖(鎖(INSERTINSERT、UPDATEUPDATE、DELETEDELETE),當(dāng)表級(jí)鎖獲得后,系統(tǒng)再自動(dòng)申請(qǐng)當(dāng)表級(jí)鎖獲得后,系統(tǒng)再自動(dòng)申請(qǐng)TXTX鎖,并鎖,并將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位置位(指向該將實(shí)際鎖定的數(shù)據(jù)行的鎖標(biāo)志位置位(指向該TXTX鎖);鎖);也可以通過(guò)也可以通過(guò)LOCK TABLELOCK TABLE語(yǔ)句來(lái)指定獲得某種類語(yǔ)句來(lái)指定獲得某種類型的型的TMTM鎖。下表總結(jié)了鎖。下表總結(jié)了OracleOracle中各中各SQLSQL語(yǔ)句產(chǎn)語(yǔ)句產(chǎn)生生TMTM鎖的情況
26、:鎖的情況:OracleOracle中各中各SQLSQL語(yǔ)句產(chǎn)生語(yǔ)句產(chǎn)生TMTM鎖的情況:鎖的情況:自動(dòng)加鎖自動(dòng)加鎖Oracle自動(dòng)加鎖有自動(dòng)加鎖有4種類型種類型數(shù)據(jù)鎖數(shù)據(jù)鎖行級(jí)鎖行級(jí)鎖數(shù)據(jù)鎖是防止多個(gè)事務(wù)對(duì)同一個(gè)表或表中同一行操作時(shí)數(shù)據(jù)鎖是防止多個(gè)事務(wù)對(duì)同一個(gè)表或表中同一行操作時(shí)產(chǎn)生的沖突產(chǎn)生的沖突當(dāng)事務(wù)執(zhí)行以下當(dāng)事務(wù)執(zhí)行以下DML語(yǔ)句,語(yǔ)句,INSERT UPDATE DELETE SELECT FOR UPDATE OF.表級(jí)鎖表級(jí)鎖當(dāng)事務(wù)獲得行鎖后,此事務(wù)也自動(dòng)獲得表級(jí)共享鎖,以當(dāng)事務(wù)獲得行鎖后,此事務(wù)也自動(dòng)獲得表級(jí)共享鎖,以防止其他事務(wù)進(jìn)行防止其他事務(wù)進(jìn)行DDL語(yǔ)句語(yǔ)句同樣可以使用同
27、樣可以使用LOCK TABLE人工定義表級(jí)共享鎖人工定義表級(jí)共享鎖Lock table table_name in row exclusive mode行加鎖加重服務(wù)器的負(fù)擔(dān)行加鎖加重服務(wù)器的負(fù)擔(dān)Lock table table_name in exclusive mode鎖定命令可以一次鎖定多個(gè)表鎖定命令可以一次鎖定多個(gè)表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)持有的或正在申請(qǐng)的所有鎖的情視圖列出當(dāng)前系統(tǒng)持有的或正在申請(qǐng)的所有鎖的情況,其主要字段說(shuō)明如下:況,其主要字段說(shuō)明如下:v$locked_objectv$locked_object視圖列出當(dāng)前系統(tǒng)中哪些對(duì)象正被鎖定視圖列出當(dāng)前系統(tǒng)中哪些對(duì)象正被鎖定查看鎖等待的進(jìn)程查看鎖等待的進(jìn)程查看當(dāng)前的用戶會(huì)話和對(duì)應(yīng)的鎖信息查看當(dāng)前的用戶會(huì)話和對(duì)應(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動(dòng)態(tài)性能試圖動(dòng)態(tài)性能試圖v$session查看造成鎖等待的鎖信息查看造成鎖等待的鎖信息Select l.id1,l.lmode,l.request from v$session s,v$lock l where s.lockwait=l.kaddr刪除無(wú)效的會(huì)話進(jìn)程刪
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版全新泥水工合同協(xié)議下載
- 2025年度智能場(chǎng)館租賃合同中保證金與押金管理細(xì)則3篇
- 2025年網(wǎng)絡(luò)投票系統(tǒng)開(kāi)發(fā)與運(yùn)營(yíng)合同范本3篇
- 2025年度特色餐飲文化體驗(yàn)館租賃經(jīng)營(yíng)合同3篇
- 2025年教育機(jī)構(gòu)安保人員勞動(dòng)合同范本2篇
- 二零二五版飯店租賃合同合同履行監(jiān)督與評(píng)估機(jī)制2篇
- 2025年度大數(shù)據(jù)中心建設(shè)合同擔(dān)保協(xié)議書范本2篇
- 2024年規(guī)范化消石灰銷售協(xié)議模板版B版
- 二零二五版智慧城市建設(shè)監(jiān)理團(tuán)隊(duì)聘用合同3篇
- 2024美容院部分股份轉(zhuǎn)讓協(xié)議書
- SH/T 3046-2024 石油化工立式圓筒形鋼制焊接儲(chǔ)罐設(shè)計(jì)規(guī)范(正式版)
- 2024年海口市選調(diào)生考試(行政職業(yè)能力測(cè)驗(yàn))綜合能力測(cè)試題及答案1套
- 六年級(jí)數(shù)學(xué)質(zhì)量分析及改進(jìn)措施
- 一年級(jí)下冊(cè)數(shù)學(xué)口算題卡打印
- 2024年中科院心理咨詢師新教材各單元考試題庫(kù)大全-下(多選題部分)
- 真人cs基于信號(hào)發(fā)射的激光武器設(shè)計(jì)
- 【閱讀提升】部編版語(yǔ)文五年級(jí)下冊(cè)第三單元閱讀要素解析 類文閱讀課外閱讀過(guò)關(guān)(含答案)
- 四年級(jí)上冊(cè)遞等式計(jì)算練習(xí)200題及答案
- 法院后勤部門述職報(bào)告
- 2024年國(guó)信證券招聘筆試參考題庫(kù)附帶答案詳解
- 道醫(yī)館可行性報(bào)告
評(píng)論
0/150
提交評(píng)論