日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Flashback Data Archive(转)

發(fā)布時間:2024/8/26 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flashback Data Archive(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

自己一直希望找到一篇關(guān)于將一個表的一列不小心刪除了,怎么來修復(fù),可是一直找不到,自己最近看到一篇在oracle11的一篇文章,特意在這里轉(zhuǎn)一下,沒有試過,因為自己的是10,如果那個網(wǎng)友有在10下實現(xiàn)的方法,希望給個鏈接。

?

? 閃回數(shù)據(jù)歸檔(Flashback Data Archive)

在Oracle 11g當(dāng)中,對閃回技術(shù)再次進(jìn)行了擴(kuò)展,提供了一個全新的flashback方式,稱之為閃回數(shù)據(jù)歸檔,本節(jié)我們將對閃回數(shù)據(jù)歸檔進(jìn)行介紹。

一? 閃回數(shù)據(jù)歸檔概念

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

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

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

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

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

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

二? 閃回數(shù)據(jù)歸檔區(qū)

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

每一個閃回數(shù)據(jù)歸檔區(qū)都可以有一個唯一的名稱。同時,每一個閃回數(shù)據(jù)歸檔區(qū)都對應(yīng)了一定的數(shù)據(jù)保留策略。例如可以配置歸檔區(qū)FLASHBACK_DATA_ARCHIVE_1中的數(shù)據(jù)保留期為1年,而歸檔區(qū)FLASHBACK_DATA_ARCHIVE_2的數(shù)據(jù)保留期為2天或者更短。以后如果將表放到對應(yīng)的閃回數(shù)據(jù)歸檔區(qū),則就按照該歸檔區(qū)的保留策略來保存歷史數(shù)據(jù)。

閃回數(shù)據(jù)歸檔區(qū)是一個邏輯概念,是從一個或者多個表空間中拿出一定的空間,來保存表的修改歷史,這樣就擺脫了對Undo撤銷數(shù)據(jù)的依賴,不利用undo就可以閃回到歸檔策略內(nèi)的任何一個時間點上。

創(chuàng)建閃回數(shù)據(jù)歸檔區(qū)可以使用CREATE FLASHBACK ARCHIVE…命令完成。

下面我們通過一些實例來演示如何來創(chuàng)建閃回數(shù)據(jù)歸檔區(qū)。

1.創(chuàng)建一個系統(tǒng)默認(rèn)的、磁盤限額為100MB、保留策略為1年的閃回數(shù)據(jù)歸檔區(qū)

SQL>create flashback archive default fbar_1 tablespace "USERS" 2 quota 100M

2?? retention ?1 ?year;

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

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

SQL>CREATE FLASHBACK ARCHIVE fbar_2 TABLESPACE "TBS_DATA1"

2?? RETENTION 2 DAY;

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

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

SQL>ALTER FLASHBACK ARCHIVE fbar_2 ADD TABLESPACE "TBS_DATA2"

2 ??QUOTA 100M;

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

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

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

對已經(jīng)分配給閃回數(shù)據(jù)歸檔區(qū)的表空間,可以修改歸檔區(qū)對應(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;

三? 使用閃回數(shù)據(jù)歸檔

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

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

以下我們基于上一小節(jié)所創(chuàng)建的兩個閃回數(shù)據(jù)歸檔區(qū)fbar_1(默認(rèn)的閃回數(shù)據(jù)恢復(fù)區(qū))和fbar_2,創(chuàng)建了3個表,一個指定到默認(rèn)歸檔區(qū)fbar_1,一個指定到數(shù)據(jù)歸檔區(qū)fbar_2,另外一個為了進(jìn)行對比,沒有指定到任何數(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對應(yīng)的是默認(rèn)的數(shù)據(jù)歸檔區(qū)fbar_1,數(shù)據(jù)保留策略是一個月,表test2對應(yīng)的是數(shù)據(jù)歸檔區(qū)fbar_2,數(shù)據(jù)保留策略是2天,而表test3沒有數(shù)據(jù)保留策略。

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

(3)對表進(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

09:43:17?? 2? 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

09:43:24?? 2? 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

09:43:30?? 2? to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');

???????? C

----------

???????? 7

???????? 8

???????? 9

(5)為了證明查詢使用的是閃回數(shù)據(jù)歸檔,創(chuàng)建新的undo表空間,切換undo表空間,為了確保生效,可以重新啟動數(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

? 2? 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

? 2? 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

? 2? to_timestamp('2007-09-04 09:33:52', 'yyyy-mm-dd hh24:mi:ss');

???????? B

----------

???????? 4

???????? 5

???????? 6

可以看到,沒有設(shè)置數(shù)據(jù)歸檔策略的表test3,查詢的時候會報01555錯誤。但是,設(shè)置過數(shù)據(jù)歸檔策略的test1與test2,都能正常查詢到數(shù)據(jù),可以看到,數(shù)據(jù)歸檔生效了。

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

四? 清除閃回數(shù)據(jù)歸檔區(qū)數(shù)據(jù)

前面為大家介紹過如何給閃回數(shù)據(jù)歸檔區(qū)增加空間,本節(jié)通過一些具體實例為大家介紹如何清除閃回歸檔區(qū)中的數(shù)據(jù)。

1.清除所有歸檔區(qū)的數(shù)據(jù)

SQL>ALTER FLASHBACK ARCHIVE data_test1 PURGE ALL;

2.清除一天以前的數(shù)據(jù)

SQL>ALTER FLASHBACK ARCHIVE data_test1

2?? 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;

?

?

如果將表指定了閃回數(shù)據(jù)歸檔區(qū),則不能對表進(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? 與閃回數(shù)據(jù)歸檔有關(guān)的視圖

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

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

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

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

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

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

小結(jié)

本章主要講述了數(shù)據(jù)庫的閃回技術(shù)。閃回是數(shù)據(jù)庫進(jìn)行邏輯恢復(fù)的一個快捷工具。對于Oracle 11g在閃回方面的最新技術(shù)——閃回數(shù)據(jù)歸檔——也進(jìn)行了詳細(xì)的介紹。

總結(jié)

以上是生活随笔為你收集整理的Flashback Data Archive(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。