翻譯|使用教程|編輯:鮑佳佳|2021-01-26 14:09:52.270|閱讀 483 次
概述:我們將更詳細(xì)地探討每種還原類(lèi)型。因此,讓我們從基本類(lèi)型開(kāi)始-一個(gè)簡(jiǎn)單的恢復(fù)模型和一個(gè)完整的恢復(fù)模型。上文我們講了簡(jiǎn)單恢復(fù);下面接著講解如何恢復(fù)數(shù)據(jù)庫(kù)文件和文件組。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
dbForge Studio for SQL Server為有效的探索、分析SQL Server數(shù)據(jù)庫(kù)中的大型數(shù)據(jù)集提供全面的解決方案,并設(shè)計(jì)各種報(bào)表以幫助作出合理的決策。
點(diǎn)擊下載dbForge Studio for SQL Server最新試用版
數(shù)據(jù)庫(kù)恢復(fù)類(lèi)型
在本文討論數(shù)據(jù)還原過(guò)程時(shí),讓我介紹三種主要的數(shù)據(jù)庫(kù)恢復(fù)類(lèi)型:
我們將更詳細(xì)地探討每種還原類(lèi)型。因此,讓我們從基本類(lèi)型開(kāi)始-一個(gè)簡(jiǎn)單的恢復(fù)模型和一個(gè)完整的恢復(fù)模型。
上文我們講了簡(jiǎn)單恢復(fù);下面接著講解如何恢復(fù)數(shù)據(jù)庫(kù)文件和文件組。
恢復(fù)數(shù)據(jù)庫(kù)文件和文件組
除此之外,我們可以使用以下腳本還原特定的數(shù)據(jù)庫(kù)文件:
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文件。還原它時(shí),我們可以將WITH NORECOVERY設(shè)置為預(yù)設(shè)文件的事務(wù)日志備份的順序。
同樣,我們可以還原文件組并還原部分備份。要通過(guò)SSMS執(zhí)行此操作,請(qǐng)右鍵單擊“數(shù)據(jù)庫(kù)”,然后選擇“還原文件和文件組”選項(xiàng):
圖。8. 在SSMS中還原文件和文件組
在“常規(guī)”選項(xiàng)卡上,我們選擇要還原的目標(biāo)和還原源(部分備份的文件以及要還原的元素):
圖。9. SSMS中的“常規(guī)”選項(xiàng)卡設(shè)置
然后,在“選項(xiàng)”選項(xiàng)卡上,我們需要配置必要的設(shè)置:
圖。10. SSMS中的“選項(xiàng)”選項(xiàng)卡設(shè)置
數(shù)據(jù)庫(kù)本身具有相同的快捷菜單:
圖。11. SSMS中數(shù)據(jù)庫(kù)的“還原”上下文菜單
請(qǐng)注意,僅當(dāng)數(shù)據(jù)庫(kù)處于NORECOVERY或STANDBY模式時(shí),才可以還原事務(wù)日志備份。這就是為什么此選項(xiàng)在上面的屏幕截圖中不可用。
此外,還可以還原頁(yè)面。例如,下面的示例演示了如何還原具有以下標(biāo)識(shí)符的頁(yè)面: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_04_56.trn' WITH NORECOVERY; RESTORE LOG [JobEmplDB] FROM DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_56.trn' WITH NORECOVERY; BACKUP LOG [JobEmplDB] TO DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_58.trn'; RESTORE LOG [JobEmplDB] FROM DISK = '\\Shared\Backup\Log\JobEmplDB_Log_backup_2020_07_19_17_04_58.trn' WITH RECOVERY; GO
如果您想了解更多有關(guān)該主題的信息,請(qǐng)閱讀有關(guān)恢復(fù)頁(yè)面的信息。
實(shí)施還原過(guò)程
既然我們已經(jīng)考慮了恢復(fù)的基礎(chǔ),那么讓我們繼續(xù)執(zhí)行該過(guò)程。
必須理解,旨在檢查備份的例行還原通常是在其他服務(wù)器上執(zhí)行的。數(shù)據(jù)庫(kù)位置和還原數(shù)據(jù)庫(kù)的位置是兩個(gè)不同的服務(wù)器。
因此,至關(guān)重要的是命名備份文件,以便它清楚地定義備份,它屬于哪個(gè)數(shù)據(jù)庫(kù)以及還原的順序。后者意味著我們需要定義最新的完整備份,最后的差異備份和事務(wù)日志備份鏈。
在當(dāng)前文章探討了恢復(fù)過(guò)程及其自動(dòng)化的實(shí)施。但是,它沒(méi)有考慮上面闡明的所有要點(diǎn)。特別是,它沒(méi)有探討完整的恢復(fù)過(guò)程。因此,我們將需要改進(jìn)方法。
首先,除非在之前創(chuàng)建了該模式,否則我們將在相應(yīng)的數(shù)據(jù)庫(kù)中創(chuàng)建srv模式。然后,我們創(chuàng)建[srv]。[RestoreSettings]表以寫(xiě)入要還原的數(shù)據(jù)庫(kù):
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, 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
哪里:
現(xiàn)在,使用以下腳本將JobEmplDB數(shù)據(jù)庫(kù)添加到創(chuàng)建的[srv]。[BackupSettings]表中:
INSERT INTO [srv].[RestoreSettings] ([DBName] ,[FullPathRestore] ,[DiffPathRestore] , [LogPathRestore]) SELECT N'JobEmplDB', '\\Shared\Backup\Full\', '\\Shared\Backup\Diff\', '\\Shared\Backup\Log\'; GO
接下來(lái),我們創(chuàng)建[srv]。[RestoreSettingsDetail]表以獲取數(shù)據(jù)庫(kù)還原的詳細(xì)設(shè)置:
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] [nvarchar](255) NOT NULL, [InsertUTCDate] [datetime] NOT NULL, CONSTRAINT [PK_RestoreSettingsDetail_1] PRIMARY KEY CLUSTERED ( [Row_GUID] 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].[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
在這里,讓我澄清一下:
請(qǐng)注意,必須在還原過(guò)程中為每個(gè)數(shù)據(jù)庫(kù)文件設(shè)置SourcePathRestore和TargetPathRestore目標(biāo)的位置。
現(xiàn)在,我們使用以下腳本將JobEmplDB數(shù)據(jù)庫(kù)文件的詳細(xì)還原數(shù)據(jù)添加到[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實(shí)例啟用參數(shù)сonfigurations,以執(zhí)行xp_cmdshell存儲(chǔ)過(guò)程。為此,我們將使用以下腳本:
-- 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_configure 'xp_cmdshell', 1; GO -- To update the currently configured value for this feature. RECONFIGURE; GO
這樣,[srv]。[RunFullRestoreDB]存儲(chǔ)過(guò)程已被完全更改,因此它現(xiàn)在可以定義哪些備份以及如何還原。在備份名稱格式如下的情況下:
<數(shù)據(jù)庫(kù)名稱> _ <備份類(lèi)型(完整,差異,日志)> _ backup_YYYY_MM_DD_HH_MM_SS。<bak或trn>
[srv]。[RunFullRestoreDB]存儲(chǔ)過(guò)程的完整調(diào)用如下:
EXEC [srv].[RunFullRestoreDB] @OnlyDBName=NULL, @IsNameAddRestore=1;
在這里,@OnlyDBName參數(shù)定義了要還原的數(shù)據(jù)庫(kù),而IsNameAddRestore參數(shù)設(shè)置了在已還原數(shù)據(jù)庫(kù)的末尾添加_Restore行及其文件名的必要性。
的定義[SRV] [RunFullRestoreDB]存儲(chǔ)過(guò)程表明,我們首先得到所有從[SRV]相關(guān)數(shù)據(jù)庫(kù)的必要信息。[RestoreSettings]和[SRV] [RestoreSettingsDetail]表。
之后,我們將讀取每個(gè)數(shù)據(jù)庫(kù)的完整,差異和事務(wù)日志備份的完整路徑。對(duì)于每個(gè)路徑,我們讀取其中的文件,而無(wú)需引用子目錄。
最后,我們根據(jù)文件名格式,數(shù)據(jù)庫(kù)所屬和備份類(lèi)型在這些文件中定義必要的文件。還原腳本是基于檢索到的數(shù)據(jù)生成的。
[srv]。[RunFullRestoreDB]存儲(chǔ)過(guò)程的一般原理如下:
如果在最新的差異備份創(chuàng)建之后沒(méi)有創(chuàng)建事務(wù)日志,則還原過(guò)程將以差異備份還原結(jié)束。
如果不存在差異備份,則還原過(guò)程將從完整備份開(kāi)始,并以不早于最新完整備份創(chuàng)建的所有事務(wù)日志備份的順序進(jìn)行。
如果只有完整備份可用,數(shù)據(jù)庫(kù)將嚴(yán)格從中還原。如果沒(méi)有完整備份,則數(shù)據(jù)庫(kù)不會(huì)包含在還原過(guò)程中。
數(shù)據(jù)庫(kù)還原僅涉及名稱與以下格式匹配的文件:
<數(shù)據(jù)庫(kù)名稱> _ <備份類(lèi)型(完整,差異,日志)> _備份_YYYY_MM_DD_HH_MM_SS。<bak或trn>
這些文件必須與備份類(lèi)型和數(shù)據(jù)庫(kù)名稱匹配。當(dāng)然,最好為每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)單獨(dú)的子目錄以提高生產(chǎn)力。因此,代替以下路徑:
\\ Shared \ Backup \ Full \
\\ Shared \ Backup \ Diff \
\\ Shared \ Backup \ Log \
您最好使用:
\\ Shared \ Backup \ Full \ JobEmplDB \
\\ Shared \ Backup \ Diff \ JobEmplDB \
\\ Shared \ Backup \ Log \ JobEmplDB \
綜上所述,我們從主要備份類(lèi)型檢查了還原過(guò)程的實(shí)現(xiàn):
您可以根據(jù)特定的時(shí)間表通過(guò)代理任務(wù)或任何第三方方法和工具來(lái)調(diào)用這些存儲(chǔ)過(guò)程。
還可以在[inf]。[RunAsyncExecute]存儲(chǔ)過(guò)程的幫助下,通過(guò)動(dòng)態(tài)創(chuàng)建代理任務(wù)來(lái)使恢復(fù)并行 化。此過(guò)程定義了四個(gè)參數(shù):
為了加快還原過(guò)程,可以利用dbForge Studio for SQL Server,它提供了一個(gè)有用的dbForge Restore Wizard,并允許您使用功能強(qiáng)大的SQL備份工具來(lái)保護(hù)數(shù)據(jù)庫(kù)以防數(shù)據(jù)丟失。
結(jié)論
本文介紹了SQL Server數(shù)據(jù)庫(kù)還原過(guò)程的基本基礎(chǔ),并演示了如何通過(guò)考慮所有主要備份類(lèi)型的SSMS和T-SQL腳本來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)備份的還原。至于本系列的下一篇文章,您將學(xué)習(xí)如何通過(guò)全面的數(shù)據(jù)庫(kù)管理和管理工具dbForge Studio for SQL Server來(lái)執(zhí)行SQL Server數(shù)據(jù)庫(kù)備份和還原的過(guò)程。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自: