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

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

--完整备份数据库

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 = N‘E:\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 = N‘E:\20150609_75\local\Test_Bak_full.bak‘
WITH
STATS = 10, REPLACE,
NORECOVERY
GO

--还原差异备份

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

--还原日志备份

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

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

时间: 2024-08-14 11:08:41

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

sql server 2012 如何收缩事务日志

sql2008不再支持 BACKUP LOG 数据库名 WITH NO_LOG   语句 BACKUP Log zxta with no_log 截断事务日志 sql2008 提示错误如下 BACKUP LOG 数据库名 WITH NO_LOG Msg 3032, Level 16, State 2, Line 1此语句不支持一个或多个选项(no_log).请查阅文档以了解所支持的选项. 事务日志截断 若要避免数据库的事务日志被填满,例行备份至关重要.在简单恢复模式下,备份了数据库后会自动截断日

对事务日志备份和差异被备份的理解

先看概念: 差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件.(差异备份过程中,只备份有标记的那些选中的文件和文件夹.它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性) 事务日志备份: 事务日志包含创建最后一个备份(可以是完整备份也可以是差异备份)之后对数据库进行的更改.因此,在进行事务日志备份前,先要进行一次完整的数据库备份才可以.如果你设置了恢复模式为[简单],你将无法使用[事务日志]备份.SQL Server 2000 和 SQL Server

SQL Server :完整备份,差异备份或事务日志备份,尾部日志备份

事故背景: 突然间数据库无缘无故损坏了,差异备份或事务日志备份在3点才会自动去做,那么如何将2点到2点40之间的数据恢复呢?这就需要通过备份尾部日志进行恢复了. 环境描述: 某公司装了一台SQL Server数据库,为了保证数据库能够在出现故障时及时的修复,管理员做了备份操作,比如说完整备份+差异备份或者完整备份+事务日志备份,而且备份的时间是每隔6个小时做一次完整备份,在每天的1点.6点.12点.18点,6个小时之内是每隔1个小时做一次差异备份事务日志备份,并且和计划任务结合在了一起. 假如现

SQL事务日志备份时的问题

1.在进行事务日志备份的时候,如下图: 3041 消息的疑难解答时的考虑事项:不会只是一个数据库或所有数据库出现问题吗?是备份到本地存储区或远程存储吗?哪种类型的备份 (数据库备份. 日志备份和差异备份) 是否出现故障?正在执行备份的应用程序 (SQL Server 代理作业. SQL 维护计划或 VDI/VSS 备份软件供应商提供的备份代理程序) 是什么?用于备份命令的选项是什么?什么是在其下运行 SQL Server 的帐户,此帐户没有所需的访问目标位置写入文件? 参考:http://sup

SQL Server 2012笔记分享-48:备份时间线

备份时间线是SQL server 2012数据库恢复顾问页面中的一项重要新功能,可以让我们更方便的基于备份时间点进行数据库的恢复. 在SQL server 2012的还原数据库界面,可以找到时间线,如图. 点开时间线时候,我们可以选择还原上次所做的备份,当备份时间线的间隔选择周的时候,我们在下方的时间轴上就可以看到一周之内所有可供还原的备份. 备注:因为下图中选择了还原到上次所做的备份,所以只显示了最近一次的完整备份,如图介于7月2和7月3之间. 我们还可以选择特定的日期和时间,在时间线间隔里面

SQL Server 2008如何创建定期自动备份任务(一)

我们知道,利用SQL Server 2008数据库可以实现数据库的定期自动备份.方法是用SQL SERVER 2008自带的维护计划创建一个计划对数据库进行备份,下面我们将SQL SERVER 2008定期自动备份的方法分享给大家. 首先需要启动SQL Server Agent服务,这个服务如果不启动是无法运行新建作业的,点击"开始"–"所有程序"–"Microsoft SQL Server 2008"–"启动SQL Server Ma

数据库开发基础-教案-3-认识数据库备份和事务日志备份

认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点. 数据库备份 数据库备份可以手动备份和语句备份 一.手动备份数据库 1.鼠标右键选择你要进行备份的数据库-任务-备份 可以在常规选项页面你可以选择备份类型是进行完整数据库备份还是差异数据库备份 2.点击添加选项,选择数据库文件的存放路径 注意文件名记得加后缀.bak,便于恢复时的查找 数据库还原 右键数据库-

关于SQL Server 2005 的自动远程数据库备份

原文:(原创)关于SQL Server 2005 的自动远程数据库备份 由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需求的朋友有所帮助.目标服务器:192.168.1.197,备份服务器:192.168.0.194 1.在备份服务器上新建一个文件夹(我的是C:\DbBackupTest),首先要确定对备份服务器要有足够的权限(权限设置如下图所示),最好是“Administrators”组账户.其次 到备份服务器上,

sql server数据同步方案-日志传送

1 功能描述 本方案采用日志传送模式,把核心数据库(主数据库)定期同步到灾备数据库(辅助服务器)及备份库(辅助服务器,便于其他系统使用,减轻主数据压力),期间,如果发生异常导致无法同步,将以电子邮件.短信方式通知管理人员. 2 系统环境 2.1硬件 主数据库: SQLHA 灾备库服务器:DisaterDBSVRA 备份库服务器:BackupDataSVR 2.2软件 主数据库: Win2008 x64 SQL2005 SP4 x64 灾备库: Win2008 x64 SQL2005 SP4 x6