Detención del control de versiones en una tabla temporal con control de versiones del sistema

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed Instance

Es posible que quiera detener el control de versiones en una tabla temporal de forma temporal o permanente. Puede establecer la cláusula SYSTEM_VERSIONING en OFF para hacerlo.

Valor SYSTEM_VERSIONING = OFF

Detenga el control de versiones del sistema si quiere realizar operaciones de mantenimiento concretas en una tabla temporal o ya no necesita una tabla con control de versiones. Como resultado de esta operación obtiene dos tablas independientes:

  • Tabla actual con una definición del período

  • Tabla de historial como una tabla normal

Notas importantes

  • La tabla de historial deja de actualizarse cuando establece 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 período de SYSTEM_TIME .
  • Si establece SYSTEM_VERSIONING = OFF y no quita el período SYSTEM_TIME, el sistema sigue actualizando las columnas de período en cada operación de inserción y actualización. Si elimina contenido de la tabla actual, no podrá recuperarlo.
  • Quite el período SYSTEM_TIME para eliminar las columnas de período.
  • 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 puede establecer SYSTEM_VERSIONING = OFF si se tienen otros objetos creados con SCHEMABINDING mediante extensiones de consultas temporales, tales como las referencias a SYSTEM_TIME. Esta restricción impide que se produzcan errores en estos objetos si se establece SYSTEM_VERSIONING = OFF.

Quitar permanentemente SYSTEM_VERSIONING

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

ALTER TABLE dbo.Department SET (SYSTEM_VERSIONING = OFF);
/*Optionally, DROP PERIOD if you want to revert temporal table to a non-temporal*/
ALTER TABLE dbo.Department
DROP PERIOD FOR SYSTEM_TIME;

Quitar temporalmente SYSTEM_VERSIONING

Esta es la lista de operaciones que exigen que el control de versiones del sistema esté establecido en OFF:

  • Eliminación de datos innecesarios del historial (DELETE or TRUNCATE)
  • Eliminación de datos de la tabla actual sin control de versiones (DELETE, TRUNCATE)
  • Partición SWITCH OUT de la tabla actual
  • Partición 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 se detiene temporalmente el control de versiones como un requisito previo para el mantenimiento de una tabla, se recomienda encarecidamente hacerlo en una transacción para mantener la coherencia de los datos.

Nota

Al volver a activar el control de versiones del sistema, no olvide especificar el argumento HISTORY_TABLE. Si no lo hace, se crea una tabla de historial que se asocia con la tabla actual. La tabla de historial original puede seguir existiendo como una tabla normal, pero no se asocia con la tabla actual.

BEGIN TRAN
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 ;

Pasos siguientes