1

我正在测试一张表上的 SQL Server 2008 变更数据捕获功能,当时它卡住了。

  • CDC 只启用了一个表。
  • 在对表执行各种 DDL 更改以测试 CDC 如何响应后,我删除了表。
  • 之前在我的测试中,删除表还会导致 CDC 删除 CT 表以及与已删除表相关的任何元数据。
  • CDC 似乎从未检测到最后一个 drop 语句,因为 CT 表仍然存在,并且 cdc.change_tables 表中存在一条记录
  • 我无法为表禁用 CDC,或为新创建的同名表启用 CDC,因为 cdc.change_table 记录存在并且链接到 SQL Server 元数据中不存在的对象 ID。
  • 我尝试为数据库禁用 CDC,但该命令运行了 1 小时而没有响应,然后才停止它。
  • 在尝试为数据库禁用 CDC 时,SQL Server 代理的作业列表在管理工作室中变得无响应(锁定请求超时)。取消禁用 CDC 命令后,代理仍无响应。
  • 我尝试重新启动代理服务。它成功停止但在启动期间(似乎是最后阶段)挂起。该服务现在停留在“正在启动”状态。

我正在重新启动服务器以尝试让代理再次运行。

我可以删除并重新创建我的数据库,因为它仍在开发中并且其中没有任何数据,但是还有其他方法可以解决问题吗?到目前为止,我所阅读的所有内容都表明我不应该直接使用任何 CDC 资源。有什么真正的理由我不应该只删除 cdc.change_tables 记录和相关的 CT 表吗?

有没有人遇到过类似的 CDC 问题,表明系统不稳定?

编辑:让代理再次运行后,我尝试手动删除 change_tables 记录和 CT 表,但是当我尝试启用该表时,出现了一系列与 CDC 元数据相关的错误。但是,我能够成功禁用整个数据库的 CDC,然后重新启用它。这当然会删除与 CDC 功能相关的所有资源。

4

2 回答 2

2

在让 Agent 再次运行(服务器重新启动)后,我尝试手动删除 change_tables 记录和 CT 表,但是当我尝试启用该表时,出现了一系列与 CDC 元数据相关的错误。但是,我能够成功禁用整个数据库的 CDC,然后重新启用它。这当然会删除与 CDC 功能相关的所有资源。

我将奇怪的行为归结为我为测试而运行的所有快速 DDL。由于这是一个测试环境,我有一些在生产环境中不可用的选项,至少在不备份捕获的数据的情况下。

我的结论是,是的,您真的不应该手动弄乱任何 CDC 资源。

于 2010-12-10T19:18:54.260 回答
1

我发现尝试EXEC sys.sp_cdc_disable_db在不属于 sa 的数据库中运行失败。

(我仍然看到 cdc 表select db_name() as dbname , p.rows,* from sys.objects o join sys.partitions p on o.object_id=p.object_id where o.schema_id=schema_id('cdc') and p.index_id < 2

Sys.sp_cdc_disable_db简单后立即成功exec sp_changedbowner 'sa'

于 2012-09-11T15:10:47.657 回答