sql >> Database >  >> RDS >> Sqlserver

Hoe CDC op een reeks tabellen uit te schakelen OF op alle tabellen in een database in SQL Server uit te schakelen - SQL Server-zelfstudie

Scenario:

U werkt als SQL Server DBA of ontwikkelaar. U moet een script voorbereiden dat Change Data Capture (CDC) op alle tabellen in een database moet kunnen uitschakelen. Of als u een specifieke tabel wilt uitschakelen, moet dit mogelijk zijn om dat af te handelen.
Het onderstaande script kan worden gebruikt om het vastleggen van wijzigingsgegevens voor alle tabellen in een database uit te schakelen en als u de lijst met tabellen wilt weergeven, heeft u ook de optie. Door simpelweg de selectiequery te wijzigen, kunt u een lijst met tabellen opnemen of uitsluiten waarvoor u CDC wilt uitschakelen.
/*------------------------------------------------
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. Dynamische SQL (EXECUTE) als voorwaarde voor IF-statement

  2. SQL Server (MSSQL DBA) Database-tutorials voor beginners Databasebeheerders

  3. Hoe het kolomgegevenstype in de SQL-database te wijzigen zonder gegevens te verliezen

  4. Verkrijg MySQL-database-uitvoer via PHP naar XML