
# 变更数据捕获（CDC）
#### 操作场景
使用存储过程对指定数据库开启或关闭变更数据捕获功能。变更数据捕获可记录应用到所启用的表中的插入、更新和删除活动，同时采用易于使用的关系格式提供变更详细信息。
![](https://support.huaweicloud.com/usermanual-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
仅RDS for SQL Server企业版和RDS for SQL Server 2016及其以上版本的标准版支持变更数据捕获。
关于变更数据捕获的其他功能可参考官方文档。
#### 前提条件
- 成功连接RDS for SQL Server实例。关于连接华为云关系型数据库实例，请参考[连接实例](https://support.huaweicloud.com/usermanual-rds-mssql/rds_mssql_connect_06.html)。
- 执行此存储过程的必须是拥有\[CREATE ANY DATABASE\]权限的用户。如果不具备此权限的用户尝试执行该存储过程，系统将会如下提示：
  ```
  Database restores can only be performed by database logins with [CREATE ANY DATABASE] permissions.
  ```
  
 
#### 约束
- 对于系统库，不可进行开启或关闭变更数据捕获功能。如果您试图对系统库进行此操作，系统将会如下提示：
  ```
  CDC can not open on system database and [rdsadmin].
  ```
  
 
- 变更数据捕获功能操作仅包括 1，0，若尝试进行其他操作，系统将会如下提示：
  ```
  @dbAction just support 1:open 0:close
  ```
  
#### 操作步骤
- 开启或关闭库级CDC。
  ```
  EXEC msdb.dbo.rds_cdc_db '@DBName', @DBAction;
  ```
  - @DBName：指定要操作的数据库。
  
  - @DBAction：指定操作类型，1为开启CDC，0为关闭CDC。
  
  
  对"testDB_1"打开变更数据捕获，示例如下：
  ```
  EXEC msdb.dbo.rds_cdc_db 'testDB_1', 1;
  ```
  
- 开启表级CDC。
  ```
  EXEC sys.sp_cdc_enable_table 
           @source_schema = 'dbo',
           @source_name = 'testtable',
           @role_name = NULL
  ```
  - @source_schema：schema名称。
  
  - @source_name：表名。
  
  - @role_name：用于限制对更改数据的访问权限，NULL为不限制。
   
- 关闭表级CDC。
  ```
  EXEC sys.sp_cdc_disable_table 
           @source_schema = 'dbo',
           @source_name = 'testtable',
           @capture_instance ='all'
  ```
  - @source_schema：schema名称。
  
  - @source_name：表名。
  
  - @capture_instance：指定禁用捕获的实例名，all为全部禁用。
   
- 查看表级CDC是否开启。
  ```
  use [testdb]
  SELECT is_tracked_by_cdc FROM sys.tables WHERE name='table_name'
  ```
  - 查询结果为1：表示开启成功。
  
  - 查询结果为0：表示关闭状态。
   
 
