He estado configurando un sistema de prueba de concepto que tiene un servidor SQL Server 2017.
El sistema utiliza tablas temporales para registrar configuraciones de activos y rastrear cambios a lo largo del tiempo.
Tengo una tabla de datos que está vinculada a la tabla de historial, llamémosla dbo.MSSQL_TemporaryHistoryFor_12345678900.
Hasta aquí todo bien. Tengo dos problemas:
Hoy apagué el control de versiones en la tabla para poder agregar una columna calculada. Esto se hizo y se volvió a encender sin errores.
Ahora encuentro que no puedo consultar ningún dato histórico anterior al cambio. Se están agregando nuevos datos al historial, pero no hay nada de antemano.
Mirando dentro de SSMS, ahora puedo ver que hay varias tablas de historial, todas con el mismo nombre pero con un sufijo hexadecimal, por ejemplo, dbo.MSSQL_TemporaryHistoryFor_12345678900_A0B1C2D3. No están vinculados debajo de la tabla de datos principal. Simplemente están flotando por su cuenta dentro de la base de datos. Cuando pregunté a sys.tables, estos no se muestran como tablas de historial y no están vinculados a la tabla de datos principal.
Estas tablas contienen los datos históricos que faltan.
Las preguntas que tengo son por lo tanto:
- ¿Qué representan estas tablas adicionales?
- ¿Cómo fueron creados?
- ¿Hay alguna forma de volver a vincularlos de alguna manera a la cadena principal de la historia para que pueda recuperar mis informes históricos?
Es muy frustrante, por lo que cualquier ayuda que pueda brindar sería agradecida. Gracias.
Respuestas:
Usted necesita proporcionar el nombre de la tabla de historia con el fin de mantener la continuidad de los datos cuando se enciende el sistema de versiones de vez en cuando. Este comportamiento se menciona en la documentación de ALTER TABLE :
Aquí hay una demostración. Crearé la tabla de ejemplo a partir de la documentación:
Esto da como resultado una tabla de historial denominada
MSSQL_TemporalHistoryFor_1253579504
. Ahora deshabilitaré y habilitaré el control de versiones del sistema:Y estoy en tu situación exacta:
Ahora lo limpiaré todo:
Luego cree la tabla con un nombre de tabla de historial específico:
Luego, active y desactive la versión del sistema, pero continúe especificando el nombre de la tabla de historial:
Nota: en su situación específica, debería poder usar esta sintaxis para "volver a conectar" una tabla de historial perdida a su tabla base
No hay mesas extra:
La comida para llevar
Siempre especifique un nombre de tabla de historial explícitamente al crear tablas temporales o habilitar el control de versiones del sistema.
Los documentos de MS ahora lo mencionan específicamente en la página Detención del control de versiones del sistema en una página de tabla temporal versionada por el sistema :
fuente