如果您已使用第 9 章, 配置自動備份中所述的自動備份功能,則可以在即時資料庫毀壞時使用緊急備份副本。
本小節包括如何復原兩種不同的自動備份:
復原備份之前,請確定您已經完成以下作業:
嘗試診斷是哪個作業事件導致即時資料庫損毀。
移除或校正損毀作業事件以便新的歸檔檔案不會被損毀。
透過將已損毀的資料庫複製到其他目錄或可移動媒體來保留該資料庫。如果您需要連絡技術支援,此作業是必須的。
即時資料庫被毀壞時,應首先選擇緊急備份。若要復原緊急備份,請執行以下步驟:
識別所有未套用的或開啟以備在已損毀的即時資料庫目錄中寫入的記錄檔。
關閉開啟以備寫入的記錄。它包含最新作業事件。
建立新的 (回復) 目錄。
將目前的緊急備份副本複製到新的回復資料庫目錄中。
將已毀壞的即時資料庫目錄中的 log.* 檔案複製到新的回復資料庫目錄中。
如果您保留了資料庫的歸檔檔案副本,請將尚未套用於即時資料庫的記錄複製到歸檔目錄,這樣您的歸檔備份副本就完整了。
以針對新的回復資料庫指定的 -c -h 選項執行 db_recover。
例如,如果新的回復目錄名為 recoverydb,則指令將如下所示:
db_recover -c -h recoverydb
將 log.* 檔案保留在新的回復目錄中。
db_recover 程式將記錄檔套用於新的回復資料庫,但是從 4.2 版開始,Berkeley DB 要求保留這些記錄檔。
對新的回復目錄中的資料庫檔案執行 db_verify。若要執行 db_verify:
使用以下指令停止 Calendar Server。
cd /opt/SUNWics5/cal/sbin
./stop-cal
使用以下指令建立 Calendar Server 資料庫 (csdb) 的另一個副本。
cp -Rp /var/opt/SUNWics5/csdb /var/opt/SUNWics5/csdb.db_verify
在 csdb 的副本上執行 db_verify。
不要在原始 csdb 上執行 db_verify。
LD_LIBRARY_PATH=/opt/SUNWics5/cal/lib export LD_LIBRARY_PATH cd /opt/SUNWics5/cal/tools/unsupported/bin ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50alarms.db ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50calprops.db ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50events.db ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50gse.db ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50journals.db ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50recurring.db ./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50todos.db ./db_verify -o -h /var/opt/SUNWics5/csdb.db_verify ics50deletelog.db
對 ics50deletelog.db 以 -o 選項執行 db_verify。
如果 db_verify 順利完成執行,您將不會得到任何錯誤訊息。如果資料庫檔案毀壞,它會丟出錯誤訊息。例如:
./db_verify -h /var/opt/SUNWics5/csdb.db_verify ics50todos.db db_verify:Page 612: last item on page sorted greater than parent entry db_verify: Page 612: incorrect next_pgno 885 found in leaf chain (should be 501) db_verify: Page 0: page 501 encountered a second time on free list db_verify: DB->verify: ics50todos.db: DB_VERIFY_BAD: Database verification failed |
對新的回復目錄執行 csdb -v list。
如果新的回復目錄通過了前面所有三個回復步驟,請用新的回復資料庫替代舊的已損毀的即時資料庫。
將新的即時資料庫複製到緊急備份目錄中,以作為新的快照執行。
在拍攝下個常規快照之前,所有新記錄將被套用於此副本。
啟動 CalendarServer。
如果新的回復目錄在任何一個步驟中失敗,請按照如下說明識別未毀壞的更舊的緊急備份:
向後查找您的緊急備份,依次在每個緊急備份上執行 db_verify 和 csdb -v list 來尋找未毀壞的最新副本。
通過的第一個緊急備份可以被復原至即時資料庫目錄。
使用未使用的緊急備份替代已毀壞的即時資料庫,如復原緊急備份中所述。(請務必首先閱讀22.5.8.1 復原之前。)
如果無緊急備份可用且您沒有可嘗試的歸檔備份,請致電技術支援。如果您有歸檔備份,請遵照復原歸檔備份之後的程序。(另請參閱22.5.8.1 復原之前。)
如果您沒有未損毀的緊急備份,但有歸檔備份及其作業事件記錄,則可以透過執行以下步驟復原已歸檔資料庫的最新未損毀版本:
識別所有未套用的或開啟以備在已損毀的即時資料庫目錄中寫入的記錄檔。
關閉開啟以備寫入的記錄。它包含最新作業事件。
建立新的 (回復) 目錄。
將最新的歸檔檔案副本及其記錄檔複製到新的回復資料庫目錄。
將已毀壞的即時資料庫目錄中的任何未套用的 log.* 檔案複製到新的回復資料庫目錄中。
以針對新的回復資料庫指定的 -c-h 選項執行 db_recover。
例如,如果新的回復目錄名為 recoverydb,則指令將如下所示:
db_recover -c -h recoverydb
將 log.* 檔案保留在新的回復目錄中。
db_recover 程式將記錄檔套用於新的回復資料庫,但是從 4.2 版開始,Berkeley DB 要求仍舊將這些記錄檔保留在此處。
對新的回復目錄中的資料庫檔案執行 db_verify。
復原緊急備份程序中的步驟說明如何執行 db_verify。
對新的回復目錄執行 csdb -v list。
如果新的回復目錄通過了前面所有三個回復步驟,請用新的回復資料庫替代舊的已損毀的即時資料庫。
將新的即時資料庫複製到緊急備份目錄中,以作為新的快照執行。
啟動 CalendarServer。
如果新的回復目錄在任何一個步驟中失敗,請按照如下說明識別未損毀的更舊的歸檔備份:
向後執行歸檔備份副本,透過依次對每一個歸檔備份副本執行以下三個回復程式以尋找未損毀的最新副本:db_recover -c -h、db_verify 及 csdb -v list。
通過的第一個歸檔檔案副本可以被復原至即時資料庫目錄。
使用未使用的歸檔備份替代已毀壞的即時資料庫,如復原歸檔備份中所述。
如果您的歸檔備份都不可用,請致電技術支援。