Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What built in mechanism does SQL Server have to do Flashback Queries?

Tags:

sql-server

Think that says it all?

like image 491
Stephanie Page Avatar asked Aug 10 '09 22:08

Stephanie Page


People also ask

Does SQL Server have flashback?

The same functionality of Flashback Query can be achieved in SQL server by using database snapshots .

How do you use flashbacks in SQL?

To flash back a table to an earlier SCN or timestamp, you must have either the FLASHBACK object privilege on the table or the FLASHBACK ANY TABLE system privilege. In addition, you must have the SELECT , INSERT , DELETE , and ALTER object privileges on the table.

How do you do a Flashback Query?

You perform a Flashback Query using a SELECT statement with an AS OF clause. You use a Flashback Query to retrieve data as it existed at some time in the past. The query explicitly references a past time using a timestamp or SCN. It returns committed data that was current at that point in time.

Which flashback feature does not use undo for flashback?

PURGE option can be used to permanently drop a table. DROP TABLE my_table PURGE; The recycle bin is a logical collection of previously dropped objects, with access tied to the DROP privilege. This feature does not use flashback logs or undo, so it is independent of the other flashback technologies.


2 Answers

None. SQL Server does not have an equivalent feature.


UPDATE: From SQL Server 2016 on, this information is outdated. See the comments and answers below.

like image 104
MyItchyChin Avatar answered Sep 23 '22 01:09

MyItchyChin


I know this question is quite old, but with SQL Server 2016, Temporal Tables is a feature: https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables

Maybe it can help others in case they come to this topic (Searching for something similar to Oracle Flashback feature)

With temporal tables enabled, you can query table AS OF a specific timestamp and retrieve rows as they were in that specific timestamp, just like you were used to do in Oracle:

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

Equivalent query in SQL Server for a table with SYSTEM_VERSIONING=ON will be:

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

To enable SYSTEM_VERSIONING for an existing table with rows you may use the following 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); 

After enabling SYSTEM_VERSIONING, the History table will show under the table where you enabled versioning:

enter image description here

To Remove SYSTEM_VERSIONING from a table:

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

For more info you can visit the following link (or official Microsoft documentation referenced before): http://www.sqlservercentral.com/articles/SQL+Server+2016/147087/

like image 24
Daniel Avatar answered Sep 24 '22 01:09

Daniel