备份只读数据库

本主题介绍了备份只读数据库或上次备份时为只读的数据库时应该注意的事项。

对于只读数据库,备份时不能更新主文件。对于只读数据库的最佳方法是采用完整备份。但是,如果数据库在只读和读/写之间交替变换,则在数据库为读/写时进行备份才有意义。然后,只要数据库保持读/写状态,如果更改的范围较小,就可以进行差异备份。

注意注意

在备份期间,不能更改文件组的 IsReadOnly 属性。尝试这样做将产生错误并导致失败。

对更改为提供读/写权限的数据库进行部分备份

只读数据库的部分备份仅包含主文件组。如果后来将数据库更改为提供读/写访问,则可能出现部分备份中所没有的读/写辅助文件组。在这种情况下,如果尝试执行部分差异备份,则备份将失败。在执行数据库的部分差异备份之前,必须先执行其他部分备份。新的部分备份包含每个读/写辅助文件组,并可用作部分差异备份的基准。

对只读数据库进行差异备份

对于只读数据库,单独使用完整备份比同时使用完整备份和差异备份更容易管理。当数据库为只读时,备份和其他操作无法更改文件中包含的元数据。因此,差异备份所要求的元数据(如差异备份开始的日志序列号,即差异基准 LSN)存储在 master 数据库中。如果在数据库只读时采用的是差异基准,则差异位图指示的更改多于在基准备份之后实际发生的更改。额外的数据由备份读取,但不会写入到备份中,因为存储在 backupset 系统表中的 differential_base_lsn 用于确定在基准之后是否实际更改了数据。

重新构建、还原只读数据库或者分离再重新附加只读数据库后,会丢失差异基准信息。这是因为 master 数据库与用户数据库不同步。SQL Server 数据库引擎无法检测或防止此问题的出现。所有后续差异备份都不是基于最新的完整备份,从而可能会出现出人意料的结果。若要建立新的差异基准,建议先创建完整数据库备份。

对只读数据库进行差异备份的最佳方法

创建只读数据库的完整数据库备份之后,如果要创建后续差异备份,则请备份 master 数据库。

如果 master 数据库丢失,请在还原用户数据库的任何差异备份之前,将其还原。

如果分离和附加计划稍后对其使用差异备份的只读数据库,则应尽快执行此只读数据库和 master 数据库的完整数据库备份。