Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách bật CDC trên Tập hợp bảng HOẶC Bật trên tất cả các bảng trong cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng SQL Server

Tình huống:

Bạn đang làm việc với tư cách là Nhà phát triển hoặc DBA của SQL Server, bạn cần viết tập lệnh mà bạn có thể sử dụng để bật Thay đổi tính năng thu thập dữ liệu (CDC) trên tất cả các bảng trong cơ sở dữ liệu hoặc Bật trên một số Bảng cụ thể.
Tập lệnh dưới đây có thể là được sử dụng để Bật tính năng Chụp dữ liệu Thay đổi trên tất cả bảng trong cơ sở dữ liệu gồm các bảng đã chọn. Bạn có thể thay đổi truy vấn để bao gồm hoặc loại trừ các bảng bạn thích.

/*------------------------------------------------
Enable CDC on Set of Tables
( To Enable CDC on Table , CDC Should be enabled on Database level)
--------------------------------------------------*/
USE [DatabaseName]
GO
DECLARE @TableName VARCHAR(100)
DECLARE @TableSchema VARCHAR(100)
DECLARE CDC_Cursor CURSOR FOR
  SELECT *
  FROM   (
         
         SELECT 'T' AS TableName,'dbo' AS TableSchema
          UNION ALL
          SELECT 'T2' AS TableName,'dbo' AS TableSchema
           --IF want to Enable CDC on All Table, then use
         --SELECT Name,SCHEMA_NAME(schema_id) AS TableSchema
         --FROM   sys.objects
         --WHERE  type = 'u'
               -- AND is_ms_shipped <> 1
         ) CDC
OPEN CDC_Cursor
FETCH NEXT FROM CDC_Cursor INTO @TableName,@TableSchema
WHILE @@FETCH_STATUS = 0
  BEGIN
      DECLARE @SQL NVARCHAR(1000)
      DECLARE @CDC_Status TINYINT

      SET @CDC_Status=(SELECT COUNT(*)
          FROM   cdc.change_tables
          WHERE  Source_object_id = OBJECT_ID(@TableSchema+'.'+@TableName))

      --IF CDC Already Enabled on Table , Print Message
      IF @CDC_Status = 1
        PRINT 'CDC is already enabled on ' +@TableSchema+'.'+@TableName
              + ' Table'

      --IF CDC is not enabled on Table, Enable CDC and Print Message
      IF @CDC_Status <> 1
        BEGIN
            SET @SQL='EXEC sys.sp_cdc_enable_table
      @source_schema = '''+@TableSchema+''',
      @source_name   = ''' + @TableName
                     + ''',
      @role_name     = null;'

            EXEC sp_executesql @SQL

            PRINT 'CDC  enabled on ' +@TableSchema+'.'+ @TableName
                  + ' Table successfully'
        END

      FETCH NEXT FROM CDC_Cursor INTO @TableName,@TableSchema
  END

CLOSE CDC_Cursor
DEALLOCATE CDC_Cursor

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DevOps:DBA hoặc Developer - Cân bằng chính xác

  2. SQL Server 2016:sys.dm_exec_osystem_stats

  3. Làm cách nào để CHÈN dữ liệu vào hai bảng đồng thời trong SQL Server?

  4. Làm thế nào để chèn nhiều bản ghi và nhận giá trị nhận dạng?

  5. Một kết nối đã được thiết lập thành công với máy chủ, nhưng sau đó đã xảy ra lỗi trong quá trình bắt tay đăng nhập trước