搜尋本站文章

2011-05-08

還原系統資料庫:master、model、msdb

實作練習:還原系統資料庫

使用環境:
SQL Server 2008 R2 x64 位元版本

準備工作:
1. 確認已經有備份系統資料庫。
2. SQL Server 已經可以正常運作。


工作1:以「單一使用者模式」來啟動 SQL Server

若要還原系統資料庫:master,必須先以「單一使用者模式(single user mode)」來啟動 SQL Server。

步驟01. 停止 SQL Server 服務。
可以在「命令提示字元」視窗,執行以下的命令來停止 SQL Server 預設執行個體之服務。
net stop MSSQLSERVER /Y

-- 若為具名執行個體,例如:I4,可以使用以下的範例:
net stop mssql$I4 /Y

--P01


步驟02. 在「命令提示字元」視窗,執行以下的命令,以「單一使用者模式」來啟動預設執行個體:
net start MSSQLSERVER /m

-- 若為具名執行個體,例如:I4,可以使用以下的範例:
net start mssql$I4 /m

--P02



工作2:還原系統資料庫:master

步驟01. 使用 sqlcmd 公用程式,連線登入到 SQL Server 預設執行個體,請參考以下的範例:
sqlcmd -S localhost 或是 sqlcmd

-- 若為具名執行個體,例如:I4,可以使用以下的範例:
sqlcmd -S localhost\I4

--P03


步驟02. 還原系統資料庫:master,在 sqlcmd 公用程式內,執行以下的命令:
RESTORE DATABASE master FROM DISK ='C:\myAdmin\Device\master.bak'
WITH REPLACE
GO

注意:
執行還原 master 系統資料庫後,SQL Server 服務會自動被關閉(Shutdown)。

--P04


步驟03. 再度重新啟動 SQL Server 服務。
在「命令提示字元」視窗,執行以下的命令,以正常模式來啟動預設執行個體:
net start MSSQLSERVER

-- 若為具名執行個體,例如:I4,可以使用以下的範例:
net start mssql$I4

步驟04. 由上,已經完成系統資料庫:master 的還原作業。


工作3:檢查 SQL Server 錯誤記錄檔

步驟01. 檢視 SQL Server 錯誤記錄檔,可以觀察到以下的錯誤訊息:
資料庫 "msdb" 中的 Service Broker將被停用,
因為資料庫 (37B4DB50-1EC5-4AC1-A9FA-4E842746D5C7) 中的 Service Broker GUID 與 sys.databases (7EF5147A-E8D8-4C0E-A806-1A2C10ABF97C) 中的不相符。

--P05



工作4:還原系統資料庫:msdb

步驟01. 執行 SSMS 管理工具來還原系統資料庫:msdb,或是執行以下的範例程式碼來還原:
RESTORE DATABASE msdb 
FROM DISK ='C:\myAdmin\Device\msdb.bak' 
GO

--P06



工作5:還原系統資料庫:model

步驟01. 執行 SSMS 管理工具來還原系統資料庫:model,或是執行以下的範例程式碼來還原:
RESTORE DATABASE model 
FROM DISK ='C:\myAdmin\Device\model.bak' 
GO

--P07



工作6. 檢查 SQL Server 錯誤記錄檔

步驟01. 關閉 SQL Server 服務,重新啟動 SQL Server 服務。

步驟02. 檢視 SQL Server 錯誤記錄檔,已經看不到以下的錯誤訊息:
資料庫 "msdb" 中的 Service Broker將被停用,
因為資料庫 (37B4DB50-1EC5-4AC1-A9FA-4E842746D5C7) 中的 Service Broker GUID 與 sys.databases (7EF5147A-E8D8-4C0E-A806-1A2C10ABF97C) 中的不相符。

若是在 SQL Server 錯誤記錄檔,有檢視到錯誤:8355,請參考以下的處理方式:
錯誤:8355, 無法傳遞伺服器層級的事件通知。可能是 msdb 中已停用 Service Broker,或是無法啟動 msdsb。在其他資料庫中的事件通知也可能會受到影響。請使 msdb 上線,或啟用 Service Broker。
http://sharedderrick.blogspot.com/2011/05/8355-msdb-service-broker.html



未是沒有使用「單一使用者模式(single user mode)」來啟動 SQL Server 服務,當執行還原系統資料庫:master 作業,將接收到以下的錯誤訊息:
訊息 3108,層級 16,狀態 1,行 1
若要還原 master 資料庫,伺服器必須以單一使用者模式執行。
如需有關啟動單一使用者模式的資訊,請參閱線上叢書中的<如何:啟動 SQL Server 的執行個體 (sqlservr.exe)>(How to: Start an Instance of SQL Server (sqlservr.exe))"。
訊息 3013,層級 16,狀態 1,行 1
RESTORE DATABASE 正在異常結束。

Msg 3108, Level 16, State 1, Line 1
To restore the master database, the server must be running in single-user mode. For information on starting in single-user mode, see "How to: Start an Instance of SQL Server (sqlservr.exe)" in Books Online.
Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

--P08


--P09



若是以「單一使用者模式(single user mode)」來啟動 SQL Server 服務,可以在 SQL Server 錯誤記錄檔內檢視到以下的訊息:
Warning ******************
SQL Server started in single-user mode. This an informational message only. No user action is required.

--P10



參考資料:
還原 master 資料庫的考量
http://msdn.microsoft.com/zh-tw/library/ms175535.aspx

如何:設定伺服器啟動選項 (SQL Server 組態管理員)
http://msdn.microsoft.com/zh-tw/library/ms345416.aspx

以單一使用者模式啟動 SQL Server
http://msdn.microsoft.com/zh-tw/library/ms188236.aspx

如何:還原 master 資料庫 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms190679.aspx

備份和還原系統資料庫的考量
http://msdn.microsoft.com/zh-tw/library/ms190190.aspx