歸檔日誌until time和Completed、Before區別

lwitpub發表於2014-06-12
先看maclean的解釋,V$ARCHIVED_LOG:
FIRST_TIME             DATE     Timestamp of the first change
NEXT_TIME              DATE     Timestamp of the next change
COMPLETION_TIME        DATE     Time when the archiving completed
FIRST_TIME代表該歸檔日誌中LOW SCN對應的時間戳, 而NEXT_TIME代表HIGH SCN對應的時間戳; COMPLETION_TIME指該日誌實際歸檔成功的時間,當歸檔可以快速完成時 NEXT_TIME往往等於COMPLETION_TIME,但是也存在因為LOGFILE SIZE尺寸較大導致archive歸檔操作持續較長時間,導致 NEXT_TIME << COMPLETION_TIME的情況存在。
接下來我們實際來了解”DELETE ARCHIVELOG ALL COMPLETED BEFORE” 與 “DELETE ARCHIVELOG UNTIL TIME “的區別。
一句話總結:

UNTIL TIME 的TIME指的是ARCHIVELOG的FIRST_TIME,即歸檔日誌中LOW SCN對應的時間戳;其意思為找出所有LOW SCN TIMESTAMP小於等於指定的時間變數的歸檔日誌。
而COMPLETED BEFORE指的是ARCHIVELOG的COMPLETION_TIME,即實際歸檔操作完成的時間;其意思為找出所有歸檔完成時間小於指定的時間變數的歸檔日誌。COMPLETED AFTER指的是ARCHIVELOG的COMPLETION_TIME,即實際歸檔操作完成的時間;其意思為找出所有歸檔完成時間大於等於指定的時間變數的歸檔日誌。


搞清楚這些細節對實際的工作有什麼意義?

ARCHIVELOG相關過濾條件 UNTIL TIME 和 COMPLETED BEFORE是存在區別的,在平時備份BACKUP時可能感受不到這種區別。

試想這樣一個場景,
SEQUENCE A 的ARCHIVELOG 的First TIME為 07:45 、 NEXT TIME為08:10、歸檔操作耗費了1分鐘即COMPLETION_TIME為08:11
SEQUENCE A+1 即後續的一個ARCHIVELOG的 FIRST TIME為08:10,NEXT TIME為08:30……..

我們以08:00為時間變數,若使用DELETE  ARCHIVELOG UNTIL TIME 08:00 ,因為SENQUENCE A的FIRST_TIME <08:00,所以SEQUENCE A將被刪除,若沒有相應的歸檔備份或COPY,則意味著08:00~08:10 這段時間將變成unrecoverable;若使用DELETE ARCHIVELOG ALL  COMPLETED  BEFORE 08:00,因為SENQUENCE A的COMPLETION_TIME>08:00,所以SEQUENCE A將不被刪除。
所以這裡建議,寫歸檔備份的指令碼時最好用COMPLETED AFTER/BEFORE指定。而且UNTIL TIME只能用於歸檔日誌,但COMPLETED選項還可以用於BACKUP,BACKUPSET,COPY等。

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

相關文章