数据库完整还原的目的是还原整个数据库。 整个数据库在还原期间处于脱机状态。在数据库的任何部分变为联机之前,必须将所有数据恢复到同一点,即数据库的所有部分都处于同一时间点并且不存在未提交的事务。
在完整恢复模式下,数据库可以还原到特定时间点。时间点可以是最新的可用备份、特定的日期和时间或者标记的事务。
还原完整数据库步骤
通常,将数据库恢复到故障点分为以下几个步骤:
1. 备份活动事务日志(称为尾部日志)。此操作将创建结尾日志备份。如果活动日志不可用,则该日志部分的所有事务将全部丢失。
注:在完整恢复模式和大容量日志恢复模式下,如果要恢复数据到故障点,必须备份活动事务日志。
2. 还原最新完整数据库备份而不恢复数据库。(with norecovery)
3. 如果存在差异备份,还原最新的差异备份数据而不恢复数据库。(with norecovery)
4. 从还原备份后创建的第一个事务日志备份开始,使用norecovery依次还原日志。
5. 恢复数据库(RESTORE DATABASE database_name WITH RECOVERY)。此步骤也可以与还原上一次日志备份结合使用。
6. 数据库完整还原通常可以恢复到日志备份中的某一时间点或标记的事务。但是,在大容量日志恢复模式下,如果日志备份包含大容量更改,则不能进行时点恢复。
本文以下的所有操作,都是建立在之前存在备份的情况下进行。
数据库完整备份恢复之SQL Server Management Studio
备份日志尾部
在完整恢复模式或大容量日志恢复模式下,使用日志结尾以捕获尚未备份的活动事务日志,可以防止工作丢失并确保日志链的完整性,同时也可以把数据恢复到故障点时的数据。
结尾日志备份与任何其他日志备份类似,使用 BACKUP LOG 语句执行。建议您在下列情况下执行结尾日志备份
如果数据库处于联机状态并且您计划对数据库执行还原操作,则请在开始还原操作之前,使用 WITH NORECOVERY 备份日志尾部
BACKUP LOG 数据库名称 TO <备份设备> WITH NORECOVERY
注:为防止出错,必须使用 NORECOVERY 选项。
注:每当您准备对数据库继续执行还原操作时,请使用 NORECOVERY。NORECOVERY 使数据库进入还原状态。这确保了数据库在结尾日志备份后不会更改。
除非同时指定 NO_TRUNCATE 或 COPY_ONLY 选项,否则将截断日志。
除非数据库受损,否则不建议使用 NO_TRUNCATE
2)如果数据库处于脱机状态并且无法启动。
尝试执行结尾日志备份。由于此时不会发生任何事务,因此 WITH NORECOVERY 是可选的。如果数据库受损,请使用 WITH CONTINUE_AFTER_ERROR,如下所示:
BACKUP LOG 数据库名称 TO < 备份设备> WITH CONTINUE_AFTER_ERROR
如果数据库受损(例如,数据库无法启动),则仅当日志文件未受损、数据库处于支持结尾日志备份的状态并且不包含任何大容量日志更改时,结尾日志备份才能成功。
关于结尾日志备份,请参考:https://technet.microsoft.com/zh-cn/library/ms179314(v=sql.105).aspx
新建目标数据库
开始--所有程序--Microsoft SQL Server 2008 R2--SQL Server Management Studio ,打开登陆mssql
展开 服务器---数据库,右击数据库,选择新建数据库(本例中之前的备份的数据库名称是Pine9_2016).
修改数据库存放路径和文件夹,推荐磁盘分区盘符和文件夹名称能跟原来的数据库一致,减少恢复过程中的麻烦,当然不一致也是可以的。我这里修改成跟原服务器的路径一模一样
记住这里的数据库名称,一定要与之前的数据库名称保持一样,否则,数据库恢复之后,开发还需要去调整配置,增加复杂度。
点击按钮,确认。
至此,已经看到了Pine9_2016,代表数据库已经新建完成。
完整备份恢复
点击选中 Pine9_2016,右击它,定位到任务--还原--数据库,打开
选择 常规--还原的源--选上,源设备,点击 右边的浏览,
点击 添加 按钮
定位备份文件的位置,
修改 所选路径和文件名,本例中备份设备是存放在局域网中的一台共享服务器上,所以,修改路径如下图:
文件名,选择完整备份的文件。
点击 确定
点击 确定
选择用于还原的备份集,勾选 完整备份的文件备份设备,如下图:
切换到 左上角 “选项” 选项页
勾选 覆盖现有数据库 和 不对数据库执行任何操作,不会滚提交的事务。可以还原其他事务日志(restore with norecovery)
覆盖现有数据库
指定还原操作覆盖当前使用您指定的数据库名称的数据库文件。即使从其他数据库还原到现有的数据库名称,现有数据库文件也将被覆盖。选择此选项等效于在 RESTORE 语句 (Transact-SQL) 中使用 REPLACE 选项,建议谨慎使用,因为本例是新的数据库,为 保证数据库的一致性,我选择了此项,记住后续的差异备份恢复不应该选择此项。
保留复制设置
将已发布的数据库还原到创建该数据库的服务器之外的服务器时,保留复制设置。此选项只适用于在创建备份时对数据库进行了复制的情况。
仅在选择“回滚未提交的事务,使数据库处于可以使用的状态”选项时,此选项才可用
还原每个备份之前进行提示
指定了在还原了每个备份之后,将显示“继续还原”对话框,询问你是否继续还原顺序。通常用于备份暂停,更换磁带或者其他介质。
限制访问还原的数据库
使还原的数据库仅供 db_owner、dbcreator 或 sysadmin 的成员使用。
选择此选项等效于在 RESTORE 语句中使用 RESTRICTED_USER 选项
点击按钮 “确定”,开始进入数据恢复状态。
出现上图中左下角的 “正在执行”,这个时候,我们只需要静静等待,直到出现如下提示:
到此,数据库的完整备份恢复已经完成,是不是代表数据库就已经恢复完成了,有些新手就以为完整备份就相当于恢复了所有的数据以及日志,有经验的管理员,会发现这是不够的,完整备份只是代表过去某个时间点的数据,而不是最新的数据,要真正的完全恢 复数据,需要执行完整备份之后的差异备份恢复。
差异备份恢复
点击 服务器,展开数据库,右击Pine9_2016(正在还原),任务--还原--数据库
定位 “常规” 选项页,选中 “源设备”,点击右边的浏览小按钮,
点击 添加
所选路径,是你数据库备份的位置; 文件名是差异备份的备份文件名,这里定义的差异备份后缀是.diff,也可以自己定义的
记住,这里的差异备份文件,一定要是最新的一份差异备份文件奥。
点击 “确定”
点击 “确定”选择用于还原的备份集,勾选 备份设备,
左上角,定位到 “选项” 选项页,选中 “不对数据库执行任何操作,不会滚未提交的事务。可以还原其他事务日志(A)。(Restore with norecovery)“
点击 确定
点击 ”确定”
前文已经描述过,恢复的步骤,接下来,进行事务日志备份还原。
事务日志备份还原
点击 服务器,展开数据库,右击Pine9_2016,任务--还原--事务日志,
“常规“ 选项页,选中”从文件或磁带“,点击右边浏览图标,
点击 添加
所选路径,是备份文件存在的路径
文件名,是事务日志备份的文件名,记住,这里的备份文件,是上面的差异备份之后的第一个事务日志开始,逐一进行恢复。
点击 确定
点击 确定
选中 左上角,”选项”选项页
点击 确定
至此,恢复已经完成。
注意:对于事务日志,在最新的差异备份之后的所有的事务日志,都需要进行上述步骤,以保证数据的完整性。
结尾日志的恢复方法,跟事务日志的恢复方法一样。
恢复数据库
到这里,只剩下最后一步了,恢复数据库。
执行如下语句:
use master
RESTORE DATABASE Pine9_2016 WITH RECOVERY;
Go
注意:Pine9_2016 是数据库名,根据你自己的实际环境,修改成你自己的实际环境下的数据库名。
到此,数据库的恢复,已经完整,可以接入系统,正常访问数据库了
数据库完整备份恢复之T-SQL
首先要新建数据库,在这里我不再说明,
还原的基本步骤
1) RESTORE DATABASE database FROM full database backup WITH NORECOVERY;
2) RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;
3) RESTORE LOG database FROM log_backup WITH NORECOVERY;
对于其他每个日志备份,重复此还原日志步骤。(包含结尾日志也是一样)
4) RESTORE DATABASE database WITH RECOVERY;
在这里我直接把数据库的SQL语句贴出来,大家修改成自己实际需要的,再粘贴到查询管理器里面直接执行即可。
完整备份恢复
RESTORE DATABASE [Pine9_2016] FROM DISK = N'\\192.168.10.78\mssql_backup\Pine9_2016_backup_2016_08_06_023000_9215269.bak' WITH FILE = 1, NORECOVERY, NOUNLOAD, REPLACE, STATS = 10
GO
差异备份恢复
RESTORE DATABASE [Pine9_2016] FROM DISK = N'\\192.168.10.78\mssql_backup\Pine9_2016_backup_2016_08_07_023001_2750767.diff' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
事务日志备份恢复
RESTORE LOG [Pine9_2016] FROM DISK = N'\\192.168.10.78\mssql_backup\Pine9_2016_backup_2016_08_06_030000_6901599.trn' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10
GO
所有的事务日志,重复以上步骤。包括结尾日志也是一样
恢复数据库
use master
RESTORE DATABASE Pine9_2016 WITH RECOVERY;
Go
如果顺利,恭喜,数据库已经恢复完成了。