2011-05-08

重建系統資料庫;Rebuilding System Databases

可以修正損毀系統資料庫問題: master、model、msdb。
或是修改預設的伺服器層級定序。

您無法重建指定的系統資料庫。

重建 master、model、msdb 和 tempdb 系統資料庫時,系統會在這些資料庫的原始位置中卸除並重新建立它們。

如果您在重建陳述式中指定了新的定序,系統就會使用該定序設定來建立系統資料庫。

使用者對這些資料庫所做的任何修改都將遺失。

例如,您可能會在 master 資料庫中設有使用者定義的物件、在 msdb 中設有排程的作業,或在 model 資料庫中變更預設資料庫設定。

記錄系統資料庫之所有資料和記錄檔的目前定序。

重建系統資料庫會將所有系統資料庫安裝到其原始位置。

如果您已將系統資料庫的資料或記錄檔移至不同的位置,就必須再次移動這些檔案。
-- 查詢系統資料庫的目前位置
SELECT name N'檔案名稱', type_desc N'檔案類型',physical_name N'目前位置'
FROM sys.master_files
WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));

--P00


若為叢集執行個體,您就必須在使用中節點上執行這項程序。這項程序不會重建 resource 資料庫。

如果 SQL Server 執行個體設定為複寫散發者,請記得備份散發資料庫。

確定您擁有重建系統資料庫的適當權限。若要執行這項作業,您必須是 sysadmin 固定伺服器角色的成員。


完整的規劃流程,請參考:

重建系統資料庫
http://msdn.microsoft.com/zh-tw/library/dd207003.aspx


實作練習:重建系統資料庫

包含以下的工作:
備份系統資料庫
模擬系統損毀
重建系統資料庫
驗證是否已經完成重建作業

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

準備工作:
1. 以預設的執行個體為例。
2. 準備 SQL Server 2008 安裝媒體


工作1:備份系統資料庫

步驟01. 建立「登入帳戶」、「作業」。

步驟02. 備份系統資料庫:master、msdb、model。
-- 備份系統資料庫:master、model、msdb
USE master
GO
BACKUP DATABASE [master] 
TO  DISK = N'C:\myAdmin\Device\master.bak' 
WITH INIT, NAME = N'master-完整 資料庫 備份', COMPRESSION
GO
BACKUP DATABASE [model] 
TO  DISK = N'C:\myAdmin\Device\model.bak' 
WITH INIT, NAME = N'model-完整 資料庫 備份', COMPRESSION
GO
BACKUP DATABASE [msdb] 
TO  DISK = N'C:\myAdmin\Device\msdb.bak' 
WITH INIT,  NAME = N'msdb-完整 資料庫 備份', COMPRESSION
GO


工作2:模擬系統損毀

步驟01. 停止 SQL Server 服務。

步驟02. 使用「檔案總管」,瀏覽以下的資料夾路徑:
C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA

步驟03. 建立新的資料夾:oldData,並將以下的檔案移動到新的資料夾內:
master 資料庫:master.mdf、mastlog.ldf。
model 資料庫:model.mdf、modellog.ldf。
msdb 資料庫:MSDBData.mdf、MSDBLog.ldf。

--P01

步驟04. 重新啟動 SQL Server,但應該是無法啟動。

步驟05. 檢視「事件檢視器」與「SQL Server 錯誤記錄檔」,可以觀察到以下的相關資料:
--(1) SQL Server 錯誤記錄檔
2011-05-07 21:19:09.18 Server      Error: 17113, Severity: 16, State: 1.
2011-05-07 21:19:09.18 Server      Error 2(系統找不到指定的檔案。) occurred while opening file 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf' to obtain configuration information at startup. An invalid startup option might have caused the error. Verify your startup options, and correct or remove them if necessary.

--(2)事件識別碼:17113
事件檢視器_應用程式
在啟動期間,開啟檔案 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\master.mdf' 以取得組態資訊時發生錯誤 2(系統找不到指定的檔案。)。這可能是無效的啟動選項所造成的錯誤。請確認您的啟動選項,並在必要時更正或移除它們。

--(3)事件識別碼:7024
事件檢視器_系統
SQL Server (MSSQLSERVER) 服務因服務特定的錯誤 %%17113 而終止。

--P02


--P03


--P04



工作3:重建系統資料庫

SQL Server 2008 R2 版本,仍須放入 SQL Server 2008 R2 安裝媒體後,才能執行重建系統資料庫之作業。
請參考以下的相關資料:

無法重建系統資料庫,以 SQL Server 2008 R2 版本為例
http://sharedderrick.blogspot.com/2011/05/sql-server-2008-r2.html

步驟01. 放入 SQL Server 2008 R2 安裝媒體到光碟機。

步驟02. 在「命令提示字元」視窗中,切換目錄到SQL Server 2008 R2 安裝媒體的位置。例如是在磁碟D。
在「命令提示字元」視窗中,輸入以下的指令:
D:

步驟02. 在 [命令提示字元] 視窗中,輸入下列命令。
方括號是用來表示選擇性參數。請勿輸入方括號。使用 Windows Vista 作業系統並啟用使用者帳戶控制 (UAC) 時,執行安裝程式需要更高的權限。您必須以管理員的身分執行命令提示字元。

Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName]


例如:
-- 例如:
setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER /SQLSYSADMINACCOUNTS=Administrator /SAPWD=P@ssw0rd

--P05


參數說明如下:
(1) /QUIET 或 /Q
指定安裝程式的執行不使用任何使用者介面。

(2) /ACTION=REBUILDDATABASE
指定安裝程式要重新建立系統資料庫。

(3) /INSTANCENAME=InstanceName
這是 SQL Server 執行個體的名稱。若為預設執行個體,請輸入 MSSQLSERVER。

若為具名執行個體,請使用 server_name\instance_name 格式來輸入名稱。

(4) /SQLSYSADMINACCOUNTS=accounts
指定要加入至 sysadmin 固定伺服器角色的 Windows 群組或個別帳戶。

指定多個帳戶時,請以空格隔開這些帳戶。
例如,您可以輸入 BUILTIN\Administrators MyDomain\MyUser。

當您要指定的帳戶在帳戶名稱中包含空白時,請以雙引號括住該帳戶。例如,輸入 NT AUTHORITY\SYSTEM。

(5) [ /SAPWD=StrongPassword ]
指定 SQL Server sa 帳戶的密碼。如果執行個體使用混合驗證 (SQL Server 和 Windows 驗證) 模式,這就是必要的參數。

sa 帳戶是已知的 SQL Server 帳戶,而且經常是惡意使用者的攻擊目標。請務必針對 sa 登入使用一個增強式密碼。
請勿針對 Windows 驗證模式指定此參數。

(6) [ /SQLCOLLATION=CollationName ]
指定新的伺服器層級定序。這個參數是選擇性的。如果沒有指定,就會使用伺服器的目前定序。

變更伺服器層級定序並不會變更現有使用者資料庫的定序。所有新建立的使用者資料庫預設都會使用新的定序。


步驟03. 等待執行完成後,觀察「命令提示字元」視窗與檔案總管:

--P06


--P07



當安裝程式完成系統資料庫的重建作業時,它就會返回命令提示字元,而且不會顯示任何訊息。


工作4:驗證是否已經完成重建作業

步驟01. 使用檔案總管,開啟安裝記錄檔案: Summary.txt,其預設的路徑是在:
C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Logs。

--P08


步驟02. 重新啟動 SQL Server 服務。
若能正確重新啟動服務,可以表示系統可以正常提供服務。


重建後的工作

重建資料庫之後,您可能必須執行下列額外的工作:
1. 套用最新的 Service Pack 和任何適用的 Hotfix。

2. 還原 master、model 和 msdb 資料庫的最新完整備份。

請參考以下的相關資料:

還原系統資料庫:master、model、msdb
http://sharedderrick.blogspot.com/2011/05/mastermodelmsdb.html

如果您已變更伺服器定序,請勿還原系統資料庫。這樣做會將新的定序取代成先前的定序設定。

如果無法使用備份,或者還原的備份並非最新備份,請重新建立任何遺漏的項目。
例如,請針對您的使用者資料庫、備份裝置、SQL Server 登入、端點等重新建立所有遺漏的項目。

重新建立項目的最佳方式是執行建立這些項目的原始指令碼。

3. 如果 SQL Server 執行個體設定為複寫散發者,您就必須還原散發資料庫。

4. 將系統資料庫移至您先前記錄的位置。

5. 確認伺服器範圍的組態值符合您先前記錄的值。


參考資料:
Cannot rebuild system databases in 2008R2
http://social.msdn.microsoft.com/Forums/en-US/sqlsetupandupgrade/thread/29a7f20b-a2a1-4e72-8eca-17e2037c1ae5

Rebuilding system databases for SQL Server 2008 R2
https://connect.microsoft.com/SQLServer/feedback/details/564905/rebuilding-system-databases-for-sql-server-2008-r2

Rebuilding system databases in 2008 R2
http://sqlblog.com/blogs/tibor_karaszi/archive/2010/06/03/rebuilding-system-databases-in-2008-r2.aspx

Rebuilding System Databases
http://technet.microsoft.com/en-us/library/dd207003.aspx

How to Rebuild System Databases in SQL Server 2008
http://blogs.msdn.com/b/psssql/archive/2008/08/29/how-to-rebuild-system-databases-in-sql-server-2008.aspx

重建系統資料庫
http://msdn.microsoft.com/zh-tw/library/dd207003.aspx

無法重建系統資料庫,以 SQL Server 2008 R2 版本為例
http://sharedderrick.blogspot.com/2011/05/sql-server-2008-r2.html

還原系統資料庫:master、model、msdb
http://sharedderrick.blogspot.com/2011/05/mastermodelmsdb.html

沒有留言:

張貼留言