微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MSSQL通用还原脚本

MSsql还原脚本

sql Server通用还原脚本,只需修改第二步中,需要还原的数据库名称和路径

执行完脚本后会生成对应的还原命令,直接新建查询后执行即可

MSSQL通用还原脚本


-- 2 - Initialize variables 

SET @dbname = 'Customer' 

SET @backupPath = 'D:\sqlBackups\' 


脚本如下:


--open-- xp_cmdshell

sp_configure 'show advanced options',1

reconfigure

go

sp_configure 'xp_cmdshell',1

reconfigure

go

 

 

USE Master; 

GO  

SET NOCOUNT ON 

 

-- 1 - Variable declaration 

DECLARE @dbname sysname 

DECLARE @backupPath NVARCHAR(500) 

DECLARE @cmd NVARCHAR(500) 

DECLARE @fileList TABLE (backupFile NVARCHAR(255)) 

DECLARE @lastFullBackup NVARCHAR(500) 

DECLARE @lastDiffBackup NVARCHAR(500) 

DECLARE @backupFile NVARCHAR(500) 

 

-- 2 - Initialize variables 

SET @dbname = 'Customer' 

SET @backupPath = 'D:\sqlBackups\' 

 

-- 3 - get list of files 

SET @cmd = 'DIR /b ' + @backupPath 

 

INSERT INTO @fileList(backupFile) 

EXEC master.sys.xp_cmdshell @cmd 

 

-- 4 - Find latest full backup 

SELECT @lastFullBackup = MAX(backupFile)  

FROM @fileList  

WHERE backupFile LIKE '%.BAK'  

   AND backupFile LIKE @dbname + '%' 

 

SET @cmd = 'RESTORE DATABASE ' + @dbname + ' FROM disK = '''  

       + @backupPath + @lastFullBackup + ''' WITH norECOVERY, REPLACE' 

PRINT @cmd 

 

-- 4 - Find latest diff backup 

SELECT @lastDiffBackup = MAX(backupFile)  

FROM @fileList  

WHERE backupFile LIKE '%.DIF'  

   AND backupFile LIKE @dbname + '%' 

   AND backupFile > @lastFullBackup 

 

-- check to make sure there is a diff backup 

IF @lastDiffBackup IS NOT NULL 

BEGIN 

   SET @cmd = 'RESTORE DATABASE ' + @dbname + ' FROM disK = '''  

       + @backupPath + @lastDiffBackup + ''' WITH norECOVERY' 

   PRINT @cmd 

   SET @lastFullBackup = @lastDiffBackup 

END 

 

-- 5 - check for log backups 

DECLARE backupFiles CURSOR FOR  

   SELECT backupFile  

   FROM @fileList 

   WHERE backupFile LIKE '%.TRN'  

   AND backupFile LIKE @dbname + '%' 

   AND backupFile > @lastFullBackup 

 

OPEN backupFiles  

 

-- Loop through all the files for the database  

FETCH NEXT FROM backupFiles INTO @backupFile  

 

WHILE @@FETCH_STATUS = 0  

BEGIN  

   SET @cmd = 'RESTORE LOG ' + @dbname + ' FROM disK = '''  

       + @backupPath + @backupFile + ''' WITH norECOVERY' 

   PRINT @cmd 

   FETCH NEXT FROM backupFiles INTO @backupFile  

END 

 

CLOSE backupFiles  

DEALLOCATE backupFiles  

 

-- 6 - put database in a useable state 

SET @cmd = 'RESTORE DATABASE ' + @dbname + ' WITH RECOVERY' 

PRINT @cmd 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐