標籤:資料恢複 資料回檔 緊急恢複
資料庫緊急恢複文檔
歷程記錄
|
日期
Date |
修訂版本Revision version |
修改描述
change Description |
作者
Author |
|
2008-07-06 |
1.0 |
格式化 |
UltraSQL |
|
2009-06-14 |
1.1 |
修正 |
UltraSQL |
目 錄
一、 在 SQL Server 2000 中重建和恢複 master 資料庫
二、 恢複 msdb 資料庫
三、 恢複資料到即時點
四、 恢複資料到故障點
五、 利用 MARK 標記復原即時修改
一、在 SQL Server 2000 中重建和恢複 master 資料庫
1. 描述:
master 資料庫記錄 SQL Server 系統的所有系統層級資訊。它記錄所有的登入帳戶和系統配置設定。master 資料庫是這樣一個資料庫,它記錄所有其它的資料庫,其中包括資料庫檔案的位置。master 資料庫記錄 SQL Server 的初始化資訊,它始終有一個可用的最新 master 資料庫備份。
因為 master 資料庫損壞而導致 SQL Server 2000 無法啟動的情況下,恢複 master 資料庫。首先,我們我們重建 master 資料庫;然後,我們通過故障前的備份恢複它;最後,恢複其他生產資料庫。
2. 需求:
始終有一個 master 資料庫的當前可用備份。
執行下列操作後,儘快備份 master 資料庫。
o 建立、修改或刪除資料庫
o 更改伺服器或資料庫的配置值
o 修改或添加登入帳戶
不要在 master 中建立使用者物件。否則,必須更頻繁地備份 master 。
3. 步驟:
1) 將 SQL Server 安裝光碟片 \x86\data 目錄下的所有檔案,拷貝到硬碟上的一個指定目錄,如 C:\masterrecover 。此時檔案為唯讀,我們需要修改為可讀寫入模式,讓重建 master 工具可以操作。全選所有的檔案,右鍵屬性,去掉“唯讀”勾選項。
2) 開始重建 master 資料庫,並恢複早期的備份。進入系統目錄 Microsoft SQL Server\80\Tools\Binn ,運行 rebuild.exe 。
650) this.width=650;" title="clip_image002" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image002" src="http://s3.51cto.com/wyfs02/M00/57/28/wKioL1STiRbi98PlAABELeWCZCM919.jpg" border="0" height="44" />
3) 彈出重建 master 資料庫工具介面,輸入伺服器名和你拷貝檔案的制定目錄 C:\masterrecover ,點擊“Rebuild”。
650) this.width=650;" title="clip_image004" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image004" src="http://s3.51cto.com/wyfs02/M02/57/2B/wKiom1STiHfhlbWGAAFE7daSJW4047.jpg" border="0" height="372" />
4) 將提示複製發生和伺服器配置,最後提示如下:
650) this.width=650;" title="clip_image006" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image006" src="http://s3.51cto.com/wyfs02/M01/57/2B/wKiom1STiHuj8i-7AAAziSjeBcc047.jpg" border="0" height="99" />
5) 接下來重新啟動 MSSQLSERVER 。右鍵系統托盤中的 SQL Server 表徵圖,選擇“MSSQLServer – Start”。啟動企業管理器,瀏覽資料庫。發現生產資料庫不見了。所有系統資料庫都經由我們拷貝的制定目錄被直接複製產生。master 資料庫只包含新裝時的資訊。msdb 資料庫也被重建,涉及的備份裝置,備份序列以及作業都丟失了。接下來通過 master 和 msdb 的備份找回生產資料庫和備份裝置。
650) this.width=650;" title="clip_image008" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image008" src="http://s3.51cto.com/wyfs02/M00/57/28/wKioL1STiSDxklsbAABMb_OidE8179.jpg" border="0" height="143" />
6) 退出企業管理器和查詢分析器,以如下單一使用者模式啟動 SQL Server 。sqlservr.exe 位於 MSSQL\binn 目錄。以 –c 和 –m 參數啟動資料庫。最小化 DOS 視窗,但不關閉。
650) this.width=650;" title="clip_image010" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image010" src="http://s3.51cto.com/wyfs02/M01/57/28/wKioL1STiSCxNkTIAABDCo17vg4989.jpg" border="0" height="34" />
o -c 縮短啟動時間
o -m 以單一使用者模式啟動資料庫。必須以單一使用者模式去恢複 master 資料庫。
7) 開啟企業管理器,右擊 master 資料庫,選擇“All Tasks”和“Restore Database”。
650) this.width=650;" title="clip_image012" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image012" src="http://s3.51cto.com/wyfs02/M02/57/28/wKioL1STiSHSiXo6AADSDUROTa0696.jpg" border="0" height="200" />
8) 彈出資料庫恢複介面,點擊“From Device”按鈕,選擇“Select Devices…”按鈕。
650) this.width=650;" title="clip_image014" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image014" src="http://s3.51cto.com/wyfs02/M00/57/28/wKioL1STiSKibelIAAFIMZDvj48972.jpg" border="0" height="456" />
9) 彈出選擇恢複裝置介面,選擇從磁碟恢複,點擊“Add”。650) this.width=650;" title="clip_image016" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image016" src="http://s3.51cto.com/wyfs02/M00/57/2B/wKiom1STiICS8zikAAEZWxbLKlc435.jpg" border="0" height="390" />
10) 彈出選擇恢複目標介面,由於 msdb 資料庫沒有恢複,而不能識別任何備份裝置。點擊“File name:”,並尋找 master 資料庫的備份檔案。
650) this.width=650;" title="clip_image018" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image018" src="http://s3.51cto.com/wyfs02/M01/57/2B/wKiom1STiICDTmzBAACscZ-O9is406.jpg" border="0" height="249" />
11) 找到 master 資料庫早期建立的備份檔案,點“OK”按鈕。
650) this.width=650;" title="clip_image020" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image020" src="http://s3.51cto.com/wyfs02/M02/57/2B/wKiom1STiIKR_gSVAAEnbG7UYQM458.jpg" border="0" height="405" />
12) 返回到選擇恢複目標介面,點“OK”按鈕。
650) this.width=650;" title="clip_image022" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image022" src="http://s3.51cto.com/wyfs02/M00/57/2B/wKiom1STiIOjzxIfAACpxLW-xQ8495.jpg" border="0" height="250" />
13) 返回到選擇恢複裝置介面,點“OK”按鈕。
650) this.width=650;" title="clip_image024" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image024" src="http://s3.51cto.com/wyfs02/M01/57/28/wKioL1STiSfgsODuAAETYZFSTYg669.jpg" border="0" height="392" />
14) 返回到恢複資料庫介面,選擇“Options”頁。
650) this.width=650;" title="clip_image026" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image026" src="http://s3.51cto.com/wyfs02/M02/57/28/wKioL1STiSqSG22lAAFjcpWBQFs186.jpg" border="0" height="456" />
15) 檢查要恢複的資料和記錄檔路徑,存在的檔案將會被覆蓋。點“OK”按鈕。
650) this.width=650;" title="clip_image028" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image028" src="http://s3.51cto.com/wyfs02/M02/57/28/wKioL1STiSvSOajQAAHDr9mdx6c991.jpg" border="0" height="456" />
16) 將會看到恢複進程介面。直到恢複完成,將彈出如下資訊,該資訊並不是錯誤資訊。master 資料庫已成功恢複,不再被用單一使用者模式串連。你也將收到一條資訊顯示你在企業管理器中的串連已經被終止。只有完全關閉企業管理器才能避免討厭的錯誤資訊。
650) this.width=650;" title="clip_image030" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image030" src="http://s3.51cto.com/wyfs02/M02/57/2B/wKiom1STiIuzjKb9AAB49mxXtSI069.jpg" border="0" height="120" />
17) 通過按右鍵系統托盤 MSSQLServer 按鈕,選擇“MSSQLSERVER - Start”。
18) 開啟企業管理器,瀏覽資料庫,生產資料庫出現了。
650) this.width=650;" title="clip_image032" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" alt="clip_image032" src="http://s3.51cto.com/wyfs02/M00/57/28/wKioL1STiS-AHrewAABJEKOIDWI081.jpg" border="0" height="134" />
19) 下一步恢複 msdb 資料庫,見下文。恢複 msdb 資料庫和恢複 master 資料庫類似,但是不需要以單一使用者模式登陸。再恢複完 msdb 資料庫後,下一步恢複其他資料庫變得容易,因為備份裝置都已恢複出來。
二、恢複 msdb 資料庫
1. 描述:
msdb 資料庫供 SQL Server Agent程式調度警報和作業以及記錄操作員時使用。
msdb 資料庫儲存所有的備份資訊和作業資訊。
2. 需求:
始終有一個 msdb 資料庫的當前可用備份。
在恢複過程中,務必使 SQL Server Agent 關閉。
3. 步驟:
1) 在恢複前停止 SQL Server Agent 。恢複資料庫必需有獨家存取權限,而對於 msdb 資料庫,SQL Server Agent 破壞了這種獨家存取權限。
2) 先得到 RESTORE DATABASE 的檔案號,串連到 master 資料庫,通過 RESTORE HEADERONLY,找到我們需要去恢複的備份檔案。
RESTORE HEADERONLY FROM msdbbackupdev;
3) 在查詢分析器中串連到 master 資料庫,執行恢複。
RESTORE DATABASE msdbFROM msdbbackupdevWITH FILE = 1;
三、恢複資料到即時點
1. 描述:
通過交易記錄將資料庫恢複到某個即時時間點。
2. 需求:
資料庫選擇完整恢複模型。
始終有可用的備份可恢複到即時點。
3. 步驟:
1) 通過 RESTORE HEADERONLY 查看生產資料庫的備份情況,有時可能通過多種組合方式恢複到即時點,我們選擇最快的:完整備份+記錄備份的方式。
RESTORE HEADERONLY FROM prodbackupdev;
2) 通過 STOPAT 參數恢複資料到即時點。
--恢複完整備份RESTORE DATABASE ProdDBFROM prodbackupdevWITH FILE = 14, NORECOVERY;GO--恢複記錄備份RESTORE LOG ProdDBFROM prodbackupdevWITH FILE = 15, NORECOVERY;GO--恢複到即時點RESTORE LOG ProdDBFROM prodbackupdevWITH FILE = 16, RECOVERY, STOPAT = ‘2006-06-06 06:06:06‘;GO
四、恢複到故障點
1. 描述:
要想完成故障點的恢複,必須完成尾記錄備份。尾記錄備份所備份的記錄檔中,包含了最後一個成功的記錄備份到當前故障點的所有事務。如果不能完成尾記錄備份,則只能將資料庫恢複到最後一次建立交易記錄備份的時間點。自上一次交易記錄備份後的對資料庫所做的更改將丟失,必須手工重做。
尾記錄備份將捕獲所有尚未備份的交易記錄記錄。如果資料庫損壞或離線,則可以嘗試進行尾記錄備份。僅當記錄檔未損壞且資料庫不包含任何大容量日誌更改時,尾記錄備份才會成功。如果資料庫包含要備份的、在記錄間隔期間執行的大容量日誌更改,則僅在所有資料檔案都存在且未損壞的情況下,尾記錄備份才會成功。
2. 需求:
資料庫選擇完整恢複模型。
始終有可用的備份在尾記錄備份失敗時,可恢複到最後一次建立交易記錄備份的時間點。
3. 步驟:
1) 首先,做尾記錄備份。在生產資料庫損壞時,用 NO_TRUNCATE 從句備份交易記錄。
--尾記錄備份BACKUP LOG ProdDBTO prodbackupdevWITH NAME = ‘Tail-Log Backup‘, NO_TRUNCATE;GO
2) 查看備份情況。
RESTORE HEADERONLY FROM prodbackupdev;
3) 恢複到故障點。
--恢複完整備份RESTORE DATABASE ProdDBFROM prodbackupdevWITH FILE = 14, NORECOVERY;GO--恢複記錄備份RESTORE LOG ProdDBFROM prodbackupdevWITH FILE = 15, NORECOVERY;GO--恢複尾記錄備份到故障點RESTORE LOG ProdDBFROM prodbackupdevWITH FILE = 16, RECOVERY;GO
五、利用 MARK 標記復原即時修改
1. 描述:
通過 STOPATMARK 和 STOPBEFOREMARK 從句恢複到即時點。允許恢複資料庫到個人的事務或者給定事務之前。可能很少會用到生產環境,一般會用到測試或者開發環境,但對於一些重大修改和操作時也用到。這些 RESTORE 從句可以方便的恢複到一個沒有達到預期效果的事務之前的時間點。
STANDBY指定一個允許撤消復原的待命資料庫檔案。STANDBY 選項可以用於離線還原(包括部分還原),但不能用於線上還原。嘗試為線上還原操作指定 STANDBY 選項將會導致還原作業失敗。如果必須升級資料庫,也不允許使用 STANDBY 選項。
待命資料庫檔案用於為 RESTORE WITH STANDBY 的撤消過程中修改的頁面保留一個“寫入時副本”預映像。待命資料庫檔案允許使用者在交易記錄還原期間以唯讀方式訪問資料庫,並允許資料庫用於待命伺服器情形,或用於需要在日誌還原作業之間檢查資料庫的特殊恢複情形。執行完 RESTORE WITH STANDBY 操作之後,下一個 RESTORE 操作會自動刪除恢復檔案。如果在下一個 RESTORE 操作之前手動刪除了這個待命資料庫檔案,則必須重新還原整個資料庫。當資料庫處於 STANDBY 狀態時,您應將這個待命資料庫檔案視為和任何其他資料庫檔案同樣重要。該檔案與其他資料庫檔案不同,資料庫引擎僅在活動還原作業過程中持續開啟該檔案。
2. 需求:
資料庫選擇完整恢複模型。
事務中使用 MARK 標記。
始終有可用的備份能恢複到即時點。
3. 步驟:
1) 假設測試資料庫已做過完整備份和交易記錄備份。
--完整備份BACKUP DATABASE TestDBTO testbackupdevWITH NAME = ‘Full Backup‘;--記錄備份BACKUP LOG TestDBTO testbackupdevWITH NAME = ‘Transaction Log Backup 1‘;
2) 通過設定 MARK 標記做事務操作。對於標記事務,必須明確的以 COMMIT 和 ROLLBACK 結束。
INSERT shippers(CompanyName, Phone)VALUES (‘Company1‘, ‘(027)11111111‘);GOINSERT shippers(CompanyName, Phone)VALUES (‘Company2‘, ‘(027)22222222‘);GOBEGIN TRANSACTION TIMETOMARKWITH MARK ‘SETMARKER‘GOINSERT shippers(CompanyName, Phone)VALUES (‘Company3‘, ‘(027)33333333‘);GOINSERT shippers(CompanyName, Phone)VALUES (‘Company4‘, ‘(027)44444444‘);GOCOMMIT TRANSACTION TIMETOMARKGOINSERT shippers(CompanyName, Phone)VALUES (‘Company5‘, ‘(027)55555555‘);GO
3) 如果事務操作沒有達到預期效果,此時立即做交易記錄備份,以備能恢複到標記之前或之後。
--記錄備份BACKUP LOG TestDBTO testbackupdevWITH NAME = ‘Transaction Log Backup 2‘;
4) 通過查詢分析器串連到 TestDB,用EXEC sp_helpfile 決定刪除哪個檔案,刪除掉資料檔案和交易記錄檔。
EXEC sp_helpfile;
5) 關閉資料庫。
SHUTDOWN WITH NOWAIT;
6) 刪除第4步找到的檔案。
7) 右擊系統托盤中SQL Server的表徵圖,選擇“SQL Server - Start”。
8) 通過備份裝置找到我們需要的檔案號。
RESTORE HEADERONLY FROM testbackupdev;
9) 首先做前兩個恢複,然後通過 STOPBEFOREMARK 標記恢複,用 STANDBY 語句讓資料庫處於唯讀模式,但仍然能夠實施進一步交易記錄恢複。
RESTORE DATABASE TestDBFROM testbackupdevWITH FILE = 1, NORECOVERY;GORESTORE LOG TestDBFROM testbackupdevWITH FILE = 2, NORECOVERY;GORESTORE LOG TestDBFROM testbackupdevWITH FILE = 3,STANDBY = ‘D:\testrestore‘,STOPBEFOREMARK = ‘TIMETOMARK‘;
10) 當通過 STOPBEFOREMARK 將恢複資料到 TIMETOMARK 事務之前,假設我們需要恢複到這個事務之後,讓資料庫在恢複之後可操作。
RESTORE LOG TestDBFROM testbackupdevWITH FILE = 3,RECOVERY,STOPATMARK = ‘TIMETOMARK‘;
11) STOPATMARK 恢複了在 STOPATMARK 事務期間提交的所有行,但該事務之後的所有更改將不會恢複。
本文出自 “SQL Server Deep Dives” 部落格,請務必保留此出處http://ultrasql.blog.51cto.com/9591438/1591629
資料庫緊急恢複文檔