oracle事務(wù)ppt課件_第1頁(yè)
oracle事務(wù)ppt課件_第2頁(yè)
oracle事務(wù)ppt課件_第3頁(yè)
oracle事務(wù)ppt課件_第4頁(yè)
oracle事務(wù)ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、事務(wù)目的經(jīng)過本章學(xué)習(xí),您將可以:運(yùn)用 DML 語(yǔ)句向表中插入數(shù)據(jù)更新表中數(shù)據(jù)從表中刪除數(shù)據(jù)將表中數(shù)據(jù)和并控制事務(wù)事務(wù)概念包含一組數(shù)據(jù)庫(kù)命令,構(gòu)成單一邏輯任務(wù)單元的操作集合訪問并能夠更新各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元,是不可分割的任務(wù)邏輯單元執(zhí)行并發(fā)操作的最小控制單位事務(wù)的特性原子性AAtomicity一致性CConsistency隔離性IIsolation)耐久性DDurability原子性、一致性原子性:就是事務(wù)應(yīng)作為一個(gè)任務(wù)單元,事務(wù)處置完成,一切的任務(wù)要么都在數(shù)據(jù)庫(kù)中保管下來,要么完全回滾,全部不保管一致性:事務(wù)完成或者撤銷后,都應(yīng)該處于一致的形狀隔離性、永久性隔離性多個(gè)事務(wù)同時(shí)進(jìn)展,它們

2、之間應(yīng)該互不干擾.應(yīng)該防止一個(gè)事務(wù)處置其他事務(wù)也要修正的數(shù)據(jù)時(shí),不合理的存取和不完好的讀取數(shù)據(jù)永久性事務(wù)提交以后,所做的任務(wù)就被永久的保管下來事務(wù)并發(fā)處置睬產(chǎn)生的問題 喪失更新當(dāng)兩個(gè)或多個(gè)事務(wù)選擇同一行,然后基于最初選定的值更新該行時(shí),會(huì)發(fā)生喪失更新問題、每個(gè)事務(wù)都不知道其它事務(wù)的存在。最后的更新將重寫由其它事務(wù)所做的更新,這將導(dǎo)致數(shù)據(jù)喪失。喪失更新:假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入400個(gè),T2賣出40順序事務(wù)步驟存儲(chǔ)的值1T1讀在庫(kù)數(shù)量602T2讀在庫(kù)數(shù)量603T1在庫(kù)數(shù)量=60+4004T2在庫(kù)數(shù)量=60-405T1寫在庫(kù)數(shù)量460(將被丟失)6T2寫在庫(kù)數(shù)量20正常執(zhí)行過

3、程:假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入400個(gè),T2賣出40順序事務(wù)步驟存儲(chǔ)的值1T1讀在庫(kù)數(shù)量602T1在庫(kù)數(shù)量=60+4003T1寫在庫(kù)數(shù)量4604T2讀在庫(kù)數(shù)量4605T2在庫(kù)數(shù)量=460-406T2寫在庫(kù)數(shù)量420臟讀 當(dāng)?shù)诙€(gè)事務(wù)選擇其它事務(wù)正在更新的行時(shí),會(huì)發(fā)生未確認(rèn)的相關(guān)性問題。 第二個(gè)事務(wù)正在讀取的數(shù)據(jù)還沒有確認(rèn)并且能夠由更新此行的事務(wù)所更改。T2運(yùn)用T1未提交數(shù)據(jù):假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入400個(gè),在沒有提交前吊銷了該操作,T2賣出40順序事務(wù)步驟存儲(chǔ)的值1T1讀在庫(kù)數(shù)量602T1在庫(kù)數(shù)量=60+4003T1寫在庫(kù)數(shù)量4604T2讀在庫(kù)數(shù)量4

4、60(讀未提交數(shù)據(jù))5T2在庫(kù)數(shù)量=460-406T1rollback606T2寫在庫(kù)數(shù)量420正常執(zhí)行過程:假設(shè)產(chǎn)品的當(dāng)前庫(kù)存60,現(xiàn)有兩個(gè)事務(wù):T1購(gòu)入400個(gè),在沒有提交前吊銷了該操作,T2賣出40順序事務(wù)步驟存儲(chǔ)的值1T1讀在庫(kù)數(shù)量602T1在庫(kù)數(shù)量=60+4003T1寫在庫(kù)數(shù)量4604T1RollBack605T2讀在庫(kù)數(shù)量606T2在庫(kù)數(shù)量=60-407T2寫在庫(kù)數(shù)量20臟讀會(huì)話AUpdate emp set sal=2000 where ename=SCOTT;會(huì)話BSelect sal from emp where ename=scott;數(shù)據(jù)庫(kù)事務(wù)數(shù)據(jù)庫(kù)事務(wù)由以下的部分組成:

5、一個(gè)或多個(gè)DML 語(yǔ)句一個(gè) DDL 語(yǔ)句一個(gè) DCL 語(yǔ)句數(shù)據(jù)庫(kù)事務(wù)以第一個(gè) DML 語(yǔ)句的執(zhí)行作為開場(chǎng)以下面的其中之一作為終了:COMMIT 或 ROLLBACK 語(yǔ)句DDL 或 DCL 語(yǔ)句自動(dòng)提交用戶會(huì)話正常終了系統(tǒng)異常終了show autocommitset autocommit on;Commit事務(wù)提交命令。在Oracle中,在內(nèi)存中將為每個(gè)客戶機(jī)建立任務(wù)區(qū),客戶機(jī)對(duì)數(shù)據(jù)庫(kù)進(jìn)展操作處置的事務(wù)都在任務(wù)區(qū)內(nèi)完成,只需在輸入commit命令后,任務(wù)區(qū)內(nèi)的修正內(nèi)容才寫入到數(shù)據(jù)庫(kù)上,稱為物理寫入.這樣可以保證在恣意的客戶機(jī)沒有物理提交修正以前,別的客戶機(jī)讀取的后臺(tái)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是完好的、一致

6、的.COMMIT和ROLLBACK語(yǔ)句的優(yōu)點(diǎn)運(yùn)用COMMIT 和 ROLLBACK語(yǔ)句,我們可以: 確保數(shù)據(jù)完好性。數(shù)據(jù)改動(dòng)被提交之前預(yù)覽。將邏輯上相關(guān)的操作分組。當(dāng)執(zhí)行了Commit語(yǔ)句之后,會(huì)確認(rèn)事務(wù)變化、終了事務(wù)、刪除保管點(diǎn)、釋放鎖。當(dāng)運(yùn)用commit語(yǔ)句后,其他會(huì)話將可以看到事務(wù)變化后的新數(shù)據(jù)ORACLE事務(wù)控制-回退段ORACLE為了順應(yīng)事務(wù)控制設(shè)置了回退段這一數(shù)據(jù)庫(kù)對(duì)象.系統(tǒng)利用回退段來確保諸如讀一致性、數(shù)據(jù)庫(kù)恢復(fù)等管理功能。ORACLE在缺省情況下,讀數(shù)據(jù)不加鎖,經(jīng)過回退段(Rollback Segment)保證用戶不讀臟數(shù)據(jù)和可反復(fù)讀.表空間中的數(shù)據(jù)按段來組織,數(shù)據(jù)段、索引段、

7、暫存段和回退段,回退段是一塊磁盤存儲(chǔ)區(qū)域,回退段可以由用戶創(chuàng)建,但只能由系統(tǒng)進(jìn)程運(yùn)用。ORACLE事務(wù)控制-回退段事務(wù)的執(zhí)行過程采用日志和回退段雙重記錄事務(wù)活動(dòng):進(jìn)入回退段,寫入回退信息從數(shù)據(jù)段讀入緩沖區(qū),SQL處置記載日志文件提交,寫更改結(jié)果到磁盤 回退,寫回退信息到磁盤 事務(wù)第一條更新語(yǔ)句事務(wù)終了NYUpdate t set col=0 where col=123;commit;數(shù)據(jù)庫(kù)首先把該語(yǔ)句的整個(gè)操作包括數(shù)據(jù)0與123寫入日志緩沖區(qū)然后把123和一些信息寫入回滾段,最后把0修正到數(shù)據(jù)緩沖區(qū)。當(dāng)發(fā)出提交命令時(shí),假設(shè)日志緩沖區(qū)內(nèi)容沒有寫入日志文件那么必需寫入日志文件,回滾段把該事務(wù)標(biāo)志為

8、曾經(jīng)提交,數(shù)據(jù)緩沖區(qū)中的這個(gè)事務(wù)也標(biāo)志為已提交假設(shè)回退這個(gè)事務(wù),那么數(shù)據(jù)庫(kù)將回滾段中123讀出寫回?cái)?shù)據(jù)緩沖區(qū),這個(gè)回退變化也被寫入日志文件。自動(dòng)提交事務(wù)當(dāng)執(zhí)行DDL語(yǔ)句時(shí)會(huì)自動(dòng)提交事務(wù),當(dāng)執(zhí)行DCL語(yǔ)句grant revoke當(dāng)退出SQL*Plus時(shí)將某一事務(wù)設(shè)為只讀事務(wù)Set transaction read only只讀事務(wù),不生成回滾信息,在整個(gè)事務(wù)中就不能有修正操作留意是針對(duì)當(dāng)前事務(wù),不是另一個(gè)事務(wù)Set transaction read only | read write經(jīng)過rollback取消設(shè)定。只讀事務(wù)只讀事務(wù)只允許執(zhí)行查詢操作,而不允許執(zhí)行任何DML操作事務(wù)。當(dāng)運(yùn)用只讀事務(wù)可

9、以確保獲得特定的時(shí)間點(diǎn)的數(shù)據(jù)。例如:假定企業(yè)需求在每天16點(diǎn)統(tǒng)計(jì)最近24小時(shí)的銷售信息,而不統(tǒng)計(jì)當(dāng)天16點(diǎn)之后的銷售信息,那么用戶可以運(yùn)用只讀事務(wù)。在設(shè)置了只讀事務(wù)之后,雖然其他事務(wù)能夠會(huì)提交新事務(wù),但只讀事務(wù)不會(huì)獲得新的數(shù)據(jù)變化。例如:會(huì)話A:Set transaction read only;會(huì)話B:Update emp set sal=3000 where ename=SMITH;會(huì)話A:Select sal from emp where ename=SMITH;Set transaction isolation level serializable;順序事務(wù),在只讀事務(wù)的根底特性上還可

10、以對(duì)數(shù)據(jù)進(jìn)展DML操作控制事務(wù)保管點(diǎn) B保管點(diǎn) ADELETEINSERTUPDATEINSERTCOMMITTime 事務(wù)ROLLBACK to SAVEPOINT BROLLBACK to SAVEPOINT AROLLBACKUPDATE.SAVEPOINT update_done;Savepoint created.INSERT.ROLLBACK TO update_done;Rollback complete.回滾到保管點(diǎn)運(yùn)用 SAVEPOINT SAVEPOINTname語(yǔ)句在當(dāng)前事務(wù)中創(chuàng)建保管點(diǎn)。運(yùn)用 ROLLBACK TO SAVEPOINTname 語(yǔ)句回滾到創(chuàng)建的保管點(diǎn)。用

11、于取消部分事務(wù)自動(dòng)提交在以下情況中執(zhí)行:DDL 語(yǔ)句。DCL 語(yǔ)句。不運(yùn)用 COMMIT 或 ROLLBACK 語(yǔ)句提交或回滾,正常終了會(huì)話。會(huì)話異常終了或系統(tǒng)異常會(huì)導(dǎo)致自動(dòng)回滾。事務(wù)進(jìn)程提交或回滾前的數(shù)據(jù)形狀改動(dòng)前的數(shù)據(jù)形狀是可以恢復(fù)的其他用戶不能看到當(dāng)前用戶所做的改動(dòng),直到當(dāng)前用戶終了事務(wù)。DML語(yǔ)句所涉及到的行被鎖定, 其他用戶不能操作。提交后的數(shù)據(jù)形狀數(shù)據(jù)的改動(dòng)曾經(jīng)被保管到數(shù)據(jù)庫(kù)中。改動(dòng)前的數(shù)據(jù)曾經(jīng)喪失。一切用戶可以看到結(jié)果。鎖被釋放, 其他用戶可以操作涉及到的數(shù)據(jù)。一切保管點(diǎn)被釋放。COMMIT;Commit complete.改動(dòng)數(shù)據(jù)提交改動(dòng)DELETE FROM employee

12、sWHERE employee_id = 99999;1 row deleted.INSERT INTO departments VALUES (290, Corporate Tax, NULL, 1700);1 row inserted.提交數(shù)據(jù)數(shù)據(jù)回滾后的形狀運(yùn)用 ROLLBACK 語(yǔ)句可使數(shù)據(jù)變化失效:數(shù)據(jù)改動(dòng)被取消。修正前的數(shù)據(jù)形狀可以被恢復(fù)。鎖被釋放。DELETE FROM copy_emp;22 rows deleted.ROLLBACK;Rollback complete.語(yǔ)句級(jí)回滾單獨(dú) DML 語(yǔ)句執(zhí)行失敗時(shí),只需該語(yǔ)句被回滾。Oracle 效力器自動(dòng)創(chuàng)建一個(gè)隱式的保管點(diǎn)。其他

13、數(shù)據(jù)改動(dòng)仍被保管。用戶應(yīng)執(zhí)行 COMMIT 或 ROLLBACK 語(yǔ)句終了事務(wù)。鎖Oracle 數(shù)據(jù)庫(kù)中,鎖是 :并行事務(wù)中防止資源競(jìng)爭(zhēng)。防止用戶動(dòng)作。自動(dòng)運(yùn)用最低級(jí)別的限制。在事務(wù)終了終了前存在。兩種類型: 顯示和隱式。鎖兩種方式:獨(dú)占鎖: 屏蔽其他用戶。共享鎖: 允許其他用戶操作。高級(jí)別的數(shù)據(jù)并發(fā)性:DML: 表共享,行獨(dú)占Queries: 不需求加鎖DDL: 維護(hù)對(duì)象定義提交或回滾后鎖被釋放。排它鎖:假設(shè)事務(wù)T對(duì)數(shù)據(jù)D加X鎖,那么其它任何事務(wù)都不能再對(duì)D加任何類型的鎖,直至T釋放D上的X鎖;普通要求在修正數(shù)據(jù)前要向該數(shù)據(jù)加排它鎖,所以排它鎖又稱為寫鎖。共享鎖:假設(shè)事務(wù)T對(duì)數(shù)據(jù)D加S鎖,那

14、么其它事務(wù)只能對(duì)D加S鎖,而不能加X鎖,直至T釋放D上的S鎖;普通要求在讀取數(shù)據(jù)前要向該數(shù)據(jù)加共享鎖,所以共享鎖又稱為讀鎖。加鎖方法自動(dòng)加鎖INSERT UPDATE DELETE人工加鎖SELECT FOR UPDATE OFLOCK TABLE IN 鎖類型MODE根本的鎖類型有兩種:排它鎖Exclusive locks記為X鎖共享鎖Share locks記為S鎖Oracle DML鎖共有兩個(gè)層次,即行級(jí)鎖和表級(jí)鎖。 Oracle的TX鎖行級(jí)鎖、事務(wù)鎖TM鎖表級(jí)鎖Oracle的DML鎖數(shù)據(jù)鎖其行級(jí)鎖雖然只需一種即X鎖,但其TM鎖表級(jí)鎖類型共有5種,共享鎖S鎖、排它鎖X鎖、行級(jí)共享鎖RS 鎖

15、、行級(jí)排它鎖RX鎖、共享行級(jí)排它鎖SRX鎖,留意:Oracle在行級(jí)只提供 X鎖,所以與RS鎖經(jīng)過SELECT FOR UPDATE語(yǔ)句獲得對(duì)應(yīng)的行級(jí)鎖也是X鎖但是該行數(shù)據(jù)實(shí)踐上還沒有被修正。當(dāng)Oracle執(zhí)行SELECTFOR UPDATE、INSERT、UPDATE、DELETE等DML語(yǔ)句時(shí),系統(tǒng)自動(dòng)在所要操作的表上懇求表級(jí)RS鎖SELECTFOR UPDATE或RX鎖INSERT、UPDATE、DELETE,當(dāng)表級(jí)鎖獲得后,系統(tǒng)再自動(dòng)懇求TX鎖,并將實(shí)踐鎖定的數(shù)據(jù)行的鎖標(biāo)志位置位指向該TX鎖;也可以經(jīng)過LOCK TABLE語(yǔ)句來指定獲得某種類型的TM鎖。下表總結(jié)了Oracle中各SQL

16、語(yǔ)句產(chǎn)生TM鎖的情況:Oracle中各SQL語(yǔ)句產(chǎn)生TM鎖的情況:自動(dòng)加鎖Oracle自動(dòng)加鎖有4種類型數(shù)據(jù)鎖行級(jí)鎖數(shù)據(jù)鎖是防止多個(gè)事務(wù)對(duì)同一個(gè)表或表中同一行操作時(shí)產(chǎn)生的沖突當(dāng)事務(wù)執(zhí)行以下DML語(yǔ)句,INSERT UPDATE DELETE SELECT FOR UPDATE OF.表級(jí)鎖當(dāng)事務(wù)獲得行鎖后,此事務(wù)也自動(dòng)獲得表級(jí)共享鎖,以防止其他事務(wù)進(jìn)展DDL語(yǔ)句同樣可以運(yùn)用LOCK TABLE人工定義表級(jí)共享鎖Lock table table_name in row exclusive mode行加鎖加重效力器的負(fù)擔(dān)Lock table table_name in exclusive mode

17、鎖定命令可以一次鎖定多個(gè)表Lock table tab1,tab2 in exclusive mode鎖類型:Row share、row exclusive、share updateShare、share row exclusive、exclusive封鎖機(jī)制的監(jiān)控v$lock視圖列出當(dāng)前系統(tǒng)持有的或正在懇求的一切鎖的情況,其主要字段闡明如下:v$locked_object視圖列出當(dāng)前系統(tǒng)中哪些對(duì)象正被鎖定查看鎖等待的進(jìn)程查看當(dāng)前的用戶會(huì)話和對(duì)應(yīng)的鎖信息Select s.sid,s.serial#,s.username,s.status,l.id1,l.lmode,l.request from

18、 v$session s,v$lock l where s.sid=l.sid and s.username is not null動(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)程Alter system kill session sid,serial#;死鎖會(huì)話1:SQL SELECT * FROM TEST FOR UPDATE;會(huì)話2:SQL SELECT * FROM TEMP FOR UPDATE;再回到會(huì)話1:SQL SELECT * FROM TEMP FOR UPDATE;. 處于等待形狀再回到會(huì)話

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論