2009-08-10 4 views

Respuesta

5

Ninguno. SQL Server no tiene una función equivalente.

+0

Ahora que tiene MVCC es realmente sorprendente que no lo haga. –

2

El equivalente más cercano es probablemente Database Snapshots. Puede crear una instantánea de la base de datos en el momento de su interés y luego informar contra la instantánea. A diferencia de los flashbacks, los momentos en los que se toman las instantáneas de SQL Server deben predeterminarse.

2

En SQL Server 2008 puede usar la Captura de datos modificados, mediante esta función puede hacer mucho más que volver a recuperar el flash de Oracle. (Hay un procedimiento de almacenamiento para revertir la base de datos en el servidor SQL 2008 si quieres puedo proporcionar eso para usted)

0

Sí, podemos utilizar Change Data Capture y Change Tracking características que se construyen en los mecanismos en SQL Server y mucho similar a Flashback en Oracle.

Cuando se aplica funciones de captura de datos modificados en una tabla de base de datos, un espejo de la mesa de seguimiento se crea con la misma estructura de la columna de la tabla original, pero con columnas adicionales que incluyen los metadatos utilizados para resumir la naturaleza de el cambio en la fila de la tabla de la base de datos. El DBA de SQL Server puede monitorear fácilmente la actividad de la tabla registrada usando estas nuevas tablas de auditoría.

Seguimiento de cambios es una solución liviana que proporciona un mecanismo eficiente de seguimiento de cambios para las aplicaciones. Por lo general, para permitir que las aplicaciones consulten los cambios en los datos de una base de datos y accedan a información relacionada con los cambios, los desarrolladores de aplicaciones tuvieron que implementar mecanismos de seguimiento de cambios personalizados. La creación de estos mecanismos por lo general implicaba mucho trabajo y con frecuencia implicaba el uso de una combinación de factores desencadenantes, columnas de marca de tiempo, nuevas tablas para almacenar información de seguimiento y procesos de limpieza personalizados.

Los diferentes tipos de aplicaciones tienen requisitos diferentes para la cantidad de información que necesitan sobre los cambios. Las aplicaciones pueden usar el seguimiento de cambios para responder las siguientes preguntas sobre los cambios que se han realizado en una tabla de usuario:

¿Qué filas han cambiado para una tabla de usuario?

Solo se requiere el hecho de que una fila ha cambiado, no cuántas veces ha cambiado la fila o los valores de cualquier cambio intermedio.

Los últimos datos se pueden obtener directamente de la tabla que se está siguiendo.

¿Se ha cambiado una fila?

El hecho de que una fila haya cambiado y la información sobre el cambio debe estar disponible y registrada en el momento en que se realizó el cambio en la misma transacción.

Para obtener más información sobre cómo usar la Captura de datos modificados (CDC) y el Seguimiento de cambios en SQL Server; echa un vistazo a Pinal Dave's Post.

enter image description here

Change Tracking

1

Sé que esta pregunta es bastante antiguo, pero con SQL Server 2016, Tablas temporal es una característica: https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables

tal vez puede ayudar a otros en caso de que llegar a este tema (Búsqueda de algo similar a la función de Flashback de Oracle)

con tem mesas porales habilitadas, se puede consultar la tabla como de marca de tiempo específico y recuperar filas como lo eran en esa marca de tiempo específico, al igual que lo estaban acostumbrados a hacer en Oracle:

(SELECT * FROM EMPLOYEE AS OF TIMESTAMP ('13-SEP-04 8:50:58','DD-MON-YY HH24: MI: SS') 

consulta equivalente en SQL Server para una mesa con SYSTEM_VERSIONING = ON será:

SELECT * FROM EMPLOYEE FOR SYSTEM_TIME AS OF '2004-09-01 08:50:58' 

para habilitar SYSTEM_VERSIONING de una tabla existente con filas puede utilizar el siguiente script:

ALTER TABLE [dbo].[TABLE] ADD [SysStartTime] datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN NOT NULL CONSTRAINT DF_Inventory_SysStartTime DEFAULT '1900-01-01 00:00:00', [SysEndTime] datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN NOT NULL CONSTRAINT DF_Inventory_SysEndTime DEFAULT '9999-12-31 23:59:59', PERIOD FOR SYSTEM_TIME ([SysStartTime], [SysEndTime]) 

ALTER TABLE [dbo].[TABLE] SET (SYSTEM_VERSIONING = ON); 

Después de habilitar SYSTEM_VERSIONING, la tabla de historia mostrará debajo de la mesa, donde ha habilitado el control de versiones:

enter image description here

Para Retire SYSTEM_VERSIONING de una tabla:

ALTER TABLE [dbo].[TABLE] SET (SYSTEM_VERSIONING = OFF); 

ALTER TABLE [dbo].[TABLE] DROP PERIOD FOR SYSTEM_TIME; 

ALTER TABLE [dbo].[TABLE] DROP COLUMN [SysStartTime], [SysEndTime]; 

Para más información se puede visitar el siguiente enlace (o documentación oficial de Microsoft a la que se hizo referencia anteriormente): http://www.sqlservercentral.com/articles/SQL+Server+2016/147087/

0

SQL Server 2016 introdujo temporal tables aka history tables que permite a los desarrolladores consultar datos almacenados en una tabla de base de datos en el pasado.

me refiero a los desarrolladores pueden ofrecer aplicaciones que permite a los usuarios visualizar los datos históricos de una tabla o la vista de una tabla en un momento determinado en el pasado

Cuestiones relacionadas