从备份还原证书服务

以下方案演示如何使用证书服务备份功能来还原和恢复证书服务数据库及其关联的文件。 还原过程涉及将备份集中包含的文件写入磁盘。 可以将多个备份集还原 (一个完整备份外加零个或多个增量备份) ,但必须在开始恢复过程之前完成所有还原。 恢复过程涉及证书服务重播日志文件,以确保数据库和日志文件的一致性,从而确保数据库的完整性。 此方案演示了用于还原备份集并通知证书服务恢复参数的函数调用。

在实现此方案之前,证书服务数据库的现有完整备份必须存在。

  1. 通过调用 LoadLibrary) 将Certadm.dll库加载到内存 (。
  2. 通过 GetProcAddress) 检索Certadm.dll (中每个必需函数的地址。 在剩余步骤中调用函数时,请使用这些地址。
  3. 调用 CertSrvIsServerOnline 以确定证书服务是否处于联机状态。 如果证书服务正在运行,请在继续之前将其关闭。 证书服务不得联机,还原操作才能成功。
  4. 调用 CertSrvRestorePrepare 以开始还原会话。 生成的证书服务备份上下文句柄将由多个其他函数使用。
  5. 确定数据库位置的路径。 在备份方案中,此值可通过调用 CertSrvRestoreGetDatabaseLocations 获得;此值应已存储为备份的一部分。
  6. 创建指定还原的数据库名称的还原映射。 证书服务数据库还原映射结构 (CSEDB_RSTMAPW) 用于指定还原映射。 将CSEDB_RSTMAPW的 pwszDatabaseName 成员和CSEDB_RSTMAPW的 pwszNewDatabaseName 成员设置为步骤 5 中确定的数据库位置。 (可选)如果还原的数据库的名称与备份数据库不同,请将CSEDB_RSTMAPW的 pwszNewDatabaseName 成员设置为新数据库名称。
  7. 如果要确保在执行备份后对数据库所做的修改不会在数据库还原完成后重新应用 (作为下一个证书服务启动) 期间执行的数据库恢复的一部分,请从目标服务器的活动数据库和日志目录中删除文件。
  8. 将完整备份中包含的文件复制到目标服务器的活动数据库和日志目录。
  9. 调用 CertSrvRestoreRegister 为完整备份注册还原操作。 CertSrvRestoreRegister 使用步骤 6 中指定的还原映射。 CertSrvRestoreRegister 还指定备份数据库和日志的位置。 调用 CertSrvRestoreRegister 将强制证书服务在下次启动时尝试还原操作。 它还会阻止证书服务在还原完成之前处理证书请求。
  10. 调用 CertSrvRestoreRegisterComplete,从而完成步骤 8 中启动的注册活动。 请注意,注册还原操作是证书服务启动时要遵循的说明;只有在启动证书服务后,才会进行实际恢复。
  11. 对于要还原的每个增量备份,将增量备份中包含的文件复制到目标服务器的活动日志目录,然后调用 CertSrvRestoreRegister,然后调用 CertSrvRestoreRegisterComplete。 注册用于还原的增量备份可以按任意顺序进行,但在每次调用 CertSrvRestoreRegister 之前,只应将一个增量备份的一组文件复制到服务器。
  12. 将证书服务动态文件复制到目标服务器。 调用 CertSrvBackupGetDynamicFileList 时,会在备份期间标识动态文件。 可能需要停止万维网发布服务以允许覆盖动态文件。
  13. 调用 CertSrvRestoreEnd 以结束还原会话。
  14. 手动启动证书服务应用程序 (或等待下一次重启,使其自动启动) 。 证书服务启动时,它将确定是否已注册还原操作;如果已注册还原操作,证书服务将开始恢复。 在恢复操作完成之前,证书服务不会处理任何证书请求。

注意

恢复完成后,请务必对证书服务数据库进行新的完整备份。 这是截断还原的日志文件和建立基础备份集以供将来还原所必需的。 还原后执行的备份不能与还原前 (完整备份或增量) 混合;也就是说,在证书服务数据库还原并进入后续状态后,不能使用还原前备份将数据库还原到该后续状态。