Answers:
(如果有人找到一种方法-我认为不存在,我将删除答案:-))
有没有办法确定备份是否包含CDC数据?
我不认为有任何方法可以从备份中了解CDC是否启用。
您最多可以知道数据库是否参与了复制(在后台使用了会扫描事务日志的日志读取器代理),或者通过在DatabaseBackupLSN的结果中使用DatabaseBackupLSN来避免复制,RESTORE HEADERONLY
就像备份时触发的“检查点开始”一样开始。FirstLSN
如果在数据库空闲且未配置任何复制时进行了备份,则此LSN将与之一致。
我认为Microsoft不公开是否启用CDC的原因也可能是安全问题。CDC是一种企业级技术,可跟踪一直到列级的更改。HIPAA,FISMA等法规要求这样做。
SQL Server使用以下逻辑来确定在还原或附加数据库之后是否仍启用更改数据捕获:
- 如果将数据库恢复到具有相同数据库名称的同一服务器,则更改数据捕获保持启用状态。
- 如果将数据库还原到另一台服务器,则默认情况下禁用更改数据捕获,并删除所有相关的元数据。
- 要保留更改数据捕获,请在还原数据库时使用KEEP_CDC选项。有关此选项的更多信息,请参见RESTORE。
- 如果数据库已分离并附加到同一服务器或另一台服务器,则更改数据捕获保持启用状态。
- 如果使用KEEP_CDC选项将数据库附加或还原到Enterprise以外的任何版本,则操作将被阻止,因为更改数据捕获需要SQL Server Enterprise。显示错误消息932:
SQL Server无法加载数据库'%。* ls',因为启用了更改数据捕获。当前安装的SQL Server版本不支持更改数据捕获。通过使用受支持的SQL Server版本禁用数据库中的更改数据捕获,或者将实例升级到支持更改数据捕获的实例。