欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
第四章 事務(wù)管理

Oracle 概念(Oracle 10.2) 第四章 事務(wù)管理

4、事務(wù)管理

這一章對事務(wù)做了定義以及描述了如何通過(guò)事務(wù)管理你的工作。

本章包含下列內容:

事務(wù)的介紹

事務(wù)管理概述

自主事務(wù)概述

事務(wù)介紹

事務(wù)是包含一個(gè)多或多個(gè)SQL語(yǔ)句的邏輯單位。一個(gè)事務(wù)是一個(gè)原子單位。事務(wù)中的所有SQL語(yǔ)句只能全部提交(應用到數據庫)或者全部回滾(從數據庫撤銷(xiāo))。

一個(gè)事務(wù)從第一個(gè)執行的SQL語(yǔ)句開(kāi)始。一個(gè)事務(wù)在它被提交或者被回滾結束,結束事務(wù)可以顯式的使用COMMIT或者ROLLBACK語(yǔ)句或執行一個(gè)DDL語(yǔ)句(隱含著(zhù)事務(wù)結束)。

要說(shuō)明事務(wù)的概念可以想象一個(gè)銀行數據庫。當一個(gè)銀行客戶(hù)從儲蓄賬號中取出錢(qián)到活期賬號中,事務(wù)由三個(gè)獨立的操作組成:

儲蓄帳戶(hù)減值

活期帳戶(hù)增值

在事務(wù)日志中記錄事務(wù)

Oracle必須適合兩種情況。如果三個(gè)SQL語(yǔ)句都按照正確的順序執行來(lái)維護賬號,事務(wù)的結果可以應用到數據庫中。雖然如此,如果發(fā)生一個(gè)帳戶(hù)資金不足、無(wú)效賬號或者硬件錯誤的問(wèn)題讓事務(wù)中的一個(gè)或者兩個(gè)語(yǔ)句沒(méi)有完成,整個(gè)事務(wù)必須回滾確保帳戶(hù)余額是正確的。

圖4-1描述了銀行事務(wù)示例

語(yǔ)句執行和事務(wù)控制

一個(gè)成功運行的SQL語(yǔ)句和提交的事務(wù)不同。成功執行意味著(zhù)單個(gè)語(yǔ)句是:

解析

創(chuàng )建有效的SQL結構

作為一個(gè)原子單位正確運行。例如,多行更新的所有行都被修改

雖然如此,在包含語(yǔ)句的事務(wù)提交之前,事務(wù)都是可以回滾的,所有事務(wù)做的修改都可以撤銷(xiāo)。一個(gè)語(yǔ)句能夠成功運行,事務(wù)不能(因為事務(wù)不是語(yǔ)句,只有開(kāi)始和結束,只有提交和回滾,沒(méi)有成功和失敗的說(shuō)法)。

提交意味著(zhù)一個(gè)用戶(hù)顯示或者隱式的要求事務(wù)的變化持久化。一個(gè)顯式的請求是當用戶(hù)執行COMMIT語(yǔ)句時(shí)。一個(gè)隱式的請求是應用程序正常結束或者一個(gè)DDL操作完成后。事務(wù)包含的SQL語(yǔ)句造成的修改變得持久,并對事務(wù)之后的其他用戶(hù)可見(jiàn)。事務(wù)提交之后執行的SQL可以看到已經(jīng)提交的修改。

你可以用SET TRANSACTION ..... NAME語(yǔ)句在你開(kāi)始事務(wù)之前設置事務(wù)名稱(chēng)。這使得監控長(cháng)時(shí)間運行的事務(wù)更加容易,解決出現問(wèn)題的分布式事務(wù)也是如此。

語(yǔ)句級別的回滾

如果SQL語(yǔ)句執行的任何時(shí)候產(chǎn)生錯誤,這個(gè)語(yǔ)句造成的所有的影響都會(huì )回滾?;貪L的結果就好像語(yǔ)句從沒(méi)有運行過(guò)。這個(gè)操作是個(gè)語(yǔ)句級別的回滾。

SQL語(yǔ)句執行時(shí)遇到的錯誤導致語(yǔ)句級別回滾。當向主鍵內插入重復的數據就會(huì )產(chǎn)生這樣的錯誤例子。死鎖(對同一數據的爭用)的SQL語(yǔ)句也會(huì )導致語(yǔ)句級別的回滾。如果在SQL語(yǔ)句解析時(shí)遇到了錯誤,比如語(yǔ)法錯誤,因為還沒(méi)有運行,所以不會(huì )導致語(yǔ)句級別回滾。

一個(gè)SQL語(yǔ)句的失敗只會(huì )損失它想要的執行的任何工作本身。不會(huì )導致?lián)p失當前事務(wù)之前的任何工作。如果一個(gè)語(yǔ)句是DDL語(yǔ)句,然后就會(huì )隱含提交還沒(méi)有撤銷(xiāo)的操作(即使這個(gè)DDL語(yǔ)句有錯誤也一樣)。

可恢復的空間分配

Oracle提供了一種在空間分配失敗事件中暫停、重新啟動(dòng)、執行大的數據庫操作的辦法。這使得管理員可以采取正確的動(dòng)作,而不是Oracle數據庫對用戶(hù)返回一個(gè)錯誤。在錯誤環(huán)境被糾正之后,暫停的操作自動(dòng)重新開(kāi)始。

只有在客戶(hù)端對于會(huì )話(huà)使用了ALTER SESSION語(yǔ)句來(lái)顯示啟動(dòng)重新開(kāi)始功能之后,一個(gè)語(yǔ)句才能在運行在重新開(kāi)始模式(resumable)下。

當下列情況出現時(shí)重新啟動(dòng)的空間分配會(huì )暫停:

空間不足

達到最大數據區段

超過(guò)空間限額

對于不可重新開(kāi)始的空間分配,這些情況會(huì )導致錯誤,語(yǔ)句被回滾。

語(yǔ)句的暫停導致事務(wù)的暫停。因而事務(wù)的所有資源會(huì )在語(yǔ)句暫停和重新啟動(dòng)這段時(shí)間一直持有。

當錯誤環(huán)境過(guò)去(例如,用戶(hù)介入或者其他查詢(xún)釋放了排序空間),暫停的語(yǔ)句自動(dòng)恢復執行狀態(tài)。

事務(wù)管理概述

Oracle中的第一個(gè)執行的SQL語(yǔ)句會(huì )開(kāi)始一個(gè)事務(wù)。一個(gè)執行的SQL語(yǔ)句是對實(shí)例產(chǎn)生調用的一個(gè)SQL語(yǔ)句,語(yǔ)句包括DML和DDL語(yǔ)句。

當事務(wù)開(kāi)始時(shí),Oracle對這個(gè)事務(wù)分配一段可用的undo表空間來(lái)保存新事務(wù)的重做條目。

一個(gè)事務(wù)在任一下列情況下終結:

用戶(hù)提交了不附帶SAVEPOINT子句的COMMIT或ROLLBACK語(yǔ)句

用戶(hù)運行例如CREATE,DROP,RENAME或ALTER的DDL語(yǔ)句。如果當前事務(wù)中包含任何DML語(yǔ)句,Oracle先提交這個(gè)事務(wù),然后將這個(gè)DDL語(yǔ)句作為一個(gè)新的單獨的語(yǔ)句事務(wù)來(lái)運行和提交(注意:即使這個(gè)DDL語(yǔ)句錯誤也會(huì )如此,因為Oracle先提交事務(wù)再執行DDL)。

一個(gè)用戶(hù)從Oracle中斷連接。當前的事務(wù)被提交。

一個(gè)用戶(hù)進(jìn)程不正常中斷。當前事務(wù)被回滾。

一個(gè)事務(wù)結束之后,下一個(gè)執行的SQL語(yǔ)句自動(dòng)啟動(dòng)后續的事務(wù)。

注意:應用程序應該在程序中斷之前顯式的提交或者回滾事務(wù)。

提交事務(wù)

提交一個(gè)事務(wù)意味著(zhù)事務(wù)中執行的SQL語(yǔ)句造成的修改持久化。

在一個(gè)事務(wù)提交修改的數據之前,會(huì )發(fā)生下列事情:

Oracle已經(jīng)產(chǎn)生了undo信息。Undo信息包含事務(wù)中的SQL語(yǔ)句修改的數據的原始值

Oracle已經(jīng)在SGA的重做日志緩存中產(chǎn)生重做日志條目。重做日志記錄包含數據塊的修改和回滾段的修改信息。在事務(wù)提交之前這些修改會(huì )寫(xiě)入磁盤(pán)。

修改已經(jīng)保存在SGA的數據庫緩存中。這些修改在事務(wù)提交之前會(huì )寫(xiě)入磁盤(pán)。

    注意:提交的事務(wù)在SGA中數據庫緩存中保存的修改的數據不需要立刻由后臺數據庫寫(xiě)入進(jìn)程(DBWn)寫(xiě)入數據文件。這個(gè)寫(xiě)入會(huì )在數據庫認為寫(xiě)入效率最高的時(shí)候寫(xiě)入。可能在事務(wù)提交或者事務(wù)提交之后一段時(shí)間才寫(xiě)入。

當一個(gè)事務(wù)被提交,會(huì )發(fā)生下列事情:

1、相關(guān)undo表空間的內部事務(wù)表記錄事務(wù)被提交,事務(wù)的唯一系統修改號(SCN)被分配并保存在表中。

2、日志寫(xiě)入進(jìn)程(LGWR)將SGA的重做日志緩存中的重做日志條目寫(xiě)入重組日志文件。它還將事務(wù)的SCN寫(xiě)入重做日志文件中。這個(gè)原子事件代表了事務(wù)的完成。

3、Oracle釋放擁有的行和表上的鎖

4、Oracle標識事務(wù)完成。

注意:LGWR默認情況下會(huì )同步的將重做信息寫(xiě)入在線(xiàn)重做日志文件,事務(wù)默認情況下也會(huì )等待重做信息寫(xiě)入磁盤(pán),然后將提交返回給客戶(hù)。雖然如此,在低事務(wù)提交級別的應用程序開(kāi)發(fā)人員可以指定重做信息可以異步寫(xiě)入,而事務(wù)也不需要等待重做日志寫(xiě)入磁盤(pán)。

回滾事務(wù)

回滾的意思是在一個(gè)沒(méi)有提交的事務(wù)中撤銷(xiāo)其中SQL執行造成的數據修改。Oracle使用undo表空間(或者回滾段)來(lái)保存原始值。重做日志包含修改的記錄。

Oracle可以回滾整個(gè)沒(méi)有提交的事務(wù)。而且也可以回滾到未提交事務(wù)中標識為保存點(diǎn)(savepoint)的尾部。

所有類(lèi)型的回滾都使用同樣的過(guò)程:

語(yǔ)句級別回滾(語(yǔ)句執行錯誤或者死鎖)

回滾到保存點(diǎn)(savepoint)

根據用戶(hù)要求回滾

進(jìn)程意外中斷造成的事務(wù)回滾

實(shí)例意外中斷的未決事務(wù)回滾

恢復過(guò)程中沒(méi)有完成的事務(wù)的回滾

如果不指向任何保存點(diǎn)(savepoint)回滾整個(gè)事務(wù),會(huì )發(fā)生:

1、 Oracle使用相關(guān)undo表空間來(lái)撤銷(xiāo)所有SQL語(yǔ)句造成的改變

2、 Oracle釋放所有數據鎖

3、 結束事務(wù)。

事務(wù)保存點(diǎn)

你可以在事務(wù)環(huán)境中標識叫做保存點(diǎn)的中間標志。保存點(diǎn)(savepoint)將一個(gè)長(cháng)事務(wù)分成多個(gè)小部分。

使用保存點(diǎn),你可以在一個(gè)長(cháng)事務(wù)中在任意點(diǎn)標識你的工作。這樣你可以選擇回滾事務(wù)中當前檢查點(diǎn)之前的工作,或者檢查點(diǎn)之后的工作。例如,你可以在執行一系列長(cháng)的復雜的更新時(shí)使用檢查點(diǎn),所以如果你遇到了一個(gè)錯誤,你不需要重新執行所有的語(yǔ)句。

在應用程序開(kāi)發(fā)中保存點(diǎn)也非常有用。如果一個(gè)過(guò)程包含多個(gè)函數,然后你可以在每個(gè)函數開(kāi)始前設置一個(gè)保存點(diǎn)。這樣如果一個(gè)函數失敗了,你很容易將數據返回到函數執行前的狀態(tài)并用不同的參數來(lái)執行函數,或者你可以執行一個(gè)恢復動(dòng)作。

回滾一個(gè)檢查點(diǎn)之后,Oracle會(huì )釋放回滾語(yǔ)句獲得的數據鎖。其他等待鎖定資源的事務(wù)就可以執行了。其他打算更新鎖定行的事務(wù)也可以執行了。

當一個(gè)事務(wù)回滾到保存點(diǎn),會(huì )發(fā)生:

1、 Oracle只回滾檢查點(diǎn)之后的語(yǔ)句

2、 Oracle維護所有的保存點(diǎn),但是指定保存點(diǎn)之后的所有檢查點(diǎn)做的改變都將丟失。

3、 Oracle釋放這個(gè)檢查點(diǎn)以來(lái)所有需要的表或行鎖,但是保留保存點(diǎn)之前需要的所有數據鎖。

事務(wù)仍然保持活動(dòng)并可以繼續運行。

當一個(gè)會(huì )話(huà)在等待一個(gè)事務(wù)時(shí),回滾到檢查點(diǎn)不會(huì )釋放任何行鎖。如果事務(wù)沒(méi)有獲得鎖,為確保一個(gè)事務(wù)沒(méi)有掛起,在UPDATE和DELETE語(yǔ)句前執行FOR UPDATE ……NOWAIT。(這個(gè)指向已經(jīng)回滾的保存點(diǎn)之前獲得的鎖。保存點(diǎn)之后的獲得的鎖都被釋放了,因為保存點(diǎn)之后執行的語(yǔ)句都被完全回滾。)

事務(wù)命名

你可以使用一個(gè)簡(jiǎn)單的容易記憶的文本字符串命名一個(gè)事務(wù)。名字提示了事務(wù)是做什么的。事務(wù)命名代替了分布式事務(wù)的提交備注,包含下列優(yōu)點(diǎn):

很容易監控長(cháng)時(shí)間運行的事務(wù)和解決有問(wèn)題的分布式事務(wù)

你可以在應用程序中和事務(wù)ID一起顯示事務(wù)名稱(chēng)。例如,在監控系統活動(dòng)時(shí),數據庫管理員可以在企業(yè)管理器中顯示事務(wù)名稱(chēng)。

事務(wù)名稱(chēng)寫(xiě)入到事務(wù)審核重做記錄中,兼容Oracle9i或更高版本

LogMiner可以使用事務(wù)名稱(chēng)在重做日志中搜索特定的事務(wù)審核記錄

你可以在數據字典視圖中使用事務(wù)名查找特定的事務(wù),如V$TRANSACTION

事務(wù)如何命名

在啟動(dòng)事務(wù)之前,使用SET TRANSACTION  NAME語(yǔ)句來(lái)命名事務(wù)。

當你命名一個(gè)事務(wù)時(shí),你同時(shí)將事務(wù)名稱(chēng)和ID做了關(guān)聯(lián)。事務(wù)名稱(chēng)并不需要保證唯一。同一個(gè)用戶(hù)同時(shí)可以擁有同名的不同事務(wù)。你可以使用任何名稱(chēng)來(lái)分辨不同的事務(wù)。

提交事務(wù)

在以前的發(fā)布版本中,你可以使用提交備注來(lái)對事務(wù)進(jìn)行關(guān)聯(lián)。雖然如此,一個(gè)備注只有在事務(wù)提交時(shí)才會(huì )關(guān)聯(lián)索引。

提交備注在后續版本中仍然支持。雖然如此,Oracle強烈建議你使用事務(wù)名稱(chēng)。提交備注在命名事務(wù)中會(huì )被忽略。

兩步提交機制

在分布式數據庫中,Oracle必須跨網(wǎng)絡(luò )協(xié)調事務(wù)控制以及維護數據完整性。即使在網(wǎng)絡(luò )或系統故障的情況下也要做到。

分布式事務(wù)指的是包含在分布式數據上兩個(gè)或多個(gè)節點(diǎn)上運行的一個(gè)或多個(gè)更新數據的語(yǔ)句的事務(wù)。

兩步提交確保了參與一個(gè)分布式事務(wù)的所有數據庫服務(wù)器的事務(wù)完全失敗或者完全成功。兩步提交機制還保護了完整性約束隱含的DML操作、遠程過(guò)程調用和觸發(fā)器等。

Oracle的兩步提交機制對使用分布式事務(wù)的用戶(hù)來(lái)說(shuō)是完全透明的。事實(shí)上,用戶(hù)甚至不需要知道事務(wù)是分布式的。COMMIT語(yǔ)句標識了事務(wù)的結束,并自動(dòng)啟動(dòng)兩步提交機制來(lái)提交事務(wù)。在數據庫應用程序中不需要為包含的分布式事務(wù)進(jìn)行額外的編碼或者復雜的語(yǔ)法定義。

后臺恢復進(jìn)程(RECO)自動(dòng)解決有問(wèn)題的分布式事務(wù),這些問(wèn)題事務(wù)指的是由于任何原因的系統或網(wǎng)絡(luò )故障導致的提交失敗。當故障被修復,通訊重新建立時(shí),每個(gè)本地Oracle數據庫的RECO進(jìn)程自動(dòng)提交和回滾問(wèn)題進(jìn)程,從而保證相關(guān)節點(diǎn)的一致性。

在長(cháng)期的故障中,Oracle允許每個(gè)本地管理員手工提交或者回滾任何由于故障導致的有問(wèn)題的分布式事務(wù)。這個(gè)選項使得本地數據庫管理員可以釋放任何由于長(cháng)時(shí)間故障而造成的鎖。

如果一個(gè)數據庫必須恢復到過(guò)去的一個(gè)時(shí)間點(diǎn),Oracle恢復工具可以讓其他站點(diǎn)的數據庫管理員也恢復他們的數據庫到同一的時(shí)間點(diǎn)。這個(gè)操作確保了整體數據庫的一致性。

自治事務(wù)概述

自治事務(wù)是指在一個(gè)事務(wù)內部調用的獨立事務(wù)。一個(gè)自治事務(wù)可以讓你離開(kāi)調用事務(wù)的環(huán)境、執行一些SQL操作、提交或者撤銷(xiāo)這些操作,然后返回到調用事務(wù)的環(huán)境,然后繼續執行這個(gè)事務(wù)。

只要開(kāi)始執行,一個(gè)自治事務(wù)就完全獨立于調用它的主事務(wù)。它看不到主事務(wù)的任何未提交的改變、不和注事務(wù)共享任何鎖和資源。自治事務(wù)產(chǎn)生的改變在自身的提交之后就可以讓其他事務(wù)看到。

一個(gè)自治事務(wù)可以調用另一個(gè)自治事務(wù)。只要有足夠的資源,可以調用任意層次的自治事務(wù)。

在自治事務(wù)和它的調用事務(wù)之間可能產(chǎn)生死鎖。Oracle可以檢測到這個(gè)死鎖,并返回一個(gè)錯誤。應用開(kāi)發(fā)人員負責避免死鎖出現。

自治事務(wù)在實(shí)現需要獨立執行的動(dòng)作時(shí)非常有用,自治事務(wù)會(huì )忽略調用事務(wù)的提交或者回滾的操作,比如事務(wù)日志和重新計數這種情況。

自治PL/SQL塊

你可以在PL/SQL塊中調用自治事務(wù),使用標記AUTONOMOUS_TRANSACTION。一個(gè)標記可以直接編譯。你可以指定下列類(lèi)型的PL/SQL塊為自治事務(wù):

存儲過(guò)程或函數

本地過(guò)程和函數

類(lèi)型方法

自治事務(wù)塊的上層

當一個(gè)自治PL/SQL塊執行時(shí),調用者的事務(wù)環(huán)境就被暫停了。這個(gè)操作確保這個(gè)塊執行的SQL操作不依賴(lài)且不影響調用者事務(wù)環(huán)境的狀態(tài)。

當一個(gè)自治塊執行另一個(gè)自治事務(wù)塊或者其本身時(shí),被調用塊并不和調用塊共享任何事物環(huán)境。雖然如此,當一個(gè)自治塊執行一個(gè)非自治塊時(shí)(就是說(shuō)一個(gè)沒(méi)有聲明為自治事務(wù)),被調用塊繼承了調用事務(wù)塊的事務(wù)環(huán)境。

自治事務(wù)塊中的事務(wù)控制語(yǔ)句

自治PL/SQL塊中的事務(wù)控制語(yǔ)句只在當前活動(dòng)的自治事務(wù)中起作用。下列語(yǔ)句:

SET TRANSACTION

COMMIT

ROLLBACK

SAVEPOINT

ROLLBACK TO SAVEPOINT

類(lèi)似的,主事務(wù)中的事務(wù)控制語(yǔ)句只對本事務(wù)有效,不影響任何它調用的自治事務(wù)。例如,將主事務(wù)回滾到自治事務(wù)開(kāi)始之前的保存點(diǎn)(savepoint)并不會(huì )撤銷(xiāo)自治事務(wù)。

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
[整理]Oracle面試題(基礎篇)
Oracle學(xué)習筆記
CSDN技術(shù)中心 ORACLE 鎖
Oracle與SQLServer事務(wù)處理的比較
Oracle數據完整性和鎖機制
Oracle與SQL Server事務(wù)處理的比較 - 51CTO.COM
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久