Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come disabilitare CDC su un insieme di tabelle O disabilitarlo su tutte le tabelle in un database in SQL Server - Tutorial di SQL Server

Scenario:

Stai lavorando come DBA o sviluppatore di SQL Server, devi preparare uno script che dovrebbe essere in grado di disabilitare Change Data Capture (CDC) su tutte le tabelle in un database O se desideri disabilitare su una tabella specifica, dovrebbe essere in grado per gestirlo.
Lo script seguente può essere utilizzato per disabilitare Change Data Capture su tutte le tabelle in un database e se desideri fornire l'elenco delle tabelle, hai anche l'opzione. Modificando semplicemente la query di selezione, puoi includere o escludere l'elenco di tabelle su cui desideri disabilitare 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