注意:支援將資料從SQL Server 2000遷移到Microsoft SQL Server 2000(64位)。您可以將一個32位元據庫附加到一個64位元據庫上,方法是:使用sp_attach_db系統預存程序或sp_attach_single_file_db系統預存程序,或者使用32位企業管理器中的備份與還原功能。您可以在SQL Server的32位和64位兩種版本之間來回移動資料庫。您還可以使用同樣的方法從SQL Server 7.0遷移資料。但是,不支援將資料從SQL Server 2000(64位)降級到SQL Server 7.0。下面分別介紹這幾種方法。
如果您使用的是SQL Server 2005
您可以使用相同的方法從SQL Server 7.0或SQL Server 2000遷移資料。但是,Microsoft SQL Server 2005中的管理工具與SQL Server 7.0或SQL Server 2000中的管理工具有所不同。您應該使用SQL Server Management Studio(而不是SQL Server企業管理器)以及SQL Server匯入和匯出嚮導(DTSWizard.exe)(而不是資料轉換服務匯入和匯出資料嚮導)。
備份與還原
在原始伺服器上備份使用者資料庫,然後將使用者資料庫還原到目標伺服器上。在備份過程中時可能有人使用資料庫。如果使用者在備份完成後對資料庫執行INSERT、UPDATE或DELETE語句,則備份中不會包含這些更改。如果您必須傳輸所有更改,那麼,假如您既執行交易記錄備份又執行完整Database Backup,您可以以儘可能短的停止時間來傳輸這些更改。
1.在目標伺服器上還原完整Database Backup,並指定WITH NORECOVERY選項。
注意:為防止對資料庫做進一步的修改,請指導使用者在原始伺服器上退出資料庫活動。
2.執行交易記錄備份,然後使用WITH RECOVERY選項將交易記錄備份還原到目標伺服器上。停止時間僅限於交易記錄備份和恢複的時間。
◆目標伺服器上的資料庫將與原始伺服器上的資料庫大小相同。要減小資料庫的大小,您必須在執行備份前壓縮來源資料庫的大小,或者在完成還原後壓縮目標資料庫的大小。
◆如果您將資料庫還原到的檔案位置不同於來源資料庫的檔案位置,則必須指定WITH MOVE選項。例如,在原始伺服器上,資料庫位於D:/Mssql/Data檔案夾中。目標伺服器沒有D磁碟機,因而您需要將資料庫還原到C:/Mssql/Data檔案夾。有關如何將資料庫還原到其他位置的更多資訊,請查看相關資料。
◆如果您想覆蓋目標伺服器上的一個現有資料庫,則必須指定WITH REPLACE選項。
◆原始伺服器和目標伺服器上的字元集、排序次序和Unicode整序可能必須相同,具體取決於您要還原到SQL Server的哪種版本。有關更多資訊,請參閱本文中的“關於定序的說明”一節。
Sp_detach_db和Sp_attach_db預存程序
要使用sp_detach_db和sp_attach_db這兩個預存程序,請按下列步驟操作:
1.使用sp_detach_db預存程序分離原始伺服器上的資料庫。您必須將與資料庫關聯的.mdf、.ndf和.ldf這三個檔案複製到目標伺服器上。參見下表中對檔案類型的描述:
副檔名 |
說明 |
.mdf |
主要資料檔案 |
.ndf |
輔助資料檔案 |
.ldf |
交易記錄檔 |
2.使用sp_attach_db預存程序將資料庫附加到目標伺服器上,並指向您在上一步驟中複製到目標伺服器的檔案。
◆分離資料庫後將無法訪問該資料庫,並且複製檔案時也無法使用該資料庫。在進行分離的那一時刻資料庫中包含的所有資料都被移動。
◆在您使用附加或分離方法時,兩個伺服器上的字元集、排序次序和Unicode整序都必須相同。有關更多資訊,請參閱本文中的“關於定序的說明”一節。
關於定序的說明
如果您使用備份與還原或附加和分離方法在兩個SQL Server 7.0伺服器之間移動資料庫,則兩個伺服器上的字元集、排序次序和Unicode整序都必須相同。如果您將資料庫從SQL Server 7.0移到SQL Server 2000,或者在不同的SQL Server 2000伺服器之間移動資料庫,則資料庫將保留來源資料庫的整序。這意味著,如果運行SQL Server 2000的目標伺服器的整序與來源資料庫的整序不同,則目標資料庫的整序也將與目標伺服器的master、model、tempdb和msdb資料庫的整序不同。
第一步:匯入和匯出資料(在SQL Server資料庫之間複製對象和資料)
您可以使用資料轉換服務匯入和匯出資料嚮導來複製整個資料庫或有選擇地將來源資料庫中的對象和資料複製到目標資料庫。在傳輸過程中,可能有人在使用來源資料庫。如果在傳輸過程中有人在使用來源資料庫,您可能會看到傳輸過程中出現一些阻滯現象。
◆在您使用匯入和匯出資料嚮導時,原始伺服器與目標伺服器的字元集、排序次序和整序不必相同。
◆因為來源資料庫中未使用的空間不會移動,所以目標資料庫不必與來源資料庫一樣大。同樣,如果您只移動某些對象,則目標資料庫也不必與來源資料庫一樣大。
◆SQL Server 7.0資料轉換服務可能無法正確地傳輸大於64KB的文本和映像資料。但SQL Server 2000版本的資料轉換服務不存在此問題。
第2步:如何傳輸登入和密碼
如果您不將原始伺服器中的登入傳輸到目標伺服器,當前的SQL Server使用者就無法登入到目標伺服器。目標伺服器上的登入的預設資料庫可能與原始伺服器上的登入的預設資料庫不同。您可以使用sp_defaultdb預存程序來更改登入的預設資料庫。
#p#
第3步:如何解決孤立使用者
在您向目標伺服器傳輸登入和密碼後,使用者可能還無法訪問資料庫。登入與使用者是靠安全識別符(SID)關聯在一起的;在您移動資料庫後,如果SID不一致,SQL Server可能會拒絕使用者訪問資料庫。此問題稱為孤立使用者。如果您使用SQL Server 2000 DTS傳輸登入功能來傳輸登入和密碼,就可能會產生孤立使用者。此外,被允許訪問與原始伺服器處於不同域中的目標伺服器的整合登入帳戶,也會導致出現孤立使用者。
1.尋找孤立使用者。在目標伺服器上開啟查詢分析器,然後在您移動的使用者資料庫中運行以下代碼:
exec sp_change_users_login 'Report'
|
此過程將列出任何未連結到一個登入帳戶的孤立使用者。如果沒有列出使用者,請跳過第2步和第3步,直接進行第4步。
2.解決孤立使用者問題。如果一個使用者是孤立使用者,資料庫使用者可以成功登入到伺服器,但卻無權訪問資料庫。如果您嘗試向資料庫授予登入訪問權,則會因該使用者已經存在而出現下列錯誤訊息:
Microsoft SQL-DMO (ODBC SQLState:42000)
|
錯誤15023:當前資料庫中已存在使用者或角色'%s'。上面介紹了如何使用sp_change_users_login預存程序來逐個糾正孤立使用者。sp_change_users_login預存程序僅能解決標準的SQL Server登入帳戶的孤立使用者問題。
3.如果資料庫擁有者(dbo)被當作孤立使用者列出,請在使用者資料庫中運行下面的代碼:exec sp_changedbowner 'sa'此預存程序會將資料庫擁有者更改為dbo並解決這個問題。要將資料庫擁有者更改為另一使用者,請使用您想使用的使用者再次運行sp_changedbowner。
4.如果您的目標伺服器啟動並執行是SQL Server 2000 Service Pack 1,則在您執行附加操作或還原作業(或兩種操作都執行)後,企業管理器的使用者檔案夾中的列表中可能沒有資料庫擁有者使用者。
5.如果目標伺服器上不存在映射到原始伺服器上的dbo的登入,您在嘗試通過企業管理器更改系統管理員(sa)密碼時,可能會收到以下錯誤訊息:
錯誤21776:[SQL-DMO]名稱'dbo'在Users集合中沒有找到。如果該名稱是合法名稱,則使用[]來分隔名稱的不同部分,然後重試。
警告:如果您再次還原或附加資料庫,則資料庫使用者可能會再次被孤立,這樣您就必須重複第3步操作。
第4步:如何移動作業、警報和運算子
第4步是可選操作。您可以為原始伺服器上的所有作業、警報和運算子產生指令碼,然後在目標伺服器上運行指令碼。要移動作業、警報和運算子,請按照下列步驟操作:
1.開啟SQL Server企業管理器,然後展開管理檔案夾。
2.展開SQL Server代理,然後按右鍵警報、作業或運算子。
3.單擊所有任務,然後單擊產生SQL指令碼。對於SQL Server 7.0,請單擊為所有作業產生指令碼、警報或運算子。
您可以用按右鍵選擇為所有警報、所有作業或所有運算子產生指令碼。
◆您可以將作業、警報和運算子從SQL Server 7.0移到SQL Server 2000,也可以在運行SQL Server 7.0和運行SQL Server 2000電腦之間移動。
◆如果在原始伺服器上為運算子設定了SQLMail通知,則目標伺服器上也必須設定SQLMail,才能具有相同的功能。
第5步:如何移動DTS包
第5步是可選操作。如果DTS包在原始伺服器上儲存在SQL Server中或存放庫中,您可以在需要時移動這些包。要在伺服器之間移動DTS包,請使用下列方法之一。
方法1
1.在原始伺服器上將DTS包儲存到一個檔案中,然後在目標伺服器上開啟DTS包檔案。
2.將目標伺服器上的包儲存到SQL Server或存放庫中。
注意:您必須用單獨的檔案逐個地移動這些包。
方法2
1.在DTS設計器中開啟每個DTS包。
2.在包菜單上,單擊另存新檔。
3.指定目標SQL Server。
注意:在新伺服器上,包可能無法正常運行。您可能必須對包變更,更改包中任何對舊的原始伺服器上的串連、檔案、資料來源、設定檔和其他資訊的引用,以便引用新的目標伺服器。您必鬚根據每個包的設計逐個包進行這些更改。
本文中介紹的步驟不移動資料庫圖表以及備份與還原記錄。如果您必須移動這些資訊,請移動msdb系統資料庫。如果您移動msdb資料庫,則不必執行“第4步:如何移動作業、警報和運算子”或“第5步:如何移動DTS包”。