问题标签 [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.
sql-server-2008 - 多个表的更改数据捕获
SQL Server 2008。是否可以为数据库中的多个相关表创建更改数据捕获(或更改跟踪)?例如多对多关系。
它会是什么样子?
sql-server - 变更数据捕获 - 历史数据的初始加载
我正在将我的 SQL Server 2000 数据库升级到 SQL Server 2008 R2。我想利用变更数据捕获功能。我现有的应用程序具有类似的功能,但我使用的触发器和历史表带有Hst_
前缀,其架构与原始表几乎相似。
我的问题是:有没有办法将我的数据从Hst_
表迁移到 CDC 功能使用的表?
我正在考虑这样做:
- 我有桌子
Cases
。 - 我正在使用我的自定义历史记录机制,所以我也有三个触发器(插入、更新和删除)和一个双表
Hst_Cases
。 - 现在我在桌子上启用 CDC
Cases
- CDC 创建函数,该函数返回历史数据 (
fn_cdc_get_all_changes_dbo_Cases
) 以及一个实际保存数据 (cdc.dbo_Cases_CT
) 的系统表。 Hst_Cases
我可以从to插入数据cdc.dbo_Cases_CT
,但我有以下问题:- 我不知道如何获得
__$start_lsn
和__$seqval
。 - 很难弄清楚
__$update_mask
(我必须比较每两行)。
- 我不知道如何获得
有没有唯一的方法可以做到这一点?我想避免这种情况,然后将“新”历史数据与Hst_
表中的“旧”历史数据连接起来。
谢谢!
sql-server-2008 - 使用 SqlServer 2008 复制linkedin 的数据总线
我正在尝试在我的组织中重新创建linkedin 的数据总线架构,以用于高度有争议的数据库。我最初的想法是使用 SQL Server 的变更数据捕获 (CDC) 功能来捕获所有事件并将它们发布到外部数据存储区,就像 LI 使用其“引导程序”所做的那样。如果我编写一个服务来不断汇集 cdc 表,我可以将它们写入我的引导数据库,然后使用一些 pub/sub 系统发布事件。
我的问题是,是否有人尝试过这样的事情,如果我前面提到的方法似乎是一种好方法,或者是否有更好的方法来捕获这些事件并发布它们?
谢谢。
编辑:[添加详细信息]
我还没有完全决定辅助数据存储。至少在短期内,它很可能是另一台服务器上的另一个 SQL Server 2008 实例。此辅助存储的主要目的之一是减轻主服务器的负载。我们的主数据库已经变得非常大(> 2.5TB),增加任何额外的负载都是不受欢迎的。如果我可以实现这个架构,那么额外的收获就是从本质上管理复制,从主服务器中承担大部分复制责任。
理想情况下,我什至不想使用 CDC。我觉得这是一项很棒的技术,但它确实将这些更改存储在本地,并且根据我的阅读,它会导致服务器性能受到影响。但是,就目前而言,这似乎是我最好的选择。
编辑2:[进一步的过程细节]
我试图实现的确实与复制非常相似。在这个辅助服务器上,我要做的是从基本数据库的副本和一组用于跟踪更改的表开始。然后,我将有一个服务来监视 CDC 表并将这些事件移动到新数据库,从源中清除它们,并将更改应用到第二个服务器的基本副本。
下一个组件将是一个发布/订阅服务,它将获取所有发布的更改事件,并且任何消费者都可以选择订阅以获取这些更改事件。完整的数据库副本将用于在新消费者上线时“引导”他们,这样他们就可以在开始获取更改事件之前获取完整的、最新的数据库。如果消费者离线并错过事件,跟踪表也将用于获取增量。
客户将能够应用规则来翻译他们认为合适的数据。第一个应用程序将纯粹是创建原始数据库的只读副本。未来的计划包括对数据进行反规范化并转换为其他格式,例如 MongoDb 集合。
如果可以在远程服务器上维护 CDC 表,则可以最简单地实现第一部分。但是,我没有看到任何方法可以做到这一点。
我知道这听起来令人费解,但它会解决一个真正的问题,从linkedin 的解决方案来看,这个问题在当今并不罕见。
希望这会有所帮助。
sql-server - 变更数据捕获和 SQL Server 分析服务
我正在设计一个数据库应用程序,其中数据会随着时间而变化。我想保留历史数据并允许我的用户使用 SQL Server Analysis Services 对其进行分析,但我正在努力想出一个允许这样做的数据库架构。我想出了一些可以跟踪更改的模式(包括依赖 CDC),但是我不知道如何将该模式转换为 SSAS 中的工作 BISM。我还能够创建一个可以很好地转换为 BISM 的模式,但是它没有我正在寻找的历史功能。是否有任何既定的最佳实践来做这种事情?
这是我正在尝试做的一个例子:
我有一个名为 Sales 的事实表,其中包含每月的销售数据。我还有一个名为“客户”的常规维度表,它允许用户查看按客户细分的销售数据。客户和销售代表之间存在多对多的关系,因此我可以创建一个称为责任的参考维度来引用客户维度,并创建一个销售代表参考维度来引用责任维度。我现在通过参考维度销售链链接到销售代表的销售事实 -> 客户 -> 责任 -> 销售代表,这使我可以查看按销售代表细分的销售数据。问题在于,销售事实并不是唯一会随着时间而改变的东西。我还希望能够保留在特定销售事实发生时哪个销售代表负责客户的历史记录。我还想知道销售代表的办公室在特定销售事实发生时的位置,这可能与他当前的位置不同。我还可能知道在特定销售事实时客户组织的规模,这也可能与当前不同。我不知道如何以对 BISM 友好的方式对此进行建模。特定销售事实时的组织,也可能与当前不同。我不知道如何以对 BISM 友好的方式对此进行建模。特定销售事实时的组织,也可能与当前不同。我不知道如何以对 BISM 友好的方式对此进行建模。
sql - 如何重建历史观?
我目前正在探索将变更数据捕获作为存储时态数据库的选项。这很棒,因为它只存储增量并且似乎可以解决我的问题。当我启用 CDC 时,一堆表格出现在System Tables
.
查询时cdc.dbo_MyTable
,我可以看到表上发生的所有更改。现在,我将如何构建历史观?例如,如果我想查看我的桌子在特定日期的状态,我该怎么做呢?这甚至可能吗?
看起来我需要获取日志并开始将它应用到我的原始表上,但我想知道是否有内置的方法可以做到这一点。有什么建议么?
我正在研究的一些用例:
- 了解图在特定时间点的状态
- 给定两个不同时间的图,知道不同的链接集(这可能可以在构建表后使用 EXCEPT 子句获得)
sql-server-2008 - 仅用于更新和删除的更改数据捕获
我们的数据库插入不密集(每晚 200-500k),但更新光照(可能每天几百)。
我需要无限期地保留对插入行本身的所有更改的历史记录(但不是实际的插入)。我很想使用更改数据捕获,但支持此功能所需的空间量不可用。如果我能想办法做到以下几点,我的生活会容易得多。
1) 将更改数据跟踪限制为仅 UPDATES 和 DELETES 2) 定期从 CDC 表中清除 INSERTS
在过去,我只是使用了一个触发器(它仍然没有被排除在外!)。
sql-server - 更改数据捕获 - SQL SERVER?
我对 SQL SERVER 有疑问?
变更数据捕获 (CDC)
我应用了用户 DELETE、UPDATE、INSERT 操作没有的 CDC 流程。那么,如何获取用户名的信息呢?
sql-server - 无法在 Express Edition 上恢复启用 CDC 的数据库
还原数据库时出现此错误
SQL Server 无法加载数据库“XXX”,因为已启用更改数据捕获。当前安装的 SQL Server 版本不支持更改数据捕获。使用受支持的 SQL Server 版本禁用数据库中的变更数据捕获,或者将实例升级到支持变更数据捕获的实例。
Mine SQL Server Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (Intel X86) Jun 28 2012 08:42:37 版权所有 (c) Microsoft Corporation Express Edition with Advanced Services on Windows NT 6.1 (Build 7600:) 我知道那里不是 Express Edition 中 CDC 的功能,但我得到了 XXX.bak 文件,我需要在我的 sql 服务器上恢复该文件。是否有任何脚本可以从文件中删除 CDC 功能?
sql-server - SQL Server 的更改跟踪/更改数据捕获与没有主键的表?
我必须监视数据库中的一个表的更改并将它们复制到另一个数据库中的某个表。由于某种原因,我无法修改原始数据库的结构,因此无法使用触发器或创建约束等。更改跟踪似乎是我需要的理想解决方案,但有些表没有主键已定义,因此我无法使用它。至于变更数据捕获,这里 - http://msdn.microsoft.com/en-us/library/bb522511.aspx是这样写的:
.
“要启用网络跟踪,源表必须具有主键或唯一索引。”
所以基本上,似乎有类似的问题。
这种情况有什么解决方法吗?或者,也许我错过了什么?
sql-server - 向源表添加新列后 CDC 表不工作
在我们的源表中添加了两个新列,而表上仍然启用了 CDC。我需要新列出现在 CDC 表中,但不知道应该遵循什么程序来执行此操作?我已经在表上禁用了 CDC,在数据库上禁用了 CDC,将新列添加到 cdc.captured_columns 表中,并启用了 CDC。但是现在我在 CDC 表中没有数据!
将列添加到源表后,是否还有其他必须更新的 CDC 表?这些是 System Tables 文件夹下的所有 CDC 表:
- cdc.captured_columns <----- 我在其中添加了新列
- cdc.change_tables
- cdc.dbo_myTable_CT <----- 捕获更改数据的表
- cdc.ddl_history
- cdc.index_columns
- cdc.lsn_time_mapping
- dbo.systranschemas