【DB筆試面試427】在Oracle中,數據文件OFFLINE之後必須要做的一件事是什麼?

  • 2019 年 10 月 10 日
  • 筆記

Q

題目

在Oracle中,數據文件OFFLINE之後必須要做的一件事是什麼?

A

答案

數據文件OFFLINE之後必須要做的一件事就是立刻執行一次RECOVER操作,這樣在無論過了多久之後,在ONLINE該數據文件的時候就不需要執行RECOVER操作了。

下面通過兩個實驗來對比驗證該結論。

實驗環境如下表所示:

項目

source db

db 類型

單實例

db version

11.2.0.3.4

db 存儲

ASM

OS版本及kernel版本

AIX 64位 7.1.0.0

實驗一:數據文件OFFLINE後沒有立刻執行RECOVER操作

SYS@lhrdb> COL NAME FOR A60  SYS@lhrdb> SELECT FILE#,NAME,STATUS  FROM V$DATAFILE;       FILE# NAME                                                         STATUS  ---------- ------------------------------------------------------------ -------           1 +DATA/lhrdb/datafile/system.347.916601927                    SYSTEM           2 +DATA/lhrdb/datafile/sysaux.340.916601927                    ONLINE           3 +DATA/lhrdb/datafile/undotbs1.353.916601927                  ONLINE           4 +DATA/lhrdb/datafile/users.445.916601927                     ONLINE           5 +DATA/lhrdb/datafile/example.416.916602001                   ONLINE           6 +DATA/lhrdb/datafile/ts_mig_chain_lhr.471.919677645          ONLINE  6 rows selected.  SYS@lhrdb> ALTER DATABASE DATAFILE 6 OFFLINE;  ALTER DATABASE DATAFILE 6 OFFLINE  *  ERROR at line 1:  ORA-01145: offline immediate disallowed unless media recovery enabled  ====>>>>> 資料庫必須歸檔才可以OFFLINE  SYS@lhrdb> ARCHIVE LOG LIST;  Database log mode              No Archive Mode  Automatic archival             Disabled  Archive destination            USE_DB_RECOVERY_FILE_DEST  Oldest online log sequence     265  Current log sequence           267  SYS@lhrdb> SHUTDOWN IMMEDIATE  Database closed.  Database dismounted.  ORACLE instance shut down.  SYS@lhrdb> STARTUP MOUNT  ORACLE instance started.  Total System Global Area 1720328192 bytes  Fixed Size                  2247072 bytes  Variable Size             486540896 bytes  Database Buffers         1224736768 bytes  Redo Buffers                6803456 bytes  Database mounted.  SYS@lhrdb> ALTER DATABASE ARCHIVELOG;  Database altered.  SYS@lhrdb> ALTER DATABASE OPEN;  Database altered.  SYS@lhrdb> ALTER DATABASE DATAFILE 6 OFFLINE;  Database altered.  SYS@lhrdb> SELECT FILE#,NAME,STATUS  FROM V$DATAFILE;       FILE# NAME                                                         STATUS  ---------- ------------------------------------------------------------ -------           1 +DATA/lhrdb/datafile/system.347.916601927                    SYSTEM           2 +DATA/lhrdb/datafile/sysaux.340.916601927                    ONLINE           3 +DATA/lhrdb/datafile/undotbs1.353.916601927                  ONLINE           4 +DATA/lhrdb/datafile/users.445.916601927                     ONLINE           5 +DATA/lhrdb/datafile/example.416.916602001                   ONLINE           6 +DATA/lhrdb/datafile/ts_mig_chain_lhr.471.919677645          RECOVER  6 rows selected.  SYS@lhrdb> SELECT FILE#,ONLINE_STATUS,CHANGE#,ERROR FROM V$RECOVER_FILE;       FILE# ONLINE_    CHANGE# ERROR  ---------- ------- ---------- -----------------------------------------------------------------           6 OFFLINE    7485831  SYS@lhrdb> ALTER SYSTEM SWITCH LOGFILE;  System altered.  SYS@lhrdb> ALTER SYSTEM SWITCH LOGFILE;  System altered.  SYS@lhrdb> ALTER DATABASE DATAFILE 6 ONLINE;  alter database datafile 6 online  *  ERROR at line 1:  ORA-01113: file 6 needs media recovery  ORA-01110: data file 6: '+DATA/lhrdb/datafile/ts_mig_chain_lhr.471.919677645'  SYS@lhrdb> RECOVER DATAFILE 6;  Media recovery complete.  SYS@lhrdb> ALTER DATABASE DATAFILE 6 ONLINE;<<<<<<<<<----- 可以看到6號文件必須先執行recover操作後才能執行ONLINE  Database altered.  

實驗二:數據文件OFFLINE後立刻執行一次RECOVER操作

SYS@lhrdb> ALTER DATABASE DATAFILE 6 OFFLINE;  Database altered.  SYS@lhrdb> recover datafile 6;<<<<<<<<<----- OFFLINE後接著執行recover操作  Media recovery complete.  SYS@lhrdb> SELECT FILE#,ONLINE_STATUS,CHANGE#,ERROR FROM V$RECOVER_FILE;<<<<<<<<<--該視圖查不到數據  no rows selected  SYS@lhrdb> SELECT FILE#,NAME,STATUS  FROM V$DATAFILE;       FILE# NAME                                                         STATUS  ---------- ------------------------------------------------------------ -------           1 +DATA/lhrdb/datafile/system.347.916601927                    SYSTEM           2 +DATA/lhrdb/datafile/sysaux.340.916601927                    ONLINE           3 +DATA/lhrdb/datafile/undotbs1.353.916601927                  ONLINE           4 +DATA/lhrdb/datafile/users.445.916601927                     ONLINE           5 +DATA/lhrdb/datafile/example.416.916602001                   ONLINE           6 +DATA/lhrdb/datafile/ts_mig_chain_lhr.471.919677645          OFFLINE  6 rows selected.  SYS@lhrdb> ALTER SYSTEM SWITCH LOGFILE;  System altered.  SYS@lhrdb> ALTER SYSTEM SWITCH LOGFILE;  System altered.  SYS@lhrdb> ALTER SYSTEM SWITCH LOGFILE;  System altered.  SYS@lhrdb> alter database datafile 6 online;<<<<<<<<<-----切換日誌後讓數據文件做ONLINE操作並不需要執行RECOVER操作  Database altered.  SYS@lhrdb> select file#,name,status  from v$datafile;       FILE# NAME                                                         STATUS  ---------- ------------------------------------------------------------ -------           1 +DATA/lhrdb/datafile/system.347.916601927                    SYSTEM           2 +DATA/lhrdb/datafile/sysaux.340.916601927                    ONLINE           3 +DATA/lhrdb/datafile/undotbs1.353.916601927                  ONLINE           4 +DATA/lhrdb/datafile/users.445.916601927                     ONLINE           5 +DATA/lhrdb/datafile/example.416.916602001                   ONLINE           6 +DATA/lhrdb/datafile/ts_mig_chain_lhr.471.919677645          ONLINE  6 rows selected.  SYS@lhrdb>  

實驗結束,根據實驗過程可以知道,如果執行了數據文件的OFFLINE操作,那麼需要接著執行一次RECOVER操作。這樣做的好處是,在以後的資料庫維護中,隨時想將數據文件ONLINE都可以,而不用擔心歸檔文件是否存在的情況了。

& 說明:

有關本小節內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2125336/