Oracle DB閃回(Flashback database)開啟筆記
為測試部門搭建一台Oracle DB,需滿足可以經常將整個資料庫回退到某時間點的需求。比較簡單的方法是使用Oracle的閃回特性之一"閃回資料庫"。
預備知識:閃回資料庫需要使用兩種日誌:閃回日誌和重做日誌。重做日誌的概念不需多談,所謂的閃回日誌的記錄正好與重做日誌的記錄相反。可以簡單的這樣認為:比如重做日誌記錄了一條insert命令,那麼閃回日誌就記錄這條記錄相關的delete命令,當然實際上這是非常複雜的過程。
這裡並不會介紹“閃回資料庫”的原理,因為已經有太多的資料來闡明它,也不會介紹“閃回資料庫”的操作方法,因為它非常簡單(在進入MOUNT狀態後執行"flashback database to scn …"或"flashback database to timestamp …")。
1. 開啟DB閃回之前需確保啟用了歸檔模式
SQL> archive log list
Database
log mode Archive Mode
Automatic archival Enabled
……
2. 查看閃回日誌是否已啟用
SQL>
select
LOG_MODE,FLASHBACK_ON
from
v$
database
;
LOG_MODE FLASHBACK_ON
---------- ---------------
ARCHIVELOG
NO
3. 啟用閃回日誌,即閃回資料庫功能
SQL>
alter
database
flashback
on
;
alter
database
flashback
on
*
ERROR
at
line 1:
ORA-38706: Cannot turn
on
FLASHBACK
DATABASE
logging.
ORA-38709: Recovery Area
is
not
enabled.
報錯,無法開啟閃回功能。到這裡本文的主角--"oerr"命令君隆重登場。
4. 根據上文中提示的錯誤號碼使用oerr命令排錯
$ oerr ORA 38709
38709, 00000,
"Recovery Area is not enabled."
//
*Cause: An ALTER DATABASE FLASHBACK ON
command
failed because the
//
Recovery Area was not enabled.
//
*Action: Set DB_RECOVERY_FILE_DEST to a location and retry.
5. 從上述的提示中找到錯誤原因:DB_RECOVERY_FILE_DEST 沒有預設
SQL> show parameter DB_RECOVERY_FILE_DEST
NAME
TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big
integer
0
6. 設定DB_RECOVERY_FILE_DEST
SQL>
alter
system
set
db_recovery_file_dest=
'/opt/oracle/fast_recovery_area'
;
alter
system
set
db_recovery_file_dest=
'/opt/oracle/fast_recovery_area'
*
ERROR
at
line 1:
ORA-02097: parameter cannot be modified because specified value
is
invalid
ORA-19802: cannot use DB_RECOVERY_FILE_DEST without DB_RECOVERY_FILE_DEST_SIZE
7. 使用oerr命令排錯
$ oerr ORA 19802
19802, 00000,
"cannot use DB_RECOVERY_FILE_DEST without DB_RECOVERY_FILE_DEST_SIZE"
//
*Cause: There are two possible cause
for
this error:
//
1) The DB_RECOVERY_FILE_DEST parameter was
in
use when no
//
DB_RECOVERY_FILE_DEST_SIZE parameter was encountered
while
//
fetching initialization parameter.
//
2) An attempt was made to
set
DB_RECOVERY_FILE_DEST with the
//
ALTER SYSTEM
command
when no DB_RECOVERY_FILE_DEST_SIZE
//
was
in
use.
//
*Action: Correct the dependency parameter definitions and retry the
command
.
8. 從上述錯誤原因與解決方案提示中得知需要先設定DB_RECOVERY_FILE_DEST_SIZE
SQL>
alter
system
set
DB_RECOVERY_FILE_DEST_SIZE=20G scope=both;
System altered.
SQL> show parameter db_recovery
NAME
TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big
integer
20G
9. 設定DB_RECOVERY_FILE_DEST
SQL>
alter
system
set
db_recovery_file_dest=
'/opt/oracle/fast_recovery_area'
scope=both;
System altered.
10. 啟用閃回日誌,即閃回資料庫功能
SQL>
alter
database
flashback
on
;
Database
altered.
此時可以在'db_recovery_file_dest'設定的目錄中看到副檔名為.flb的檔案,它們就是閃回日誌。
$
ls
o1_mf_98mpkdl6_.flb o1_mf_98okkcs9_.flb
11. 快閃記憶體日誌的儲存期限由參數db_flashback_ retention_target控制(單位為分鐘),凡是超出儲存期限的閃回日誌將會在快速恢複區空間吃緊時被自動刪除。
SQL> show parameter db_flashback_retention_target
NAME
TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target
integer
10080
Oracle 11g Flashback Data Archive(閃回資料歸檔)
Oracle Flashback閃回機制
Oracle Flashback database
Flashback table快速恢複誤刪除的資料
Oracle 備份恢複:Flashback閃回