在 Exchange 2013 中使用 CHKSGFILES API 验证备份完整性

了解如何使用 CHKSGFILES API 在 Exchange 2013 中验证 Exchange 存储的备份。

适用于:Exchange Server 2013

在卷影复制服务 (VSS) 管理的备份操作期间,Exchange Server 2013 无法完整读取每个数据库文件并验证其校验和完整性。 因此,你可能希望备份应用程序验证数据库和事务日志文件的完整性。 建议备份应用程序先验证卷影副本集的物理一致性,然后再通知 Exchange 编写器备份已完成。 成功备份后,Exchange 存储会更新备份数据库的标头以反映上次成功备份的时间,并从服务器中删除不再需要从上次成功备份前滚的事务日志。

验证备份完整性的先决条件

在应用程序验证备份的完整性之前,必须有权访问以下各项:

  • Exchange 存储备份中的文件。
  • 从 Visual Studio 2010 开始的 Visual Studio 版本。
  • CHKSGFILES 库和头文件。 可以从 Microsoft 下载中心下载库和头文件。

验证备份完整性

以下过程介绍如何在备份和还原应用程序中验证数据完整性。

验证备份完整性

  1. 创建 CChkSGFiles 类的新实例。

    CCheckSGFiles::ERRerr = CCheckSGFiles::errSuccess;
    ULONGiDbError = (ULONG)CCheckSGFiles::iDbInvalid;
    CCheckSGFiles * const pcchecksgfiles = CCheckSGFiles::New();
    if ( NULL == pcchecksgfiles )
    {
      err = CCheckSGFiles::errOutOfMemory;
      printf( "ERROR: Could not allocate CCheckSGFiles object.\n" );
      goto HandleError;
    }
    

    第一行代码创建错误对象并将其初始值设置为成功,并创建一个对象来检查数据库的有效性。 然后, CChkSGFiles.New 函数 创建 CChkSGFiles 类的新实例。 快速检查新对象指示创建新实例时是否发生任何问题。

  2. 初始化 CChkSGFiles 对象。

    Call( pcchecksgfiles->ErrInit(
    rgwszDb,
    cDb,
    wszLogPath,
    wszBaseName ) );
    

    有关参数的详细信息,请参阅 CChkSGFiles.ErrInit 函数

  3. 使用 CChkSGFiles.ErrCheckDbHeaders 函数 通过检查数据库标头来验证数据库完整性。

    err = pcchecksgfiles->ErrCheckDbHeaders(
    &cbDbPageSize,
    &cDbHeaderPages,
    &iDbError );
    if ( CCheckSGFiles::errSuccess != err )
    {
    if ( CCheckSGFiles::iDbInvalid != iDbError )
    {
    printf(
    "ERROR: Database header validation for '%S' failed with error %d (0x%x)\n",
    rgwszDb[ iDbError ],
    err,
    err );
    }
    goto HandleError;
    }
    

    有关参数的详细信息,请参阅 CChkSGFiles.ErrCheckDbHeaders 函数

  4. 处理错误,并使用 CChkSGFiles.Delete 函数 从内存中删除 CChkSGFiles 类。

    HandleError:
    CCheckSGFiles::Delete( pcchecksgfiles );  
    

另请参阅