Detener el control de versiones del sistema en una tabla temporal con control de versiones del sistema

Aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceBase de datos SQL en Microsoft Fabric

Es posible que desee deshabilitar el control de versiones de su tabla temporal de forma temporal o permanentemente. Puede hacerlo si establece la cláusula SYSTEM_VERSIONING en OFF.

Establezca SYSTEM_VERSIONING = OFF

Deja de versionar el sistema si quieres realizar operaciones de mantenimiento específicas en una tabla temporal o ya no necesitas una tabla versionada. Esta operación te da dos tablas independientes:

  • Tabla actual con una definición del período
  • Tabla de historial como una tabla normal

Remarks

La tabla de historial deja de capturar las actualizaciones durante SYSTEM_VERSIONING = OFF.

No se produce ninguna pérdida de datos en la tabla temporal cuando se establece SYSTEM_VERSIONING = OFF o se quita el periodo SYSTEM_TIME.

Cuando configuras SYSTEM_VERSIONING = OFF y no eliminas el SYSTEM_TIME período, el sistema sigue actualizando las columnas del período en cada operación de inserción y actualización. Las eliminaciones en la tabla actual son permanentes.

Debe quitar el punto SYSTEM_TIME para eliminar las columnas de periodo. Para quitar las columnas de periodo, use ALTER TABLE <table> DROP <column>;. Para más información, vea Cambio del esquema de una tabla temporal con control de versiones del sistema.

Al establecer SYSTEM_VERSIONING = OFF, todos los usuarios con permisos suficientes pueden modificar el esquema y el contenido de la tabla de historial o incluso eliminarla permanentemente.

No puedes establecer SYSTEM_VERSIONING = OFF si tienes otros objetos creados con SCHEMABINDING que usen extensiones temporales de consulta, como referenciar SYSTEM_TIME. Esta restricción impide que se produzcan errores en estos objetos si se establece SYSTEM_VERSIONING = OFF.

Eliminar permanentemente SYSTEM_VERSIONING

En este ejemplo se quita permanentemente SYSTEM_VERSIONING y se eliminan las columnas de periodo. La eliminación de las columnas de período es opcional.

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = OFF);

Opcionalmente, elimina el punto final si quieres convertir de nuevo la tabla temporal en una tabla no temporal.

ALTER TABLE dbo.Department
    DROP PERIOD FOR SYSTEM_TIME;

Quitar temporalmente SYSTEM_VERSIONING

Las siguientes operaciones requieren que establezcas el versionado del sistema a OFF:

  • Eliminación de datos innecesarios del historial (DELETE o TRUNCATE)
  • Eliminar datos de la tabla actual sin versionado (DELETE, TRUNCATE)
  • Partición de SWITCH OUT desde la tabla actual
  • Particionar SWITCH IN en la tabla de historial

En este ejemplo se detiene temporalmente SYSTEM_VERSIONING para que se puedan realizar operaciones de mantenimiento concretas. Si interrumpe temporalmente el control de versiones como paso previo para las tareas de mantenimiento de la tabla, recomendamos encarecidamente realizar este cambio dentro de una transacción para mantener la coherencia de los datos.

Cuando vuelvas a activar el control de versiones del sistema, especifica el argumento HISTORY_TABLE. Si no lo haces, el sistema crea una nueva tabla de historial y la asocia con la tabla actual. La tabla de historia original puede seguir existiendo como tabla normal, pero ya no está asociada con la tabla actual.

BEGIN TRANSACTION;

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = OFF);

TRUNCATE TABLE [History].[DepartmentHistory]
    WITH ( PARTITIONS (1, 2) );

ALTER TABLE dbo.Department
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.DepartmentHistory));

COMMIT TRANSACTION;