還原點和閃回資料庫

來源:互聯網
上載者:User

還原點和閃回資料庫

閃回資料庫和還原點是兩種與資料恢複相關的功能,它們用來替代按時間點恢複來撤消對資料庫的改變。閃回資料庫能讓你將整個資料庫進行復原,使用指定時間視窗來撤消對資料庫的改變。這類似於資料庫的按時間點恢複。

還原點提供了與閃回資料庫相關的能力它是另一種恢複操作。受保護的還原點,在特定的情況下,提供了閃回資料庫完整的功能,允許你選擇一個SCN並強制要求閃回資料庫對這個SCN是可用的。

還原點和閃回資料庫可以單獨使用也可以一起使用。在這兩種情況下,RMAN的flashback database命令或者flashback database語句實際上將資料庫還原到一個指定的SCN所對應的狀態,例如:

flashback database to restore point 'before_upgrade';
 flashback databasae to scn 202381;

閃回資料庫
 閃回資料庫,可以通過RMAN的flashback database命令和SQL*Plus的flashback database語句來完成。能夠將資料庫快速的從邏輯資料錯誤或使用者錯誤中進行恢複。

它類似於傳統的按時間點恢複一樣,能夠將資料庫還原到過去某個時間點的狀態。閃回資料庫比按時間點恢複來快很多,因為閃回資料庫不需要從備份中還原資料檔案和從歸檔重做記錄檔中應用相應的改變。

閃回資料庫能被用來撤消對資料庫不需要的改變。而資料檔案完好無損。這包括將資料庫還原到之前資料庫化身對應的狀態。這將撤消open resetlogs操作。

閃回資料庫使用它自己的日誌機制,它會在閃回區中建立閃回日誌。只有在閃回日誌是可用時才能使用閃回資料庫。因此如果要使用這個功能就必須對資料庫進行設定讓其建立相關的閃回日誌。

為了啟用閃回資料庫,需要設定閃回區和設定閃回保留原則目標來指定能夠將資料庫還原到過去某個時間點。

從啟用閃回資料庫開始,在週期性時間間隔內,資料庫將會把每個資料檔案中發生改變的資料區塊複製到閃回日誌中。這些資料區塊鏡像以後可用來重構資料檔案的內容。

當資料庫使用閃回資料庫將資料庫還原到過去的某些目標時間點時,自從還原時間點開始發生改變的每個資料區塊將從閃回日誌中複製目標時間點對應的資料區塊。然後應用自資料區塊被複製到閃回日誌時間點開始的重做日誌。

注意:在整個時間跨度對於閃回日誌相應的重做日誌必須都是可用的。

閃回資料庫視窗
 在一定範圍SCN之間有足夠的閃回日誌資料來支援flashback database命令這就叫閃回資料庫視窗。如果閃回區的空間太小,通過設定保留原則當為了給新產生的閃回記錄檔分配空間可能會刪除到期的閃回日誌。根據閃回區的大小,必須被保留的其它備份和需要的閃回日誌資料,這可能造成閃回資料庫視窗比閃回保留目標的時間要短。

注意:閃回保留目標是一個目標,不是一個絕對受保護能執行閃回資料庫的目標。

如果閃回區的大小不能儲存為了滿足保留原則所需要的閃回日誌和其它檔案,比如歸檔重做日誌和其它備份。那麼為了儲存其它檔案從最早的SCN開始的閃回日誌可能因為空白間問題而被刪除。

閃回資料庫視窗不能對可用閃回日誌中的最早SCN進行向前的擴充。閃回日誌不能備份到閃回區之外的目錄。因此為了增加可用的閃回日誌來滿足閃回資料視窗,所以要給閃回區可用的最大儲存空間。

這裡也有一些操作比如刪除資料表空間或收縮資料檔案,這些是不能通過閃回資料進行撤消的。在這些操作執行之後,閃回視窗就會立即從這些操作之後重新計算。

如果因為閃回資料庫視窗不滿足flashback database的要求,按時間點恢複可以最大程度的完成相似的任務。

使用受保護的還原點是唯一能保證你使用閃回資料庫能將資料庫還原點指定時間點或閃回視窗的方法。

正常還原點
 通過指定時間點或SCN來作為還原點的名稱來建立還原點,在執行有restore point子句的命令時使用這種標籤或別名來指定SCN。

如果可能對你執行的任何操作執行撤消,那麼可以建立一個正常的還原點。還原點名稱和SCN會被記錄到控制檔案中。如果後面需要使用閃回資料庫,閃回表或按時間點恢複,可以使用還原點名稱來指示這個目標時間來代替一個時間運算式或SCN。在可能被撤消的操作執行前定義一個正常的還原點來消除需要手工記錄SCN的需要,或在執行閃回查詢時尋找正確的SCN的需要。

正常還原點是非常輕量級的。控制檔案可以包含上千個正常還原點而不會影響資料庫的效能。正常還原點最終從控制檔案中移除,而不是手工刪除,那麼它們將不再需要進行維護。

支援還原點的命令
 在下面的上下文中還原點用來指定目標SCN:
1.RMAN的recover database和flashback database命令

2.SQL*Plus中的flashback database語句

注意:通常來說,受保護的還原點可以在任何使用正常還原點的操作中作為SCN的別名來使用。除非另有說明,否則正常還原點的使用方法也適用於受保護的還原點。

受保護的還原點
 與正常還原點一樣,受保護的還原點在恢複操作中也能作為SCN的別名。然而,它們也對閃回資料庫提供了特定的功能。

在一個特定的SCN建立一個受保護的還原點可以強制通過執行閃回資料庫能將資料庫還原到這個SCN所處的狀態,即使資料庫沒有啟用閃回日誌也能保證。如果閃回日誌被啟用,建立受保護的還原點強制閃回日誌保留原則能滿足將資料庫閃回到建立受保護還原點後的任意時間點。

受保護還原點能用於將整個資料庫還原到一個已知的狀態良好的時間點,前提條件是閃回區有足夠的空間來儲存閃回日誌。使用閃回資料庫,受nologging操作影響的直接路徑插入也能使用受保護的還原點來進行還原作業。

受保護的還原點替代儲存快照
 在實踐中,受保護的還原點能夠有效地替代儲存快照,它通常用來在一些危險操作之前來保護資料庫,比如大範圍的更新,應用程式打補丁,或者升級。與建立快照或複製資料庫再進行這些操作的相比,可以建立一個受保護的還原點然後執行這些危險操作,只要確只保留必要的閃回日誌就行。

閃回資料庫和受保護還原點的日誌
 閃回資料庫和受保護還原點的日誌是基於在改變應用前被捕獲的資料區塊鏡像,因此這些鏡像能用來在執行flashback database命令時將資料檔案還原到之前時間點所對應的狀態。

正常閃回日誌和受保護還原點的日誌的主要差別就是日誌是否會因為閃回區可用空間的壓力而被刪除。這些差別影響日誌可用空間的使用和資料庫的效能。

是否對閃回資料庫,受保護的還原點啟用日誌都依賴於你的恢複目標,以及對效能的影響和這些功能對空間的使用。

受保護還原點和閃回區的空間使用
 當建立一個受保護的還原點,不管有沒有啟用完全閃回資料庫日誌,你都必須監控閃回區可用空間的狀態。如果為了滿足受保護的還原點而需要的檔案是不會滿足從閃回區刪除的條件。因此,閃回日誌的保留原則和為了滿足受保護的還的所需要的其它檔案,就是滿足備份保留原則一樣,可能會讓閃回區完全被使用掉。

注意:當因為保留原則不能刪除任何檔案而又遇到空間被使用完的情況時,在許多情況下資料庫會被hang住。

閃回日誌禁用時受保護還原點日誌
 如果當閃回資料庫日誌禁用時建立了受保護的還原點,那麼,在受保護還原點建立之後第一次資料檔案的資料區塊更改,在更改之前資料區塊的鏡像會被儲存到閃回日誌中。閃回日誌因此能還原被修改的資料區塊回到受保護還原點建立時的狀態。然而後續對相同資料區塊的修改不會被記錄在日誌中,除非在這些修改之前建立另外的受保護還原點。

這種方式的日誌有以下重要的影響:
1.可用的塊鏡像可以在使用flashback database時將資料檔案的內容還原到受保護還原點所對應的狀態但不能使用flashback database將資料庫還原到受保護還原點與目前時間之間的某個時間點。只有當對閃回資料庫啟用日誌才行。如果你需要將資料庫還原到一個中間時間點,你只能使用資料庫按時間點恢複。

2.因為每個資料區塊的改變只會被記錄一次,當閃回日誌被禁用時受保護還原點的日誌所使用的空間要比正常閃回日誌所使用的空間小。可以按天或周來維護受保護的還原點而不必關注當閃回資料庫啟用後閃回日誌的增長。記錄受保護的還原點的日誌所產生的效能在禁用閃回資料庫日誌的情況下影響是很小的。

如果你主要是將資料庫還原到受保護還原點所建立的時間點,那麼通常關閉閃回資料庫日誌只使用受保護還原點更有效。例如當正計劃在生產資料庫伺服器上對應用進行升級,在升級開始之前建立一個受保護的還原點,如果升級過程最終失敗,可以使用flashback database撤消改變,而不用從備份中進行還原。

使用受保護還原點的閃回資料庫日誌
 如果閃回資料庫被啟用並且定義了一個或多個受保護的還原點,那麼資料庫執行正常閃回日誌時,會對效能有些影響。根據資料庫的工作模式閃回區可能會產生較大的空間壓力。然而,不像正常的閃回資料庫日誌,閃回區總是要保留為了使用flashback database將資料庫還原到最早的當前受保護還原點時所需要的閃回日誌。閃回日誌如果要求滿足受保護還原點恢複就不會因為空白間壓力而被刪除。

在這種情況下對於flashback database可以將資料庫恢複到閃回視窗中的任意時間點和特定的受保護的還原點所對應的狀態,但你必須監控制閃回區的空間使用。

使用正常和受保護還原點

使用受保護還原點的要求
 為了支援使用受保護還原點,資料庫必須滿足下面的要求:
1.compatible參數必須設定為10.2或更高版本

2.資料庫必須運行在歸檔模式下。flashback database操作將資料庫還原到受保護的還原點時要求使用一直到還原點以來的歸檔重做日誌。

3.必須設定閃回區.受保護的還原點使用了一種類似於閃回日誌的機制,Oracle必須在閃回區儲存所要使用的日誌

4.如果沒有啟用閃回資料庫,當建立第一個受保護的還原點心(或者如果所有之前建立的受保護的還原點已經被刪除後)那麼資料庫必須處於mount狀態,不能是open狀態。

注意:在使用正常的還原點沒有特殊的要求。

建立正常和受保護還原點
 為了建立正常或受保護還原點,使用create restore point語句,並給還原點提供了一個名稱並指定它是受保護還原點還是正常還原點(預設值)。

在建立還原點時資料庫可以處於open或mount狀態。如果是mount狀態,那麼必須已經完全關閉(物理備庫除外)。

下面的命令用來建立一個正常還原點
SQL> create restore point before_truncate;

Restore point created.


下面的命令用來建立一個受保護還原點
SQL> create restore point before_truncate guarantee flashback database;
create restore point before_truncate guarantee flashback database
*
ERROR at line 1:
ORA-38784: Cannot create restore point 'BEFORE_TRUNCATE'.
ORA-38787: Creating the first guaranteed restore point requires mount mode when flashback database is off.


根據錯誤提示可以看出當資料庫沒有啟用flashback database時想要建立受保護的還原點只能在mount狀態下建立。
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  327155712 bytes
Fixed Size                  1273516 bytes
Variable Size            138412372 bytes
Database Buffers          184549376 bytes
Redo Buffers                2920448 bytes
Database mounted.
SQL> create restore point before_truncate guarantee flashback database;

Restore point created.


SQL> col name for a20
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
  2  GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
  3  FROM V$RESTORE_POINT;

NAME                        SCN TIME                                DATABASE_INCARNATION# GUARANTEE_FLASHBACK_DATABASE STORAGE_SIZE
-------------------- ---------- ----------------------------------- --------------------- ---------------------------- ------------
BEFORE_TRUNCATE        2849315 27-JAN-15 02.40.56.000000000 PM                        2 YES                          8192000

 

顯示還原點
 為了查看當前定義的還原點,可以使用v$restore_point控制檔案視圖:
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
FROM V$RESTORE_POINT;

SQL> col name for a20
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
  2  GUARANTEE_FLASHBACK_DATABASE,STORAGE_SIZE
  3  FROM V$RESTORE_POINT;

NAME                        SCN TIME                                DATABASE_INCARNATION# GUARANTEE_FLASHBACK_DATABASE STORAGE_SIZE
-------------------- ---------- ----------------------------------- --------------------- ---------------------------- ------------
BEFORE_TRUNCATE        2849315 27-JAN-15 02.40.56.000000000 PM                        2 YES                          8192000

 

可以看到每個還原點的名稱,SCN,時間和還原點建立時的資料庫對應化身的序號,是正常還原點還是受保護還原點,以及為了提供足夠的資訊來支援閃回資料庫操作該還原點在閃回區所使用的空間大小。

可以使用只查詢受保護的還原點資訊:
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE
FROM V$RESTORE_POINT
WHERE GUARANTEE_FLASHBACK_DATABASE='YES';


SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
  2  GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE
  3  FROM V$RESTORE_POINT
  4  WHERE GUARANTEE_FLASHBACK_DATABASE='YES';

NAME                        SCN TIME                                                                        DATABASE_INCARNATION# GUARANTEE_FLASHBACK_DATABASE  STORAGE_SIZE
-------------------- ---------- --------------------------------------------------------------------------- --------------------- ------------------------------ ------------
BEFORE_TRUNCATE        2849315 27-JAN-15 02.40.56.000000000 PM                                                                2 YES                                8192000

 

對於正常還原點,storage_size為0。對於受保護的還原點storage_size指示了為了保證能對還原點執行flashback database操作所要保留日誌所消耗的閃回區的空間大小。

下面的正常還原點的storage_size確實為0:
SQL> SELECT NAME, SCN, TIME, DATABASE_INCARNATION#,
  2  GUARANTEE_FLASHBACK_DATABASE, STORAGE_SIZE
  3  FROM V$RESTORE_POINT
  4  WHERE GUARANTEE_FLASHBACK_DATABASE='YES';

NAME                        SCN TIME                                                                        DATABASE_INCARNATION# GUARANTEE_FLASHBACK_DATABASE  STORAGE_SIZE
-------------------- ---------- --------------------------------------------------------------------------- --------------------- ------------------------------ ------------
BEFORE_TRUNCATE        2849315 27-JAN-15 02.40.56.000000000 PM                                                                2 YES                                8192000

 

SQL> select count(*) from tt;

  COUNT(*)
----------
    51281

SQL> truncate table tt;

Table truncated.

SQL> select count(*) from tt;

  COUNT(*)
----------
        0


SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  327155712 bytes
Fixed Size                  1273516 bytes
Variable Size            138412372 bytes
Database Buffers          184549376 bytes
Redo Buffers                2920448 bytes
Database mounted.
SQL> select open_mode from v$database;

OPEN_MODE
----------
MOUNTED

SQL>  select  flashback_on from v$database;

FLASHBACK_ON
------------------
RESTORE POINT ONLY

SQL> flashback database to restore point before_truncate;

Flashback complete.

 

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open


SQL>  alter database open resetlogs;

Database altered.

SQL> select count(*) from tt;

  COUNT(*)
----------
    51281

Oracle 11g flashback Data Archive(閃回資料歸檔)

Oracle flashback閃回機制

flashback table快速恢複誤刪除的資料

Oracle 備份恢複:flashback閃回

[Oracle]閃回flashback功能的使用

 

更多詳情見請繼續閱讀下一頁的精彩內容:

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.