2009-08-10 12 views

risposta

5

Nessuno. SQL Server non ha una funzione equivalente.

+0

Ora che ha MVCC è davvero sorprendente che non sia così. –

2

L'equivalente più vicino è probabilmente Database Snapshots. È possibile creare un'istantanea del database al momento dell'interesse e quindi creare report sullo snapshot. A differenza dei flashback, i momenti in cui vengono eseguite le istantanee di SQL Server devono essere predeterminati.

2

Su SQL server 2008 è possibile utilizzare Change Data Capture, grazie a questa funzione è possibile eseguire molto più di un oracle flashback. (C'è una procedura negozio per ripristinare il database sul server SQL 2008 se si desidera che posso prevedere che per voi)

0

Sì, possiamo usare Change Data Capture e Change Tracking caratteristiche che sono costruiti in meccanismi in SQL Server e molto simile a Flashback in Oracle.

Quando si applica funzioni Change Data Capture su una tabella di database, si crea uno specchio della tabella rilevata con la stessa struttura colonna della tabella originale, ma con colonne aggiuntive che includono i metadati utilizzato per riassumere la natura del la modifica nella riga della tabella del database. Il DBA di SQL Server può quindi monitorare facilmente l'attività per la tabella registrata utilizzando queste nuove tabelle di controllo.

Il rilevamento delle modifiche è una soluzione leggera che fornisce un meccanismo di tracciamento delle modifiche efficiente per le applicazioni. In genere, per consentire alle applicazioni di richiedere modifiche ai dati in un database e accedere alle informazioni correlate alle modifiche, gli sviluppatori delle applicazioni hanno dovuto implementare meccanismi personalizzati di tracciamento delle modifiche. La creazione di questi meccanismi di solito comportava molto lavoro e spesso comportava l'utilizzo di una combinazione di trigger, colonne di timestamp, nuove tabelle per archiviare informazioni di tracciamento e processi di pulizia personalizzati.

Diversi tipi di applicazioni hanno requisiti diversi per la quantità di informazioni necessarie sulle modifiche. Le applicazioni possono utilizzare il rilevamento delle modifiche per rispondere alle seguenti domande sulle modifiche apportate a una tabella utente:

Quali righe sono state modificate per una tabella utente?

Solo il fatto che una riga sia stata modificata è necessaria, non quante volte la riga è stata modificata oi valori di eventuali modifiche intermedie.

Gli ultimi dati possono essere ottenuti direttamente dalla tabella che viene monitorata.

È stata modificata una riga?

Il fatto che una riga sia cambiata e le informazioni sulla modifica devono essere disponibili e registrate nel momento in cui la modifica è stata effettuata nella stessa transazione.

Per ulteriori informazioni su come utilizzare Change Data Capture (CDC) e Change Tracking in SQL Server; Si prega di controllare Pinal Dave's Post.

enter image description here

Change Tracking

1

So che questa domanda è abbastanza vecchio, ma con SQL Server 2016, Tavoli temporale è una caratteristica: https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables

forse può aiutare gli altri nel caso in cui vieni a questo argomento (Ricerca di qualcosa di simile alla funzione Oracle Flashback)

Con tavoli poral abilitati, è possibile interrogare tabella a partire da una data e ora specifica e recuperare le righe come lo erano in quella specifica data e ora, proprio come si erano abituati a fare in Oracle:

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

interrogazione equivalente in SQL Server per una tabella con SYSTEM_VERSIONING = ON sarà:

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

per abilitare SYSTEM_VERSIONING per una tabella esistente con le righe è possibile utilizzare il seguente 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); 

Dopo aver abilitato SYSTEM_VERSIONING, la tabella di storia mostrerà sotto il tavolo in cui è attivato il controllo delle versioni:

enter image description here

Per rimuovere SYSTEM_VERSIONING da una tabella:

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]; 

Per maggiori informazioni si può visitare il seguente link (o documentazione ufficiale Microsoft di riferimento prima): http://www.sqlservercentral.com/articles/SQL+Server+2016/147087/

0

SQL Server 2016 ha introdotto temporal tables aka history tables che consente agli sviluppatori di eseguire query sui dati memorizzati in una tabella di database in passato.

intendo gli sviluppatori possono fornire applicazioni che consente agli utenti di visualizzare i dati storici di una tabella, o la visualizzazione di una tabella ad un certo momento nel passato

Problemi correlati