小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

閃回?cái)?shù)據(jù)歸檔(Flashback Data Archive)

 wghbeyond 2011-08-09
17.8  閃回?cái)?shù)據(jù)歸檔(Flashback Data Archive)
在Oracle 11g當(dāng)中,對(duì)閃回技術(shù)再次進(jìn)行了擴(kuò)展,提供了一個(gè)全新的flashback方式,稱之為閃回?cái)?shù)據(jù)歸檔,本節(jié)我們將對(duì)閃回?cái)?shù)據(jù)歸檔進(jìn)行介紹。

17.8.1  閃回?cái)?shù)據(jù)歸檔概念
在這里讓我們從Oracle 9i開始引進(jìn)的Flashback Query說起,這是Oracle第一次引入閃回技術(shù),該技術(shù)使得一些邏輯誤操作不再需要利用歸檔日志和數(shù)據(jù)庫備份進(jìn)行時(shí)間點(diǎn)恢復(fù)。

而在Oracle 10g當(dāng)中,更是引入flashback version query、flashback transaction query、flashback database、flashback table和flashback drop等特性,大大簡(jiǎn)化了Flashback Query的使用。

在上面的諸多閃回技術(shù)當(dāng)中,除了Flashback Database(依賴于閃回日志)之外,其他的閃回技術(shù)都是依賴于Undo撤銷數(shù)據(jù),都與數(shù)據(jù)庫初始化參數(shù)UNDO_RETENTION密切相關(guān)(該參數(shù)決定了撤銷數(shù)據(jù)在數(shù)據(jù)庫中的保存時(shí)間)。它們是從撤銷數(shù)據(jù)中讀取信息來構(gòu)造舊數(shù)據(jù)的。這樣就有一個(gè)限制,就是undo中的信息不能被覆蓋。而undo段是循環(huán)使用的,只要事務(wù)提交,之前的undo信息就可能被覆蓋,雖然可以通過 undo_retention等參數(shù)來延長(zhǎng)undo的存活期,但這個(gè)參數(shù)會(huì)影響所有的事務(wù),設(shè)置過大,可能導(dǎo)致undo tablespace快速膨脹。

Oracle 11g則為flashback家族又帶來一個(gè)新的成員:Flashback Data Archive。該技術(shù)與以上所說的諸多閃回技術(shù)的實(shí)現(xiàn)機(jī)制不同,通過將變化數(shù)據(jù)另外存儲(chǔ)到創(chuàng)建的閃回歸檔區(qū)(Flashback Archive)中,以和undo區(qū)別開來,這樣就可以為閃回歸檔區(qū)單獨(dú)設(shè)置存儲(chǔ)策略,使之可以閃回到指定時(shí)間之前的舊數(shù)據(jù)而不影響undo策略。并且可以根據(jù)需要指定哪些數(shù)據(jù)庫對(duì)象需要保存歷史變化數(shù)據(jù),而不是將數(shù)據(jù)庫中所有對(duì)象的變化數(shù)據(jù)都保存下來,這樣可以極大地減少空間需求。

注意,F(xiàn)lashback Data Archive并不是記錄數(shù)據(jù)庫的所有變化,而只是記錄了指定表的數(shù)據(jù)變化。所以,F(xiàn)lashback Data Archive是針對(duì)對(duì)象的保護(hù),是Flashback Database的有力補(bǔ)充。

通過Flashback Data Archive,可以查詢指定對(duì)象的任何時(shí)間點(diǎn)(只要滿足保護(hù)策略)的數(shù)據(jù),而且不需要用到undo,這在有審計(jì)需要的環(huán)境,或者是安全性特別重要的高可用數(shù)據(jù)庫中,是一個(gè)非常好的特性。缺點(diǎn)就是如果該表變化很頻繁,對(duì)空間的要求可能很高。

17.8.2  閃回?cái)?shù)據(jù)歸檔區(qū)
閃回?cái)?shù)據(jù)歸檔區(qū)是閃回?cái)?shù)據(jù)歸檔的歷史數(shù)據(jù)存儲(chǔ)區(qū)域,在一個(gè)系統(tǒng)中,可以有一個(gè)默認(rèn)的閃回?cái)?shù)據(jù)歸檔區(qū),也可以創(chuàng)建其他許多的閃回?cái)?shù)據(jù)歸檔區(qū)域。

每一個(gè)閃回?cái)?shù)據(jù)歸檔區(qū)都可以有一個(gè)唯一的名稱。同時(shí),每一個(gè)閃回?cái)?shù)據(jù)歸檔區(qū)都對(duì)應(yīng)了一定的數(shù)據(jù)保留策略。例如可以配置歸檔區(qū)FLASHBACK_DATA_ARCHIVE_1中的數(shù)據(jù)保留期為1年,而歸檔區(qū)FLASHBACK_DATA_ARCHIVE_2的數(shù)據(jù)保留期為2天或者更短。以后如果將表放到對(duì)應(yīng)的閃回?cái)?shù)據(jù)歸檔區(qū),則就按照該歸檔區(qū)的保留策略來保存歷史數(shù)據(jù)。
閃回?cái)?shù)據(jù)歸檔區(qū)是一個(gè)邏輯概念,是從一個(gè)或者多個(gè)表空間中拿出一定的空間,來保存表的修改歷史,這樣就擺脫了對(duì)Undo撤銷數(shù)據(jù)的依賴,不利用undo就可以閃回到歸檔策略內(nèi)的任何一個(gè)時(shí)間點(diǎn)上。
創(chuàng)建閃回?cái)?shù)據(jù)歸檔區(qū)可以使用CREATE FLASHBACK ARCHIVE…命令完成。
下面我們通過一些實(shí)例來演示如何來創(chuàng)建閃回?cái)?shù)據(jù)歸檔區(qū)。
1.創(chuàng)建一個(gè)系統(tǒng)默認(rèn)的、磁盤限額為100MB、保留策略為1年的閃回?cái)?shù)據(jù)歸檔區(qū)

SQL>create flashback archive default fbar_1 tablespace "USERS" 2 quota 100M retention  1  year;

注意,經(jīng)過筆者自己在Oracle 11g數(shù)據(jù)庫上運(yùn)行該語句發(fā)現(xiàn),必須對(duì)tablespace關(guān)鍵字后面的表空間名稱用" "引起來,否則無法運(yùn)行成功。

2.在TBS_DATA1上創(chuàng)建fbar_2閃回?cái)?shù)據(jù)歸檔區(qū),保留策略為2天

SQL>CREATE FLASHBACK ARCHIVE fbar_2 TABLESPACE "TBS_DATA1"  RETENTION 2 DAY;

一個(gè)歸檔區(qū)可以不僅僅對(duì)應(yīng)一個(gè)表空間,可以采用如下的命令增加或者刪除該歸檔區(qū)的表空間的個(gè)數(shù),這樣也達(dá)到了增加或者減少該歸檔區(qū)空間的目的。

3.給數(shù)據(jù)歸檔區(qū)fbar_2增加一個(gè)表空間

SQL>ALTER FLASHBACK ARCHIVE fbar_2 ADD TABLESPACE "TBS_DATA2" QUOTA 100M;

也可以從歸檔區(qū)中刪除表空間。注意:這個(gè)刪除僅僅是表示從數(shù)據(jù)歸檔區(qū)刪除,并不是刪除該表空間。

4.刪除數(shù)據(jù)歸檔區(qū)fbar_2的表空間TBS_DATA2

SYS>ALTER FLASHBACK ARCHIVE fbar_2 REMOVE TABLESPACE "TBS_DATA2";

對(duì)已經(jīng)分配給閃回?cái)?shù)據(jù)歸檔區(qū)的表空間,可以修改歸檔區(qū)對(duì)應(yīng)的磁盤限額。

5.修改歸檔區(qū)的磁盤限額

SYS>ALTER FLASHBACK ARCHIVE fbar_2 MODIFY TABLESPACE "TBS_DATA2" 

2   QUOTA 200M;

6.修改歸檔區(qū)的保留策略

SYS>ALTER FLASHBACK ARCHIVE fbar_1 MODIFY RETENTION 1 month;

17.8.3  使用閃回?cái)?shù)據(jù)歸檔
閃回?cái)?shù)據(jù)歸檔區(qū)創(chuàng)建完成以后,就可以指定特定的表,使其對(duì)應(yīng)到特定的數(shù)據(jù)歸檔區(qū)。把表指定到對(duì)應(yīng)的數(shù)據(jù)歸檔區(qū)有兩種方法,一是在創(chuàng)建的時(shí)候直接指定歸檔區(qū),一種是對(duì)現(xiàn)有的表指定一個(gè)歸檔區(qū)。

注意,如果不指定歸檔區(qū)的名稱,則指定到默認(rèn)歸檔區(qū),否則,就屬于指定的數(shù)據(jù)歸檔區(qū)。

以下我們基于上一小節(jié)所創(chuàng)建的兩個(gè)閃回?cái)?shù)據(jù)歸檔區(qū)fbar_1(默認(rèn)的閃回?cái)?shù)據(jù)恢復(fù)區(qū))和fbar_2,創(chuàng)建了3個(gè)表,一個(gè)指定到默認(rèn)歸檔區(qū)fbar_1,一個(gè)指定到數(shù)據(jù)歸檔區(qū)fbar_2,另外一個(gè)為了進(jìn)行對(duì)比,沒有指定到任何數(shù)據(jù)歸檔區(qū)。

(1)創(chuàng)建表:

SYS@11gR1>connect scott/tiger

Connected.

scott@11gR1>create table test1(a int) flashback archive;

Table created.

scott@11gR1>create table test2(b int);

Table created.

scott@11gR1>alter table test2 flashback archive data_test2;

Table altered.

scott@11gR1>create table test3(c int);

Table created.

(2)在表中插入數(shù)據(jù),完成以后,做select查詢顯示如下:

09:33:38 scott@11gR1>select * from test2;

         B 

---------- 
         4 
         5 
         6 
       

09:33:43 scott@11gR1>select * from test3;

         C
----------
         7
         8
         9

09:33:46 scott@11gR1>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual;

  

TIME 
---- 

2007-09-04 09:33:52

可以看到,這些數(shù)據(jù)是在9:33分左右寫進(jìn)去的。最新數(shù)據(jù)保留策略應(yīng)當(dāng)是,表test1對(duì)應(yīng)的是默認(rèn)的數(shù)據(jù)歸檔區(qū)fbar_1,數(shù)據(jù)保留策略是一個(gè)月,表test2對(duì)應(yīng)的是數(shù)據(jù)歸檔區(qū)fbar_2,數(shù)據(jù)保留策略是2天,而表test3沒有數(shù)據(jù)保留策略。

然后,對(duì)這3個(gè)表再進(jìn)行一些操作,如刪除現(xiàn)有記錄,并插入一些新記錄。最后,不使用undo數(shù)據(jù),查詢時(shí)間點(diǎn)2007-09-04 09:33:52,看是否能找回原來的數(shù)據(jù)。

(3)對(duì)表進(jìn)行更新操作,查詢顯示結(jié)果:

09:34:19 Piner@11gR1>delete from test1;

3 rows deleted.

09:34:23 Piner@11gR1>delete from test2; 

3 rows deleted.

09:34:30 Piner@11gR1>delete from test3;

3 rows deleted.

09:34:35 Piner@11gR1>insert into test1 values(10);

1 row created.

09:34:47 Piner@11gR1>insert into test2 values(20);

1 row created.

09:34:53 Piner@11gR1>insert into test3 values(30);

1 row created.

09:34:58 Piner@11gR1>commit;

Commit complete.

09:36:32 Piner@11gR1>select * from test1;

         A
----------
        10

09:36:51 Piner@11gR1>select * from test2;
         B
----------
        20
09:36:56 Piner@11gR1>select * from test3;
         C
----------
        30

(4)利用Flashback功能去查詢數(shù)據(jù),發(fā)現(xiàn)可以獲得正確的數(shù)據(jù),但是,不能確認(rèn)的是,這些數(shù)據(jù)的獲得到底是經(jīng)過undo獲得的還是數(shù)據(jù)歸檔區(qū)獲得的。

09:43:17 Piner@11gR1>select * from test1 as of timestamp to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');

        A
----------
         1
         2
         3 
09:43:17 Piner@11gR1>select * from test2 as of timestamp to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');

         B
----------
         4
         5
         6
09:43:25 Piner@11gR1>select * from test3 as of timestamp to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');

         C
----------
         7
         8
         9

(5)為了證明查詢使用的是閃回?cái)?shù)據(jù)歸檔,創(chuàng)建新的undo表空間,切換undo表空間,為了確保生效,可以重新啟動(dòng)數(shù)據(jù)庫例程。

切換到新的undo表空間,如果沒有,需要重新創(chuàng)建:

SYS@11gR1>ALTER SYSTEM SET undo_tablespace=TBS_UNDO2;

System altered.

刪除原來的undo表空間:

SYS@11gR1>drop tablespace UNDOTBS1;

Tablespace dropped.

(6)排除了undo查詢的可能,再次執(zhí)行查詢:

scott@11gR1> select * from test3 as of timestamp to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
select * from test3 as of timestamp
              *
ERROR at line 1:
ORA-01555: snapshot too old: rollback segment number  with name "" too small   
     
scott@11gR1> select * from test1 as of timestamp to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
         A
----------
         1
         2
         3
scott@11gR1> select * from test2 as of timestamp to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');
         B
----------
         4
         5
         6
可以看到,沒有設(shè)置數(shù)據(jù)歸檔策略的表test3,查詢的時(shí)候會(huì)報(bào)01555錯(cuò)誤。但是,設(shè)置過數(shù)據(jù)歸檔策略的test1與test2,都能正常查詢到數(shù)據(jù),可以看到,數(shù)據(jù)歸檔生效了。

這里是一個(gè)簡(jiǎn)單的實(shí)驗(yàn),時(shí)間可能遠(yuǎn)遠(yuǎn)沒有達(dá)到設(shè)置的策略期,但是,卻可以證明數(shù)據(jù)不是經(jīng)過undo查詢而獲得的。

17.8.4  清除閃回?cái)?shù)據(jù)歸檔區(qū)數(shù)據(jù)
前面為大家介紹過如何給閃回?cái)?shù)據(jù)歸檔區(qū)增加空間,本節(jié)通過一些具體實(shí)例為大家介紹如何清除閃回歸檔區(qū)中的數(shù)據(jù)。
1.清除所有歸檔區(qū)的數(shù)據(jù)
SQL>ALTER FLASHBACK ARCHIVE data_test1 PURGE ALL;
2.清除一天以前的數(shù)據(jù)

SQL>ALTER FLASHBACK ARCHIVE data_test1 PURGE BEFORE TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' DAY);

3.清除特定SCN之前的數(shù)據(jù)

SQL>ALTER FLASHBACK ARCHIVE data_test1 PURGE BEFORE SCN 728969;

4.將指定的表不再設(shè)置數(shù)據(jù)歸檔

SQL>ALTER TABLE test1 NO FLASHBACK ARCHIVE;

5.刪除數(shù)據(jù)歸檔區(qū)

SQL>DROP FLASHBACK ARCHIVE data_test2;


 如果將表指定了閃回?cái)?shù)據(jù)歸檔區(qū),則不能對(duì)表進(jìn)行如下操作。
 

l          刪除,重令名,或者修改列;

l          進(jìn)行分區(qū)或者子分區(qū)操作;

l          轉(zhuǎn)換long到lob類型;

l          ALTER TABLE… UPGRADE TABLE 操作;

l          drop、rename、trunacte表。

例如:

scott@11gR1> drop table test1;

drop table test1

           *

ERROR at line 1:

ORA-55610: Invalid DDL statement on history-tracked table

17.8.5  與閃回?cái)?shù)據(jù)歸檔有關(guān)的視圖
可有通過以下視圖來得到與閃回?cái)?shù)據(jù)歸檔有關(guān)的信息。

l          DBA_FLASHBACK_ARCHIVE:DBA視圖,閃回歸檔區(qū)信息。

l          DBA_FLASHBACK_ARCHIVE_TS:DBA視圖,閃回歸檔有關(guān)表空間。

l          DBA_FLASHBACK_ARCHIVE_TABLES:DBA視圖,對(duì)應(yīng)表所對(duì)應(yīng)的閃回歸檔信息。

l          USER_FLASHBACK_ARCHIVE:用戶閃回歸檔區(qū)的創(chuàng)建信息。

l          USER_FLASHBACK_ARCHIVE_TABLES:用戶表對(duì)應(yīng)的閃回歸檔區(qū)域。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多