OCP課程53:管理II之使用閃回資料庫

stonebox1122發表於2016-05-23

課程目標:

  • 配置閃回資料庫
  • 進行閃回資料庫
  • 監控閃回資料庫

1、閃回資料庫

clipboard

使用閃回資料庫,可以取消某個時間點之後的所有更改,快速將資料庫回到這個時間點。由於不需要還原備份,所有此操作很快。可以使用此功能來解決資料邏輯錯誤問題。

當使用閃回資料庫,Oracle資料庫使用過去的塊映像來更改資料庫。在正常的資料庫操作時,資料庫記錄這些塊映像到閃回日誌。閃回日誌順序寫入且不歸檔。Oracle資料庫在快速恢復區中自動建立,刪除和調整閃回日誌大小。使用者需要在監控效能和決定快速恢復區中閃回日誌大小時關注閃回日誌。

閃回資料庫需要的時間取決於閃回的時間點以及該時間點後資料庫的活動量。還原和恢復資料庫可能需要更長的時間。閃回日誌中的前映像只能將資料庫還原到過去的某一個時間點,向前的恢復用於將資料庫恢復到過去的某一時間一致的狀態。資料庫將資料檔案返回到先前的某個時間點,但不影響輔助檔案,比如初始化引數檔案。閃回資料庫也可以用於Data Guard和Recovery Advisor以及同步複製資料庫。


2、閃回資料庫架構

clipboard[1]

當啟用閃回資料庫,RVWR(Flashback Write)後臺程式啟動。這個後臺程式從閃回緩衝區按順序將閃回資料庫資料寫到閃回日誌,閃回日誌迴圈使用。當發出FLASHBACK DATABASE命令,使用閃回日誌將資料塊還原到之前的映像,使用重做資料前滾到指定的時間點。

啟用閃回資料庫的開銷取決於讀/寫的混合資料庫負載。由於查詢不需要記錄任何閃回資料,寫密集型的負載越大,開啟閃回資料庫的開銷越高。


3、配置閃回資料庫

clipboard[2]

配置閃回資料庫步驟如下:

(1)配置快速恢復區。

(2)使用初始化引數DB_FLASHBACK_RETENTION_TARGET設定保留時間目標,指定可以閃回資料庫的時間上限,單位為分鐘。上圖例子中指定2880分鐘,2天。這個引數僅僅是一個目標值,而不保證一定可以達到,閃回時間間隔取決於快速恢復區保留了多少閃回資料。

(3)使用以下命令啟用閃回資料庫:

ALTER DATABASE FLASHBACK ON;

在啟用閃回資料庫之前,資料庫必須配置為歸檔模式。

使用下面語句查詢是否啟用了閃回資料庫:

SELECT flashback_on FROM v$database;

使用ALTER DATABASE FLASHBACK OFF命令禁用閃回資料庫,同時自動刪除閃回日誌。

注意:資料庫只能在mount in exclusive模式下啟用閃回資料庫。

例子:配置閃回資料庫

SQL> select flashback_on from v$database;

FLASHBACK_ON

------------------

NO

SQL> show parameter db_recovery

NAME                                 TYPE         VALUE

------------------------------------ ------------ ------------------------------

db_recovery_file_dest                string       +FRA

db_recovery_file_dest_size           big integer  4040M

SQL> alter database open;

Database altered.

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     235

Next log sequence to archive   237

Current log sequence           237

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

SQL> alter system set db_flashback_retention_target=2880 scope=both;

System altered.

SQL> alter database flashback on;

alter database flashback on

*

ERROR at line 1:

ORA-38706: Cannot turn on FLASHBACK DATABASE logging.

ORA-38708: not enough space for first flashback database log file

SQL> host oerr ora 38708

38708, 00000, "not enough space for first flashback database log file"

// *Cause: An ALTER DATABASE FLASHBACK ON command failed because there

//         was not enough space in the Recovery Area for the first

//         flashback database log file.

// *Action: Make more space in the Recovery Area.  For example, this

//          can be done by increasing the value of

//          DB_RECOVERY_FILE_DEST_SIZE.

SQL> select file_type,percent_space_used from V$FLASH_RECOVERY_AREA_USAGE;

FILE_TYPE            PERCENT_SPACE_USED

-------------------- ------------------

CONTROL FILE                        .25

REDO LOG                           3.79

ARCHIVED LOG                       35.3

BACKUP PIECE                        .74

IMAGE COPY                        58.84

FLASHBACK LOG                         0

FOREIGN ARCHIVED LOG                  0

7 rows selected.

RMAN> delete backup;

RMAN> delete copy;

SQL> alter database flashback on;

Database altered.

SQL> alter database open;

Database altered.

SQL> select flashback_on from v$database;

FLASHBACK_ON

------------------

YES


4、需要做的事情

clipboard[3]

登入到EM。在可用頁面上,選擇備份/恢復區域中的恢復設定。確保資料庫在ARCHIVELOG模式。如果沒有的話,選擇歸檔模式,然後單擊“繼續”。需要關閉並重新啟動例項以生效更改。

clipboard[4]

clipboard[5]

clipboard[6]


5、閃回資料庫:示例

clipboard[7]

可以使用RMAN的FLASHBACK DATABASE命令執行閃回資料庫操作。可以使用SEQUENCE和THREAD指定一個重做日誌序列號和執行緒作為一個下限。RMAN選擇可以閃回的檔案,但不包括指定的序列號。

可以使用SQL的FLASHBACK DATABASE命令將資料庫恢復到過去的某個時間或SCN。如果使用SCN子句,必須提供一個SCN號。如果使用TO TIMESTAMP子句,必須提供一個時間戳。還可以指定一個還原點名稱。

可以使用V$SESSION_LONGOPS檢視監控閃回資料庫過程。

注意:資料庫必須在mounted in exclusive模式執行FLASHBACK DATABASE命令,以只讀開啟資料庫檢視改變。閃回完成後需要使用RESETLOGS選項開啟資料庫。

例子:閃回資料庫

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE

-------------------

2016-02-01 21:57:52

SQL> select count(*) from emp;

  COUNT(*)

----------

       107

SQL> delete from emp;

107 rows deleted.

SQL> commit;

Commit complete.

SQL> select count(*) from emp;

  COUNT(*)

----------

         0

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

RMAN> flashback database to time="to_date('2016-02-01 21:57:52','yyyy-mm-dd hh24:mi:ss')";

Starting flashback at 01-FEB-16

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=28 device type=DISK

starting media recovery

media recovery complete, elapsed time: 00:00:26

Finished flashback at 01-FEB-16

SQL> alter database open read only;

Database altered.

SQL> select count(*) from emp;

  COUNT(*)

----------

       107

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

SQL> alter database open resetlogs;

Database altered.

SQL> select count(*) from emp;

  COUNT(*)

----------

       107


6、閃回資料庫注意事項

clipboard[8]

在不能使用閃回資料庫的時候,使用不完整恢復將資料庫恢復到特定的時間。閃回資料庫操作完成後,可以以只讀模式開啟資料庫驗證是否使用了正確的目標時間或SCN。如果不是,可以再次閃回資料庫,或執行一個恢復操作前滾資料庫。因此,向前恢復資料庫以撤消閃回資料庫的操作。

不能使用閃回資料庫恢復一個被刪除的資料檔案,只會將資料檔案資訊增加到控制檔案並標記為離線,但並沒有閃回該資料檔案。閃回資料庫也不能閃回資料檔案到資料檔案收縮之前,如果想閃回資料檔案到資料檔案收縮之前,需要在閃回資料庫操作之前離線該資料檔案。可以對配置了自動擴充套件的資料檔案使用閃回資料庫。可以在FLASHBACK DATABASE命令中使用TO BEFORE RESETLOGS子句以便閃回到上一個RESETLOGS操作之前。

注意:閃回保留時間目標不是一個絕對保證時間,如果快速恢復區空間不夠,將會自動刪除閃回日誌。

例子:閃回資料庫後撤銷閃回操作

SQL> select count(*)  from emp;

  COUNT(*)

----------

       107

SQL> create restore point fb1;

Restore point created.

SQL> delete from emp;

107 rows deleted.

SQL> commit;

Commit complete.

SQL> select count(*)  from emp;

  COUNT(*)

----------

         0

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

SQL> flashback database to restore point fb1;

Flashback complete.

SQL> alter database open read only;

Database altered.

SQL> select count(*) from emp;

  COUNT(*)

----------

       107

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.

SQL> select count(*) from emp;

  COUNT(*)

----------

         0

例子:資料檔案收縮後閃回失敗

SQL> alter database datafile '+DATA/stone/datafile/fda_tbs1.281.902663435' resize 80M;

Database altered.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

SQL> flashback database to restore point fb1;

flashback database to restore point fb1

*

ERROR at line 1:

ORA-38766: cannot flashback data file 17; file resized smaller

ORA-01110: data file 17: '+DATA/stone/datafile/fda_tbs1.281.902663435'

SQL> alter database datafile '+DATA/stone/datafile/fda_tbs1.281.902663435' offline;

Database altered.

SQL> flashback database to restore point fb1;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select count(*) from emp;

  COUNT(*)

----------

       107

再次online資料檔案報錯:

SQL> alter database datafile '+DATA/stone/datafile/fda_tbs1.281.902663435' online;

alter database datafile '+DATA/stone/datafile/fda_tbs1.281.902663435' online

*

ERROR at line 1:

ORA-01190: control file or data file 17 is from before the last RESETLOGS

ORA-01110: data file 17: '+DATA/stone/datafile/fda_tbs1.281.902663435'

例子:閃回到上一次resetlogs之前

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

Total System Global Area  889389056 bytes

Fixed Size                  2258360 bytes

Variable Size             662702664 bytes

Database Buffers          218103808 bytes

Redo Buffers                6324224 bytes

Database mounted.

SQL> flashback database to before resetlogs;

Flashback complete.

SQL> recover database;

Media recovery complete.

SQL> alter database open;

Database altered.


7、監控閃回資料庫

clipboard[9]

透過監測快速恢復區的空間使用情況可以確定是否滿足保留時間目標。使用V$FLASHBACK_DATABASE_LOG檢視監視閃回資料庫保留時間目標。

  • ESTIMATED_FLASHBACK_SIZE欄位估計滿足當前閃回保留時間目標所有要的快速恢復區磁碟空間。
  • FLASHBACK_SIZE欄位為閃回資料的當前大小,以位元組為單位。
  • OLDEST_FLASHBACK_SCN和OLDEST_FLASHBACK_TIME欄位顯示資料庫可以閃回到的最小的SCN及時間的大概值,V$DATABASE中的CURRENT_SCN欄位為當前資料庫的SCN。

使用V$FLASHBACK_DATABASE_STAT檢視監控在閃回資料庫日誌中記錄閃回資料的開銷。此檢視包含24小時的資訊,每行表示1小時的時間間隔。可以使用此檢視確定閃回資料生成速率的變化。

SQL> SELECT begin_time, end_time, flashback_data, db_data,

2 redo_data, estimated_flashback_size AS EST_FB_SZE

3 FROM V$FLASHBACK_DATABASE_STAT;

BEGIN_TIM END_TIME FLASHBACK_DATA DB_DATA REDO_DATA EST_FB_SZE

--------- --------- -------------- ---------- ---------- ----------

12-FEB-09 12-FEB-09 16384 0 24576 0

12-FEB-09 12-FEB-09 6594560 7471104 1533440 815923200

12-FEB-09 12-FEB-09 17235968 12361728 5150920 839467008

12-FEB-09 12-FEB-09 311648256 37249024 10272768 855195648

基於以上資訊,可能需要調整保留時間或者快速恢復區大小。

FLASHBACK_DATA和REDO_DATA欄位分別表示閃回資料和重做資料寫入位元組數。DB_DATA欄位表示資料塊讀寫位元組數。

使用V$RECOVERY_FILE_DEST檢視檢視快速恢復區的資訊。欄位描述如下:

  • NAME:快速恢復區名字。
  • SPACE_LIMIT:引數DB_RECOVERY_FILE_DEST_SIZE指定的磁碟可用限制值。
  • SPACE_USED:使用了多少位元組。
  • SPACE_RECLAIMABLE:透過空間管理演算法刪除過期、冗餘以及低優先順序的檔案而可以回收的空間。
  • NUMBER_OF_FILES:檔案數量。

SQL> SELECT name, space_limit AS quota,

2 space_used AS used,

3 space_reclaimable AS reclaimable,

4 number_of_files AS files

5 FROM v$recovery_file_dest ;

NAME QUOTA USED RECLAIMABLE FILES

------------------------ ---------- ---------- ----------- -----

/u01/flash_recovery_area 5368707120 2507809104 203386880 226

例子:透過V$FLASHBACK_DATABASE_LOG查詢閃回資料相關資訊

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select * from v$flashback_database_log;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE

-------------------- ------------------- ---------------- -------------- ------------------------

             4350231 2016-02-02 14:38:55             1440      104857600                331431936

例子:使用V$FLASHBACK_DATABASE_STAT查詢記錄閃回日誌的資訊

SQL> select * from v$flashback_database_stat;

BEGIN_TIME          END_TIME            FLASHBACK_DATA    DB_DATA  REDO_DATA ESTIMATED_FLASHBACK_SIZE

------------------- ------------------- -------------- ---------- ---------- ------------------------

2016-02-02 14:51:45 2016-02-02 15:47:18       12812288   19611648    7825408                        0

例子:使用V$RECOVERY_FILE_DEST檢視檢視快速恢復區的資訊

SQL> select * from v$recovery_file_dest;

NAME                           SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

------------------------------ ----------- ---------- ----------------- ---------------

/u01/app/oracle/fast_recovery_  8589934592 3987886592        1587984384              17

area


8、使用EM監控閃回資料庫

clipboard[10]

大多數在前面提到的閃回資料庫統計資訊可以從恢復設定頁面檢視。這些指標包括所有閃回日誌的當前使用的空間,最低的SCN及其對應的時間。


9、保證還原點

clipboard[11]

像普通的還原點一樣,保證還原點可以用於恢復操作的SCN的別名。一個主要的區別是,保證恢復點永遠不會從控制檔案中過期,且必須顯式刪除。

即使資料庫沒有啟用閃回日誌,建立特定SCN的保證還原點確保可以執行閃回資料庫操作將資料庫回到該SCN的狀態。如果啟用了閃回日誌,建立一個保證還原點確保可以閃回資料庫到之後的任何時間點。

只有快速恢復區有足夠的空間儲存閃回日誌,就可以使用保證還原點將資料庫回到幾天或者幾周之前。

而且與正常的還原點一樣,保證還原點可以用來指定RECOVER DATABASE操作的時間點。

注意:適用於閃回資料庫的限制也適用於保證還原點。例如,收縮資料檔案或刪除一個表空間會阻止受影響的資料檔案閃回到保證還原點。

例子:建立保證還原點及刪除保證還原點

SQL> create restore point before_upgrade guarantee flashback database;

Restore point created.

SQL> drop restore point before_upgrade;

Restore point dropped.


10、閃回資料庫和保證還原點

clipboard[12]

使用保證還原點,資料庫必須滿足以下前提條件:

  • COMPATIBLE初始化引數必須設定為10.2或更高。
  • 資料庫必須執行在歸檔模式。
  • FLASHBACK DATABASE命令需要還原點之後的歸檔重做日誌檔案。
  • 必須配置快速恢復區。保證還原點使用類似於閃回日誌的機制。
  • 如果沒有啟用閃回資料庫,那麼在建立第一個保證還原點的時候(或者刪除了所有以前建立的保證還原點),資料庫必須掛載而不開啟(mounted,not open)。

閃回資料庫和保證還原點的日誌包括資料檔案塊改變之前的前映像。閃回日誌和保證還原點日誌的主要區別是塊記錄的時間以及在快速恢復區空間不足時是否可以刪除。這些差異影響日誌空間使用和資料庫的效能。

如果啟用閃回資料庫並定義一個或多個保證還原點,然後資料庫執行正常閃回日誌。在這種情況下,恢復區保留閃回到當前至保證還原點之間任意時間的閃回日誌。閃回日誌如果需要用於滿足保證還原點,則在空間不足時是不會被自動刪除的。

例子:建立保證還原點

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area  835104768 bytes

Fixed Size                  2257840 bytes

Variable Size             507513936 bytes

Database Buffers          322961408 bytes

Redo Buffers                2371584 bytes

Database mounted.

SQL> alter database flashback off;

Database altered.

SQL> create restore point before_upgrade guarantee flashback database;

Restore point created.

SQL> alter database open;

Database altered.


11、相關習題

(1)You plan to execute the following command to perform a Flashback Database operation in your database:

SQL> FLASHBACK DATABASE TO TIMESTAMP (SYSDATE -5/24);

Which two statements are true about this? (Choose two)

A. The database must have multiplexed redo log files.

B. The database must be in the MOUNT state to execute the command.

C. The database must be in the NOMOUNT state to execute the command.

D. The database must be opened in RESTRICTED mode before this operation.

E. The database must be opened with the RESETLOGS option after the flashback operation.

答案:BE

(2)Flashback Database relies on which technologies to recover to a point in time

A.  Flashback Data Archive

B.  Flashback logs in the flash recovery area

C.  FlashbUndo tablespace

D.  RMAN command line

E.  None of the above

答案:B

(3)The _______ writes the Flashback Database logs in the flash recovery area.

A.  FLSH

B.  FLDB

C.  RVWR

D.  RVRW

E.  FBDA

答案:C

(4)Which of these are valid Flashback Database recovery point parameters? (Choose all that apply.)

A.  SCN

B.  Timestamp

C.  Named recovery point

D.  Transaction ID

E.  Session ID

答案:ABC

(5)On Friday at 11:30 am you decided to flash back the database because of a user error that occurred at 8:30 am.

Which option must you use to check whether a flashback operation can recover the database to the specified time?

A.  Check the alert log file

B.  Query the V$FLASHBACK_DATABASE_LOG view

C.  Query the V$RECOVERY_FILE_DEST_SIZE view

D.  Query the V$FLASHBACK_DATABASE_STAT view

E.  Check the value assigned for the UNDO_RETENTION parameter

答案:B

(6)What two are the prerequisites for enabling Flashback Database? (Choose two)

A.  The database must be in ARCHIVELOG mode

B.  The database must be in MOUNT EXCLUSIVE mode

C.  The database must be opened in RESTRICTED mode

D.  The database instance must be started in the NOMOUNT state

E.  The database instance must have the keep buffer pool defined

答案:AB

(7)You want to configure the Flashback Database feature and retain flashback logs for three days.

Presently the database is open and configured in ARCHIVELOG mode.

The following steps must be performed in the correct sequence to do this:

1. Set the retention target:

SQL> ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=4320;

2. Enable Flashback Database:

SQL> ALTER DATABASE FLASHBACK ON;

3. Mount the database:

SQL> STARTUP MOUNT EXCLUSIVE

4. Shutdown the instance:

SQL> SHUTDOWN IMMEDIATE

5. Open the database:

SQL> ALTER DATABASE OPEN;

Choose the correct sequence.

A.  4, 1, 3, 2, 5

B.  4, 3, 1, 2, 5

C.  2, 4, 3, 5, 1

D.  4, 2, 5, 3, 1

答案:B

(8)What does the DB_FLASHBACK_RETENTION_TARGET parameter configure?

A.  An upper limit on how far you can flash back the database, depending on the information in the redo logs

B.  An upper limit on how far you can flash back the database, depending on the information in the undo tablespace

C.  The amount of time for which the flashback data is to be kept in the flash recovery area, provided that there is enough space

D.  The amount of time for which the flashback data is guaranteed to be kept in the undo tablespace, provided that there is enough space

答案:C

(9)You executed the following query:

png此主題相關圖片如下:
clipboard[13]

Considering that all the redo logs are available, what information can you derive from the output of the preceding query?

A.The time when the last flashback operation in your database was performed

B.The time when the first flashback operation in your database was performed

C.The approximate time and the lowest system change number (SCN) to which you can flash back your database

D.The system change number (SCN) and the time when the Flashback Database was enabled in the database instance

答案:C

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

相關文章