SQLServer使⽤教程:三种常见的数据库备份类型(下)
数据库恢复类型
在本⽂讨论数据还原过程时,让我介绍三种主要的数据库恢复类型:
1. 数据库完全恢复表明整个数据库恢复到以前的状态,并进⾏恢复。请注意,在还原和恢复操作期间,数据库处于脱机模式。
2. 数据库⽂件恢复建议将⼀个数据⽂件或⼀个⽂件组恢复到原来的状态,并进⾏恢复。在⽂件恢复过程中,所有包含处理过的⽂件的⽂件组都会在恢复的时候切换到脱机模
式。任何使⽤离线⽂件和⽂件组的尝试都会导致错误。
3. 数据页⾯恢复允许在使⽤完全恢复模式或不完全记录模式时恢复单独的数据库。页⾯恢复适⽤于任何数据库,⽆论⽂件组的数量如何。
我们将更详细地探讨每种还原类型。因此,让我们从基本类型开始-⼀个简单的恢复模型和⼀个完整的恢复模型。
上⽂我们讲了;下⾯接着讲解如何恢复数据库⽂件和⽂件组。
恢复数据库⽂件和⽂件组
除此之外,我们可以使⽤以下脚本还原特定的数据库⽂件:
RESTORE DATABASE
[JobEmplDB]
FILE = N'JobEmplDB'  FROM DISK = N'\\Shared\Backup\Full\JobEmplDB_2020_07_19_17_27_01.bak' WITH FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10;  GO
在这⾥,我们还原JobEmplDB⽂件。还原它时,我们可以将WITH NORECOVERY设置为预设⽂件的事务⽇志备份的顺序。
同样,我们可以还原⽂件组并还原部分备份。要通过SSMS执⾏此操作,请右键单击“数据库”,然后选
择“还原⽂件和⽂件组”选项:
图。8.在SSMS中还原⽂件和⽂件组
在“常规”选项卡上,我们选择要还原的⽬标和还原源(部分备份的⽂件以及要还原的元素):
图。9. SSMS中的“常规”选项卡设置
然后,在“选项”选项卡上,我们需要配置必要的设置:
图。10. SSMS中的“选项”选项卡设置
数据库本⾝具有相同的快捷菜单:
图。11. SSMS中数据库的“还原”上下⽂菜单
请注意,仅当数据库处于NORECOVERY或STANDBY模式时,才可以还原事务⽇志备份。这就是为什么此选项在上⾯的屏幕截图中不可⽤。
此外,还可以还原页⾯。例如,下⾯的⽰例演⽰了如何还原具有以下标识符的页⾯:1:57、1:202、1:916和1:1016:
RESTORE DATABASE [JobEmplDB] PAGE='1:57, 1:202, 1:916, 1:1016'
FROM DISK = '\\Shared\Backup\Full\JobEmplDB_Full_backup_2020_07_19_14_04_25.bak'
WITH NORECOVERY;    RESTORE LOG [JobEmplDB] FROM DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_'
WITH NORECOVERY;    RESTORE LOG [JobEmplDB] FROM DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_'
WITH NORECOVERY;    BACKUP LOG [JobEmplDB] TO DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_';
RESTORE LOG [JobEmplDB] FROM DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_' WITH RECOVERY;
GO
如果您想了解更多有关该主题的信息,请阅读有关恢复页⾯的信息。
实施还原过程
既然我们已经考虑了恢复的基础,那么让我们继续执⾏该过程。
必须理解,旨在检查备份的例⾏还原通常是在其他服务器上执⾏的。数据库位置和还原数据库的位置是两个不同的服务器。
因此,⾄关重要的是命名备份⽂件,以便它清楚地定义备份,它属于哪个数据库以及还原的顺序。后者意味着我们需要定义最新的完整备份,最后的差异备份和事务⽇志备份
链。
在当前⽂章探讨了恢复过程及其⾃动化的实施。但是,它没有考虑上⾯阐明的所有要点。特别是,它没有探讨完整的恢复过程。因此,我们将需要改进⽅法。
⾸先,除⾮在之前创建了该模式,否则我们将在相应的数据库中创建srv模式。然后,我们创建[srv]。[RestoreSettings]表以写⼊要还原的数据库:
CREATE TABLE [srv].[RestoreSettings](
[DBName] [nvarchar](255) NOT NULL,
[FullPathRestore] [nvarchar](255) NOT NULL,
[DiffPathRestore] [nvarchar](255) NOT NULL,
[LogPathRestore] [nvarchar](255) NOT NULL,
[InsertUTCDate] [datetime] NOT NULL,
sqlserver备份表语句CONSTRAINT [PK_RestoreSettings_1] PRIMARY KEY CLUSTERED
(
[DBName] ASC  )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON,
FILLFACTOR = 95, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]  ) ON [PRIMARY]
GO    ALTER TABLE [srv].[RestoreSettings]
ADD
CONSTRAINT [DF_RestoreSettings_InsertUTCDate]
DEFAULT (getutcdate()) FOR [InsertUTCDate]  GO
哪⾥:
1. DBName是数据库名称。
2. FullPathRestore是要还原的完整备份的位置的完整路径。
3. DiffPathRestore是要还原的差异备份位置的完整路径。
4. LogPathRestore是事务备份位置的完整路径。
5. InsertUTCDate是UTC格式的条⽬创建的⽇期和时间。
现在,使⽤以下脚本将JobEmplDB数据库添加到创建的[srv]。[BackupSettings]表中:
INSERT INTO [srv].[RestoreSettings]
([DBName]
,[FullPathRestore]
,[DiffPathRestore]            ,
[LogPathRestore])      SELECT
N'JobEmplDB',      '\\Shared\Backup\Full\',
'\\Shared\Backup\Diff\',
'\\Shared\Backup\Log\';  GO
接下来,我们创建[srv]。[RestoreSettingsDetail]表以获取数据库还原的详细设置:
CREATE TABLE [srv].[RestoreSettingsDetail](  [Row_GUID] [uniqueidentifier] NOT NULL,  [DBName] [nvarchar](255) NOT NULL,  [SourcePathRestore] [nvarchar](255) NOT NULL,  [TargetPathRestore] [nvarchar](255) NOT NULL,  [Ext] [nva ALTER TABLE [srv].[RestoreSettingsDetail] ADD  CONSTRAINT [DF_RestoreSettingsDetail_Row_GUID]  DEFAULT (newid()) FOR [Row_GUID]  GO
ALTER TABLE [srv].[RestoreSettingsDetail] ADD  CONSTRAINT [DF_RestoreSettingsDetail_InsertUTCDate]  DEFAULT (getutcdate()) FOR [InsertUTCDate]  GO
在这⾥,让我澄清⼀下:
1. Row_GUID是表中的⾏ID。
2. DBName是数据库名称。
3. SourcePathRestore是源⽂件的全名。
4. TargetPathRestore是⽬标⽂件的全名。
5. Ext是⽂件扩展名。
6. InsertUTCDate是条⽬创建的⽇期和时间,采⽤UTC格式。
请注意,必须在还原过程中为每个数据库⽂件设置SourcePathRestore和TargetPathRestore⽬标的位置。
现在,我们使⽤以下脚本将JobEmplDB数据库⽂件的详细还原数据添加到[srv]。[BackupSettingsDetail]表中:
INSERT INTO [srv].[RestoreSettingsDetail]
([DBName]            ,[SourcePathRestore]
,[TargetPathRestore]            ,[Ext])      SELECT
N'JobEmplDB',    N'JobEmplDB',
N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB2',
N'mdf'    UNION ALL    SELECT    N'JobEmplDB',
N'JobEmplDB_log',    N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\JobEmplDB2_log',
N'ldf';  GO
之后,我们需要为MS SQL Server实例启⽤参数сonfigurations,以执⾏xp_cmdshell存储过程。为此,我们将使⽤以下脚本:
-- To allow advanced options to be changed.    EXECUTE sp_configure 'show advanced options', 1;    GO    -- To update the currently configured value for advanced options.    RECONFIGURE;    GO    -- To enable the feature.    EXECUTE sp_c 这样,[srv]。[RunFullRestoreDB]存储过程已被完全更改,因此它现在可以定义哪些备份以及如何还原。在备份名称格式如下的情况下:
<;数据库名称> _ <;备份类型(完整,差异,⽇志)> _ backup_YYYY_MM_DD_HH_MM_SS。<bak或trn>
[srv]。[RunFullRestoreDB]存储过程的完整调⽤如下:
EXEC [srv].[RunFullRestoreDB]    @OnlyDBName=NULL,    @IsNameAddRestore=1;
在这⾥,@OnlyDBName参数定义了要还原的数据库,⽽IsNameAddRestore参数设置了在已还原数据库的末尾添加_Restore⾏及其⽂件名的必要性。
的定义[SRV] [RunFullRestoreDB]存储过程表明,我们⾸先得到所有从[SRV]相关数据库的必要信息。[RestoreSettings]和[SRV] [RestoreSettingsDetail]表。之后,我们将读取每个数据库的完整,差异和事务⽇志备份的完整路径。对于每个路径,我们读取其中的⽂件,⽽⽆需引⽤⼦⽬录。
最后,我们根据⽂件名格式,数据库所属和备份类型在这些⽂件中定义必要的⽂件。还原脚本是基于检索到的数据⽣成的。
[srv]。[RunFullRestoreDB]存储过程的⼀般原理如下:
1. 查最新的完整备份。
2. 查⽐最新完整备份副本晚创建的最新差异备份。
3. 查在最新差异备份之后创建的事务⽇志备份的顺序。
4. 按照到的严格严格的顺序备份,从最后⼀次完整备份开始,到最后⼀次事务⽇志备份结束,还原数据库。
如果在最新的差异备份创建之后没有创建事务⽇志,则还原过程将以差异备份还原结束。
如果不存在差异备份,则还原过程将从完整备份开始,并以不早于最新完整备份创建的所有事务⽇志备份的顺序进⾏。
如果只有完整备份可⽤,数据库将严格从中还原。如果没有完整备份,则数据库不会包含在还原过程中。
数据库还原仅涉及名称与以下格式匹配的⽂件:
<;数据库名称> _ <;备份类型(完整,差异,⽇志)> _备份_YYYY_MM_DD_HH_MM_SS。<bak或trn>
这些⽂件必须与备份类型和数据库名称匹配。当然,最好为每个数据库创建⼀个单独的⼦⽬录以提⾼⽣产⼒。因此,代替以下路径:
\\ Shared \ Backup \ Full \
\\ Shared \ Backup \ Diff \
\\ Shared \ Backup \ Log \
您最好使⽤:
\\ Shared \ Backup \ Full \ JobEmplDB \
\\ Shared \ Backup \ Diff \ JobEmplDB \
\\ Shared \ Backup \ Log \ JobEmplDB \
综上所述,我们从主要备份类型检查了还原过程的实现:
1. 充分。
2. 微分。
3. 交易记录。
您可以根据特定的时间表通过代理任务或任何第三⽅⽅法和⼯具来调⽤这些存储过程。
还可以在[inf]。[RunAsyncExecute]存储过程的帮助下,通过动态创建代理任务来使恢复并⾏化。此过程定义了四个参数:
1. @sql是要在代理任务中执⾏的T-SQL代码。
2. @jobname是代理程序任务的名称,我们将GUID添加到该名称(可选)。
3. @database是执⾏@sql参数中设置的查询的数据库的名称。
4. @owner建议哪个登录名执⾏代理程序的任务(如果未设置,则将使⽤sa)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。