zoukankan      html  css  js  c++  java
  • Using SQL 2008 Change Data Capture (CDC)

    SQL 2008 has a new feature called Change Data Capture (CDC). When enabled for a table it stores before and after values of the tracked columns in a change tracking table.

    1. Enabling CDC for a database

    To capture data changes for a table we need to first enable change tracking at database level. Execute the following script to enable CDC for the database.

    use 'YourDBName'

    go

    exec sys.sp_cdc_enable_db

    2. Setting CDC for the table

    Use sys.sp_cdc_enable_table for a table to set CDC. By default, all
    columns are tracked. We can strict CDC to specific columns by specifying column names for parameter ‘@captured_column_list’

    exec sys.sp_cdc_enable_table
    @source_schema = 'dbo'
    ,@source_name = 'Person'
    ,@role_name = 'rptrole'
    ,@capture_instance = 'Person'
    /* This will create a change tracking table cdc.dbo_Person_CT */
    ,@supports_net_changes = 1
    /* Indicates if support for quering net changes are allowed or not
    allow = 1 */
    ,@index_name = 'PK_Person_PersonID'
    /* change tracking requires a unique index to track changes against*/
    ,@captured_column_list
    = 'Address1,Address2,City,State,Zip,PhoneNo,PersonID'

    /* Changes will be tracked for columns mentioned in this parameter.
    Default is all*/
    ,@filegroup_name = 'cdc'
    /*file group where cdc objects will be created It’s a good practice to
    create separate filegroup for CDC.Place the filegroup in a different
    Drive to minimize impact on I/O
    */
    -- ,@partition_switch = 'partition_switch'

    /* Indicates if switch partition command is allowed or not.
    applicable to patitioned tables only*/

    3. Retrieving Change

    Change data for the above example would be stored in cdc.dbo_Person_CT.It can be used in conjunction with cdc.lsn_time_mapping table to retrieve data for a time period. CDC provides functions for change retrievel as well.

    Get Start LSN –

    sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time)

    Get End LSN -

    sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time)

    Get net changes for the LSN range (shows only final content of a row for the range)

    SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_Person(Start LSN, End LSN,'all');

    Get all changes for the LSN range (shows all changes for a row in the LSN range)

    SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Person(Start LSN, End LSN,'all');

    4. CDC Jobs

    CDC creates a capture and cleanup job. Use the below SQL to see job configuration.

    exec sys.sp_cdc_help_jobs

    By default cleanup job is configured to retain up to 72 hrs changes and capture job is set to run continuously.

    We can use sys.sp_cdc_change_job to modify the configuration of cdc jobs.

  • 相关阅读:
    难以实践敏捷:估算
    使用AsyncEnumerator简化异步操作
    ESXi 入门配置
    学习模式,不如先了解问题
    我应该用哪种虚拟机?(一)
    在2003上实现Custom Task Pane
    我应该用哪种虚拟机?(终)
    我应该用哪种虚拟机?(二)
    正则表达式周二挑战赛 第十二周
    [译]Node中的ES6特性
  • 原文地址:https://www.cnblogs.com/weaver1/p/2250995.html
Copyright © 2011-2022 走看看