第10章事務、鎖、閃回_第1頁
第10章事務、鎖、閃回_第2頁
第10章事務、鎖、閃回_第3頁
第10章事務、鎖、閃回_第4頁
第10章事務、鎖、閃回_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第10章章 事務、鎖、閃回和事務、鎖、閃回和Undo表空間表空間10. 1 事事 務務10. 2 鎖鎖10. 3 閃閃 回回 操操 作作10. 4 Undo表空間表空間10. 1 事事 務務10.1.1 事務的概念事務的概念在現(xiàn)實生活中,事務隨處可見,如銀行交易、股票交易、網(wǎng)上購物、庫存品控制等。在所有這些例子中,事務的成功取決于這些相互依賴的行為是否能夠被成功地執(zhí)行,是否互相協(xié)調(diào)。其中的任何一個失敗都將取消整個事務,系統(tǒng)返回到事務處理之前的狀態(tài)。下面使用一個簡單的例子來幫助理解事務。向公司數(shù)據(jù)庫添加一名新的雇員(見圖10.1)。10.1.1 事務的概念事務的概念(1)原子性原子性。原子性意

2、味著每個事務都必須被認為是一個不可分割的單元。假設(shè)一個事務由兩個或者多個任務組成,其中的語句必須同時成功才能認為事務是成功的。如果事務失敗,系統(tǒng)將會返回到事務以前的狀態(tài)。(2)一致性一致性。不管事務是完全成功完成還是中途失敗,當事務使系統(tǒng)中的所有數(shù)據(jù)處于一致的狀態(tài)時存在一致性。參照前面的例子,一致性是指如果從系統(tǒng)中刪除了一個雇員,則所有和該雇員相關(guān)的數(shù)據(jù),包括工資數(shù)據(jù)和組的成員資格也要被刪除。(3)隔離性隔離性。隔離性是指每個事務在它自己的空間發(fā)生,和其他發(fā)生在系統(tǒng)中的事務隔離,而且事務的結(jié)果只有在它完全被執(zhí)行時才能看到。即使在這樣的一個系統(tǒng)中同時發(fā)生了多個事務,隔離性原則保證某個特定事務在完

3、全完成之前,其結(jié)果是看不見的。(4)持久性持久性。持久性意味著一旦事務執(zhí)行成功,在系統(tǒng)中產(chǎn)生的所有變化將是永久的。即使系統(tǒng)崩潰,一個提交的事務仍然存在。當一個事務完成,數(shù)據(jù)庫的日志已經(jīng)被更新時,持久性就開始發(fā)生作用。大多數(shù)RDBMS產(chǎn)品通過保存所有行為的日志來保證數(shù)據(jù)的持久性,這些行為是指在數(shù)據(jù)庫中以任何方法更改數(shù)據(jù)。10.1.2 事務處理事務處理(1)連接到數(shù)據(jù)庫,并開始執(zhí)行第一條DML語句;(2)前一個事務結(jié)束或者執(zhí)行一條自動提交事務的語句。發(fā)生如下事件時,Oracle認為事務結(jié)束。(1)用戶執(zhí)行COMMIT語句提交事務,或者執(zhí)行ROLLBACK語句撤銷了事務;(2)用戶執(zhí)行了一條DDL語

4、句,如CREATE、DROP或ALTER語句;(3)用戶執(zhí)行了一條DCL語句,如GRANT、REVOKE、AUDIT、NOAUDIT等;(4)用戶斷開與數(shù)據(jù)庫的連接,這時用戶當前的事務會被自動提交;(5)執(zhí)行DML語句失敗,這時當前的事務會被自動回退。10.1.2 事務處理事務處理1提交事務提交事務(1)在回退段的事務表內(nèi)記錄這個事務已經(jīng)提交,并且生成一個唯一的系統(tǒng)改變號(SCN)保存到事務表中,用于唯一標識這個事務。(2)啟動LGWR后臺進程,將SGA區(qū)重做日志緩存的重做記錄寫入聯(lián)機重做日志文件,并且將該事務的SCN也保存到聯(lián)機重做日志文件中。(3)釋放該事務中各個SQL語句所占用的系統(tǒng)資源

5、。(4)通知用戶事務已經(jīng)成功提交。10.1.2 事務處理事務處理【例10.1】 使用INSERT語句向XSB表插入一行數(shù)據(jù),并使用COMMIT提交事務。首先啟動SQL Developer,以SCOTT用戶連接數(shù)據(jù)庫,使用INSERT語句:INSERT INTO XSB(學號, 姓名, 性別, 出生時間, 專業(yè), 總學分) VALUES(151117, 劉明, 男,TO_DATE(19960315,YYYYMMDD), 計算機, 48);之后使用SELECT語句查詢剛剛插入的那行數(shù)據(jù):SELECT 學號, 姓名, 性別, 出生時間, 專業(yè), 總學分 FROM XSB WHERE 學號=15111

6、7;執(zhí)行結(jié)果如圖10.2所示。10.1.2 事務處理事務處理現(xiàn)在打開SQL*Plus(同時保持SQL Developer的連接不關(guān)閉),使用相同的用戶賬號連接數(shù)據(jù)庫,執(zhí)行同樣的查詢,結(jié)果如圖10.3所示。10.1.2 事務處理事務處理2回退全部事務回退全部事務如果在對數(shù)據(jù)庫修改的過程中用戶不打算保存對數(shù)據(jù)所做的修改,可以使用ROLLBACK語句回退整個事務,將數(shù)據(jù)庫的狀態(tài)回退到上一個提交成功的狀態(tài)。語法格式為:ROOLBACK;Oracle通過回退段(或撤銷表空間)存儲數(shù)據(jù)庫修改前的數(shù)據(jù),通過重做日志記錄撤銷對數(shù)據(jù)庫所做的修改。如果回退整個事務,Oracle將執(zhí)行以下操作。(1)Oracle通

7、過使用回退段中的數(shù)據(jù)撤銷事務中所有SQL語句對數(shù)據(jù)庫所做的修改。(2)Oracle服務進程釋放事務所使用的資源。(3)通知用戶事務回退成功。10.1.2 事務處理事務處理3回退部分事務回退部分事務設(shè)置保存點使用SAVEPOINT語句來實現(xiàn),語法格式為:SAVEPOINT ;如果要回退到事務的某個保存點,則使用ROLLBACK TO語句,語法格式為:ROLLBACK TO SAVEPOINT ROLLBACK TO語句只會回退用戶所做的一部分操作,事務并沒有結(jié)束。直到使用COMMIT或ROLLBACK命令以后,用戶的事務處理才算結(jié)束。如果回退部分事務,Oracle將執(zhí)行以下操作。(1)Oracl

8、e通過使用回退段中的數(shù)據(jù),撤銷事務中保存點之后的所有更改,但保存保存點之前的更改。(2)Oracle服務進程釋放保存點之后各個SQL語句所占用的系統(tǒng)資源,但保存保存點之前各個SQL語句所占用的系統(tǒng)資源。(3)通知用戶回退到保存點的操作成功。(4)用戶可以繼續(xù)執(zhí)行當前的事務。10.1.2 事務處理事務處理【例10.2】 向XSCJ數(shù)據(jù)庫的XSB表添加一行數(shù)據(jù),設(shè)置一個保存點,然后刪除該行數(shù)據(jù)。但執(zhí)行后,新插入的數(shù)據(jù)行并沒有刪除,因為事務中使用了ROLLBACK TO語句將操作回退到保存點My_sav,即刪除前的狀態(tài)。首先添加數(shù)據(jù):INSERT INTO XSB(學號, 姓名, 性別, 出生時間,

9、 專業(yè), 總學分) VALUES(151118, 王祥, 男,TO_DATE(19960418,YYYYMMDD), 計算機, 48);然后設(shè)置保存點My_sav:SAVEPOINT My_sav;查詢該行數(shù)據(jù):SELECT 學號, 姓名, 性別, 出生時間, 專業(yè), 總學分 FROM XSB WHERE 學號=151118;10.1.2 事務處理事務處理執(zhí)行結(jié)果如圖10.4所示。10.1.2 事務處理事務處理之后刪除該行數(shù)據(jù):DELETE FROM XSB WHERE 學號=151118;執(zhí)行相同的查詢,結(jié)果如圖10.5所示。10.1.2 事務處理事務處理回退到保存點My_sav:ROLLB

10、ACK TO My_sav;提交事務:COMMIT;執(zhí)行查詢的結(jié)果如圖10.6所示。10.1.3 自治事務自治事務自治事務提供了一種用PL/SQL控制事務的新方法,可以用于: 頂層匿名塊; 本地(過程中的過程)、獨立或打包的函數(shù)和過程; 對象類型的方法; 數(shù)據(jù)庫觸發(fā)器。自治事務在DECLARE塊中使用PRAGMA AUTONOMOUS_TRANSACTION語句來聲明,自治事務從離PRAGMA后的第一個BEGIN開始,只要此BEGIN塊仍在作用域,則都屬于自治事務。結(jié)束一個自治事務必須提交一個COMMIT、ROLLBACK或執(zhí)行DDL。10.1.3 自治事務自治事務【例10.3】 在XSB表中

11、刪除一行數(shù)據(jù),接著定義一個自治事務,在自治事務中向XSB表添加一行數(shù)據(jù),最后在外層事務中回退刪除數(shù)據(jù)的操作。首先刪除XSB表的一行數(shù)據(jù):DELETE FROM XSB WHERE 學號= 151242;接著定義一個自治事務,并添加數(shù)據(jù):DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN INSERT INTO XSB (學號, 姓名, 性別, 出生時間, 專業(yè), 總學分) VALUES(151301, 張建, 男,TO_DATE(19970315,YYYYMMDD), 軟件工程, 48); COMMIT;END;/最后使用ROLLBACK語句回退當前事務:R

12、OLLBACK;10.1.3 自治事務自治事務之后查看XSB表中的內(nèi)容,可以發(fā)現(xiàn),151242號學生的記錄沒有被刪除,而151301號學生的記錄已經(jīng)保存到XSB表中,如圖10.7所示。10.1.3 自治事務自治事務【例10.4】 重新創(chuàng)建【例7.9】的觸發(fā)器,使其能正常工作。CREATE OR REPLACE TRIGGER del_xs BEFORE DELETE ON XSB FOR EACH ROWDECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN INSERT INTO XSB_HIS (學號, 姓名, 性別, 出生時間, 專業(yè), 總學分, 備注)

13、VALUES(:OLD.學號,:OLD.姓名, :OLD.性別, :OLD.出生時間, :OLD.專業(yè), :OLD.總學分, :OLD.備注); COMMIT;END;接著刪除XSB表的151301號學生記錄:DELETE FROM XSB WHERE 學號= 151301;然后查看XSB_HIS表,即可發(fā)現(xiàn)已經(jīng)添加了該行數(shù)據(jù),如圖10.8所示。10. 2 鎖鎖1鎖機制鎖機制在Oracle 12c中,提供了以下兩種鎖機制。(1)共享鎖共享鎖(share lock)。共享鎖通過數(shù)據(jù)存取的高并行性來實現(xiàn)。如果獲得了一個共享鎖,那么用戶就可以共享相同的資源。許多事務可以獲得相同資源上的共享鎖。例如,

14、多個用戶可以在相同的時間讀取相同的數(shù)據(jù)。(2)獨占鎖獨占鎖(exclusive lock)。獨占鎖防止共同改變相同的資源。假如一個事務獲得了某一資源上的一個獨占鎖,那么直到該鎖被解除,其他事務才能修改該資源,但允許對資源進行共享。例如,假如一個表被鎖定在獨占模式下,它并不阻止其他用戶從同一個表得到數(shù)據(jù)。10.2.1 鎖機制和死鎖鎖機制和死鎖2死鎖死鎖當兩個或者多個用戶等待其中一個被鎖住的資源時,就有可能發(fā)生死鎖現(xiàn)象。對于死鎖,Oracle自動進行定期搜索,通過回滾死鎖中包含的其中一個語句來解決死鎖問題,也就是釋放其中一個沖突鎖,同時返回一個消息給對應的事務。用戶在設(shè)計應用程序時,要遵循一定的鎖

15、規(guī)則,盡力避免死鎖現(xiàn)象的發(fā)生。10.2.2 鎖的類型鎖的類型1DML鎖鎖DML鎖的目標是保證并行訪問的數(shù)據(jù)完整性,防止同步?jīng)_突的DML和DDL操作的破壞性交互。例如,保證表的特定行能夠被一個事務更新,同時保證在事務提交之前,不能刪除表。DML操作能夠在特定的行和整個表這兩個不同的層上獲取數(shù)據(jù)。能夠獲取獨占DML鎖的語句有:INSERT、UPDATE、DELETE和帶有FOR UPDATE子句的SELECT語句。DML語句在特定的行上操作需要行層的鎖,使用DML語句修改表時需要表鎖。10.2.2 鎖的類型鎖的類型2DDL鎖鎖(1)獨占獨占DDL鎖鎖。當CREATE、ALTER和DROP等語句用于

16、一個對象時使用該鎖。假如另外一個用戶保留了任何級別的鎖,那么該用戶就不能得到表中的獨占DDL鎖。例如,假如另一個用戶在該表上有一個未提交的事務,那么ALTERT TABLE語句會失效。(2)共享共享DDL鎖鎖。當GRANT與CREATE PACKAGE等語句用于一個對象時使用此鎖。一個共享DDL鎖不能阻止類似的DDL語句或任何DML語句用于一個對象上,但是它能防止另一個用戶改變或刪除已引用的對象。共享DDL鎖還可以在DDL語句執(zhí)行期間一直維持,直到發(fā)生一個隱式的提交。(3)可破的分析可破的分析DDL鎖鎖。庫高速緩存區(qū)中語句或PL/SQL對象有一個用于它所引用的每一個對象的鎖。假如被引用的對象改

17、變了,可破的分析DDL鎖會持續(xù)。假如對象改變了,它會檢查語句是否應失效。3內(nèi)部鎖內(nèi)部鎖內(nèi)部鎖包含內(nèi)部數(shù)據(jù)庫和內(nèi)存結(jié)構(gòu)。對用戶來說,它們是不可訪問的,因為用戶不需要控制它們的發(fā)生。10.2.3 表鎖和事務鎖表鎖和事務鎖例如,假如某個事務在一張表上持有一個表鎖,那么它會阻止任何其他事務獲取該表中用于刪除或改變該表的一個專用DDL鎖。表10.1列出了不同的模式。語 句類 型模 式INSERTTM行獨占(3)(RX)UPDATETM行獨占(3)(RX)DELETETM行獨占(3)(RX)SELECT FOR UPDATETM行共享(2)(RS)LOCK TABLETM獨占(6)(X)10.2.3 表鎖

18、和事務鎖表鎖和事務鎖當一個事務發(fā)出表10.2所列出的語句時,將獲得事務鎖(TX)。事務鎖總是在行級上獲得,它獨占地鎖住該行,并阻止其他事務修該改行,直到持有該鎖的事務回滾或提交數(shù)據(jù)為止。語 句類 型模 式INSERTTX獨占(6)(X)UPDATETX獨占(6)(X)DELETETX獨占(6)(X)SELECT FOR UPDATETX獨占(6)(X)10. 3 閃閃 回回 操操 作作10.3.1 基本概念基本概念在Oracle 12c中,閃回操作包括如下內(nèi)容。(1)查詢閃回(Flashback Query):查詢過去某個指定時間、指定實體的數(shù)據(jù),恢復錯誤的數(shù)據(jù)庫更新、刪除等。(2)表閃回(F

19、lashback Table):使表返回到過去某一時間的狀態(tài),可以恢復表、取消對表進行的修改。(3)刪除閃回(Flashback Drop):可以將刪除的表重新恢復。(4)數(shù)據(jù)庫閃回(Flashback Database):可以將整個數(shù)據(jù)庫回退到過去某個時間點。(5)歸檔閃回(Flashback Data Archive):可以閃回到指定時間之前的舊數(shù)據(jù)而不影響重做日志的策略。10.3.2 查詢閃回查詢閃回執(zhí)行查詢閃回操作時,需要使用兩個時間函數(shù):TIMESTAMP和TO_TIMESTAMP。其中,函數(shù)TO_TIMESTAMP的語法格式為:TO_TIMESTAMP(timepoint, for

20、mat)其中,timepoint表示某時間點。format指定需要把timepoint格式化成何種格式?!纠?0.5】 使用查詢閃回恢復刪除的數(shù)據(jù)。(1)查詢XSB1表中的數(shù)據(jù)。首先使用SET語句在“SQL”標識符前顯示當前時間。SET TIME ON查詢數(shù)據(jù)。SELECT * FROM XSB1;執(zhí)行結(jié)果如圖10.9所示。10.3.2 查詢閃回查詢閃回(2)刪除XSB1表中所有數(shù)據(jù)并提交,如圖10.10所示。DELETE FROM XSB1;COMMIT;(3)進行查詢閃回。SELECT * FROM XSB1 AS OF TIMESTAMP TO_TIMESTAMP(2015-7-6 15

21、:10:17,YYYY-MM-DD HH24:MI:SS);執(zhí)行以上語句后,可以看到表中原來的數(shù)據(jù)。10.3.2 查詢閃回查詢閃回(4)將閃回中的數(shù)據(jù)重新插入XSB1表中。INSERT INTO XSB1 SELECT * FROM XSB1 AS OF TIMESTAMP TO_TIMESTAMP(2015-7-6 15:10:17,YYYY-MM-DD HH24:MI:SS);表中數(shù)據(jù)復原如圖10.11所示。10.3.3 表閃回表閃回利用表閃回可以恢復表,取消對表所進行的修改。表閃回要求用戶具有以下權(quán)限。(1)FLASHBACK ANY TABLE權(quán)限或者該表的Flashback對象權(quán)限。

22、(2)有該表的SELECT、INSERT、DELETE和ALTER權(quán)限。(3)必須保證該表開啟ROW MOVEMENT。Oracle 12c的表閃回與查詢閃回功能類似,也是利用恢復信息(Undo Information)對以前的一個時間點上的數(shù)據(jù)進行恢復。表閃回有如下特性。(1)在線操作。(2)恢復到指定時間點或者SCN的任何數(shù)據(jù)。(3)自動恢復相關(guān)屬性,如索引、觸發(fā)器等。(4)滿足分布式的一致性。(5)滿足數(shù)據(jù)一致性,所有相關(guān)對象的一致性。10.3.3 表閃回表閃回要實現(xiàn)表閃回,必須確保與撤銷表空間有關(guān)的參數(shù)設(shè)置合理。撤銷表空間相關(guān)參數(shù)為:UNDO_MANAGEMENT、UNDO_TABLE

23、SPACE和UNDO_RETENTION。以SYSTEM用戶連接數(shù)據(jù)庫,在SQL*Plus中執(zhí)行下面的語句顯示撤銷表空間的參數(shù)。SHOW PARAMETER UNDO執(zhí)行結(jié)果如圖10.12所示。10.3.3 表閃回表閃回Oracle 12c采用撤銷表空間記錄增加、刪除、修改數(shù)據(jù),但也保留了以前版本使用的回滾段。UNDO_RETENTION表示當前所做的增加、刪除和修改操作提交后,記錄在撤銷表空間的數(shù)據(jù)保留的時間。在創(chuàng)建撤銷表空間時,要考慮數(shù)據(jù)保存的時間長短、每秒產(chǎn)生的塊數(shù)據(jù)量及塊大小等。假如表空間大小用undo表示,那么undoURUPSDB_BLOCK_SIZE+冗余量。表閃回的語法格式如下

24、:FLASHBACK TABLE 用戶方案名. TO BEFORE DROP RENAME TO SCN | TIMESTAMP ENABLE |DISABLE TRIGGERS10.3.3 表閃回表閃回【例10.6】 首先創(chuàng)建一個表,然后刪除某些數(shù)據(jù),再利用Flashback Table命令恢復。(1)使用SYSTEM登錄SQL*Plus并創(chuàng)建CJB1表。SET TIME ONCREATE TABLE CJB1 AS SELECT * FROM CJB;通過SELECT語句可查看到CJB1表中的數(shù)據(jù)。(2)刪除學號為151113的學生選修課程的記錄并提交。DELETE FROM CJB1 W

25、HERE 學號= 151113; /*刪除的時間點為16:54:35*/COMMIT;使用SELECT語句查詢CJB1表,學號為151113的學生選修課程的記錄已不存在。10.3.3 表閃回表閃回(3)使用表閃回進行恢復。ALTER TABLE CJB1 ENABLE ROW MOVEMENT;FLASHBACK TABLE CJB1 TO TIMESTAMP TO_TIMESTAMP(2015-7-6 16:54:35,YYYY-MM-DD HH24:MI:SS);整個操作過程及運行結(jié)果如圖10.13所示。10.3.4 刪除閃回刪除閃回1刪除閃回操作刪除閃回操作回收站是一個虛擬容器,用于存儲

26、所有被刪除的對象。為了避免被刪除的表與同類對象名稱重復,被刪除表(或者其他對象)放到回收站時,Oracle系統(tǒng)對被刪除表(或?qū)ο竺┻M行了轉(zhuǎn)換。轉(zhuǎn)換后的名稱格式如下:BIN$globalUID$Sversion其中,globalUID是一個全局唯一的標識對象,長度為24個字符,它是Oracle內(nèi)部使用的標識;$Sversion是數(shù)據(jù)庫分配的版本號。通過設(shè)置初始化參數(shù)RECYCLEBIN,可以控制是否啟用回收站功能,以下語句將啟用回收站:ALTER SESSION SET RECYCLEBIN=ON;設(shè)置為OFF則表示關(guān)閉,默認為ON。數(shù)據(jù)字典USER_TABLES中的dropped列表示表是否

27、被刪除。使用SELECT語句查詢:SELECT table_name, dropped FROM USER_TABLES;其中,dropped字段值為“YES”的table_name均為轉(zhuǎn)換后的名稱。也可以通過SHOW命令或查詢數(shù)據(jù)字典USER_RECYCLEBIN獲得回收站信息。10.3.4 刪除閃回刪除閃回【例10.7】 刪除閃回的實現(xiàn)。(1)使用SCOTT用戶連接并創(chuàng)建一個表t1。CREATE TABLE t1(t char(10);(2)使用DROP命令刪除表t1。DROP TABLE t1;(3)查詢數(shù)據(jù)字典信息。SELECT OBJECT_NAME, ORIGINAL_NAME,

28、TYPE, DROPTIME FROM RECYCLEBIN;查詢結(jié)果如圖10.14所示。(4)使用刪除閃回從回收站恢復表t1。FLASHBACK TABLE t1 TO BEFORE DROP;閃回完成后可以看到,表t1已經(jīng)恢復。如果不知道原表名,可以直接使用回收站中的名稱進行閃回。10.3.4 刪除閃回刪除閃回2回收站管理回收站管理回收站可以提供誤操作后進行恢復的必要信息,但是如果不經(jīng)常對回收站的信息進行管理,磁盤空間會被長期占用,因此要經(jīng)常清除回收站中無用的東西。要清除回收站,可以使用PURGE命令。PURGE命令可以刪除回收站中的表、表空間和索引,并釋放表、表空間和索引所占用的空間,其

29、語法格式如下:PURGE TABLESPACE USER | TABLE | INDEX | | RECYCLEBIN | DBA_RECYCLEBIN 10.3.4 刪除閃回刪除閃回【例10.8】 查詢當前用戶回收站中的內(nèi)容,再用PURGE清除。(1)查詢回收站內(nèi)容。SELECT OBJECT_NAME,ORIGINAL_NAME FROM USER_RECYCLEBIN;結(jié)果如圖10.15所示。(2)清除表TABLE1。PURGE TABLE TABLE1;再次查看回收站時,該表已被清除。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回可以使數(shù)據(jù)庫回到過去某一時間點上或SCN的狀態(tài),用戶可以不

30、利用備份就能快速地實現(xiàn)時間點的恢復。為了能在發(fā)生誤操作時閃回數(shù)據(jù)庫到誤操作之前的時間點上,需要設(shè)置下面三個參數(shù)。(1)DB_RECOVERY_FILE_DEST:確定FLASHBACK LOGS的存放路徑。(2)DB_RECOVERY_FILE_DEST_SIZE:指定恢復區(qū)的大小,默認值為空。(3)DB_FLASHBACK_RETENTION_TARGET:設(shè)定閃回數(shù)據(jù)庫的保存時間,單位是分鐘,默認是一天。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回當用戶發(fā)布FLASHBACK DATABASE語句后,Oracle系統(tǒng)首先檢查所需的歸檔文件和聯(lián)機重做日志,如果正常,則恢復數(shù)據(jù)庫中所有數(shù)據(jù)文件到指定的S

31、CN或時間點上。數(shù)據(jù)庫閃回的語法如下:FLASHBACK STANDBY | DATABASE TO SCN | TIMESTAMP | TO BEFORE SCN | TIMESTAMP 10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回使用FLASHBACK DATABASE,必須以MOUNT啟動數(shù)據(jù)庫實例,然后執(zhí)行ALTER DATABASE FLASHBACK ON或者ALTER DATABASE TSNAME FLASHBACK ON命令打開數(shù)據(jù)庫閃回功能。ALTER DATABASE FLASHBACK OFF命令是關(guān)閉數(shù)據(jù)庫閃回功能?!纠?0.9】 設(shè)置閃回數(shù)據(jù)庫環(huán)境。(1)使用SYSTEM登錄

32、SQL*Plus,查看閃回信息,執(zhí)行如下兩條命令。SHOW PARAMETER DB_RECOVERY_FILE_DESTSHOW PARAMETER FLASHBACK10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回(2)使用SYS用戶以SYSDBA登錄,確認實例是否在歸檔模式下。CONNECT SYS/Change_on_install123 AS SYSDBASELECT DBID,NAME,LOG_MODE FROM V$DATABASE;SHUTDOWN IMMEDIATE;結(jié)果如圖10.16所示。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回(3)設(shè)置Flashback Database為啟用。STARTU

33、P MOUNTALTER DATABASE FLASHBACK ON;ALTER DATABASE OPEN;結(jié)果如圖10.17所示。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回【例10.10】 數(shù)據(jù)庫閃回。(1)查看當前數(shù)據(jù)庫是否是歸檔模式和啟用了閃回數(shù)據(jù)庫功能。SELECT DBID,NAME, LOG_MODE FROM V$DATABASE;ARCHIVE LOG LISTSHOW PARAMETER DB_RECOVERY_FILE_DEST10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回(2)查詢當前時間和舊的閃回號。SHOW USER;SELECT SYSDATE FROM DUAL;ALTER SES

34、SION SET NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS;SELECT SYSDATE FROM DUAL;SELECT OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;SET TIME ON運行結(jié)果如圖10.18所示。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回(3)在當前用戶下創(chuàng)建KCB1表。CREATE TABLE KCB1 AS SELECT * FROM SCOTT.KCB;(4)確定時間點,模擬誤操作,刪除KCB1表。SELECT SYSDATE FROM D

35、UAL;DROP TABLE KCB1;DESC KCB1;運行結(jié)果如圖10.19所示。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回(5)以MOUNT打開數(shù)據(jù)庫并進行數(shù)據(jù)庫閃回。SHUTDOWN IMMEDIATE;STARTUP MOUNT EXCLUSIVE;FLASHBACK DATABASE TO TIMESTAMP(TO_DATE(2015-7-8 15:23:27, YYYY-MM-DD HH24:MI:SS);ALTER DATABASE OPEN RESETLOGS;結(jié)果如圖10.20所示。10.3.5 數(shù)據(jù)庫閃回數(shù)據(jù)庫閃回利用數(shù)據(jù)庫閃回后,通過SELECT語句可以發(fā)現(xiàn)KCB1恢復到錯誤

36、操作之前,表結(jié)構(gòu)和數(shù)據(jù)都已經(jīng)恢復。不需要使用數(shù)據(jù)庫閃回時使用ALTER語句將其關(guān)閉:ALTER DATABASE FLASHBACK OFF10.3.6 歸檔閃回歸檔閃回創(chuàng)建一個閃回數(shù)據(jù)歸檔區(qū)使用CREATE FLASHBACK ARCHIVE語句,語法格式為:CREATE FLASHBACK ARCHIVE DEFAULT TABLESPACE QUOTA M|G|T|P RETENTION YEAR|MONTH|DAY;【例10.11】 創(chuàng)建一個閃回數(shù)據(jù)歸檔區(qū),并作為默認的歸檔區(qū)。使用SYS用戶以SYSDBA登錄,執(zhí)行如下語句:CREATE FLASHBACK ARCHIVE DEFAUL

37、T test_archive TABLESPACE USERS QUOTA 10M RETENTION 1 DAY;10.3.6 歸檔閃回歸檔閃回【例10.12】 歸檔閃回。(1)使用SCOTT用戶連接數(shù)據(jù)庫,并創(chuàng)建KCB2表。CREATE TABLE KCB2 AS SELECT * FROM KCB;(2)對KCB2表執(zhí)行閃回歸檔設(shè)置。使用SYS用戶以SYSDBA登錄,執(zhí)行如下命令:ALTER TABLE SCOTT.KCB2 FLASHBACK ARCHIVE test_archive;說明:取消對于數(shù)據(jù)表的閃回歸檔可以使用如下命令:ALTER TABLE NO FLASHBACK AR

38、CHIVE;(3)記錄SCN。SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;結(jié)果如圖10.21所示。刪除KCB2表中的一些數(shù)據(jù):DELETE FROM SCOTT.KCB2 WHERE 學分4;COMMIT;10.3.6 歸檔閃回歸檔閃回(4)執(zhí)行閃回查詢。SELECT * FROM SCOTT.KCB2 AS OF SCN 5123052;結(jié)果如圖10.22所示,顯示的是未刪除之前的數(shù)據(jù)。10. 4 Undo表空間表空間10.4.1 自動自動Undo管理管理在Oracle中,允許創(chuàng)建多個Undo表空間,但是同一時間只能激活一

39、個Undo表空間。使用參數(shù)文件中的Undo_TABLESPACE參數(shù)指定要激活的Undo表空間名,Undo表空間的組織和管理由Oracle系統(tǒng)內(nèi)部機制自動完成。在自動Undo管理設(shè)置完成后,在數(shù)據(jù)字典DBA_ROLLBACK_SEGS中可以顯示回滾段信息,但是回滾段的管理由數(shù)據(jù)庫實例自動進行。10.4.2 Undo表空間的優(yōu)點表空間的優(yōu)點在舊版本中,對于大的事務處理所帶來的回滾段分配失敗一直沒有完善的解決方法,從Oracle 10g版本開始采用了Undo表空間,它有如下幾個方面的優(yōu)點。(1)存儲非提交或提交的事務改變塊備份。(2)存儲數(shù)據(jù)庫改變的數(shù)據(jù)行備份(可能是塊級)。(3)存儲自從上次提交

40、以來的事務的快照。(4)在內(nèi)存中存放邏輯信息或文件中的非物理信息。(5)存儲一個事務的前映像(Before Image)。(6)系統(tǒng)撤銷數(shù)據(jù)允許非提交事務。10.4.3 Undo表空間管理參數(shù)表空間管理參數(shù)使用自動Undo管理,需要設(shè)置下列參數(shù)。(1)Undo_MANAGEMENT:確定Undo表空間的管理方式,如果該參數(shù)設(shè)置為“AUTO”,表示系統(tǒng)使用自動Undo管理;如果設(shè)置為“MANUAL”,表示使用手動Undo管理,以回滾段方式啟動數(shù)據(jù)庫。(2)Undo_TABLESPACE:表示使用自動Undo管理時,系統(tǒng)默認Undo表空間名,默認名為UNDOTBS1。(3)Undo_RETENTION:決定Undo數(shù)據(jù)的維持時間,即用戶事務結(jié)束后,Undo的數(shù)據(jù)保留時間,默認值為900秒。10.4.3 Undo表空間管理參數(shù)表空間管理參數(shù)以SYS用戶SYSDBA身份登錄,使用SHOW命令可以查詢Undo參數(shù)的設(shè)置情況:SHOW PARAMETER UNDO執(zhí)行后看到Undo參數(shù),如圖10.23所示。10.4.4 創(chuàng)建和管理創(chuàng)建和管理Undo表空間表空間1創(chuàng)建創(chuàng)建Undo表空間表空間創(chuàng)建Undo表空間的語法格式為:CREATE UNDO TABLESPACE DATAFILE / SIZE K M REUSE AUTOEX

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論