还原大量事务日志

Sad*_*die 6 sql-server sql-server-2008-r2 restore transaction-log

我使用的是 SQL Server 2008 R2,我需要将 36 个 .trn 日志还原到数据库。我已经使用 SSMS 中的恢复事务日志功能恢复了前 4 个(右键单击数据库 > 任务 > 恢复 > 事务日志)。

有没有办法使用此工具或脚本按顺序恢复它们?.trn 文件位于远程服务器上的文件夹中。我不需要恢复文件夹中的所有文件,只需要恢复特定日期之间的文件。

我正在寻找一种自动执行此操作的方法,因此我不必手动还原每个单独的日志。

我使用如下所示的地址访问文件。

\\远程服务器IP\SQL_Backup\LMSQL02\TLog\file.trn

Kin*_*hah 5

我建议使用Restore Gene : Automating SQL Server Database Restores - 由Paul Brewer编写

如果需要,Restore Gene 存储过程会生成所需的恢复脚本,包括 DBCC CHECKDB 命令。它本身就是一个有用的工具;在灾难恢复情况下,它可以在几秒钟内构建一个恢复脚本。它可选地包括目标数据库名称的覆盖选项和数据、日志文件位置的 WITH MOVE 覆盖,这可能有助于通过将数据库的临时版本恢复到同一实例来恢复丢失的数据。

它具有用于自动化的TSQLPowerShell版本。


tpe*_*pet 1

这使用 xp_cmdshell 查看文件系统中的日志文件。如果你同意的话......

DECLARE @databaseName AS VARCHAR(100)
DECLARE @restoreName AS VARCHAR(100)
SET @databaseName = 'OriginalDBName' 
SET @restoreName = 'RestoredDBName' 

CREATE TABLE #dirList (
  id int identity(1,1),
  line nvarchar(1000)
  )

DECLARE @cmdShellStatement VARCHAR(2000)
--Modify this file path if the backup files are not located in the standard backup directory.
SET @cmdShellStatement = 'DIR "C:\Program'+' '+'Files\Microsoft'+' '+'SQL'+'     '+'Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\' + @databaseName + '\"'
INSERT INTO #dirList (line) EXEC master..xp_cmdshell @cmdShellStatement
SELECT SUBSTRING(line,0,21) AS 'DateTime'
--Modify this file path if the backup files are not located in the standard backup directory.
,'RESTORE DATABASE ' + @restoreName + ' FROM DISK = ''C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\' + @databaseName     + '\' +   SUBSTRING(line,40,100) + ''' WITH REPLACE, NORECOVERY' as 'Script'
FROM #dirList
WHERE line like '%.bak'
ORDER BY CAST(SUBSTRING(line,0,21) AS DateTime)

SELECT SUBSTRING(line,0,21) AS 'DateTime'
--Modify this file path if the backup files are not located in the standard backup directory.
,'RESTORE LOG ' + @restoreName + ' FROM DISK = ''C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\' + @databaseName + '\' +   SUBSTRING(line,40,100) + ''' WITH NORECOVERY' as 'Script'
FROM #dirList
WHERE line like '%.trn'
ORDER BY CAST(SUBSTRING(line,0,21) AS DateTime)

DROP TABLE #dirList
Run Code Online (Sandbox Code Playgroud)