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

数据库恢复类型

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

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

简单恢复模型

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

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\SharedBackupFullJobEmplDB_Full_backup_2020_07_19_13_20_55.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_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 '\SharedBackupFullJobEmplDB_Full_backup_2020_07_19_13_20_55.bak'  WITH FILE = 1,      MOVE N 'JobEmplDB'  TO N 'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',      MOVE N 'JobEmplDB_log'  TO N 'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_log.ldf',      NORECOVERY,      NOUNLOAD,      REPLACE,      STATS = 5;  GO

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

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\SharedBackupFullJobEmplDB_Full_backup_2020_07_19_13_20_55.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_log.ldf',   NORECOVERY,   NOUNLOAD,   REPLACE,   STATS = 5;    RESTORE DATABASE [JobEmplDB]  FROM DISK = ‘N\SharedBackupDiffJobEmplDB_Diff_backup_2020_07_19_13_21_29.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_log.ldf',   NORECOVERY,   NOUNLOAD,   REPLACE,   STATS = 5;  GO  

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

SSMS中的差异备份还原

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

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

USE [master]  RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\SharedBackupFullJobEmplDB_Full_backup_2020_07_19_14_21_57.bak' WITH FILE = 3,       MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',   MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_log.ldf',   NORECOVERY,   NOUNLOAD,   REPLACE,   STATS = 5;    RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\SharedBackupFullJobEmplDB_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'\SharedBackupLogJobEmplDB_Log_backup_2020_07_19_17_04_54.trn'     WITH NORECOVERY,      NOUNLOAD,      REPLACE,      STATS = 5;  GO
RESTORE LOG [JobEmplDB]       FROM DISK = N'\SharedBackupLogJobEmplDB_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'\SharedBackupFullJobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 3,  MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',      MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_log.ldf',       NORECOVERY,       NOUNLOAD,       REPLACE,       STATS = 5;    RESTORE LOG [JobEmplDB]  FROM DISK = N'\SharedBackupFullJobEmplDB_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'\SharedBackupFullJobEmplDB_Full_backup_2020_07_19_14_04_25.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_log.ldf',   NORECOVERY,   NOUNLOAD,   REPLACE,   STATS = 5;  GO  --restoring the last differential backup for the respective full backup    RESTORE DATABASE [JobEmplDB]  FROM DISK = N'\SharedBackupDiffJobEmplDB_Diff_backup_2020_07_19_14_04_44.bak' WITH FILE = 1,        MOVE N'JobEmplDB' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB.mdf',        MOVE N'JobEmplDB_log' TO N'D:Program FilesMicrosoft SQL ServerMSSQL15.MSSQLSERVERMSSQLDATAJobEmplDB_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'\SharedBackupLogJobEmplDB_Log_backup_2020_07_19_17_04_54.trn'     WITH NORECOVERY,      NOUNLOAD,      REPLACE,      STATS = 5;  GO    RESTORE LOG [JobEmplDB]       FROM DISK = N'\SharedBackupLogJobEmplDB_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元!

850×68.png

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月15日
下一篇 2021年1月15日

相关推荐

发表回复

登录后才能评论