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:
- Cree una tabla para realizar un seguimiento de la información de sincronización:
- Cree un procedimiento almacenado para sincronizar las tablas de origen y destino:
- Habilite el seguimiento de cambios a nivel de base de datos:
- Habilite el seguimiento de cambios en la tabla de origen:
- Complete la tabla de sincronización con la información de las tablas de origen y destino:
- Cargue la tabla de destino utilizando los nuevos tipos de datos:
- Ejecute el procedimiento almacenado de sincronización para mantener las tablas de origen y destino sincronizadas:
- Realice los pasos finales para completar la refactorización de la tabla:
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]CREATE PROCEDURE [dbo].[usp_change_tracking_synchronization] (
@SourceTable VARCHAR(100)
)
AS
BEGIN
SET NOCOUNT ON
-- Detalles de implementación omitidos por brevedad
ENDALTER DATABASE AdventureWorks2008 SET CHANGE_TRACKING = ON (
CHANGE_RETENTION = 7 DAYS,
AUTO_CLEANUP = ON
)ALTER TABLE Person.Person ENABLE CHANGE_TRACKINGINSERT dba_change_tracking_synchronization (
Source_SchemaName,
Source_TableName,
Target_SchemaName,
Target_TableName
) VALUES (
'Person',
'Person',
'Person',
'Person_no_unicode'
)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]EXEC usp_change_tracking_synchronization @sourceTable = 'person.person'/* 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!