Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So deaktivieren Sie CDC für eine Reihe von Tabellen ODER deaktivieren Sie für alle Tabellen in einer Datenbank in SQL Server – SQL Server-Lernprogramm

Szenario:

Sie arbeiten als SQL Server-DBA oder -Entwickler. Sie müssen ein Skript vorbereiten, das in der Lage sein sollte, Change Data Capture (CDC) für alle Tabellen in einer Datenbank zu deaktivieren. Oder wenn Sie eine bestimmte Tabelle deaktivieren möchten, sollte dies möglich sein um damit umzugehen.
Das folgende Skript kann verwendet werden, um die Änderungsdatenerfassung für alle Tabellen in einer Datenbank zu deaktivieren, und wenn Sie die Liste der Tabellen bereitstellen möchten, haben Sie auch die Möglichkeit. Indem Sie einfach die ausgewählte Abfrage ändern, können Sie eine Liste von Tabellen einschließen oder ausschließen, für die Sie CDC deaktivieren möchten.
/*------------------------------------------------
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