Published on

June 11, 2011

Usando el seguimiento de cambios en SQL Server para refactorizar tablas

En este artículo, discutiremos el uso de la función de seguimiento de cambios en SQL Server para refactorizar tablas grandes con un tiempo de inactividad mínimo. Exploraremos cómo se puede utilizar esta función para refactorizar tablas y admitir tipos de datos Unicode, sin necesidad de desencadenadores o modificar las tablas existentes.

El seguimiento de cambios es una función introducida en SQL Server 2008 que le permite realizar un seguimiento de los cambios realizados en una tabla. Realiza un seguimiento de los cambios realizados en la tabla, como inserciones, actualizaciones y eliminaciones, y proporciona una forma de sincronizar los cambios entre las tablas de origen y destino.

Veamos los pasos involucrados en el uso del seguimiento de cambios para refactorizar tablas grandes:

  1. Cree una tabla para realizar un seguimiento de la información de sincronización:
  2. CREATE TABLE [dbo].[dba_change_tracking_synchronization](
        [CTS_ID] [int] IDENTITY(1,1) NOT NULL,
        [Source_SchemaName] [varchar](50) NOT NULL,
        [Source_TableName] [varchar](100) NOT NULL,
        [Target_SchemaName] [varchar](50) NOT NULL,
        [Target_TableName] [varchar](100) NOT NULL,
        [last_sync_version] [int] NULL,
        CONSTRAINT [PK_dba_change_tracking_synchronization] PRIMARY KEY CLUSTERED (
            [Source_SchemaName] ASC,
            [Source_TableName] ASC
        )WITH (
            PAD_INDEX  = OFF,
            STATISTICS_NORECOMPUTE  = OFF,
            IGNORE_DUP_KEY = OFF,
            ALLOW_ROW_LOCKS  = ON,
            ALLOW_PAGE_LOCKS  = ON,
            FILLFACTOR = 85
        ) ON [PRIMARY]
    ) ON [PRIMARY]
  3. Cree un procedimiento almacenado para sincronizar las tablas de origen y destino:
  4. CREATE PROCEDURE [dbo].[usp_change_tracking_synchronization] (
        @SourceTable VARCHAR(100)
    )
    AS
    BEGIN
        SET NOCOUNT ON
        -- Detalles de implementación omitidos por brevedad
    END
  5. Habilite el seguimiento de cambios a nivel de base de datos:
  6. ALTER DATABASE AdventureWorks2008 SET CHANGE_TRACKING = ON (
        CHANGE_RETENTION = 7 DAYS,
        AUTO_CLEANUP = ON
    )
  7. Habilite el seguimiento de cambios en la tabla de origen:
  8. ALTER TABLE Person.Person ENABLE CHANGE_TRACKING
  9. Complete la tabla de sincronización con la información de las tablas de origen y destino:
  10. INSERT dba_change_tracking_synchronization (
        Source_SchemaName,
        Source_TableName,
        Target_SchemaName,
        Target_TableName
    ) VALUES (
        'Person',
        'Person',
        'Person',
        'Person_no_unicode'
    )
  11. Cargue la tabla de destino utilizando los nuevos tipos de datos:
  12. CREATE TABLE [Person].[Person_no_unicode](
        [BusinessEntityID] [int] NOT NULL,
        [PersonType] [char](2) NOT NULL,
        [NameStyle] [dbo].[NameStyle] NOT NULL,
        [Title] [varchar](8) NULL,
        [FirstName] [dbo].[Name] NOT NULL,
        [MiddleName] [dbo].[Name] NULL,
        [LastName] [dbo].[Name] NOT NULL,
        [Suffix] [varchar](10) NULL,
        [EmailPromotion] [int] NOT NULL,
        [AdditionalContactInfo] [xml](CONTENT [Person].[AdditionalContactInfoSchemaCollection]) NULL,
        [Demographics] [xml](CONTENT [Person].[IndividualSurveySchemaCollection]) NULL,
        [rowguid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
        [ModifiedDate] [datetime] NOT NULL,
        CONSTRAINT [PK_Person_no_unicode_BusinessEntityID] PRIMARY KEY CLUSTERED (
            [BusinessEntityID] ASC
        )WITH (
            PAD_INDEX  = OFF,
            STATISTICS_NORECOMPUTE  = OFF,
            IGNORE_DUP_KEY = OFF,
            ALLOW_ROW_LOCKS  = ON,
            ALLOW_PAGE_LOCKS  = ON,
            FILLFACTOR = 80
        ) ON [PRIMARY]
    ) ON [PRIMARY]
  13. Ejecute el procedimiento almacenado de sincronización para mantener las tablas de origen y destino sincronizadas:
  14. EXEC usp_change_tracking_synchronization @sourceTable = 'person.person'
  15. Realice los pasos finales para completar la refactorización de la tabla:
  16. /* Pasos omitidos por brevedad */

Al utilizar el seguimiento de cambios, pudimos refactorizar tablas grandes para admitir tipos de datos Unicode con un tiempo de inactividad mínimo. El procedimiento almacenado de sincronización nos permitió mantener las tablas de origen y destino sincronizadas, asegurando que cualquier cambio realizado en la tabla de origen se reflejara en la tabla de destino.

El seguimiento de cambios es una función poderosa en SQL Server que se puede utilizar para diversos escenarios, como la replicación de datos, auditoría y sincronización de datos. Proporciona una forma confiable y eficiente de realizar un seguimiento de los cambios realizados en una tabla y mantener varias tablas sincronizadas.

¿Has utilizado el seguimiento de cambios en tus proyectos de SQL Server? ¡Comparte tus experiencias y enfoques para minimizar el tiempo de inactividad durante la refactorización de tablas en los comentarios a continuación!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.