SQLServer 2008 CDC实现数据变更捕获使用图文详解

哦,让我告诉你一件事。
我在一家使用SQL Server 2 008 企业版的公司工作,在做CDC(数据捕获转换)时遇到了很多陷阱。
让我告诉你我当时有多烦恼。
我记得那一年是2 01 8 年,我在上海的公司要建设一个数据仓库和OLTP系统,将数据变化实时同步到数据仓库。
一开始我选择了CDC,我认为它最有用。

第一步是在目标库上显式启用 CDC。
我在 AdventureWorks 数据库中执行 sys.sp_cdc_enable_db。
结果如何?报告错误,显示“无法作为数据库主体执行,因为主体‘dbo’不存在,无法模拟此类主体,或者您没有所需的权限。
” (错误#1 5 5 1 7 )这让我很困惑。
找了半天,发现有些存储过程是用EXECUTE作为调用者的。
我在其他数据库中执行的时候,没有这个结构,所以报错。
后来我改了权限,用了sa用户(虽然当时不推荐sa),再次尝试,成功了。
第二步是在目标表上启用 CDC。
我选择了几个表,例如 HumanResources.Department、Person.ADDRESS、Person.Contact 和 sys.sp_cdc_enable_table。
结果,数据库中出现了更多的 CDC 架构表,并且 SQL Server 代理中多了两个作业:cdc.AdventureWorks_cleanup 和 cdc.AdventureWorks_capture。

然后我尝试更改、插入、删除、更新表中的数据并查看CDC表,果然有很多相关记录。
比如我插入一条数据,查看cdc.HumanResources_Department_CT表,就会多出一条记录。

后来我尝试修改配置,比如更改数据保留时间、停用、激活、删除和创建作业。
我还尝试了DDL更改捕获,发现我需要确保首先启用SQL Server代理,否则什么都可用。

最后,我使用了cdc函数来获取更改,例如cdc.fn_cdc_get_all_changes_HumanResources_Department,它可以获取当前所有的更改。
我还使用 sys.fn_cdc_map_time_to_lsn 和 sys.fn_cdc_map_lsn_to_time 来查询数据并更改特定时间。
总体来说,CDC功能很强大,但是使用时要小心。
特别是许可证和 SQL Server 代理。
如果不小心,很容易出现问题。
现在我跨过这些陷阱,慢慢找到门。
如果你使用它,记得先检查这些基本设置,否则可能会卡住。

server类调用了creditservice类中的什么操作

结论:SQLSERVER2 005 CLR集成允许您在系统B上同步加密数据。

1 .创建一个VS2 005 类库项目。
2 . 参考 B 系统 Web 服务。
3 . 创建同步类(UserSynchronization、DepSynchronization)并使用静态方法。

DepSynchronization 类的示例方法: 锋利的 公共静态无效SyncDepartments() { // 调用Web服务同步逻辑 }
4 . 编译并生成DLL和XmlSerializers.dll。

5 .数据库注册: SQL 创建程序集 MyAssembly 从“C:\Path\to\MyAssembly.dll” 经许可;
注册 XmlSerializers.dll。
SQL 创建程序集 XmlSerializer 从“C:\path\to\XmlSerializers.dll” 经许可;
6 .注意映射函数的类型。
SQL 创建程序 @用户名 NVARCHAR(5 0)、@密码 NVARCHAR(5 0)、@日期 NVARCHAR(1 0)、@dbname NVARCHAR(5 0)、@deptname NVARCHAR(5 0) MyAssembly.DepSynchronization.SyncDepartments;
作为外部名称 7 . 确保 XmlSerializer 已注册。
如果没有注册,会报序列化错误。

自己掂量一下。

sql中的存储过程和触发器有什么区别?

让我向您解释一下这些要点。

1 . 不同的参考文献
1 存储过程:它是一堆聚集在一起的 SQL 语句,专门在数据库中执行某些操作。
例如,如果要进行复杂的查询或批量更新数据,就将其写为存储过程,以后使用时直接调用。
这个存储过程保存在数据库中,编译一次,结果就可以在以后使用,而不必每次都重新编译。

2 初始化:SQL Server有一个功能叫初始化,就是给数据表填充初始值或者默认设置。
一般用在刚建表或者刚导入数据的时候,比如设置某个字段的默认值为“未分配”,或者某个用户信息的初始状态为活跃。

2 不同的特点
1 存储过程:存储在数据库中。
一旦编译完成,它将始终可用。
它被更多的人使用,并且效率更高。
如果你想使用它,你必须知道存储过程的名称,是否有参数,以及何时传递什么参数。
比如你写了一个名为“查询本月销售额”的存储过程,要使用的时候就得直接调整名称,而且可能还需要传入一个年份参数。

2 触发器:这个和存储过程不同,它是自动触发的。
并不是你手动调整,也不是程序运行时调用,而是当你往表中插入数据、更改数据、删除数据时,这个触发器就自己弹出来了。
例如,您向订单表添加触发器。
每当您插入新订单时,触发器都会自动检查客户的信用额度是否足够。

3 不同的功能
1 存储过程:有一种特殊的存储过程,它以两个井号“”开头。
这称为临时存储过程。
它不存储在永久表中,而是存储在临时表中。
临时表一般用于当前连接,当连接断开时会丢失。
这种临时存储过程任何人都可以使用,没有任何权限限制。

2 触发器:它的作用是帮助你保证数据表之间的关系。
例如,您有两个表,一个订单表和一个客户表。
您设置触发器以确保当您插入订单时,客户必须首先存在于客户表中。
当您更新或删除客户时,触发器还可以自动检查订单表中是否有相关订单,防止数据孤岛。
但说实话,最好的办法是直接在表中设置主键和外键约束,这样更直接。

参考来源:百度百科-存储过程、百度百科-触发器