Sql-Server

將每小時事務日誌恢復到每 10 分鐘間隔

  • August 1, 2018

我為我的生產數據庫執行每小時的事務日誌備份。我必須實施以下方案來檢查已刪除的數據。

我有兩個tlog。

  • tlog1.trn 上午 10 點
  • tlog2.trn 上午 11 點

我已經恢復了最近的完整備份並恢復到早上 9 點之前的差異。我想tlog1.trn每 10 分鐘恢復一次並將數據從一個表複製到同一個數據庫或不同數據庫中的table1另一個表table2

使用 SQL Server 2016。

這是可能的情況嗎?我必須使用游標嗎?我知道恢復STANDBY模式會讓我讀取數據。請幫助我如何恢復到每 10 分鐘的還原點?我知道恢復命令中有 STOPAT 選項,但我怎樣才能恢復到每 10 分鐘的間隔。有什麼語法嗎?

您應該能夠編寫一系列還原日誌(帶備用)並指定STOPAT10 分鐘增量

--Full database restore with standby
USE master
GO
RESTORE DATABASE [StandbyTest]
FROM DISK = N'c:\StandbyTest\StandbyTest.bak'
WITH FILE = 1
   ,REPLACE
   ,STANDBY = N'C:\StandbyTest\ROLLBACK_UNDO_StandbyTest.BAK'
GO

--Pretend this was created at 10am
RESTORE LOG [StandbyTest]
FROM DISK = N'C:\StandbyTest\StandbyTest.trn'
WITH FILE = 1
   ,NOUNLOAD
   ,STATS = 10
   ,STANDBY = N'C:\StandbyTest\ROLLBACK_UNDO_StandbyTest.BAK'
   ,stopat = '2018-07-26 09:10:00' --10 minute interval
GO

--Copy data to another table

RESTORE LOG [StandbyTest]
FROM DISK = N'C:\StandbyTest\StandbyTest.trn'
WITH FILE = 1
   ,NOUNLOAD
   ,STATS = 10
   ,STANDBY = N'C:\StandbyTest\ROLLBACK_UNDO_StandbyTest.BAK'
   ,stopat = '2018-07-26 09:20:00'     --10 minute interval
GO

--Copy data to another table

RESTORE LOG [StandbyTest]
FROM DISK = N'C:\StandbyTest\StandbyTest.trn'
WITH FILE = 1
   ,NOUNLOAD
   ,STATS = 10
   ,STANDBY = N'C:\StandbyTest\ROLLBACK_UNDO_StandbyTest.BAK'
   ,stopat = '2018-07-26 09:30:00'     --10 minute interval
GO

--Copy data to another table

RESTORE LOG [StandbyTest]
FROM DISK = N'C:\StandbyTest\StandbyTest.trn'
WITH FILE = 1
   ,NOUNLOAD
   ,STATS = 10
   ,STANDBY = N'C:\StandbyTest\ROLLBACK_UNDO_StandbyTest.BAK'
   ,stopat = '2018-07-26 09:40:00'     --10 minute interval
GO

--Copy data to another table

RESTORE LOG [StandbyTest]
FROM DISK = N'C:\StandbyTest\StandbyTest.trn'
WITH FILE = 1
   ,NOUNLOAD
   ,STATS = 10
   ,STANDBY = N'C:\StandbyTest\ROLLBACK_UNDO_StandbyTest.BAK'
   ,stopat = '2018-07-26 09:50:00'     --10 minute interval
GO

然後,繼續查看在上午 11 點創建的下一個事務日誌並重複恢復命令,但更改STOPAT每個命令的時間。

引用自:https://dba.stackexchange.com/questions/213310