sql >> Databáze >  >> RDS >> Sqlserver

Jak zakázat CDC na sadě tabulek NEBO zakázat na všech tabulkách v databázi na SQL Server - SQL Server výukový program

Scénář:

Pracujete jako SQL Server DBA nebo vývojář, musíte připravit skript, který by měl být schopen deaktivovat Change Data Capture (CDC) na všech tabulkách v databázi, nebo pokud chcete deaktivovat na některé konkrétní tabulce, měl by být schopen abyste to zvládli.
Níže uvedený skript lze použít k zakázání zachytávání změn dat na všech tabulkách v databázi a pokud byste chtěli poskytnout seznam tabulek, máte také možnost. Pouhou změnou výběrového dotazu můžete zahrnout nebo vyloučit seznam tabulek, u kterých byste chtěli zakázat 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
 
 
 
  1. Může INNER JOIN nabídnout lepší výkon než EXISTS

  2. Vysvětlení operátora Oracle INTERSECT

  3. Jak spustit více příkazů SQL v jednom připojení SQL?

  4. MySQL - Jak uvolnit sloupce na řádky?