彩票走势图

如何使用T-SQL脚本和SSMS还原SQL Server数据库备份

转帖|使用教程|编辑:鲍佳佳|2021-01-18 14:21:35.070|阅读 379 次

概述:在本文讨论数据还原过程时,介绍三种主要的数据库恢复类型:数据库完全恢复,数据库文件恢复建议,数据库界面恢复。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

dbForge Studio for SQL Server为有效的探索、分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种报表以帮助作出合理的决策。

点击下载dbForge Studio for SQL Server最新试用版

数据库恢复类型

在本文讨论数据还原过程时,让我介绍三种主要的数据库恢复类型:

  1. 数据库完全恢复表明整个数据库恢复到以前的状态,并进行恢复。请注意,在还原和恢复操作期间,数据库处于脱机模式。
  2. 数据库文件恢复建议将一个数据文件或一个文件组恢复到原来的状态,并进行恢复。在文件恢复过程中,所有包含处理过的文件的文件组都会在恢复的时候切换到脱机模式。任何使用离线文件和文件组的尝试都会导致错误。
  3. 数据页面恢复允许在使用完全恢复模式或不完全记录模式时恢复单独的数据库。页面恢复适用于任何数据库,无论文件组的数量如何。

我建议我们更详细地探讨每种还原类型。因此,让我们从基本类型开始-一个简单的恢复模型和一个完整的恢复模型

简单恢复模型

您可以使用以下脚本在简单恢复模型下从完全备份执行数据库恢复:

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_13_20_55.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO

因此,我们通过覆盖现有文件和JobEmplDB数据库并将文件传输到D:\ Program Files \ Microsoft SQL Server \ MSSQL15.MSSQLSERVER \ MSSQLSERVER \ DATA,从JobEmplDB_Full_backup_2020_07_19_14_21_57.bak备份中还原JobEmplDB数据库。

使用SSMS还原SQL Server数据库

或者,您可以在SSMS界面中执行相同的还原。为此,右键单击数据库,然后选择“还原数据库”选项:

SSMS中的“还原数据库”选项

图。1.在SSMS中选择数据库还原

接下来,在“常规”选项卡上,选择备份文件的路径以及要将其还原到的目标位置(还有创建新数据库的选项):

SSMS中的“常规还原设置”选项卡

图。2. SSMS中的常规选项卡设置

请注意,“还原计划”部分提供了有关备份文件的详细信息。除其他外,它显示文件中存在的内容和备份类型。

之后,在“文件”选项卡上,指定将还原的数据库文件重新定位到的位置:

SSMS中的“文件”选项卡设置

图。3. SSMS中的“文件”选项卡设置

在“选项”选项卡上,启用“覆盖现有数据库”选项:

SSMS中的“选项”选项卡设置

图。4. SSMS中的“选项”选项卡设置

完全恢复模式

对于完整恢复模型,您将需要执行以下步骤。

首先,从完全备份还原数据库,然后将数据库切换到RESTORE WITH NORECOVERY模式:

在SSMS中的完全恢复模式下从完全备份还原数据库

图。5.在完全恢复模式下从完全备份还原数据库

简单恢复模型下的数据恢复脚本如下所示:

USE[master]  RESTORE DATABASE[JobEmplDB]  FROM DISK = N '\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_13_20_55.bak'  WITH FILE = 1,      MOVE N 'JobEmplDB'  TO N 'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',      MOVE N 'JobEmplDB_log'  TO N 'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',      NORECOVERY,      NOUNLOAD,      REPLACE,      STATS = 5;  GO

其次,还原最后一个差异备份,并将数据库切换到RESTORE WITH NORECOVERY模式:

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_13_20_55.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;    RESTORE DATABASE [JobEmplDB]  FROM DISK = ‘N\\Shared\Backup\Diff\JobEmplDB_Diff_backup_2020_07_19_13_21_29.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO  

仅当差异备份与相应的完整备份文件位于同一文件中时,该可视界面才允许还原差异备份:

SSMS中的差异备份还原

图。6. SSMS中的差异备份还原

在我们的例子中,我们得到以下查询:

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_21_57.bak' WITH FILE = 3,       MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',  	 MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;    RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_21_57.bak' WITH FILE = 5,       NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO

即,JobEmplDB_Full_backup_2020_07_19_14_21_57.bak文件包含有关3的完全备份RD位置(FILE = 3)和差异备份是对5个位置(FILE = 5)。

第三,一个接一个地还原完成最后一个差异备份之后创建的所有事务日志:

RESTORE LOG [JobEmplDB]     FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_54.trn'     WITH NORECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO
RESTORE LOG [JobEmplDB]       FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_56.trn'       WITH RECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO

重要的是,仅当此备份位于包含完整备份的同一文件中时,图形界面才允许我们从事务日志备份中还原数据库:

SSMS中的事务日志备份还原

图。7.事务日志备份还原

在我们的例子中,我们得到以下查询:

USE [master]  RESTORE DATABASE [JobEmplDB]  
FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 3,      
 MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',  
     MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',       NORECOVERY,       NOUNLOAD,       REPLACE,       STATS = 5;    RESTORE LOG [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 4,       NOUNLOAD,  	 STATS = 5;  GO

最后,我们获得以下用于完全还原JobEmplDB的最终脚本:

USE [master]    --Restoring full backup  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO  --restoring the last differential backup for the respective full backup    RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\\Shared\Backup\Diff\JobEmplDB_Diff_backup_2020_07_19_14_04_44.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB_log.ldf',  	 NORECOVERY,  	 NOUNLOAD,  	 REPLACE,  	 STATS = 5;  GO  -- restoring the sequence of transaction log backups after the last differential backup creation  RESTORE LOG [JobEmplDB]     FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_54.trn'     WITH NORECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO    RESTORE LOG [JobEmplDB]       FROM DISK = N'\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_56.trn'       WITH RECOVERY,  	    NOUNLOAD,  	    REPLACE,  	    STATS = 5;  GO

今天的内容就是这些,下篇文章我们将对如何恢复数据库文件和文件组进行详细讲解。

点击下载dbForge Studio for SQL Server,并通过30天免费试用版自行检查此功能!现dbForge Studio SQL Sever直降3000,在线订购正版授权最低只要1710元!


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn

文章转载自:

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP