您好,登錄后才能下訂單哦!
ALTER DATABASE CLEAR UNARCHIVED LOGFILE的使用
在進入今天主題之前,先來討論一個v$log動態性能視圖的兩個字段:
我們需要注意上圖中的兩個字段:STATUS和ARCHIVED。
STATUS有3種狀態:CURRENT,ACTIVE和INACTIVE;在發生日志切換的時候,會觸發數據庫執行一次CHECKPOINT,CHECKPOINT會觸發DBWn進程將內存中的臟數據寫入到硬盤,一旦寫入完成,之前的日志組的STATUS就會變成INACTIVE,表示如果此時發生宕機,不再需要改日志組的日志進行實例恢復,反之,需要用到該日志組的日志完成實例恢復;在實際的工作中發現,對于一個”不忙“的數據庫,日志組ACTIVE的狀態可能持續數小時,如果此時停電或異常關閉,將可能丟失兩個日志組的數據;從這點來說,為了數據的安全,日志組成員不應設置的過大,應該有一個“適合”的大小。
ARCHIVED有兩種狀態:YES,NO;YES表示ARCH進程已經將該日志組的Online Redo LogFile拷貝到歸檔目的地,成為一個Archived Redo Logfile,NO表示還沒有拷貝完成。日志組的狀態和日志組是否歸檔之間是沒有必然的聯系,它們分別由不同的進程來控制。在出現故障,需要手動恢復的時候,我們應該注意觀察最新的日志組狀態及是否歸檔,這可能幫助到我們的恢復過程,另外,V$LOG的數據來源于控制文件,所以恢復的控制文件或重建的控制文件不能說明數據庫最新的日志組狀態。
下面通過一個簡單的例子來討論ALTER DATABASE CLEAR UNARCHIVED LOGFILE的使用:
C:\Users\LIUBINGLIN>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on 星期五 1月 4 23:22:26 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
連接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options
SQL> select status from v$instance;
STATUS
------------
OPEN
SQL> shutdown immediate
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 267825152 bytes
Fixed Size 1384044 bytes
Variable Size 109052308 bytes
Database Buffers 150994944 bytes
Redo Buffers 6393856 bytes
數據庫裝載完畢。
SQL> select group#,thread#,sequence#,status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
4 1 41 CURRENT
3 1 0 UNUSED
SQL> alter database clear unarchived logfile group 4;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL> select group#,thread#,sequence#,status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
3 1 42 CURRENT
4 1 0 UNUSED
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 267825152 bytes
Fixed Size 1384044 bytes
Variable Size 109052308 bytes
Database Buffers 150994944 bytes
Redo Buffers 6393856 bytes
數據庫裝載完畢。
SQL> select group#,thread#,sequence#,status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
4 1 0 UNUSED
3 1 42 CURRENT
SQL> alter database clear unarchived logfile group 3;
alter database clear unarchived logfile group 3
*
第 1 行出現錯誤:
ORA-01624: 日志 3 是緊急恢復實例 orcl (線程 1) 所必需的
ORA-00312: 聯機日志 3 線程 1: 'F:\APP\ORACLE\ORADATA\ORCL2\REDO03.LOG'
SQL> alter database open;
數據庫已更改。
SQL> select group#,thread#,sequence#,status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
3 1 42 INACTIVE
4 1 43 CURRENT
SQL> alter system switch logfile;
系統已更改。
SQL> shutdown abort
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 267825152 bytes
Fixed Size 1384044 bytes
Variable Size 109052308 bytes
Database Buffers 150994944 bytes
Redo Buffers 6393856 bytes
數據庫裝載完畢。
SQL> select group#,thread#,sequence#,status from v$log;
GROUP# THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
4 1 43 ACTIVE
3 1 44 CURRENT
SQL> alter database clear unarchived logfile group 4;
alter database clear unarchived logfile group 4
*
第 1 行出現錯誤:
ORA-01624: 日志 4 是緊急恢復實例 orcl (線程 1) 所必需的
ORA-00312: 聯機日志 4 線程 1: 'F:\APP\ORACLE\ORADATA\ORCL2\REDO04.LOG'
總結:ALTER DATABASE CLEAR UNARCHIVED LOGFILE只能用于清除正常關閉下的CURRENT狀態的日志組。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。