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 Database
Azure SQL Managed Instance
Es posible que quiera detener el control de versiones en una tabla temporal de forma temporal o permanente. Puede hacerlo si establece la cláusula SYSTEM_VERSIONING
en OFF
.
Establecimiento de 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
Comentarios
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
.
Si establece SYSTEM_VERSIONING = OFF
y no quita el periodo SYSTEM_TIME
, el sistema sigue actualizando las columnas de periodo en cada operación de inserción y actualización. Si elimina contenido de la tabla actual, no podrá recuperarlo.
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 puede establecer SYSTEM_VERSIONING = OFF
si tienen otros objetos creados con SCHEMABINDING
mediante extensiones de consultas temporales, 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 periodo. 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
La lista siguiente contiene las operaciones que exigen que el control de versiones del sistema esté establecido en OFF
:
- Eliminación de datos innecesarios del historial (
DELETE
oTRUNCATE
) - Eliminación de datos de la tabla actual sin control de versiones (
DELETE
,TRUNCATE
) - Partición de
SWITCH OUT
desde la tabla actual - Partición de
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 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.
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 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;
Contenido relacionado
- Tablas temporales
- Introducción a las tablas temporales con control de versiones del sistema
- Administración de la retención de datos históricos en las tablas temporales con versiones del sistema
- Tablas temporales con control de versiones del sistema con tablas optimizadas para memoria
- Creación de una tabla temporal con versión del sistema
- Modificación de los datos de una tabla temporal con control de versiones del sistema
- Consulta de los datos de una tabla temporal con control de versiones del sistema
- Cambio del esquema de una tabla temporal con control de versiones del sistema