Ste*_*man 9 sql-server-2008 sql-server sql-server-2012 change-data-capture sql-server-2014
使用 SQL Server 2008 到 2014 年,我知道如何在启用变更数据捕获 (CDC) 的情况下备份和恢复数据库,但我正在寻找一种查询完整备份文件以确定它是否包含 CDC 数据的方法。
像RESTORE FILELISTONLY
这样从数据库中获取文件列表,而是获取 CDC 状态以确定还原是否需要使用 KEEP_CDC 标志的方法会很棒吗?
有没有办法确定备份是否包含 CDC 数据?
谢谢!
(如果有人找到了一种方法-我认为不存在,我将删除我的答案:-))
有没有办法确定备份是否包含 CDC 数据?
我不认为有任何方法可以从备份中知道是否启用了 CDC。
您可以通过在DatabaseBackupLSN的结果中使用DatabaseBackupLSNRESTORE HEADERONLY
以及备份时触发的“检查点开始”来了解数据库是否参与复制(在后台使用日志读取器代理扫描事务日志)开始。FirstLSN
如果在数据库空闲且未配置复制时进行备份,则此 LSN 将重合。
我认为微软没有显示是否启用 CDC 的原因也可能是一个安全问题。CDC 是一种企业级技术,可以跟踪一直到列级别的更改。这是 HIPAA、FISMA 等法规所要求的。
SQL Server 使用以下逻辑来确定在还原或附加数据库后更改数据捕获是否保持启用状态:
- 如果将数据库还原到具有相同数据库名称的同一服务器,则更改数据捕获保持启用状态。
- 如果将数据库还原到另一台服务器,则默认情况下禁用更改数据捕获并删除所有相关元数据。
- 要保留更改数据捕获,请在恢复数据库时使用 KEEP_CDC 选项。有关此选项的更多信息,请参阅 RESTORE。
- 如果一个数据库被分离并附加到同一台服务器或另一台服务器,更改数据捕获保持启用状态。
- 如果使用 KEEP_CDC 选项将数据库附加或还原到除 Enterprise 之外的任何版本,操作将被阻止,因为更改数据捕获需要 SQL Server Enterprise。显示错误消息 932:
SQL Server 无法加载数据库 '%.*ls',因为已启用更改数据捕获。当前安装的 SQL Server 版本不支持更改数据捕获。使用受支持的 SQL Server 版本禁用数据库中的变更数据捕获,或将实例升级到支持变更数据捕获的实例。