程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 運行SQL Server的計算機之間移動數據庫

運行SQL Server的計算機之間移動數據庫

編輯:關於MYSQL數據庫

本文分步介紹了如何在運行SQL Server的計算機之間移動Microsoft SQL Server用戶數據庫和大多數常見的SQL Server組件。本文中介紹的步驟假定您不移動master、model、tempdb或msdb這些系統數據庫。這些步驟為您傳輸登錄以及master和msdb數據庫中包含的大多數常見組件提供了多個選項。

注意:支持將數據從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語句,則備份中不會包含這些更改。如果您必須傳輸所有更改,那麼,假如您既執行事務日志備份又執行完整數據庫備份,您可以以盡可能短的停止時間來傳輸這些更改。

1.在目標服務器上還原完整數據庫備份,並指定WITH NORECOVERY選項。

注意:為防止對數據庫做進一步的修改,請指導用戶在源服務器上退出數據庫活動。

2.執行事務日志備份,然後使用WITH RECOVERY選項將事務日志備份還原到目標服務器上。停止時間僅限於事務日志備份和恢復的時間。

◆目標服務器上的數據庫將與源服務器上的數據庫大小相同。要減小數據庫的大小,您必須在執行備份前壓縮源數據庫的大小,或者在完成還原後壓縮目標數據庫的大小。

◆如果您將數據庫還原到的文件位置不同於源數據庫的文件位置,則必須指定WITH MOVE選項。例如,在源服務器上,數據庫位於D:MssqlData文件夾中。目標服務器沒有D驅動器,因而您需要將數據庫還原到C:MssqlData文件夾。有關如何將數據庫還原到其他位置的更多信息,請查看相關資料。

◆如果您想覆蓋目標服務器上的一個現有數據庫,則必須指定WITH REPLACE選項。

◆源服務器和目標服務器上的字符集、排序順序和Unicode整序可能必須相同,具體取決於您要還原到SQL Server的哪種版本。有關更多信息,請參閱本文中的“關於排序規則的說明”一節。

Sp_detach_db和Sp_attach_db存儲過程

要使用sp_detach_db和sp_attach_db這兩個存儲過程,請按下列步驟操作:

1.使用sp_detach_db存儲過程分離源服務器上的數據庫。您必須將與數據庫關聯的.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數據庫的整序不同。

第1步:導入和導出數據:(在SQL Server數據庫之間復制對象和數據)

您可以使用數據轉換服務導入和導出數據向導來復制整個數據庫或有選擇地將源數據庫中的對象和數據復制到目標數據庫。在傳輸過程中,可能有人在使用源數據庫。如果在傳輸過程中有人在使用源數據庫,您可能會看到傳輸過程中出現一些阻滯現象。

◆在您使用導入和導出數據向導時,源服務器與目標服務器的字符集、排序順序和整序不必相同。

◆因為源數據庫中未使用的空間不會移動,所以目標數據庫不必與源數據庫一樣大。同樣,如果您只移動某些對象,則目標數據庫也不必與源數據庫一樣大。

◆SQL Server 7.0數據轉換服務可能無法正確地傳輸大於64KB的文本和圖像數據。但SQL Server 2000版本的數據轉換服務不存在此問題。

第2步:如何傳輸登錄和密碼:

如果您不將源服務器中的登錄傳輸到目標服務器,當前的SQL Server用戶就無法登錄到目標服務器。目標服務器上的登錄的默認數據庫可能與源服務器上的登錄的默認數據庫不同。您可以使用sp_defaultdb存儲過程來更改登錄的默認數據庫。

第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包”。



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved