本文將逐步告訴您,如何在執行 SQL Server 的電腦之間移動 Microsoft SQL Server 使用者資料庫與最常用的 SQL Server 元件。
本文所描述的步驟首先假設您不會移動
master、
model、
tempdb 或
msdb 系統資料庫。這些步驟提供不同的選項,用以移轉登入與
master 及
msdb 資料庫中的常用元件。
如需有關當您依照本文中的步驟執行,仍有特定項目未能移轉的資訊,請參閱<其他相關資訊>一節。
注意若使用 Microsoft SQL Server 2008,請參閱下列《SQL Server 2008 線上叢書》網站中的<將資料庫提供給另一個伺服器執行個體時管理中繼資料>主題:
注意可支援從 SQL Server 2000 將資料移轉到 Microsoft SQL Server 2000 (64 位元)。您可以使用
sp_attach_db 或
sp_attach_single_file_db 系統預存程序,或是使用 32 位元 Enterprise Manager 中的備份與還原,將 32 位元資料庫附加到 64 位元資料庫。您可以在 32 和 64 位元版本的 SQL Server 之間來回移動資料庫。您也可以使用相同的方法從 SQL Server 7.0 移轉資料。然而,從 SQL Server 2000 (64 位元) 將資料降級至 SQL Server 7.0 的移轉並不受支援。
各個方法的說明如下。
步驟 1:如何移動使用者資料庫
如果您使用的是 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 Enterprise Manager。此外,建議您使用 SQL Server 匯入和匯出精靈 (DTSWizard.exe),而非資料轉換服務 - 匯入/匯出精靈。
如果要移動使用者資料庫,請使用下列其中一種方法。
方法 1:備份及還原使用者資料庫
請在來源伺服器上備份使用者資料庫,然後將使用者資料庫還原到目的伺服器。
- 在備份過程中仍然可以使用資料庫。備份完成後,假如使用者對資料庫執行 INSERT、UPDATE 或 DELETE 陳述式,備份將不會包含這些變更。如果您必須移轉全部的變更,則可同時執行交易記錄檔備份與完整資料庫備份,以在最短的停機時間內移轉這些變更。
- 在目的伺服器上還原整個資料庫的備份並指定 WITH NORECOVERY 選項。
注意 為了避免發生額外的資料庫修改,請引導來源伺服器上的使用者結束資料庫活動。 - 執行交易記錄檔備份,並使用 WITH RECOVERY 選項將交易記錄檔的備份還原到目的伺服器。停機時間長短受限於備份與還原交易記錄檔的時間。如需詳細資訊,請參閱《SQL Server 線上叢書》<Transact-SQL 參考>主題中的<RESTORE>副主題。
- 目的伺服器上的資料庫與來源伺服器上的資料庫大小相同。為了降低資料庫的大小,您必須在執行備份前壓縮來源資料庫,或在還原完成後壓縮目的資料庫。如需詳細資訊,請參閱《SQL Server 線上叢書》<建立與維護資料庫>標題下的<壓縮資料庫>副主題。
- 如果您將資料庫還原到來源資料庫以外的檔案位置,就必須指定 WITH MOVE 選項。例如,在來源伺服器上,資料庫位於 D:\Mssql\Data 資料夾。目的伺服器沒有 D 磁碟機,而您想要將資料庫還原到 C:\Mssql\Data 資料夾。
如需有關如何將資料庫還原到不同位置的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
221465?
(http://support.microsoft.com/kb/221465/zh-tw/
)
INF:使用 WITH MOVE 選項搭配 RESTORE 陳述式
304692?
(http://support.microsoft.com/kb/304692/zh-tw/
)
INF:以 BACKUP 和 RESTORE 將 SQL Server 7.0 資料庫移到新的伺服器
- 如果您想要在目的伺服器上覆寫現有資料庫,就必須指定 [WITH REPLACE] 選項。如需詳細資訊,請參閱《SQL Server 線上叢書》<Transact-SQL 參考>主題中的<RESTORE>副主題。
- 依據您要在哪個版本的 SQL Server 中進行還原而定,來源與目的伺服器的字元集、排序順序以及 Unicode 定序可能都必須相同。如需詳細資訊,請參閱本節稍後的<有關定序的注意事項>。
方法 2:使用「sp_detach_db」和「sp_attach_db」預存程序
若要使用
sp_detach_db 和
sp_attach_db 預存程序,請依照下列步驟執行:
- 在來源伺服器上使用 sp_detach_db 預存程序來卸離資料庫。您必須將資料庫的 .mdf、.ndf 以及 .ldf 檔複製到目的伺服器。請參閱下表以取得這些檔案類型的說明:
摺疊此表格展開此表格
| 副檔名 | 說明 |
|---|
| .mdf | 主要資料檔 |
| .ndf | 次要資料檔 |
| .ldf | 交易記錄檔 |
- 在目的伺服器上使用 sp_attach_db 預存程序來附加資料庫,並指向前一個步驟中複製到目的伺服器的檔案。
如需有關如何使用這些方法的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
224071?
(http://support.microsoft.com/kb/224071/zh-tw/
)
如何使用 SQL Server 中的卸離和附加功能將 SQL Server 資料庫移到新位置
- 卸離之後,便無法存取資料庫;複製檔案時,您也無法使用資料庫。卸離時,會移動資料庫所包含的全部資料。
- 當您使用 Attach 或 Detach 方法時,兩部伺服器的字元集、排序順序以及 Unicode 定序可能都必須相同。如需詳細資訊,請參閱下列有關定序的注意事項。
有關定序的注意事項如果您使用備份與還原或是
Attach 及
Detach 方法,在 SQL Server 7.0 伺服器之間移動資料庫,則兩部伺服器的字元集、排序順序以及 Unicode 定序都必須相同。如果您將資料庫從 SQL Server 7.0 移動到 SQL Server 2000,或是在 SQL Server 2000 伺服器之間移動資料庫,資料庫會維持來源資料庫的定序。這表示如果執行 SQL Server 2000 的目的伺服器與來源資料庫的定序不同,那麼目的資料庫與目的伺服器的
master、
model、
tempdb 和
msdb 資料庫定序就會不同。如需詳細資訊,請參閱《SQL Server 2000 線上叢書》中的<混合定序的環境>主題。
方法 3:在 SQL Server 資料庫之間使用匯入與匯出資料複製物件和資料
您可以使用資料轉換服務 - 匯入/匯出精靈複製整個資料庫,或選擇性地從來源資料庫將物件和資料複製到目的資料庫。
- 可於轉換期間使用來源資料庫。如果於轉換期間使用來源資料庫,那麼轉換過程也許會遭遇一些阻礙。
- 當您使用「匯入/匯出精靈」時,來源伺服器與目的伺服器的字元集、排序順序以及定序並不一定要相同。
- 由於來源資料庫中的未使用空間並不會移動,所以目的資料庫的大小並不一定要跟來源資料庫相同。同樣地,如果您只移動某些物件,目的資料庫就不一定要跟來源資料庫一樣大。
- SQL Server 7.0「資料轉換服務」也許無法正確地轉換長度超過 64 KB 的文字和影像資料。這個問題並未發生在 SQL Server 2000 版的「資料轉換服務」。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
257425?
(http://support.microsoft.com/kb/257425/zh-tw/
)
FIX:DTS 物件傳輸無法傳輸超出 64 KB 的 BLOB 資料
步驟 2:如何移轉登入與密碼
如果您沒有將來源伺服器上的登入移轉到目的伺服器,目前的 SQL Server 使用者可能無法登入目的伺服器。您可以依照下列「Microsoft 知識庫」文件中的指示來移轉登入與密碼:
246133?
(http://support.microsoft.com/kb/246133/zh-tw/
)
如何在 SQL Server 的執行個體之間傳送登入和密碼
目的伺服器上各個登入的預設資料庫,可能與來源伺服器上各個登入的預設資料庫不同。您可以使用 sp_defaultdb 預存程序來變更登入的預設資料庫。如需詳細資訊,請參閱《SQL Server 線上叢書》<Transact-SQL 參考>主題中的<sp_defaultdb>副主題。
步驟 3:如何解決孤兒使用者的問題
當您將登入和密碼移轉到目的伺服器後,使用者可能無法存取資料庫。登入是透過安全性識別碼 (SID) 與使用者建立關聯;如果 SID 在移動資料庫之後發生不一致,SQL Server 會拒絕使用者存取資料庫。這就是所謂的孤兒使用者的問題。如果您使用 SQL Server 2000 DTS 傳送登入功能移轉登入與密碼,就可能會發生孤兒使用者的問題。此外,在與來源伺服器位於不同網域的目的伺服器上授予整合式的登入存取權,也會造成孤兒使用者的情形。
- 尋找孤兒使用者。請在目的伺服器上開啟 Query Analyzer,然後在您移動的使用者資料庫中執行下列程式碼:
exec sp_change_users_login 'Report'
這個程序會列出沒有連結到登入的任何孤兒使用者。如果沒有列出任何使用者,請略過步驟 2 和步驟 3 並跳至步驟 4。 - 解決孤兒使用者問題。孤兒使用者在使用資料庫時,可以順利登入伺服器,但不會有存取資料庫的權限。如果您嘗試授予登入存取資料庫的權限,會出現下列錯誤訊息,因為使用者已存在:
Microsoft SQL-DMO (ODBC SQLState: 42000) 錯誤 15023: 使用者或角色 '%s' 在目前的資料庫中已經存在。
如需有關如何解決孤兒使用者問題的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
240872?
(http://support.microsoft.com/kb/240872/zh-tw/
)
INF:如何解決在 SQL Server 之間移動資料庫的權限問題
前述文件包含關於如何將登入對應到資料庫使用者,以及解決孤立於 SQL Server 標準登入與整合登入以外之使用者問題的指示。
274188?
(http://support.microsoft.com/kb/274188/zh-tw/
)
PRB:線上叢書的疑難排解孤兒使用者主題不完整
前述文件說明如何使用 sp_change_users_login 預存程序來逐一解決孤兒使用者問題。sp_change_users_login 預存程序只能解決孤立於 SQL Server 標準登入之外的使用者問題。 - 如果資料庫擁有者 (dbo) 被列為孤兒,請在使用者資料庫中執行下列程式碼:
exec sp_changedbowner 'sa'
此預存程序會將資料庫擁有者變更為 dbo 並修正問題。如果要將資料庫擁有者變更為其他使用者,請用您想要的使用者再執行一次 sp_changedbowner。如需更多詳細資訊,請參閱《SQL Server 線上叢書》<Transact-SQL 參考>主題下的<sp_changedbowner>副主題。 - 如果目的伺服器執行的是 SQL Server 2000 Service Pack 1,那麼當您執行附加或還原 (或兩者) 後,資料庫擁有者的使用者可能不會出現在 Enterprise Manager 的 [使用者] 資料夾中。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
305711?
(http://support.microsoft.com/kb/305711/zh-tw/
)
BUG:Enterprise Manager 中未顯示 DBO 使用者
- 如果您嘗試透過 Enterprise Manager 來變更系統管理員 (sa) 密碼,而目的伺服器並沒有與來源伺服器之 dbo 相對應的登入,就可能會出現下列錯誤訊息:
錯誤 21776:[SQL-DMO] 找不到名稱 'dbo' 於 Users 集合中。如果名稱是限定名稱,使用 [] 來分隔名稱的各個部分,並再試一次。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
218172?
(http://support.microsoft.com/kb/218172/zh-tw/
)
無法在 Enterprise Manager 中變更 SA 密碼
警告如果您再次還原或是附加資料庫,資料庫使用者可能會再度變成孤兒使用者,屆時您就必須重覆步驟 3。
步驟 4:如何移動作業、警示與操作員
步驟 4 是選擇性步驟。您可以產生來源伺服器上所有作業、警示和操作員的指令碼,然後從目的伺服器執行該指令碼。
- 如果要移動作業、警示和操作員,請依照下列步驟執行:
- 開啟 SQL Server Enterprise Manager,然後展開 [管理] 資料夾。
- 展開 [SQL Server 代理程式],再用滑鼠右鍵按一下 [警示]、[作業] 或 [操作員]。
- 按一下 [所有工作],再按一下 [產生 SQL 指令碼]。若使用 SQL Server 7.0,按一下 [編輯所有作業的指令碼]、[警示] 或 [操作員]。
根據您用滑鼠右鍵按的項目而定,您將看到 [所有警示]、[所有作業] 或 [所有操作員] 的產生指令碼選項。 - 您可以將作業、警示和操作員從 SQL Server 7.0 移動到 SQL Server 2000,或在執行 SQL Server 7.0 與 SQL Server 2000 的電腦伺服器之間移動。
- 如果來源伺服器上有操作員被設定為 SQLMail 的通知對象,您必須設定目的伺服器上的 SQLMail,使其具備相同的功能。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
263556?
(http://support.microsoft.com/kb/263556/zh-tw/
)
INF:如何設定 SQL Mail
步驟 5:如何移動 DTS 封裝
步驟 5 是選擇性步驟。如果 DTS 封裝存放在來源伺服器的 SQL Server 或是儲存機制內,您可以隨意移動它們。如果要在伺服器之間移動 DTS 封裝,請使用下列其中一種方法。
方法 1
- 將來源伺服器上的 DTS 封裝儲存為檔案,然後在目的伺服器上開啟 DTS 封裝檔。
- 將目的伺服器上的封裝儲存到 SQL Server 或儲存機制內。
注意 您必須逐一移動個別檔案中的每個封裝。
方法 2
- 在「DTS 設計師」中開啟每個 DTS 封裝。
- 在 [封裝] 功能表上,按一下 [另存新檔]。
- 指定目的端 SQL Server。
注意 封裝可能無法在新伺服器上正常執行。您必須修改封裝,並變更舊有來源伺服器之封裝中對於連線、檔案、資料來源、設定檔及其他資訊的所有參考,將其參照到新的目的伺服器。您必須根據各個封裝的設計,逐一在各個封裝中完成這些變更。
步驟 6:變更 sp_configure 設定以符合先前的系統
您可能需要變更設定以符合新系統的設定。例如,如果新系統擁有更多的記憶體或所執行的 SQL 執行個體及應用程式不同於舊系統,您可能需要變更伺服器記憶體最小及最大的設定值或 AWE 設定。如果在作業系統上公開的 CPU 核心數目已變更,您可能就需要變更 MAXDOP 設定。
您或許也想要移動其他項目,例如連結伺服器、鏡像、複寫、記錄傳送、全文檢索目錄、具名的備份裝置、維護計劃、資料庫圖表、資料庫快照集、認證與 Proxy 帳戶、端點、伺服器範圍 DDL 觸發程序 (例如Logon 觸發程序) 或其他有關 master 或 msdb 的項目。請視需要檢查來源伺服器的這些設定,並在目的伺服器上以手動方式逐步進行設定。
如需有關如何移動全文檢索元件的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
240867?
(http://support.microsoft.com/kb/240867/zh-tw/
)
如何移動、複製和備份 SQL 7.0 全文檢索目錄資料夾和檔案
如果您依照本文所列的步驟執行,將不會移動資料庫圖表以及備份與還原歷程記錄。如果您必須移動這些資訊,請移動
msdb 系統資料庫。如需有關如何移動
msdb 資料庫的詳細資訊,請參閱本文<步驟 1:如何移動使用者資料庫>一節。如果您移動
msdb 資料庫,就不需要依照<步驟 4:如何移動作業、警示與操作員>或<步驟 5:如何移動 DTS 封裝>執行。
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
320125?
(http://support.microsoft.com/kb/320125/zh-tw/
)
如何移動資料庫圖表