oracle 10g flashback database

space6212發表於2019-07-08

flashback database是10g推出的一個重大改進,它可以讓我們不用做不完全恢復的情況下把資料庫"回滾"到過去的某一個時間點。
你可以在建立資料庫時設定flashback database,如果當時沒有設定,可以按下面的步驟進行設定:


1、設定flashback
--首先要把資料庫置於歸檔模式
sys@ORA10G> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
sys@ORA10G> startup mount
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250452 bytes
Variable Size 180357996 bytes
Database Buffers 427819008 bytes
Redo Buffers 2940928 bytes
資料庫裝載完畢。
sys@ORA10G> alter database archivelog;

資料庫已更改。

--設定flashback的幾個相關引數
--設定閃回區大小
sys@ORA10G> alter system set db_recovery_file_dest_size=2g;

系統已更改。

--設定閃回區檔案放置位置
sys@ORA10G> alter system set db_recovery_file_dest='g:flash';

系統已更改。

--開啟資料庫的閃回功能
sys@ORA10G> alter database flashback on;

資料庫已更改。

sys@ORA10G> alter database open;

資料庫已更改。

--最後驗證
sys@ORA10G> select FLASHBACK_ON from v$database;

FLASHBACK_ON
------------------
YES


2、測試flashback

--首先做一些破壞性工作
sys@ORA10G> truncate table suk.test;

表被截斷。

--透過V$FLASHBACK_DATABASE_LOG得到我們可以閃回的最早時間和最小scn
sys@ORA10G> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
8061491 2007-09-06 22:22:55

--重啟資料庫到mount
sys@ORA10G> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
sys@ORA10G> startup mount
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250452 bytes
Variable Size 180357996 bytes
Database Buffers 427819008 bytes
Redo Buffers 2940928 bytes
資料庫裝載完畢。

--根據scn閃回資料庫
sys@ORA10G> flashback database to scn 8061491;

閃回完成。

--對資料庫執行閃回操作後必須用resetlogs方式開啟
sys@ORA10G> alter database open resetlogs;

資料庫已更改。

--檢驗資料
sys@ORA10G> select count(1) from suk.test;

COUNT(1)
----------
3

--從結果可以看到閃回成功

3、再次閃回
--open resetlogs後,還能不能閃回到open resetlogs時間點前的狀態呢?
--接著剛才的步驟插入一條資料
sys@ORA10G> insert into suk.test values(4,4);

已建立 1 行。

sys@ORA10G> commit;

提交完成。

sys@ORA10G> select count(1) from suk.test;

COUNT(1)
----------
4

--看看是否可以閃回
sys@ORA10G> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
sys@ORA10G> startup mount
ORACLE 例程已經啟動。

Total System Global Area 612368384 bytes
Fixed Size 1250452 bytes
Variable Size 180357996 bytes
Database Buffers 427819008 bytes
Redo Buffers 2940928 bytes
資料庫裝載完畢。
sys@ORA10G> flashback database to scn 8061491;

閃回完成。

sys@ORA10G> alter database open resetlogs;

資料庫已更改。

sys@ORA10G> select count(1) from suk.test;

COUNT(1)
----------
3

--從上面的測試結果看,在一次open resetlogs後仍然可以閃回到以前的時間點。

--查一下此時可以閃回的最早時間和scn

sys@ORA10G> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
8061491 2007-09-06 22:22:55

到這裡可以得到一個結論:可以閃回到什麼時間點與open resetlogs無關,實際上,它是由db_flashback_retention_target引數決定的。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63854/,如需轉載,請註明出處,否則將追究法律責任。

相關文章