• CDC--Demo


    --CDC通过对事务日志的异步读取,记录DML操作的发生时间、
    --类型和实际影响的数据变化,然后将这些数据记录到启用
    --CDC时自动创建的表中。通过cdc相关的存储过程,可以获
    --取详细的数据变化情况。由于数据变化是异步读取的,因
    --此对整体性能的影响不大,远小于通过Trigger实现的数据
    --变化记录。

    --对应未引发数据变化的更新操作,不会被记录到变更表中。

    --CDC和复制代理使用同样的日志读取器,在捕获数据变更时有一定延迟,即使在简单回复模式下,未被读取的日志仍无法截断

    --CDC捕获所得数据默认保存三天,以避免频繁变更操作导致捕获表变得臃肿,CDC使用JOB来清理过期数据。
    --===================================================
    --创建测试数据库
    CREATE DATABASE DemoDB
    --===================================================
    --检查当前数据库是否启用CDC
    --is_cdc_enabled=1:未启用,is_cdc_enabled=1:已启用
    USE DemoDB
    GO
    SELECT D.is_cdc_enabled FROM sys.databases D
    WHERE D.database_id=DB_ID()
    ---===================================================
    --启用当前数据库CDC功能
    EXEC sp_cdc_enable_db

    --====================================================
    --创建测试表TB1

    CREATE TABLE TB1
    (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    C1 NVARCHAR(200)
    )
    --====================================================
    --检查测试表是否启用CDC
    --is_tracked_by_cdc=1:未启用,is_tracked_by_cdc=1:已启用
    SELECT T.is_tracked_by_cdc FROM sys.tables T
    WHERE T.name=N'TB1'


    --=====================================================
    --启用CDC,要求表有主键或指定唯一索引
    --在第一次启动表后会创建两个作业
    --作业 'cdc.DemoDB_capture' 已成功启动。
    --作业 'cdc.DemoDB_cleanup' 已成功启动。
    EXEC sys.sp_cdc_enable_table
    @source_schema = 'dbo',
    @source_name = 'TB1',
    @role_name = NULL,
    @capture_instance = NULL,
    @supports_net_changes = 1,
    @index_name = NULL,
    @captured_column_list = NULL,
    @filegroup_name = default

    --=====================================================
    --修改表中数据测试
    INSERT INTO TB1(C1)VALUES(N'123')
    UPDATE TB1 SET C1=N'456' WHERE C1=N'123'
    DELETE FROM TB1 WHERE C1=N'456'

    -------------------------------------------------------
    --查看捕获的记录,变更记录表名:cdc.[TableName]_CT
    --__$operation列对应操作类型:
    --1=delete,
    --2=insert,
    --3=update(旧值),    
    --4=update(新值)。

    SELECT * FROM cdc.dbo_TB1_CT

    --========================================================
    --禁用数据捕获
    EXEC sys.sp_cdc_disable_table
    @source_schema = N'dbo',
    @source_name   = N'TB1'
    @capture_instance='ALL'


    --========================================================
    --禁用数据捕获
    EXEC sys.sp_cdc_disable_db

    --=========================================================

    1.当开启CDC的表中某列被删除后,该列仍会在对应的CDC表中保存,后续插入的行中此列值为NULL

    2.当开启CDC的表中增加新列时,该新列不会被CDC跟踪捕获

    3.开启CDC后,在BULK_LOGGED恢复模式下,除索引重整和索引重建外,其他所有操作都全日志记录(与完整恢复模式下一样)

    4.开启CDC后,应尽量避免对CDC的表做大批量数据操作

    5.应考虑将CDC 清理作业设置在业务低峰期运行

    6.应考虑将CDC 的系统表与数据表分开存放到不同文件组

    7.慎用'alloc net change'

    8.可以使用EXEC sys.sp_cdc_get_ddl_history 'TABLE NAME'来查看CDC跟踪捕获的表的DDL操作历史记录

    9.可以使用对应的函数cdc.fn_cdc_get_all_changes_schema_tablename(minlsn,maxlsn,'type')来查看所有数据变更,而使用cdc.fn_cdc_get_net_changes_tablename来查看净更改行(如果改行被更新多次,只返回最终内容的一行;如果一条数据被新增后又被删除,不会显示该行)。

    10.可以使用cdc.lsn_time_mapping来查看时间和lsn的对应关系

    11.可以使用sys.dm_cdc_errors来查看为变更数据捕获日志扫描会话中遇到的每个错误返回一行

    12.可以使用sys.dm_cdc_log_scan_sessions 来查看当前数据库中每个日志扫描回话的信息


    --================================================
    参考:http://technet.microsoft.com/zh-CN/library/bb522475(v=sql.105)

  • 相关阅读:
    【OpenCV】SIFT原理与源码分析:方向赋值
    【OpenCV】SIFT原理与源码分析:关键点搜索与定位
    【OpenCV】SIFT原理与源码分析:DoG尺度空间构造
    【OpenCV】SIFT原理与源码分析
    在Android 下写一个检测软件版本号 以自动升级APP 的插件
    Android开发-eclipse+phonegap(Cordova)环境搭建
    phonegap(cordova)从手机app跳转到web页面在跳转回APP本地页面思路
    黑板客爬虫闯关第一关、第二关
    scrapy实战
    scrapy爬虫框架
  • 原文地址:https://www.cnblogs.com/TeyGao/p/3522998.html
Copyright © 2020-2023  润新知