說(shuō)到這個(gè)問(wèn)題,基本上有人就會(huì)想到三個(gè)問(wèn)題:
1,什么是系統(tǒng)數(shù)據(jù)?
2,為什么要移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)?
3,移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)我們可以用附加和分離,為什么還要單獨(dú)拿出來(lái)說(shuō)呢?
對(duì)于這三個(gè)問(wèn)題我一個(gè)一個(gè)講吧,也算是自己做個(gè)筆記。
1,什么是系統(tǒng)數(shù)據(jù)?
所謂系統(tǒng)數(shù)據(jù)庫(kù)就是我們?cè)谘bSQL Server之后,系統(tǒng)自帶的數(shù)據(jù)庫(kù)(這樣的回答是不是很白癡^_^).
如果你裝SQL Server2005或2008在打開(kāi)一個(gè)SQL實(shí)例后,就會(huì)看到一個(gè)數(shù)據(jù)庫(kù)--->系統(tǒng)數(shù)據(jù)庫(kù)文件夾,里邊就是系統(tǒng)自帶的數(shù)據(jù)庫(kù),如圖:
對(duì)于每一個(gè)系統(tǒng)數(shù)據(jù)庫(kù),這里我先用簡(jiǎn)單的語(yǔ)言說(shuō)一下:
1),master:
這個(gè)數(shù)據(jù)庫(kù)是全局?jǐn)?shù)據(jù)庫(kù),它包含一些系統(tǒng)表,權(quán)限分配,用戶帳號(hào)設(shè)置,當(dāng)前數(shù)據(jù)庫(kù)配置信息以及關(guān)于磁盤(pán)空間,文件分配等信息。所以在執(zhí)行諸如用戶帳號(hào)設(shè)置,權(quán)限分配和改變系統(tǒng)配置信息后都要備份此數(shù)據(jù)。所以在這里強(qiáng)烈建議,不僅要經(jīng)常備份自己的數(shù)據(jù)庫(kù),還有備份此數(shù)據(jù)庫(kù),雖然不像備份自己數(shù)據(jù)庫(kù)那樣那么頻繁。至少半個(gè)月或一個(gè)月備份一次此數(shù)據(jù)庫(kù)。
在這里還有專門(mén)的一個(gè)數(shù)據(jù)庫(kù)大牛討論過(guò)是否應(yīng)該備份此數(shù)據(jù)庫(kù):SQL SERVER – Backup master Database Interval – master Database Best Practices
2),model:
這個(gè)數(shù)據(jù)庫(kù)只是一個(gè)模板數(shù)據(jù)庫(kù),我們?cè)趧?chuàng)建任意的一個(gè)數(shù)據(jù)庫(kù)的時(shí)候,都是復(fù)制此數(shù)據(jù)庫(kù)為新數(shù)據(jù)庫(kù)的基礎(chǔ),如果希望每一個(gè)新的數(shù)據(jù)庫(kù)都含有某些對(duì)象或者權(quán)限,可以把這個(gè)對(duì)象或權(quán)限放在此數(shù)據(jù)庫(kù)中,新創(chuàng)建的新數(shù)據(jù)庫(kù)都會(huì)繼承此數(shù)據(jù)的新對(duì)象或權(quán)限,并且擁有這些對(duì)象或權(quán)限。
3),msdb:
作者原話:SQL Server代理服務(wù)器會(huì)使用該數(shù)據(jù)庫(kù),它會(huì)執(zhí)行一些列如備份和復(fù)制任務(wù)的計(jì)劃好的活動(dòng)。Service Borker也會(huì)用到該數(shù)據(jù)庫(kù),他為SQL Sever提供隊(duì)列和可靠消息傳遞。當(dāng)我們不在該數(shù)據(jù)庫(kù)執(zhí)行備份或維護(hù)任務(wù)時(shí),通??梢院雎栽摂?shù)據(jù)庫(kù)。在SQL Server2005之前,實(shí)際上是可以刪除該數(shù)據(jù)庫(kù)的,只后SQL Server仍然可用,但不能在維護(hù)任何備份歷史了,并且不能夠在定義任務(wù),警告,工作或者建立復(fù)制,不過(guò)因?yàn)槟J(rèn)的msdb數(shù)據(jù)庫(kù)非常小,建議即使用不到也不要?jiǎng)h除它。
4),tempdb:
該數(shù)據(jù)庫(kù)說(shuō)白了,就是一個(gè)中轉(zhuǎn)站或數(shù)據(jù)寄存站,用戶顯示創(chuàng)建的臨時(shí)表,在查詢處理和排序時(shí)內(nèi)部所產(chǎn)生的中間結(jié)果的工作表,維護(hù)用的快照等,都會(huì)用到此數(shù)據(jù)庫(kù),與其他數(shù)據(jù)庫(kù)所不同的是,在每次SQL Server實(shí)例重啟之后,都會(huì)重建而不是恢復(fù). 所以我們?cè)谄渲袆?chuàng)建的所有對(duì)象和權(quán)限在下次重啟SQL Server時(shí)都會(huì)全部丟失。
但是我們也不能忽略此數(shù)據(jù)庫(kù),因?yàn)閠empdb的大小和配置,對(duì)優(yōu)化SQL Server的功能和性能來(lái)說(shuō)很重要。
對(duì)tempdb數(shù)據(jù)庫(kù),還要多說(shuō)幾句,雖然在tempdb每次被重建時(shí),它會(huì)從model數(shù)據(jù)庫(kù)繼承大多數(shù)的數(shù)據(jù)庫(kù)選項(xiàng),但是tempdb卻不會(huì)從modeldb數(shù)據(jù)庫(kù)中復(fù)制其恢復(fù)模式,因?yàn)樗偸鞘褂煤?jiǎn)單恢復(fù)模式。另外,tempdb是無(wú)法刪除的,也不用備份。
2,為什么要移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)?
我們?cè)诎惭bSQL Server后默認(rèn)的這些系統(tǒng)數(shù)據(jù)庫(kù)都會(huì)放在C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA此文件夾下,一般的都不很大,為什么我們還有移動(dòng)他們呢?
在沒(méi)有實(shí)踐管理服務(wù)器之前,我也沒(méi)有這個(gè)想法,但是我發(fā)現(xiàn)我的服務(wù)器C盤(pán)一直都在增加,或者萬(wàn)一重裝系統(tǒng),我設(shè)置的數(shù)據(jù)庫(kù)選項(xiàng),以及用戶賬戶設(shè)置都要重新設(shè)置,所以就有了這個(gè)想法。
還有一點(diǎn)就是作為重新布置計(jì)劃或安排好的維護(hù)操作的一部分,我們也許需要移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)。
3,用附加和分離就可以,為什么還要單獨(dú)說(shuō)呢?
回答這個(gè)問(wèn)題之前,我們?cè)诳匆粡垐D
注意到了嗎,在我選中master系統(tǒng)數(shù)據(jù)庫(kù)右擊,選中任務(wù)后,并沒(méi)有出現(xiàn)“分離”這個(gè)選項(xiàng)。那就說(shuō)明移動(dòng)這些系統(tǒng)數(shù)據(jù)庫(kù)是和用戶自定義的數(shù)據(jù)庫(kù)是不同的。
移動(dòng)tempdb,model和msdb的步驟和移動(dòng)master數(shù)據(jù)庫(kù)步驟稍微有點(diǎn)不同。
1),移動(dòng)tempdb,model和msdb數(shù)據(jù)庫(kù)
i),移動(dòng)一個(gè)沒(méi)有損壞的系統(tǒng)數(shù)據(jù)庫(kù)
首先讓我們用查詢命令看一下SQL Server默認(rèn)存儲(chǔ)這些系統(tǒng)數(shù)據(jù)庫(kù)的路徑;查詢命令:
SELECT name,physical_name AS CurrentLocation,state_desc
FROM sys.master_files
F5執(zhí)行,顯示如圖:
之后開(kāi)始我們的移動(dòng)之旅吧!
a),對(duì)數(shù)據(jù)庫(kù)中每個(gè)要移動(dòng)的文件使用帶有MODIFY FILE選項(xiàng)的ALTER DATABASE命令來(lái)指定新的文件夾選項(xiàng)。如:
--Move tempdb
ALTER DATABASE tempdb MODIFY FILE(NAME='tempdev',FILENAME='D:\Database\tempdb.mdf');
ALTER DATABASE tempdb MODIFY FILE(NAME = 'templog',FILENAME='D:\Database\templog.ldf');
--Move model
ALTER DATABASE model MODIFY FILE(NAME='modeldev',FILENAME='D:\Database\model.mdf');
ALTER DATABASE model MODIFY FILE(NAME='modellog',FILENAME='D:\Database\modellog.ldf');
--Move msdb
ALTER 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實(shí)例;
c),物理移動(dòng)文件到我們定義的文件夾,比如上面所述D:\Database文件夾;
d),重啟SQL Server實(shí)例;
大功告成,然后在用上面的查詢來(lái)驗(yàn)證更改,F(xiàn)5執(zhí)行,顯示如圖:
ii),由于硬件故障而需要移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù)
對(duì)于由于硬件故障而需要移動(dòng)系統(tǒng)數(shù)據(jù)庫(kù),上面的方法就不行了,因?yàn)槲覀兛赡軣o(wú)法訪問(wèn)服務(wù)器來(lái)運(yùn)行ALTER DATABASE命令。那我們就另外換一種解決方案!
a),如果SQL Server實(shí)例已經(jīng)啟動(dòng),那么停止該實(shí)例;
b),在命令提示行下,輸入下面的命令把SQL Server實(shí)例啟動(dòng)到master-only恢復(fù)模式
NET START MSSQLSERVER /f /T3608
c),之后我們就能鏈接到服務(wù)器了,接下來(lái)就和上面”移動(dòng)一個(gè)沒(méi)有損壞的系統(tǒng)數(shù)據(jù)庫(kù) ”的步驟就一樣了。
注:如果直接用NET START MSSSQL SERVER命令來(lái)啟動(dòng)SQL Server實(shí)例,會(huì)收到1814的錯(cuò)誤提示。我們可以到“控制面板”-》“管理工具”-》“事件查看器”中看一下具體的錯(cuò)誤日志。
2),移動(dòng)master數(shù)據(jù)庫(kù)
移動(dòng)master數(shù)據(jù)庫(kù)的位置和其他的系統(tǒng)數(shù)據(jù)庫(kù)不同是,只能用SQL Server 配置管理器來(lái)更改master的位置。
首先打開(kāi)SQL Server配置管理器,右擊目標(biāo)SQL Server實(shí)例,選擇屬性,然后點(diǎn)擊高級(jí)標(biāo)簽,如圖所示:
在啟動(dòng)參數(shù)中編輯各個(gè)參數(shù)的值來(lái)指向新的master數(shù)據(jù)庫(kù)數(shù)據(jù)文件和日志文件的目錄位置,如下:
d),D:\Database\master.mdf;
e),C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Log\ERRORLOG;
f),D:\Database\mastlog.ldf
然后停止SQL Server實(shí)例,把物理文件移動(dòng)到新的文件夾下,比如我移動(dòng)到D:\Database\目錄下;
最后啟動(dòng)SQL Server實(shí)例,就大功告成了!如果要檢驗(yàn)一下,就用上面所提到的檢驗(yàn)語(yǔ)句,F5執(zhí)行,如圖所示:
總結(jié)下來(lái),如果重裝系統(tǒng),又不想丟失原先數(shù)據(jù)庫(kù)設(shè)置的信息,大家可以學(xué)著移動(dòng)一下系統(tǒng)數(shù)據(jù)庫(kù),但腳本之家的小編覺(jué)得,移動(dòng)不移動(dòng)的另說(shuō),master表還是很有必要備份一下的。
您可能感興趣的文章:- SQL Server數(shù)據(jù)庫(kù)入門(mén)學(xué)習(xí)總結(jié)
- SqlServer系統(tǒng)數(shù)據(jù)庫(kù)的作用深入了解
- SQL Server 數(shù)據(jù)庫(kù)分離與附加(圖文教程)
- 快速實(shí)現(xiàn)SQL Server數(shù)據(jù)庫(kù)恢復(fù)備份