zoukankan      html  css  js  c++  java
  • SQL Server中的变更捕获技术--简单部署

    ------准备------

    CREATE DATABASE db_test_cdc
    
    CREATE TABLE t1(id INT IDENTITY(1,1) ,name VARCHAR(50));
    
    INSERT INTO t1(name)VALUES('test')

    ------开始------

    --启用数据库变更捕获

    使用变更捕获首先需要启用数据库变更捕获,执行如下存储过程,启用变更捕获

    USE db_test_cdc
    
    EXEC sys.sp_cdc_enable_db
    GO

    启用完以后SQL SERVER会自动创建一系列有关变更捕获的讯息,如下:

    --启用表变更捕获

    启用变更捕获以后,就可以针对表开启捕获,执行如下SQL

    EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo', --表架构名字
    @source_name   = N't1', --表名字
    @role_name     = N'cdec_role' --可以查询该表的角色,如果有则不创建,如果没有则创建

    成功启用了该表以后,SQL Server会创建该表的数据捕获表:

    当第一次启用表的时候,会创建两个代理作业,所以如果使用变更捕获,则需要启用代理,以下是第一次启用表变更产生的代理:

    cdc.db_test_cdc_capture:是用于将变更的数据同步到我们启用的变更表中,即:cdc.dbo_t1_CT这个表

    cdc.db_test_cdc_cleanup:适用于定时清理cdc.dbo_t1_CT这个表这个表中的数据

    我们在t1表插入一条数据,进行测试。

    INSERT INTO t1(name)VALUES('test1');

    这个表则会记录一条数据

    其中$operation这个字段表示新增的这行是怎么来的,值分别有下面这几种:

    1:删除

    2:增加

    3:修改前数据

    4:修改后数据

    --禁用表变更捕获

    USE db_test_cdc
    GO
    
    EXEC sys.sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name   = N't1',
    @capture_instance = N'dbo_t1'
    GO

     执行禁用表变更以后,其相应的表会被删除掉 如下:

     --禁用数据库变更

    USE db_test_cdc
    GO
    
    EXEC sys.sp_cdc_disable_db

    禁用数据库表变更以后,所有有关变更捕获的讯息,均被清空;

    -------结束---------

    以上是有关变更捕获的简单部署,后续会继续更新有关变更捕获更详细的资料

  • 相关阅读:
    php自动跳转中英文页面
    如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
    彻底杜绝warning: Cannot add header information headers already sent in......
    大三了
    X牛人關於編程語錄
    C++虚函数表解析
    epoll:Edge or Level Triggered
    LRU和LFU的区别
    会话、进程组与僵死进程
    Effective C++学习笔记:确定基类有虚析构函数
  • 原文地址:https://www.cnblogs.com/blog-east/p/6985355.html
Copyright © 2011-2022 走看看