【DB筆試面試202】在Oracle中,怎樣清除V$ARCHIVED_LOG視圖中的過期資訊?
- 2019 年 10 月 10 日
- 筆記
Q
題目如下所示:
在Oracle中,怎樣清除V$ARCHIVED_LOG視圖中的過期資訊?
A
答案如下所示:
在使用RMAN命令(DELETE NOPROMPT ARCHIVELOG ALL;)刪除歸檔資訊後,V$ARCHIVED_LOG視圖中的NAME列為空,但是依然可以查詢到這些刪除了的歸檔資訊,出現這樣的現象是因為使用RMAN命令在刪除歸檔日誌的時候不會清除控制文件中的內容,導致V$ARCHIVED_LOG留下的過期的不完整的失效資訊。
使用如下的命令可以清除控制文件中關於V$ARCHIVED_LOG的資訊:
SQL> EXECUTE SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION(11);
但是,這樣會把所有的V$ARCHIVE_LOG資訊都清除了,包括未過期未失效的資訊也會清除。所以,需要再將未過期未失效的歸檔文件資訊註冊進來。假設歸檔日誌都在/oradata/archive/中,則需要執行以下命令重新註冊:
RMAN> catalog start with '/oradata/archive/';
再次查詢V$ARCHIVED_LOG時,未被刪除的歸檔資訊就可以查詢到了。如果歸檔資訊放在閃回恢復區中,那麼可以使用如下的命令進行重新註冊:
RMAN> catalog recovery area;
需要注意的是,對於命令「SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION(11)」中的11代表的是歸檔文件(其實就是控制文件中的「record type」),那麼其它數字分別代表什麼含義呢?其實,可以通過視圖V$CONTROLFILE_RECORD_SECTION來查看:
SYS@lhrdb> SELECT ROWNUM-1 "NUMBER", TYPE FROM V$CONTROLFILE_RECORD_SECTION; number TYPE ---------- -------------------------------------------------------- 0 DATABASE 1 CKPT PROGRESS 2 REDO THREAD 3 REDO LOG 4 DATAFILE 5 FILENAME 6 TABLESPACE 7 TEMPORARY FILENAME 8 RMAN CONFIGURATION 9 LOG HISTORY 10 OFFLINE RANGE 11 ARCHIVED LOG 12 BACKUP SET 13 BACKUP PIECE 14 BACKUP DATAFILE 15 BACKUP REDOLOG 16 DATAFILE COPY 17 BACKUP CORRUPTION 18 COPY CORRUPTION 19 DELETED OBJECT 20 PROXY COPY 21 BACKUP SPFILE 22 DATABASE INCARNATION 23 FLASHBACK LOG 24 RECOVERY DESTINATION 25 INSTANCE SPACE RESERVATION 26 REMOVABLE RECOVERY FILES 27 RMAN STATUS 28 THREAD INSTANCE NAME MAPPING 29 MTTR 30 DATAFILE HISTORY 31 STANDBY DATABASE MATRIX 32 GUARANTEED RESTORE POINT 33 RESTORE POINT 34 DATABASE BLOCK CORRUPTION 35 ACM OPERATION 36 FOREIGN ARCHIVED LOG 37 PDB RECORD 38 AUXILIARY DATAFILE COPY 39 MULTI INSTANCE REDO APPLY 40 PDBINC RECORD 41 TABLESPACE KEY HISTORY
因此,輸入不同的數字,會對不同的視圖數據進行清理,例如:
EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(11); /** CLEAR V$ARCHIVED_LOG */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(12) ; /** CLEAR V$BACKUP_SET */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(13) ; /** CLEAR V$BACKUP_PIECE */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(17); /** CLEAR V$BACKUP_CORRUPTION */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(18); /** CLEAR V$COPY_CORRUPTION */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(19); /** CLEAR V$DELETED_OBJECT */ EXECUTE DBMS_BACKUP_RESTORE.RESETCFILESECTION(28); /** CLEAR V$RMAN_STATUS */
& 說明:
有關清除V$ARCHIVED_LOG視圖中的過期資訊的更多內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2141732/、http://blog.itpub.net/26736162/viewspace-1799884/