码迷,mamicode.com
首页 > 数据库 > 详细

SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]

时间:2015-06-12 19:03:40      阅读:451      评论:0      收藏:0      [点我收藏+]

标签:

一.完整备份、差异备份和事务日志备份的脚本

--完整备份数据库

BACKUP DATABASE Test_Bak TO DISK = E:\20150609_75\bak\Test_bak_full.bak WITH INIT

--差异备份数据库

BACKUP DATABASE Test_Bak TO DISK = E:\20150609_75\bak\Test_bak_diff.bak WITH INIT, DIFFERENTIAL   --加上DIFFERENTIAL代表差异备份

--事务日志备份

BACKUP LOG Test_Bak TO DISK = E:\20150609_75\bak\Test_bak_log.bak WITH INIT   --BACKUP LOG表示备份事务日志,BACKUP DATABASE表示完整或差异备份

--备份事务日志,文件名中包含当前时间,适合定时备份

DECLARE @strbackup NVARCHAR(100)
 --改为日期加时间的
 SET @strbackup = E:\20150609_75\bak\Test_bak_log_
     + REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120), -, ‘‘),  ,
                      ‘‘), :, ‘‘) + .bak
 BACKUP LOG Test_Bak TO DISK = @strbackup WITH INIT;
 GO

 

二. 还原需要修改数据文件路径的多文件数据库(做过分区的)

错误:

技术分享

上面错误的原因为:原来备份的数据文件在G盘下,还原完整备份时新服务器下不存在G盘这个路径就会报错。

解决办法:可以使用WITH MOVE让数据文件保存到新的有效路径下,首先在磁盘下建立这个有效路径。

正确的还原多文件备份的方法如下:

方法1(脚本):

还原完整备份:

RESTORE DATABASE [DigitalLibDB] 
FROM  DISK = NE:\20150609_75\DigitalLibDB_20150609_FULL.bak   --完整备份的路径
WITH  MOVE DigitalLibDB_Data TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB.mdf,  
    MOVE UI0 TO C:\Program Files\Microsoft SQL   --重新指定文件的路径,取决文件数量Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_1.ndf,
    MOVE UI1 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_2.ndf,
    MOVE UI10 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_3.ndf,
    MOVE UI11 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_4.ndf,
    MOVE UI12 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_5.ndf,
    MOVE UI13 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_6.ndf,
    MOVE UI14 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_7.ndf,
    MOVE UI15 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_8.ndf,
    MOVE UI16 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_9.ndf,
    MOVE UI2 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_10.ndf,
    MOVE UI3 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_11.ndf,
    MOVE UI4 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_12.ndf,
    MOVE UI5 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_13.ndf,
    MOVE UI6 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_14.ndf,
    MOVE UI7 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_15.ndf,
    MOVE UI8 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_16.ndf,
    MOVE UI9 TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_17.ndf,
    MOVE ftrow_RegInfo_UnitName TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_18.ndf,
    MOVE DigitalLibDB_Log TO C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DigitalLibDB_Log.ldf,
STATS = 10, REPLACE, 
NORECOVERY
GO

WITH MOVE TO:重新指定文件的路径,WITH MOVE TO数量取决于数据库文件数量

STATS = 10:没完成10%显示一条记录

REPLACE:覆盖现有数据库

NORECOVERY:不对数据库进行任何操作,不回滚未提交的事务

完整备份结果:

技术分享

还原差异备份:(只有一个差异备份的情况,当还原多个差异备份时,通常前面的都用WITH NORECOVERY,还原最后一个差异备份才能用WITH RECOVERY)

注:移动数据文件是完整备份时移动,差异备份和日志备份不保存文件路径,差异备份和日志备份还原时不能移动路径。

RESTORE DATABASE [DigitalLibDB] FROM DISK=‘E:\20150609_75\新建文件夹\DigitalLibDB_20150610_Diff.bak‘ WITH RECOVERY

差异备份还原结果:

技术分享

方法2:(可视化界面操作)

还原完整备份:

选择还原数据库

技术分享

选择完整备份路径

技术分享

选择覆盖现有数据库,选择RESTORE WITH NORECOVERY选项

技术分享

还原完整备份成功

技术分享

此时,差异备份还未完成,数据库还处于正在还原状态

技术分享

还原差异备份,选择任务-还原-文件和文件组

技术分享

技术分享

技术分享

技术分享

所以,此时还原这个差异备份还是应该使用脚本来完成,不用移动文件。

RESTORE DATABASE [DigitalLibDB] FROM DISK=‘E:\20150609_75\新建文件夹\DigitalLibDB_20150610_Diff.bak‘ WITH RECOVERY --还原差异备份

 

三.不需要修改数据库文件路径的差异备份还原

注意:

对于不需要修改数据库文件路径的差异备份还原,使用sqlserver可视化界面还原是没问题的。

技术分享

技术分享

技术分享

此处,还原差异备份成功,原因是备份时文件是C盘下这个目录,还原时还是还原到C盘这个目录,不需要修改路径。

对于不需要修改数据库文件路径的数据库完整备份、差异备份和事务日志备份的还原过程如下(使用脚本):

--还原顺序:完整备份--差异备份--日志备份

--还原单文件数据库的完整备份,数据库文件路径一致,不用移动路径的情况

RESTORE DATABASE [Test_Bak] 
FROM  DISK = NE:\20150609_75\local\Test_Bak_full.bak 
WITH 
STATS = 10, REPLACE, 
NORECOVERY
GO

--还原差异备份

RESTORE DATABASE [Test_Bak] 
FROM  DISK = NE:\20150609_75\local\Test_Bak_diff.bak 
WITH   
STATS = 10,
NORECOVERY
GO

--还原日志备份

RESTORE DATABASE [Test_Bak] 
FROM  DISK = NE:\20150609_75\local\Test_Bak_Log.bak 
WITH   
STATS = 10,
RECOVERY

 

希望对你们有所帮助,如果你觉得不错,请在右边推荐一下喔,欢迎拍砖~

SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]

标签:

原文地址:http://www.cnblogs.com/suixinpeng/p/4572264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!