溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle 11g R2 事物的控制

發(fā)布時間:2020-06-15 00:01:03 來源:網(wǎng)絡 閱讀:348 作者:初心WHQ 欄目:關系型數(shù)據(jù)庫

控制事務

銀行轉(zhuǎn)賬

李四給張三匯款

ACID

A:原子性:整個事務中所有的步驟是不可分割的,原子性原則規(guī)定一個事務的各個步驟都必須完成,否則整個事務都不會完成。即保證一個事務中所有的操作都能完成或者都不能完成,如果事務在完成之前出現(xiàn)任何錯誤,那么數(shù)據(jù)庫自身必須保證自動回滾所做過的任何事務部分(并且必須自動進行)

C:一致性:無論是事務前,事務中,事務后,數(shù)據(jù)始終處于一致的狀態(tài)。例如李四給張三匯款10000,那么就需要從李四賬戶減去10000,給張三的賬戶增加10000。Oracle使用撤銷段來保證數(shù)據(jù)的一致性。

I:隔離性:隔離性的原則規(guī)定,未完成的事務必須不可視。在某個事務進行期間,只有執(zhí)行該事務的會話能看見所做的變化,而其他所有的會話看見的都是沒有變化的數(shù)據(jù)(而不是更改后的新值)。這個規(guī)定的邏輯含義是:首先,由于整個事務可能沒有全部完成,因此不允許其他用戶看到可能回滾的變化;其次,在某個事務進行期間,數(shù)據(jù)是不連貫的,李四的賬戶減掉10000,但張三的賬戶還沒有增加10000。事務的隔離性要求數(shù)據(jù)庫必須對其他用戶隱藏正在進行的事務,這些用戶只能看到?jīng)]有被更新的數(shù)據(jù),只有在事務完成時,他們才能看到所有變化。Oracle使用撤銷段來保證事務的隔離性。

創(chuàng)建練習環(huán)境:創(chuàng)建一個aa表,插入3條記錄,并提交事物。
Oracle 11g R2 事物的控制
查看aa表的記錄,插入一條記錄,當我們執(zhí)行一條DML語句時候,就自動開始了一個事物
Oracle 11g R2 事物的控制
此時insert記錄的事務并沒有提交,沒有提交事務就沒有真正的完成,此時還有rollback的機會。

Scott用戶在當前會話中查看aa表時可以看到被插入的記錄
Oracle 11g R2 事物的控制
打開一個新的sqlplus會話,查看aa表時會發(fā)現(xiàn)并沒有新插入的記錄:這是事物的隔離性
Oracle 11g R2 事物的控制
在第一個sqlplus會話中提交事物
Oracle 11g R2 事物的控制
提交之后才能在第二個會話中看到被插入的第四條記錄
Oracle 11g R2 事物的控制
D:持久性:一旦使用commit命令來結(jié)束某個事務,那么就必須保證數(shù)據(jù)庫不丟失這個事務。在事務進行期間,隔離性的原則要求除了指定會話涉及的用戶之外的任何用戶都不能查看當前所做的變化。不過事務一旦完成,所有用戶都必須能夠立即看到所做的變化,同時數(shù)據(jù)庫必須保證這些變化絕不會丟失。Oracle通過使用日志文件來滿足這個需求。日志文件具有兩

種形式:聯(lián)機重做日志文件,歸檔重做日志文件。

一個正確配置的oracle數(shù)據(jù)庫是不可能丟失數(shù)據(jù)的。當然用戶的錯誤(包括不恰當?shù)腄ML或刪除對象)也會造成數(shù)據(jù)的丟失

DDL語句有自動提交功能(create、drop、truncate、alter)
Oracle 11g R2 事物的控制
創(chuàng)建表AA,插入一條記錄
Oracle 11g R2 事物的控制
回退事物
Oracle 11g R2 事物的控制
在表中插入一條記錄
Oracle 11g R2 事物的控制
在sqlplus中正常退出
Oracle 11g R2 事物的控制
在另外一個sqlplus中查看aa表中的記錄,會發(fā)現(xiàn)新插入的tom1的記錄了。如果使用sqlplus工具更改了數(shù)據(jù)之后,正常退出sqlplus時,oracle會自動提交事物。
Oracle 11g R2 事物的控制
目前aa表中只有tom1的記錄
Oracle 11g R2 事物的控制
模擬實例重啟
Oracle 11g R2 事物的控制
使用scott用戶連接,查看aa表中的內(nèi)容,發(fā)現(xiàn)insert tom2的記錄由于實例重啟自動被回滾了。
Oracle 11g R2 事物的控制
使用autocommit實現(xiàn)事物的自動提交
Oracle 11g R2 事物的控制
即使執(zhí)行回滾,查詢結(jié)果仍然包含新插入的數(shù)據(jù),關閉自動提交時可以使用set autocommit off
Oracle 11g R2 事物的控制
關于事物的總結(jié):

  1. 需要注意的是,Commit:只是用來確認這個數(shù)據(jù)已經(jīng)正式的修改了,不一定非得寫入硬盤,DBWn什么都不做。執(zhí)行commit命令時發(fā)生的所有物理操作時LGWR進程將日志緩沖區(qū)的內(nèi)容寫入磁盤。DBWN進程完全沒有執(zhí)行任何操作。DBWN進程與提交事物處理沒有關系,不過最終DBWN進程會將變化的數(shù)據(jù)塊寫入磁盤。

  2. commit和rollback語句只應于DML語句,我們無法回滾DDL語句。DDL語句一旦被執(zhí)行就會立即具有持久狀態(tài)。

3.自動提交和隱式提交:oracle在某些情況下可以進行自動提交:執(zhí)行DDL語句是一種情況,退出某個用戶進程也是一種自動提交。

如果對此有興趣,請掃下面二維碼免費獲取更多詳情
Oracle 11g R2 事物的控制

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI