SQL SERVER - Existe la alternativa de flashback de datos

Zuljin

Fundador
Miembro del Equipo
Fundador
ADMIN
Se incorporó
15 Enero 2004
Mensajes
11.994
Acá tenemos una base de datos SQL Server 2022 Standard Edition con datos para unos sistemas de soporte.

En términos de volumen es una base de datos chica, 100 gigas a todo reventar.

El otro día me dijeron

"oye Zuljin, ¿puedes hacer alguna magia con los respaldos para poder ver la data del 15 de diciembre? Necesitamos revisar algo".

y yo ahí cargando la cinta y recuperando la base de datos con un nombre distinto para que la puedan consultar.

pero me acordé de algo Oraclístico.

Oracle tiene una característica llamada "flashback" en que tú puedes hacer un flashback query. Funciona más o menos así:

Una consulta de datos del momento es de este tipo

select datos from latablaculia

peeeeero, si quieres saber los datos que tenía latablaculia el 15 de diciembre tu le pones algo como esto

select datos from latablaculia to_timestamp(15 de diciembre)

ahí Oracle va a buscar internamente los datos respaldados que mantiene dentro del motor, no es que vaya a cinta. Pero como ven, la huea es magia negra vudú.


¿Existirá algo así en SQL Server? Es para ver si lo implemento o lo cotizo para comprarlo pues saca harto de apuro.

Gracias
 

Sago7

Tibetan Mod
Miembro del Equipo
MOD
Se incorporó
5 Julio 2006
Mensajes
6.250
Aprovechando que tengo Gemini AI Pro por un tiempo:


SQL Server no tiene exactamente la misma sintaxis de "Flashback Query" de Oracle, pero ofrece dos funcionalidades nativas para lograr ese resultado sin recurrir a cintas ni restaurar backups completos.

1. Tablas Temporales (System-Versioned Temporal Tables)​

Esta es la opción más cercana al comportamiento de Oracle. Permite consultar datos "en el tiempo" usando una sintaxis estándar.

  • Cómo funciona: El motor mantiene automáticamente una tabla de historial. Cada vez que se modifica un dato, la versión anterior se mueve al historial con un periodo de validez.
  • Sintaxis de consulta:
    SQL

    SELECT * FROM LaTablaCulia
    FOR SYSTEM_TIME AS OF '2025-12-15 T12:00:00';

  • Implementación: Requiere modificar la tabla actual para agregar dos columnas de tipo datetime2 y habilitar SYSTEM_VERSIONING.
  • Costo: Incluido en SQL Server Standard 2022. Solo "pagas" en términos de almacenamiento extra (el tamaño de la tabla de historial).

2. Database Snapshots (Instantáneas de BD)​

Si lo que necesitas es ver toda la base de datos tal como estaba en un punto exacto (por ejemplo, sacar un snapshot cada lunes), esta es la vía rápida.

  • Cómo funciona: Crea una vista de solo lectura de la base de datos. Solo consume espacio a medida que los datos en la base original cambian (utiliza sparse files).
  • Uso: La consultas como si fuera otra base de datos en el mismo servidor: SELECT * FROM Snapshot15Dic.dbo.LaTablaCulia.
  • Costo: Incluido en la versión Standard (desde SQL 2016 SP1).

Comparativa Técnica​

CaracterísticaTemporal TablesDatabase Snapshots
GranularidadPor fila (puedes ver cualquier segundo)Por punto en el tiempo (cuando se creó el snapshot)
ConfiguraciónRequiere cambio de esquema en tablasA nivel de base de datos
PersistenciaPermanente hasta que limpies historialSe borran manualmente; se pierden si reinicias el motor
SintaxisFOR SYSTEM_TIME AS OFSELECT estándar sobre otra BD
Export to Sheets

Recomendación​

Para tu caso de "sacar de apuro", implementa Temporal Tables en las tablas críticas de soporte.

  1. No necesitas comprar nada extra.
  2. Te olvidas de las cintas para consultas rápidas.
  3. El impacto en rendimiento es despreciable para una base de 100 GB.
 
Upvote 0
Subir