說到這個問題,基本上有人就會想到三個問題:
1,什麼是系統資料?
2,為什麼要移動系統資料庫?
3,移動系統資料庫我們可以用附加和分離,為什麼還要單獨拿出來說呢?
對於這三個問題我一個一個講吧,也算是自己做個筆記。
1,什麼是系統資料?
所謂系統資料庫就是我們在裝SQL Server之後,系統內建的資料庫(這樣的回答是不是很白癡^_^).
如果你裝SQL Server2005或2008在開啟一個SQL執行個體後,就會看到一個資料庫--->系統資料庫檔案夾,裡邊就是系統內建的資料庫,
對於每一個系統資料庫,這裡我先用簡單的語言說一下:
1),master:
這個資料庫是全域資料庫,它包含一些系統資料表,許可權分配,使用者帳號設定,當前資料庫配置資訊以及關於磁碟空間,檔案分配等資訊。所以在執行諸如使用者帳號設定,許可權分配和改變系統配置資訊後都要備份此資料。所以在這裡強烈建議,不僅要經常備份自己的資料庫,還有備份此資料庫,雖然不像備份自己資料庫那樣那麼頻繁。至少半個月或一個月備份一次此資料庫。
在這裡還有專門的一個資料庫大牛討論過是否應該備份此資料庫:SQL SERVER – Backup master Database Interval – master Database Best Practices
2),model:
這個資料庫只是一個模板資料庫,我們在建立任意的一個資料庫的時候,都是複製此資料庫為新資料庫的基礎,如果希望每一個新的資料庫都含有某些對象或者許可權,可以把這個對象或許可權放在此資料庫中,新建立的新資料庫都會繼承此資料的新對象或許可權,並且擁有這些對象或許可權。
3),msdb:
作者原話:SQL ServerProxy 伺服器會使用該資料庫,它會執行一些列如備份和複製任務的計劃好的活動。Service Borker也會用到該資料庫,他為SQL Sever提供隊列和可靠訊息傳遞。當我們不在該資料庫執行備份或維護任務時,通常可以忽略該資料庫。在SQL Server2005之前,實際上是可以刪除該資料庫的,只後SQL Server仍然可用,但不能在維護任何備份曆史了,並且不能夠在定義任務,警告,工作或者建立複製,不過因為預設的msdb資料庫非常小,建議即使用不到也不要刪除它。
4),tempdb:
該資料庫說白了,就是一個中轉站或資料寄存站,使用者顯示建立的暫存資料表,在查詢處理和排序時內部所產生的中間結果的工作表,維護用的快照等,都會用到此資料庫,與其他資料庫所不同的是,在每次SQL Server執行個體重啟之後,都會重建而不是恢複. 所以我們在其中建立的所有對象和許可權在下次重啟SQL Server時都會全部丟失。
但是我們也不能忽略此資料庫,因為tempdb的大小和配置,對最佳化SQL Server的功能和效能來說很重要。
對tempdb資料庫,還要多說幾句,雖然在tempdb每次被重建時,它會從model資料庫繼承大多數的資料庫選項,但是tempdb卻不會從modeldb資料庫中複製其復原模式,因為它總是使用簡單復原模式。另外,tempdb是無法刪除的,也不用備份。
2,為什麼要移動系統資料庫?
我們在安裝SQL Server後預設的這些系統資料庫都會放在C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA此檔案夾下,一般的都不很大,為什麼我們還有移動他們呢?
在沒有實踐管理伺服器之前,我也沒有這個想法,但是我發現我的伺服器C盤一直都在增加,或者萬一重裝系統,我設定的資料庫選項,以及使用者賬戶設定都要重新設定,所以就有了這個想法。
還有一點就是作為重新布置計劃或安排好的維護操作的一部分,我們也許需要移動系統資料庫。
3,用附加和分離就可以,為什麼還要單獨說呢?
回答這個問題之前,我們在看一張圖
注意到了嗎,在我選中master系統資料庫右擊,選中任務後,並沒有出現“分離”這個選項。那就說明移動這些系統資料庫是和使用者自訂的資料庫是不同的。
移動tempdb,model和msdb的步驟和移動master資料庫步驟稍微有點不同。
1),移動tempdb,model和msdb資料庫
i),移動一個沒有損壞的系統資料庫
首先讓我們用查詢命令看一下SQL Server預設儲存這些系統資料庫的路徑;查詢命令:
SELECT name,physical_name AS CurrentLocation,state_desc
FROM sys.master_files
F5執行,顯示
之後開始我們的移動之旅吧!
a),對資料庫中每個要移動的檔案使用帶有MODIFY FILE選項的ALTER DATABASE命令來指定新的檔案夾選項。如:
--Move tempdbALTER DATABASE tempdb MODIFY FILE(NAME='tempdev',FILENAME='D:\Database\tempdb.mdf');ALTER DATABASE tempdb MODIFY FILE(NAME = 'templog',FILENAME='D:\Database\templog.ldf');--Move modelALTER DATABASE model MODIFY FILE(NAME='modeldev',FILENAME='D:\Database\model.mdf');ALTER DATABASE model MODIFY FILE(NAME='modellog',FILENAME='D:\Database\modellog.ldf');--Move msdbALTER DATABASE msdb MODIFY FILE(NAME='MSDBData',FILENAME='D:\Database\msdbdata.mdf');ALTER DATABASE msdb MODIFY FILE(NAME='MSDBLog',FILENAME='D:\Database\msdb_log.ldf');
b),在命令提示行下用NET STOP MSSQLSERVER命令停止SQL Server執行個體;
c),物理移動檔案到我們定義的檔案夾,比如上面所述D:\Database檔案夾;
d),重啟SQL Server執行個體;
大功告成,然後在用上面的查詢來驗證更改,F5執行,顯示
ii),由於硬體故障而需要移動系統資料庫
對於由於硬體故障而需要移動系統資料庫,上面的方法就不行了,因為我們可能無法訪問伺服器來運行ALTER DATABASE命令。那我們就另外換一種解決方案!
a),如果SQL Server執行個體已經啟動,那麼停止該執行個體;
b),在命令提示行下,輸入下面的命令把SQL Server執行個體啟動到master-only復原模式
NET START MSSQLSERVER /f /T3608
c),之後我們就能連結到伺服器了,接下來就和上面”移動一個沒有損壞的系統資料庫 ”的步驟就一樣了。
註:如果直接用NET START MSSSQL SERVER命令來啟動SQL Server執行個體,會收到1814的錯誤提示。我們可以到“控制台”-》“管理工具”-》“事件檢視器”中看一下具體的錯誤記錄檔。
2),移動master資料庫
移動master資料庫的位置和其他的系統資料庫不同是,只能用SQL Server 組態管理員來更改master的位置。
首先開啟SQL Server組態管理員,右擊目標SQL Server執行個體,選擇屬性,然後點擊進階標籤,:
在啟動參數中編輯各個參數的值來指向新的master資料庫資料檔案和記錄檔的目錄位置,如下:
-dD:\Database\master.mdf;
-eC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG;
-lD:\Database\mastlog.ldf
然後停止SQL Server執行個體,把物理檔案移動到新的檔案夾下,比如我移動到D:\Database\目錄下;
最後啟動SQL Server執行個體,就大功告成了!如果要檢驗一下,就用上面所提到的檢驗語句,F5執行,:
參考:SQL Server技術內幕-儲存引擎
Author:興百放
Web:http://xbf321.cnblogs.com
Time:2010.3.12