Mssql企業實戰之數據庫恢復

數據庫完整還原的目的是還原整個數據庫。 整個數據庫在還原期間處於脫機狀態。在數據庫的任何部分變爲聯機之前,必須將所有數據恢復到同一點,即數據庫的所有部分都處於同一時間點並且不存在未提交的事務。

在完整恢復模式下,數據庫可以還原到特定時間點。時間點可以是最新的可用備份、特定的日期和時間或者標記的事務。

還原完整數據庫步驟

通常,將數據庫恢復到故障點分爲以下幾個步驟:

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

clip_image002[9]

展開 服務器---數據庫,右擊數據庫,選擇新建數據庫(本例中之前的備份的數據庫名稱是Pine9_2016).

clip_image004[6]

修改數據庫存放路徑和文件夾,推薦磁盤分區盤符和文件夾名稱能跟原來的數據庫一致,減少恢復過程中的麻煩,當然不一致也是可以的。我這裏修改成跟原服務器的路徑一模一樣

記住這裏的數據庫名稱,一定要與之前的數據庫名稱保持一樣,否則,數據庫恢復之後,開發還需要去調整配置,增加複雜度。

clip_image006[6]

點擊按鈕,確認。

clip_image008[6]

至此,已經看到了Pine9_2016,代表數據庫已經新建完成。

完整備份恢復

點擊選中 Pine9_2016,右擊它,定位到任務--還原--數據庫,打開

clip_image010[6]

選擇 常規--還原的源--選上,源設備,點擊 右邊的瀏覽,

clip_image012[6]

點擊 添加 按鈕

clip_image014[6]

定位備份文件的位置,

修改 所選路徑和文件名,本例中備份設備是存放在局域網中的一臺共享服務器上,所以,修改路徑如下圖:

文件名,選擇完整備份的文件。

clip_image016[6]

點擊 確定

clip_image018[6]

點擊 確定

選擇用於還原的備份集,勾選 完整備份的文件備份設備,如下圖:

clip_image020[6]

切換到 左上角 “選項” 選項頁

勾選 覆蓋現有數據庫 和 不對數據庫執行任何操作,不會滾提交的事務。可以還原其他事務日誌(restore with norecovery)

clip_image022[6]

覆蓋現有數據庫

指定還原操作覆蓋當前使用您指定的數據庫名稱的數據庫文件。即使從其他數據庫還原到現有的數據庫名稱,現有數據庫文件也將被覆蓋。選擇此選項等效於在 RESTORE 語句 (Transact-SQL) 中使用 REPLACE 選項,建議謹慎使用,因爲本例是新的數據庫,爲 保證數據庫的一致性,我選擇了此項,記住後續的差異備份恢復不應該選擇此項。

保留複製設置

將已發佈的數據庫還原到創建該數據庫的服務器之外的服務器時,保留複製設置。此選項只適用於在創建備份時對數據庫進行了複製的情況。

僅在選擇“回滾未提交的事務,使數據庫處於可以使用的狀態”選項時,此選項纔可用

還原每個備份之前進行提示

指定了在還原了每個備份之後,將顯示“繼續還原”對話框,詢問你是否繼續還原順序。通常用於備份暫停,更換磁帶或者其他介質。

限制訪問還原的數據庫

使還原的數據庫僅供 db_ownerdbcreatorsysadmin 的成員使用。

選擇此選項等效於在 RESTORE 語句中使用 RESTRICTED_USER 選項

點擊按鈕 “確定”,開始進入數據恢復狀態。

clip_image024[6]

出現上圖中左下角的 “正在執行”,這個時候,我們只需要靜靜等待,直到出現如下提示:

clip_image026[14]

clip_image028[6]

到此,數據庫的完整備份恢復已經完成,是不是代表數據庫就已經恢復完成了,有些新手就以爲完整備份就相當於恢復了所有的數據以及日誌,有經驗的管理員,會發現這是不夠的,完整備份只是代表過去某個時間點的數據,而不是最新的數據,要真正的完全恢 複數據,需要執行完整備份之後的差異備份恢復。

差異備份恢復

點擊 服務器,展開數據庫,右擊Pine9_2016(正在還原),任務--還原--數據庫

clip_image030[6]

定位 “常規” 選項頁,選中 “源設備”,點擊右邊的瀏覽小按鈕,clip_image032[6]

clip_image034[6]

點擊 添加

clip_image036[6]

所選路徑,是你數據庫備份的位置; 文件名是差異備份的備份文件名,這裏定義的差異備份後綴是.diff,也可以自己定義的

記住,這裏的差異備份文件,一定要是最新的一份差異備份文件奧。

點擊 “確定”

clip_image038[6]

點擊 “確定”選擇用於還原的備份集,勾選 備份設備,

clip_image040[6]

左上角,定位到 “選項” 選項頁,選中 “不對數據庫執行任何操作,不會滾未提交的事務。可以還原其他事務日誌(A)。(Restore with norecovery)“

clip_image042[8]

點擊 確定

clip_image044[6]

clip_image026[15]

點擊 ”確定”

前文已經描述過,恢復的步驟,接下來,進行事務日誌備份還原。

事務日誌備份還原

點擊 服務器,展開數據庫,右擊Pine9_2016,任務--還原--事務日誌,

clip_image046[6]

“常規“ 選項頁,選中”從文件或磁帶“,點擊右邊瀏覽圖標,

clip_image048[6]

點擊 添加

clip_image050[7]

所選路徑,是備份文件存在的路徑

文件名,是事務日誌備份的文件名,記住,這裏的備份文件,是上面的差異備份之後的第一個事務日誌開始,逐一進行恢復。

點擊 確定

clip_image052[6]

點擊 確定

clip_image054[6]

選中 左上角,”選項”選項頁

clip_image056[6]

點擊 確定

clip_image058[6]

clip_image026[16]

至此,恢復已經完成。

注意:對於事務日誌,在最新的差異備份之後的所有的事務日誌,都需要進行上述步驟,以保證數據的完整性。

結尾日誌的恢復方法,跟事務日誌的恢復方法一樣。

恢復數據庫

到這裏,只剩下最後一步了,恢復數據庫。

clip_image060[6]

執行如下語句:

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

如果順利,恭喜,數據庫已經恢復完成了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章