SQL Server必须使用内置机制进行闪回查询?

时间:2009-08-10 22:23:17

标签: sql-server

认为这一切都说明了吗?

6 个答案:

答案 0 :(得分:5)

无。 SQL Server没有等效的功能。


更新:从SQL Server 2016开始,此信息已过时。请参阅下面的评论和答案。

答案 1 :(得分:2)

最近的等价物可能是Database Snapshots。您可以在感兴趣的时刻创建数据库快照,然后针对快照进行报告。与闪回不同,必须预先确定SQL Server快照的拍摄时刻。

答案 2 :(得分:2)

在SQL Server 2008上,您可以使用Change Data Capture,通过此功能,您可以比oracle flash back做更多的事情。 (如果您希望我能为您提供,请在SQL Server 2008上恢复数据库的存储过程)

答案 3 :(得分:2)

我知道这个问题很老,但是对于 SQL Server 2016 ,Temporal Tables是一个功能: https://docs.microsoft.com/en-us/sql/relational-databases/tables/temporal-tables

也许它可以帮助其他人,以防他们来到这个主题(搜索类似于Oracle闪回功能的东西)

启用时态表后,您可以查询特定时间戳的表AS,并检索特定时间戳中的行,就像您在Oracle中所做的那样:

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

SQL Server中对于SYSTEM_VERSIONING = ON的表的等效查询将是:

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

要为包含行的现有表启用SYSTEM_VERSIONING,您可以使用以下脚本

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

启用SYSTEM_VERSIONING后,历史记录表将显示在您启用版本控制的表格下方:

enter image description here

要从表中删除SYSTEM_VERSIONING:

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

有关详细信息,您可以访问以下链接(或之前引用的官方Microsoft文档): http://www.sqlservercentral.com/articles/SQL+Server+2016/147087/

答案 4 :(得分:0)

  

是的,我们可以使用Change Data CaptureChange Tracking   SQL Server中内置机制的功能非常多   类似于Oracle中的闪回。

在数据库表上应用“更改数据捕获”功能时,将使用原始表的相同列结构创建跟踪表的镜像,但使用其他列包含用于汇总更改性质的元数据。数据库表行。然后,SQL Server DBA可以使用这些新的审计表轻松监视已记录表的活动。

更改跟踪是一种轻量级解决方案,可为应用程序提供高效的更改跟踪机制。通常,为了使应用程序能够查询数据库中数据的更改并访问与更改相关的信息,应用程序开发人员必须实现自定义更改跟踪机制。创建这些机制通常涉及大量工作,并且经常涉及使用触发器,时间戳列,新表来存储跟踪信息和自定义清理过程的组合。

不同类型的应用程序对于他们需要多少有关更改的信息有不同的要求。应用程序可以使用更改跟踪来回答有关对用户表所做更改的以下问题:

用户表的哪些行已更改?

只需要更改行的事实,而不是行更改的次数或任何中间更改的值。

可以直接从正在跟踪的表格中获取最新数据。

有一行更改了吗?

行已更改且有关更改的信息必须可用且在同一事务中进行更改时记录。

有关如何在SQL Server中使用更改数据捕获(CDC)和更改跟踪的详细信息;请查看Pinal Dave's Post

enter image description here

Change Tracking

答案 5 :(得分:0)

SQL Server 2016引入了temporal tables aka history tables,使开发人员能够查询过去存储在数据库表中的数据。

我的意思是开发人员可以提供应用程序,使用户能够显示表的历史数据,或者在过去的某个时间显示表的视图