Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como desabilitar o CDC no conjunto de tabelas OU desabilitar em todas as tabelas em um banco de dados no SQL Server - Tutorial do SQL Server

Cenário:

Você está trabalhando como SQL Server DBA ou desenvolvedor, você precisa preparar um script que deve ser capaz de desabilitar o Change Data Capture (CDC) em todas as tabelas em um banco de dados Ou se você quiser desabilitar em alguma tabela específica, ele deve ser capaz para lidar com isso.
O script abaixo pode ser usado para desabilitar o Change Data Capture em todas as tabelas em um banco de dados e se você quiser fornecer a lista de tabelas, você também tem a opção. Simplesmente alterando a consulta de seleção, você pode incluir ou excluir a lista de tabelas nas quais deseja desabilitar o CDC.
/*------------------------------------------------
Disable CDC on Set of Tables
--------------------------------------------------*/
DECLARE @TableName VARCHAR(100)
DECLARE CDC_Cursor CURSOR FOR
--Provide List of Tables here on which CDC needs to be disabled. 
  SELECT *
  FROM   (SELECT 'T' AS TableName
          UNION ALL
          SELECT 'T2' AS TableName
         --IF want to Disable CDC on All Table, then use
         --SELECT Name
         --FROM   sys.objects
         --WHERE  type = 'u'
         --       AND is_ms_shipped <> 1
         ) CDC
OPEN CDC_Cursor
FETCH NEXT FROM CDC_Cursor INTO @TableName
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(@TableName))

      --IF CDC is Already Disabled on Table , Print Message
      IF @CDC_Status = 0
        PRINT 'CDC is already Disabled on ' + @TableName
              + ' Table'

      --IF CDC is not Disabled on Table, Disable CDC and Print Message
      IF @CDC_Status = 1
        BEGIN
            SET @SQL='EXEC sys.sp_cdc_disable_table
      @source_schema = ''dbo'',
      @source_name   = ''' + @TableName
                     + ''',
      @capture_instance     = N''All'';'

            EXEC sp_executesql
              @SQL

            PRINT 'CDC  disabled on ' + @TableName
                  + ' Table successfully'
        END

      FETCH NEXT FROM CDC_Cursor INTO @TableName
  END

CLOSE CDC_Cursor
DEALLOCATE CDC_Cursor