本文以Azure SQL Database為例,介紹如何使用SQL Server Management Studio(SSMS)將其他雲平台上的SQL Server資料庫或本地自建的SQL Server資料庫遷移到阿里雲RDS SQL Server。
前提條件
-
已建立儲存空間大於源庫的目標RDS SQL Server執行個體,且執行個體需滿足如下條件:
說明建議目標執行個體儲存空間為源庫的1.2倍,已有RDS SQL Server執行個體但儲存空間不足時,請及時擴容。
-
執行個體系列:基礎系列、高可用系列(2012及以上版本)、叢集系列
-
執行個體規格:通用型、獨享型(不支援共用型)
-
計費方式:訂用帳戶或隨用隨付(不支援Serverless執行個體)
-
網路類型:專用網路。如需變更網路類型,請參見更改網路類型。
-
執行個體建立時間:
-
高可用系列和叢集系列執行個體的建立時間需在2021年01月01日或之後。
-
基礎系列執行個體的建立時間需在2022年09月02日或之後。
說明建立時間可在基本資料頁內的運行狀態中查看。
-
-
-
已在本地或ECS執行個體(專用網路、Windows Server鏡像、分配公網IP)中安裝SSMS工具。
說明本樣本以
SSMS 19.1為例,為您介紹遷移上雲的操作步驟。實際操作步驟可能會因SSMS工具的安裝位置、版本、設定等因素而有所差異,請以實際情況為準。
注意事項
-
為了避免發生資料不一致的情況,您需要停止源庫的資料寫入,停止時間取決於待遷移的資料量和實際操作時間。
-
資料匯出的速度主要取決於源庫的規格。
準備工作
-
開啟Azure SQL Database的公網存取權限,並在防火牆中允許您本地IP或ECS執行個體的公網IP訪問Azure服務和資源。
說明具體操作,請查看Azure官方的相關文檔,或聯絡Azure的技術支援人員。
-
確認源庫中的約束、視圖等不會導致資料匯出失敗。
-
登入阿里雲主帳號,在RDS SQL Server執行個體中建立超級許可權帳號。
-
在源和目標庫中分別執行
SELECT name, compatibility_level FROM sys.databases;命令,確認目標庫是否相容源庫。 -
為RDS SQL Server執行個體設定白名單,允許用戶端所在的ECS或本地裝置訪問執行個體。
說明-
ECS通過內網訪問RDS SQL Server時,需確保ECS和RDS SQL Server執行個體位於同一地區的同一VPC下,並將ECS的私網IP添加到RDS SQL Server執行個體白名單中。
-
本地裝置訪問RDS SQL Server時,需將本地裝置的公網IP添加到RDS SQL Server執行個體白名單中。
-
1. 匯出Azure SQL Database資料
暫停在Azure SQL Database寫入資料,並匯出Azure SQL Database中的資料。
-
進入匯出資料的介面。
-
在物件總管中,展開数据库。
-
按右鍵目標庫。
-
選擇。
說明匯出資料操作的更多資訊,請參見匯出資料層應用程式。
-
-
單擊下一步。
-
選擇需要匯出的對象。
-
在导出设置的設定頁簽中,選擇儲存到本地磁碟。
-
單擊瀏覽,選擇儲存路徑和檔案名稱。
-
在進階頁簽中,選擇需要匯出的表。
說明若您需要選擇其他對象(如觸發器和預存程序),請在物件總管中按右鍵目標庫,然後選擇,並根據實際情況,完成後續步驟。
-
單擊下一步。
-
-
單擊完成。
-
資料匯出成功後,單擊關閉。
2. 匯入資料到RDS SQL Server
將匯出的資料匯入到RDS SQL Server中。
-
-
開啟SSMS工具。
-
在串連到伺服器對話方塊,配置如下資訊。
配置項
說明
伺服器類型
選擇為資料庫引擎。
伺服器名稱
填入RDS SQL Server執行個體的內網地址或外網地址。擷取方法,請參見查看或修改串連地址和連接埠。
身分識別驗證
選擇為SQL Server 身分識別驗證。
登入名稱
填入超級許可權帳號。
密碼
填入超級許可權帳號的密碼。
-
單擊串連。
-
-
在物件總管中,按右鍵数据库。
-
選擇匯入資料層應用程式。
-
單擊下一步。
-
配置匯入設定。
-
選擇從本地磁碟匯入。
-
單擊瀏覽,選擇從Azure SQL Database中匯出的.bacpac檔案。
-
單擊下一步。
-
-
配置資料庫設定。
-
在新資料庫名稱中,填入源庫在RDS SQL Server執行個體中對應的資料庫名稱。
重要-
建議與Azure SQL Database中的資料庫名稱一致,否則在業務切換至RDS SQL Server後,可能會導致業務涉及的功能異常。
-
若您填入的資料庫名稱在RDS SQL Server執行個體中已存,可能會導致匯入失敗或資料不一致。
-
-
在SQL Server設定地區中,將資料檔案路徑和記錄檔路徑修改為E:\SQLDATA\DATA。
-
單擊下一步。
-
-
單擊完成。
-
資料匯入成功後,單擊關閉。
3. 校正資料一致性
資料匯入完成後,需要分別在源庫和目標庫執行如下命令進行校正,源庫和目標庫返回的結果相同則表示資料一致。
-
查詢資料庫的資料行數(返回所有業務表資料的總和)
重要請確保資料移轉過程中,源表和快照資料無變更,否則可能會導致資料行數不一致。
USE <資料庫名稱>; SELECT SUM(b.rows) AS 'RowCount' FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.id WHERE (a.type = 'u') AND (b.indid IN (0, 1)) -
查詢資料大小(返回資料檔案大小和空間佔比率)
USE <資料庫名稱>; SELECT a.name [檔案名稱] ,cast(a.[size]*1.0/128 as decimal(12,1)) AS [檔案設定大小(MB)] ,CAST( fileproperty(s.name,'SpaceUsed')/(8*16.0) AS DECIMAL(12,1)) AS [檔案所佔空間(MB)] ,CAST( (fileproperty(s.name,'SpaceUsed')/(8*16.0))/(s.size/(8*16.0))*100.0 AS DECIMAL(12,1)) AS [所佔空間率%] ,CASE WHEN A.growth =0 THEN '檔案大小固定,不會增長' ELSE '檔案將自動成長' end [增長模式] ,CASE WHEN A.growth > 0 AND is_percent_growth = 0 THEN '增量為固定大小' WHEN A.growth > 0 AND is_percent_growth = 1 THEN '增量將用整數百分比表示' ELSE '檔案大小固定,不會增長' END AS [增量模式] ,CASE WHEN A.growth > 0 AND is_percent_growth = 0 THEN cast(cast(a.growth*1.0/128as decimal(12,0)) AS VARCHAR)+'MB' WHEN A.growth > 0 AND is_percent_growth = 1 THEN cast(cast(a.growth AS decimal(12,0)) AS VARCHAR)+'%' ELSE '檔案大小固定,不會增長' end AS [增長值(%或MB)] ,a.physical_name AS [檔案所在目錄] ,a.type_desc AS [檔案類型] FROM sys.database_files a INNER JOIN sys.sysfiles AS s ON a.[file_id]=s.fileid LEFT JOIN sys.dm_db_file_space_usage b ON a.[file_id]=b.[file_id] ORDER BY a.[type]
資料一致性校正完成後,您可以將業務切換至RDS SQL Server,並測試業務涉及的功能是否正常。