- 論壇徽章:
- 1
|
寫在前面的話:
本來(lái)覺(jué)得這個(gè)東西和存儲(chǔ)備份沒(méi)什么直接聯(lián)系的,但是考慮到很多新手們?cè)谏闲麓鎯?chǔ)的時(shí)候,難免碰到數(shù)據(jù)遷移的事情,所以轉(zhuǎn)出來(lái)大家看一下,知道一下基本流程,心里有個(gè)準(zhǔn)備
概要
本文描述如何更改任何 SQL Server 7.0、SQL Server 2000 或 SQL Server 2005 數(shù)據(jù)庫(kù)的數(shù)據(jù)和日志文件的位置。
更多信息
更改某些 SQL Server 系統(tǒng)數(shù)據(jù)庫(kù)的位置必須遵循的步驟與更改用戶數(shù)據(jù)庫(kù)的位置必須遵循的步驟不同。將分別對(duì)這些特殊情況給予說(shuō)明。
注意:SQL Server 7.0 系統(tǒng)數(shù)據(jù)庫(kù)與 SQL Server 2000 不兼容。不要將 SQL Server 7.0 master、model、msdb 或分發(fā)數(shù)據(jù)庫(kù)附加到 SQL Server 2000。如果您使用的是 SQL Server 2005,則只能將 SQL Server 2005 數(shù)據(jù)庫(kù)附加到一個(gè)實(shí)例。
本文的所有示例都假設(shè) SQL Server 安裝在 D:\Mssql7 目錄中,而且所有數(shù)據(jù)庫(kù)和日志文件都位于默認(rèn)目錄 D:\Mssql7\Data 中。這些示例將所有數(shù)據(jù)庫(kù)的數(shù)據(jù)和日志文件都移到 E:\Sqldata。
先決條件
從數(shù)據(jù)庫(kù)的當(dāng)前位置備份當(dāng)前所有數(shù)據(jù)庫(kù),尤其是 master 數(shù)據(jù)庫(kù)。
必須具有系統(tǒng)管理員 (sa) 權(quán)限。
必須知道數(shù)據(jù)庫(kù)的所有數(shù)據(jù)文件和日志文件的名稱及當(dāng)前位置。
注意:可以使用存儲(chǔ)過(guò)程 sp_helpfile 來(lái)確定數(shù)據(jù)庫(kù)所使用的所有文件的名稱和當(dāng)前位置:
use <database_name>
go
sp_helpfile
go
應(yīng)可以以獨(dú)占方式訪問(wèn)被移動(dòng)的數(shù)據(jù)庫(kù)。如果在此過(guò)程中出現(xiàn)問(wèn)題并且無(wú)法訪問(wèn)已經(jīng)移動(dòng)的數(shù)據(jù)庫(kù),或無(wú)法啟動(dòng) SQL Server,則需要查看 SQL Server 錯(cuò)誤日志和 SQL Server 聯(lián)機(jī)叢書以獲取這些錯(cuò)誤的更多信息。
移動(dòng)用戶數(shù)據(jù)庫(kù)
以下示例將移動(dòng)一個(gè)名為 mydb 的數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)包含一個(gè)數(shù)據(jù)文件 Mydb.mdf 和一個(gè)日志文件 Mydblog.ldf。如果您要移動(dòng)的數(shù)據(jù)庫(kù)還有其他數(shù)據(jù)或日志文件,請(qǐng)?jiān)诖鎯?chǔ)過(guò)程 sp_attach_db 中用一個(gè)逗號(hào)分隔的列表將它們?nèi)苛谐。無(wú)論數(shù)據(jù)庫(kù)包含多少文件,存儲(chǔ)過(guò)程 sp_detach_db 都不會(huì)更改,原因是它不會(huì)列出這些文件。
按如下所示分離數(shù)據(jù)庫(kù):
use master
go
sp_detach_db 'mydb'
go
然后,將數(shù)據(jù)和日志文件從當(dāng)前位置 (D:\Mssql7\Data) 復(fù)制到新位置 (E:\Sqldata)。
按如下所示重新附加指向新位置中這些文件的數(shù)據(jù)庫(kù):
use master
go
sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'
go
使用 sp_helpfile 確認(rèn)文件位置的更改:
use mydb
go
sp_helpfile
go
filename 列的值應(yīng)當(dāng)反映出新的位置。
移動(dòng) pubs 和 Northwind
使用與移動(dòng)用戶數(shù)據(jù)庫(kù)相同的步驟。
移動(dòng) MSDB (SQL Server 7.0)
注意:如果您在移動(dòng) msdb 和 model 數(shù)據(jù)庫(kù)的同時(shí)結(jié)合使用此過(guò)程,則重新附加的順序必須首先是 model,然后是 msdb。如果首先重新附加的是 msdb,則必須將它分離,等到附加完 model 后再重新附加。
確保 SQL Server 代理當(dāng)前沒(méi)有運(yùn)行。
使用與移動(dòng)用戶數(shù)據(jù)庫(kù)相同的步驟。
注意:如果 SQL Server 代理正在運(yùn)行,則 sp_detach_db 存儲(chǔ)過(guò)程將會(huì)失敗,并返回以下消息:
服務(wù)器:消息 3702,級(jí)別 16,狀態(tài) 1,行 0
無(wú)法刪除數(shù)據(jù)庫(kù) 'msdb',因?yàn)樵摂?shù)據(jù)庫(kù)當(dāng)前正在使用。
DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤消息,請(qǐng)與系統(tǒng)管理員聯(lián)系。
移動(dòng) MSDB 數(shù)據(jù)庫(kù)(SQL Server 2000 和 SQL Server 2005)
注意:如果您在移動(dòng) msdb 和 model 數(shù)據(jù)庫(kù)的同時(shí)結(jié)合使用此過(guò)程,則重新附加的順序必須首先是 model,然后是 msdb。如果首先重新附加的是 msdb,則必須將它分離,等到附加完 model 后再重新附加。
在 SQL Server 2000 和 SQL Server 2005 中,不能使用 sp_detach_db 存儲(chǔ)過(guò)程分離系統(tǒng)數(shù)據(jù)庫(kù)。運(yùn)行 sp_detach_db 'msdb' 將會(huì)失敗并返回以下消息:
服務(wù)器:消息 7940,級(jí)別 16,狀態(tài) 1,行 1
無(wú)法分離系統(tǒng)數(shù)據(jù)庫(kù) master、model、msdb 和 tempdb。
要在 SQL Server 2000 上移動(dòng) MSDB 數(shù)據(jù)庫(kù),請(qǐng)按照下列步驟操作:
在 SQL Server 企業(yè)管理器中,右鍵單擊服務(wù)器名,然后單擊屬性。
在常規(guī)選項(xiàng)卡上,單擊啟動(dòng)參數(shù)。
添加一個(gè)新參數(shù)“-T3608”(不帶引號(hào))。
添加跟蹤標(biāo)記 3608 后,按照下列步驟操作:
停止并重新啟動(dòng) SQL Server。
確保 SQL Server 代理服務(wù)當(dāng)前沒(méi)有運(yùn)行。
按如下所示分離 msdb 數(shù)據(jù)庫(kù):
use master
go
sp_detach_db 'msdb'
go
將 Msdbdata.mdf 和 Msdblog.ldf 文件從當(dāng)前位置 (D:\Mssql8\Data) 移到新位置 (E:\Mssql8\Data)。
在企業(yè)管理器中,從啟動(dòng)參數(shù)框中刪除 -T3608 跟蹤標(biāo)記。
停止并重新啟動(dòng) SQL Server。
按如下所示重新附加 MSDB 數(shù)據(jù)庫(kù):
use master
go
sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf'
go
注意:如果您試圖通過(guò)使用跟蹤標(biāo)記 -T3608 啟動(dòng) SQL Server 來(lái)重新附加 msdb 數(shù)據(jù)庫(kù),會(huì)收到以下錯(cuò)誤:
服務(wù)器:消息 615,級(jí)別 21,狀態(tài) 1,行 1
未能找到 ID 為 3,名稱為 'model' 的數(shù)據(jù)庫(kù)表。
如果您使用的是 SQL Server 2005
可以使用 SQL Server 配置管理器來(lái)更改 SQL Server 服務(wù)的啟動(dòng)參數(shù)。有關(guān)如何更改啟動(dòng)參數(shù)的更多信息,請(qǐng)?jiān)L問(wèn)以下 Microsoft Developer Network 網(wǎng)站:
http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx (http://msdn2.microsoft.com/zh-cn/library/ms190737.aspx)
移動(dòng) MSDB 數(shù)據(jù)庫(kù)后,可能會(huì)收到以下錯(cuò)誤消息:
錯(cuò)誤 229:拒絕了對(duì)對(duì)象 'ObjectName' (數(shù)據(jù)庫(kù) 'master',所有者 'dbo')的執(zhí)行權(quán)限。
發(fā)生此問(wèn)題的原因是所有權(quán)鏈斷裂。MSDB 數(shù)據(jù)庫(kù)和 master 數(shù)據(jù)庫(kù)的所有者不相同。因此,MSDB 數(shù)據(jù)庫(kù)的所有權(quán)已經(jīng)發(fā)生更改。要解決此問(wèn)題,請(qǐng)?jiān)?Isql.exe 命令行實(shí)用工具或 Osql.exe 命令行實(shí)用工具中運(yùn)行以下命令:
USE MSDB
Go
EXEC sp_changedbowner 'sa'
Go
有關(guān)更多信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:
272424 (http://support.microsoft.com/kb/272424/ ) INF:數(shù)據(jù)庫(kù)范圍內(nèi)的對(duì)象所有權(quán)鏈檢查取決于映射至對(duì)象所有者的登錄信息
移動(dòng) master 數(shù)據(jù)庫(kù)
在 SQL Server 企業(yè)管理器中,更改 master 數(shù)據(jù)和日志文件的路徑。
注意:您也可以在此更改錯(cuò)誤日志的位置。
在企業(yè)管理器中,右鍵單擊 SQL Server,然后單擊屬性。
單擊啟動(dòng)參數(shù),將會(huì)顯示以下條目:
-dD:\MSSQL7\data\master.mdf
-eD:\MSSQL7\log\ErrorLog
-lD:\MSSQL7\data\mastlog.ldf
-d 是 master 數(shù)據(jù)庫(kù)數(shù)據(jù)文件的完全限定路徑。
-e 是錯(cuò)誤日志文件的完全限定路徑。
-l 是 master 數(shù)據(jù)庫(kù)日志文件的完全限定路徑。
按如下所示更改這些值:
刪除 Master.mdf 和 Mastlog.ldf 文件的當(dāng)前條目。
添加指定新位置的新條目:
-dE:\SQLDATA\master.mdf
-lE:\SQLDATA\mastlog.ldf
停止 SQL Server。
將 Master.mdf 和 Mastlog.ldf 文件復(fù)制到新位置 (E:\Sqldata)。
重新啟動(dòng) SQL Server。
移動(dòng) model 數(shù)據(jù)庫(kù)
要移動(dòng) model 數(shù)據(jù)庫(kù),必須用跟蹤標(biāo)記 3608 啟動(dòng) SQL Server,這樣它不會(huì)恢復(fù)除 master 之外的任何數(shù)據(jù)庫(kù)。
注意:此時(shí),您不能立即訪問(wèn)任何用戶數(shù)據(jù)庫(kù)。使用此跟蹤標(biāo)記時(shí),除下列步驟外,不要執(zhí)行其他任何操作。要將跟蹤標(biāo)記 3608 添加為 SQL Server 啟動(dòng)參數(shù),請(qǐng)按照下列步驟操作:
在 SQL Server 企業(yè)管理器中,右鍵單擊服務(wù)器名,然后單擊“屬性”。
在“常規(guī)”選項(xiàng)卡上,單擊“啟動(dòng)參數(shù)”。
添加一個(gè)新參數(shù)“-T3608”(不帶引號(hào))。
添加跟蹤標(biāo)記 3608 后,按照下列步驟操作:
停止并重新啟動(dòng) SQL Server。
按如下所示分離“model”數(shù)據(jù)庫(kù):
use master
go
sp_detach_db 'model'
go
將 Model.mdf 和 Modellog.ldf 文件從 D:\Mssql7\Data 移到 E:\Sqldata。
按如下所示重新附加 model 數(shù)據(jù)庫(kù):
use master
go
sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
go
在企業(yè)管理器中,從啟動(dòng)參數(shù)框中刪除 -T3608 跟蹤標(biāo)記。
停止并重新啟動(dòng) SQL Server。您可以使用 sp_helpfile 確認(rèn)文件位置的更改:
use model
go
sp_helpfile
go
移動(dòng) tempdb
您可以使用 ALTER DATABASE 語(yǔ)句來(lái)移動(dòng) tempdb 文件。
按如下所示使用 sp_helpfile 確定 tempdb 數(shù)據(jù)庫(kù)的邏輯文件名:
use tempdb
go
sp_helpfile
go
每個(gè)文件的邏輯名均包含在名稱列中。該示例使用了默認(rèn)文件名 tempdev 和 templog。
按如下所示使用 ALTER DATABASE 語(yǔ)句指定邏輯文件名:
use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
go
應(yīng)當(dāng)收到以下確認(rèn)更改的消息:
文件“tempdev”在 sysaltfiles 中被修改。重新啟動(dòng) SQL Server 后會(huì)刪除舊文件。
文件“templog”在 sysaltfiles 中被修改。重新啟動(dòng) SQL Server 后會(huì)刪除舊文件。
在 tempdb 中使用 sp_helpfile 將會(huì)在重新啟動(dòng) SQL Server 后才確認(rèn)這些更改。
停止并重新啟動(dòng) SQL Server。
參考
有關(guān)更多信息,請(qǐng)單擊下面的文章編號(hào),以查看 Microsoft 知識(shí)庫(kù)中相應(yīng)的文章:
274188 (http://support.microsoft.com/kb/274188/ ) PRB:聯(lián)機(jī)叢書中的“孤立用戶疑難解答”主題不完整
246133 (http://support.microsoft.com/kb/246133/ ) 如何在 SQL Server 實(shí)例之間傳輸?shù)卿浐兔艽a
168001 (http://support.microsoft.com/kb/168001/ ) 還原數(shù)據(jù)庫(kù)后數(shù)據(jù)庫(kù)上的用戶登錄和權(quán)限可能不正確
有關(guān)更多信息,請(qǐng)參閱下列書籍:
Microsoft Corporation
Microsoft SQL Server 7.0 System Administration Training Kit
Microsoft Press, 2001
Microsoft Corporation
MCSE Training Kit:Microsoft SQL Server 2000 System Administration (http://www.microsoft.com/MSPress/books/4885.asp)
Microsoft Press, 2001
Microsoft Corporation
Microsoft SQL Server 2000 Resource Kit (http://www.microsoft.com/MSPress/books/4939.asp)
Microsoft Press, 2001
--------------------------------------------------------------------------------
這篇文章中的信息適用于:
Microsoft SQL Server 7.0 標(biāo)準(zhǔn)版
Microsoft SQL Server 2000 標(biāo)準(zhǔn)版
Microsoft SQL Server 2005 Standard Edition
Microsoft SQL Server 2005 Express Edition
Microsoft SQL Server 2005 Developer Edition
Microsoft SQL 2005 Server Enterprise
Microsoft SQL 2005 Server Workgroup
關(guān)鍵字: kbinfo KB224071
[ 本帖最后由 yddll 于 2009-9-26 16:46 編輯 ] |
|