閃回與歸檔引數的設定

eric0435發表於2015-01-22

 

Oracle閃回技術提供了一組功能用來檢視資料的過去狀態並且支援資料按時間返回到之前的狀態不用對資料庫從備份中執行大量的還原操作或者執行按時間點恢復。在大部分情況下閃回功能非常有效破壞性比介質恢復小。

Oracle的大部分閃回功能是在邏輯層面進行操作,檢視和維護資料庫物件,比如:
Oracle 閃回查詢:指定目標時間對資料庫執行查詢來檢視在指定時間點的資料結果。為了從一個不想要生效的改變中對錶進行恢復,使用者可以選擇錯誤之前的時間並執行查詢來檢索丟失或改變的記錄。

Oracle閃回版本查詢:能檢視在指定時間間隔內一個或多個表中已經存在記錄的所有版本。還可以檢索行記錄不同版本的後設資料,包括開始時間,結束時間,操作和建立這個版本的事務ID。這個功能可以用來恢復丟失的資料和檢視錶的改變。

Oracle閃回事務查詢:能檢視由單個事務所產生的改變或者在一個時間週期內所有事務的改變。

Oracle閃回表:將一個表返回到之前某個時間點的狀態。當資料庫處於聯機狀態時也能還原表資料。只撤消特定表的改變。

Oracle閃回刪除:是dorp table的反操作

閃回表,閃回查詢,閃回事務查詢和閃回版本查詢都依賴於undo資料,記錄對Oracle資料庫每一個更新的影響。undo的主要作用主要是用於SQL查詢的一致性讀與事務的回滾,這些undo資訊包括了重構過去時間點資料所需要的資訊。

閃回刪除是建立在回收站機制上的,Oracle會將刪除的資料庫物件保留到因為要分配新空間而不得不覆蓋原來使用的空間為止。

注意:邏輯層面的閃回功能不依賴於RMAN。

在物理層面,Oracle閃回資料庫提供了一種對資料庫執行按時間點恢復的替代方法。如果資料檔案已經包含了所不期待的改變,那麼使用閃回資料庫能使用當前的資料檔案將它的內容還原到過去時間點所處的狀態。而結果就是按時間點恢復一樣,但其操作速度更快因為它不需要從備份中還原資料檔案,比介質恢復應用的重做要少很多。

閃回資料庫使用閃回日誌來訪問資料塊的之前版本,它的一些資訊與歸檔重做日誌一樣。閃回資料庫要求你對資料庫設定了閃回區,因為閃回日誌只能儲存在這裡。閃回日誌預設情況下是沒啟用的。閃回日誌所使用的空間由資料庫自動管理,在閃回區會讓空間使用保持平衡。

注意:閃回資料庫被整合到RMAN中,在執行閃回資料庫時可以自動從備份中檢索的任何歸檔重做日誌,它也能使用SQL*Plus來執行,但在這種情況下你必須保證它所要應用的歸檔日誌都在磁碟上。

如果閃回區沒有分配足夠的空間,那麼閃回日誌因為備份和歸檔日誌檔案可能會被刪除。資料庫按時間點恢復可以達到與閃回資料庫同樣的效果,將資料庫的內容返回到過去的時間點。

Oracle資料庫有聯機重做日誌,這個日誌是記錄對資料庫所做的修改,比如插入,刪除,更新資料等,對這些操作都會記錄在聯機重做日誌裡。一般資料庫至少要有2個聯機重做日誌組。當一個聯機重做日誌組被寫滿的時候,就會發生日誌切換,這時聯機重做日誌組2成為當前使用的日誌,當聯機重做日誌組2寫滿的時候,又會發生日誌切換,去寫聯機重做日誌組1,就這樣反覆進行。

如果資料庫處於非歸檔模式,聯機日誌在切換時就會丟棄. 而在歸檔模式下,當發生日誌切換的時候,被切換的日誌會進行歸檔。比如,當前在使用聯機重做日誌1,當1寫滿的時候,發生日誌切換,開始寫聯機重做日誌2,這時聯機重做日誌1的內容會被複製到另外一個指定的目錄下。這個目錄叫做歸檔目錄,複製的檔案叫歸檔重做日誌。

資料庫使用歸檔方式執行時才可以進行災難性恢復。
1.歸檔日誌模式和非歸檔日誌模式的區別
非歸檔模式只能做冷備份,並且恢復時只能做完全備份.最近一次完全備份到系統出錯期間的資料不能恢復.
歸檔模式可以做熱備份,並且可以做增量備份,可以做部分恢復.
用ARCHIVE LOG LIST 可以檢視當前模式狀態是歸檔模式還是非歸檔模式.

當前資料庫沒有啟動歸檔

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     191
Current log sequence           193

從上面的資訊可以知道歸檔目標為USE_DB_RECOVERY_FILE_DEST,這說歸檔日誌將會儲存到閃回區這裡之所以歸檔目錄為是因為當沒有設定其它歸檔目錄時log_archive_dest_10會隱式的使用USE_DB_RECOVERY_FILE_DEST來儲存歸檔重做日誌

SQL> show parameter log_archive_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest                     string
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_2                   string
log_archive_dest_3                   string
log_archive_dest_4                   string
log_archive_dest_5                   string
log_archive_dest_6                   string
log_archive_dest_7                   string
log_archive_dest_8                   string
log_archive_dest_9                   string
log_archive_dest_state_1             string      enable
log_archive_dest_state_10            string      enable
log_archive_dest_state_2             string      enable
log_archive_dest_state_3             string      enable
log_archive_dest_state_4             string      enable
log_archive_dest_state_5             string      enable
log_archive_dest_state_6             string      enable
log_archive_dest_state_7             string      enable
log_archive_dest_state_8             string      enable
log_archive_dest_state_9             string      enable

從上面的資訊可以看到當前資料庫沒有設定任何歸檔目錄,下面來設定歸檔目錄

SQL> alter system set log_archive_dest_1='location=/u02' scope=both;

System altered.

再來檢視歸檔重做日誌儲存的目錄

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u02
Oldest online log sequence     191
Current log sequence           193

可以看到現在資料庫顯示的歸檔日誌目錄為我們所指定的/u02

下面來啟用閃回

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> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u02
Oldest online log sequence     191
Current log sequence           193

SQL> show parameter db_recovery_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/app/oracle/flash_recovery
                                                 _area
db_recovery_file_dest_size           big integer 2G

SQL> alter database force logging;

Database altered.


SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38707: Media recovery is not enabled.

現在雖然我們設定了db_recovery_file_dest與db_recovery_file_dest_size,強制資料庫記錄日誌,但資料庫沒有啟用歸檔是不能僱用閃回的,下面啟用歸檔。

SQL> alter database archivelog;

Database altered.

再次啟用閃回

SQL> alter database flashback on;

Database altered.

當啟用閃回就不能使用log_archive_dest與log_archive_duplex_dest引數來指定歸檔日誌目錄。而是必須使用log_archive_dest_n

SQL> alter system set log_archive_dest='location=/u01' scope=both;
alter system set log_archive_dest='location=/u01' scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DEST with LOG_ARCHIVE_DEST_n or
DB_RECOVERY_FILE_DEST


SQL> alter system set log_archive_duplex_dest='location=/u01' scope=both;
alter system set log_archive_duplex_dest='location=/u01' scope=both
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-16018: cannot use LOG_ARCHIVE_DUPLEX_DEST with LOG_ARCHIVE_DEST_n or
DB_RECOVERY_FILE_DEST

從上面的錯誤資訊確實可以看到當啟用閃回後確實不能使用log_archive_dest與log_archive_duplex_dest引數來指定歸檔日誌目錄

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

相關文章