從備份還原憑證服務
下列案例示範如何使用憑證服務備份功能來還原和復原憑證服務資料庫及其相關聯的檔案。 還原程式牽涉到將備份集中包含的檔案寫入磁碟。 您可以還原多個備份集(一個完整備份加上零或多個增量備份),但所有還原必須在開始復原程式之前完成。 復原程式牽涉到憑證服務重新執行記錄檔,以確保資料庫和記錄檔一致性,進而確保資料庫完整性。 此案例說明用來還原備份集的函式呼叫,並通知憑證服務復原參數。
在實作此案例之前,憑證服務資料庫的現有完整備份必須存在。
- 將 Certadm.dll 連結庫載入記憶體中(呼叫 LoadLibrary)。
- 擷取 Certadm.dll 中每個必要函式的位址(使用 的 GetProcAddress)。 在其餘步驟中呼叫函式時,請使用這些位址。
- 呼叫 CertSrvIsServerOnline,以判斷憑證服務是否在在線。 如果憑證服務正在執行,請先將其關閉,再繼續進行。 憑證服務不得在在線,還原作業才能成功。
- 呼叫 CertSrvRestorePrepare 開始還原會話。 產生的憑證服務備份內容句柄將由數個其他函式使用。
- 判斷資料庫位置的路徑。 在備份案例中,此值可從呼叫 CertSrvRestoreGetDatabaseLocations取得;此值應該已儲存為備份的一部分。
- 建立還原映射,指定資料庫名稱以進行還原。 憑證服務資料庫還原對應結構(CSEDB_RSTMAPW)用於指定還原對應。 將CSEDB_RSTMAPW的 pwszDatabaseName 成員和CSEDB_RSTMAPW的 pwszNewDatabaseName 成員設定為步驟 5 中決定的資料庫位置。 或者,如果還原的資料庫名稱與備份資料庫不同,請將CSEDB_RSTMAPW的 pwszNewDatabaseName 成員設定為新的資料庫名稱。
- 如果您想要確保在資料庫還原完成之後對資料庫所做的修改不會在資料庫還原完成後重新套用(在下一次憑證服務啟動期間執行的資料庫復原時),請從目標伺服器的使用中資料庫和記錄目錄刪除檔案。
- 將完整備份中包含的檔案複製到目標伺服器的使用中資料庫和記錄檔目錄。
- 呼叫 CertSrvRestoreRegister 註冊完整備份的還原作業。 CertSrvRestoreRegister 會使用步驟 6 中指定的還原對應。 CertSrvRestoreRegister 也會指定備份資料庫和記錄的位置。 呼叫 CertSrvRestoreRegister 會強制憑證服務在下一次啟動時嘗試還原作業。 它也會防止憑證服務處理憑證要求,直到還原完成為止。
- 呼叫 CertSrvRestoreRegisterComplete,藉此完成步驟 8 中啟動的註冊活動。 請注意,還原作業的註冊是憑證服務啟動時要遵循的指示;只有在憑證服務啟動時,才會進行實際的復原。
- 若要還原每個增量備份,請將增量備份中包含的檔案複製到目標伺服器的作用中記錄目錄,然後呼叫 CertSrvRestoreRegister,然後呼叫 CertSrvRestoreRegisterComplete。 增量備份的註冊可以按任意順序進行,但每次呼叫CertSrvRestoreRegister之前,應先將一個增量備份的檔案集複製到伺服器。
- 將憑證服務動態檔案複製到目標伺服器。 呼叫 CertSrvBackupGetDynamicFileList 時,會在備份期間識別動態檔案。 可能需要停止萬維網發佈服務,以允許覆寫動態檔案。
- 呼叫 CertSrvRestoreEnd 結束還原會話。
- 手動啟動憑證服務應用程式(或等到下一次重新啟動,讓它自動啟動)。 當憑證服務啟動時,它會判斷是否已註冊還原作業;如果已註冊還原作業,憑證服務將會開始復原。 在復原作業完成之前,憑證服務不會處理任何憑證要求。
注意
復原完成時,請務必建立憑證服務資料庫的新完整備份。 若要截斷還原的記錄檔,並建立未來還原的基底備份集,就必須這樣做。 還原之後執行的備份無法與還原之前所建立的備份(完整或增量)混合;也就是說,在還原憑證服務資料庫並進入後續狀態之後,您無法使用還原前備份將資料庫還原至該後續狀態。