【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/