问题标签 [change-data-capture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1539 浏览

oracle - 比较和对比变更数据捕获和数据库变更通知

Oracle 有两种看似相互竞争的技术。CDC 和 DCN。

各自的强项是什么?

你什么时候用一个而不用另一个?

0 投票
2 回答
17913 浏览

oracle - Oracle Streams 和变更数据捕获之间有什么区别?

有几种类似的 Oracle 技术 - Oracle Streams、Oracle Change Data Capture 和 Database Change Notification。

这些之间有什么区别?

它们与 Oracle 高级队列有关吗?

0 投票
3 回答
868 浏览

sql-server - 对小型桌面应用程序使用变更数据捕获?

我的一个新客户有一个 2002 年编写的小型 VB/Access 数据库应用程序,他希望对其进行重写以使其更新并支持他一直想要的新功能。因此,我将把它转换为在本地计算机上使用 C#.NET 2008 和 SQL Server Express 2008,并能够扩展到在远程服务器上使用 WCF 和 SQL Server 2008。

他感兴趣的新功能之一是维护和报告一段时间内数据更改的完整历史记录。过去,我通过使用触发器和存储过程来做到这一点,这对@!#$ 来说很痛苦。

我最近很想弄乱 SQL Server 2008 的变更数据捕获功能。在我最初使用它的一个小时内,我意识到它在 SQL 代理中创建了一个默认情况下每 5 秒运行一次的作业。当我需要更改捕获表的架构时,这似乎也有点痛苦。除此之外,它似乎比我原来的方法更容易实现。所以,这些是我的问题:

  1. 对于最终可能会或可能不会迁移到远程服务器的小型桌面应用程序来说,这是否有点矫枉过正?
  2. 在性能方面我应该期待什么?随着他的数据库大小增加,我是否会接到更多来自他的电话,说他的计算机运行缓慢?
  3. 我应该从目前在生产中使用它的任何人那里了解 CDC 的任何其他问题吗?
  4. 有没有人有任何链接指向他们最喜欢的随时间跟踪变化的方式,这可能更适合小型桌面应用程序?

谢谢,

马克

0 投票
1 回答
3127 浏览

sql - 手动删除变更数据捕获

我的一个生产数据库存在严重问题。

数据库启用了变更数据捕获,性能非常好。上个月我们发生了服务器崩溃,其中几个磁盘受到影响并且数据丢失。然后,我们从磁带中恢复数据库备份,并在新安装的数据库服务器上恢复它们​​。

我现在面临的问题如下:

  • sys.database我的数据库未启用 cdc的状态
  • 数据库包含 cdc 模式、用户、表、sp 和函数
  • 抛出一个错误,sys.sp_cdc_enable_db说明架构和用户“cdc”已经存在,因此它无法创建它们并为 cdc 启用数据库
  • sys.sp_cdc_disable_db不会删除 cdc 剩菜,因为它认为数据库没有为 cdc启用
  • cdc 剩余文件不能手动删除,因为它们都是系统存储过程和函数

所以现在我遇到了一个无法为 cdc 启用的数据库,因为它已经创建了所有 cdc 组件,并且 cdc 不能被禁用,因为它没有在 sys.database 中发出 cdc 已启用的信号。

我的问题有什么解决方案,除了创建一个新数据库并将所有对象(cdc 除外)和数据迁移到 newley 创建的数据库吗?

0 投票
1 回答
1097 浏览

sql - 物化视图还是 CDC?

我对包含数百万条记录的两个表(使用 SQL 2008 存储)有一个视图。

现在我想使用物理表来存储这些信息,以避免扫描大表以获取更小的查询,例如

那么就性能而言,哪一种是最好的方法。

  1. 在两个表上使用更改数据捕获并识别更改并将其应用于新表“TbSalesAge”
  2. 使用物化视图而不是物理表
  3. 其他一些方法(请解释...)

PS:我不需要实时副本

0 投票
1 回答
6622 浏览

sql-server - 无法重命名“已复制”的列,可能是由于 CDC

我想运行以下重命名

我得到错误

我已为此表启用变更数据捕获 (CDC)。可能这就是为什么这个专栏被“复制”的原因。SSMS 显示已复制 = 是。

所以我想知道这是正常的还是错误的。我想保留 CDC,但重命名此列。除了删除现有 CDC 信息并重新启用 CDC 之外,我还有其他选择吗?

0 投票
1 回答
2935 浏览

sql-server-2008 - 变更数据捕获或变更跟踪 - 与传统审计跟踪表相同?

在我更深入地研究 Microsoft 文档的深渊之前,我想知道是否有人对更改数据捕获和更改跟踪有经验,是否知道其中一个或两个是否可以用来代替传统的...

“由触发器插入的‘真实表’(原始表的所有字段,加上日期/时间、用户 ID 和 DML 操作字段)的审计跟踪表副本”

...设置数据库表审计跟踪,其中触发器填充审计跟踪表(这都是手动工作)。

MSDN 概述文档从高层次上解释了变更数据捕获和变更跟踪是什么,但对我来说还不够清楚,也没有直接说明这些工具可以用来替换我们的传统审计跟踪表。我经常做。

有任何使用变更数据捕获和变更跟踪经验的人可以为我节省大量时间,或者确认我正在花时间寻找正确的工具吗?我们审计跟踪的关键部分是捕获对表字段(在 INSERT、UPDATE、DELETE 上)的所有更改、发生时间以及执行者。这些更改通常通过审计跟踪报告按时间顺序提供给最终用户。另一个问题是......更改数据捕获或更改跟踪是解决方案,我假设可以像普通表中的数据一样查询这些数据?

编辑:无论时间长短,我都需要一个永久的审计跟踪。我看到变更数据捕获与事务日志有关,所以这对我来说听起来很有限。

0 投票
1 回答
946 浏览

sql - SQL 2008 变更数据捕获查询性能问题(SP 与直接查询)

在我向 Microsoft 支持开票之前,我想我会尝试社区!

我有一个正在开发中的应用程序,我们在 SQL 2008 R2(目前是开发人员版)中使用变更数据捕获。对于一些特别复杂的查询,我们希望将查询包装到存储过程中,暴露公共参数,以避免客户端的复杂性(通常的参数)......

在任何情况下,我们已经确定以下语句作为独立查询将在大约 3-5 秒内运行,而不管边界条件如何,而完全相同的语句作为存储过程会跳转到 1.5 分钟产生相同的结果。此外,SP 版本在运行时似乎会在执行过程中多次切换用户身份......此外,在 SP 执行期间,CPU 使用率会飙升。

有什么想法吗?

查询:

以及相关的存储过程:

执行 SP 的脚本:

如上文所述,作为查询,大约需要 3-5 秒(在 Management Studio 中)。作为存储过程,1.5 分钟。作为通过 .Net 框架提供程序 (System.Data.SqlClient) 的查询,1.5 分钟。作为通过 OleDb SQLNCLI10 提供程序的查询,3-5 秒。通过 Framework 或 OleDb 作为 SP,1.5 分钟。

有什么想法吗?

0 投票
3 回答
18043 浏览

sql-server - 如何为清理作业更改 cdc 保留值?

我在 asp.net mvc2 应用程序上实现了一个日志记录功能,它使用 SqlServer2008 作为数据库,使用实体框架作为数据模型。

我启用了 SqlServer 的 CDC 功能,它很好地记录了更改,但我只是注意到一些旧的日志记录数据被删除了。

有谁知道 CDC 保留记录的默认期限是多少,有谁知道我如何将其设置为无限期值。

0 投票
2 回答
2572 浏览

sql-server-2008 - SQL Server 2008 CDC 无响应并在表删除后卡住

我正在测试一张表上的 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 功能相关的所有资源。