全部產品
Search
文件中心

ApsaraDB RDS:使用SSMS遷移上雲

更新時間:Jun 19, 2024

本文以Azure SQL Database為例,介紹如何使用SQL Server Management Studio(SSMS)將您本地自建或其他雲的SQL Server資料庫遷移到RDS SQL Server

前提條件

  • 已建立儲存空間大於源庫的目標RDS SQL Server執行個體,且RDS SQL Server執行個體需滿足如下條件:

    說明
    • 建議目標RDS SQL Server執行個體的儲存空間是源的1.2倍。

    • 如需建立RDS SQL Server執行個體,請參見建立RDS SQL Server執行個體;若您已有RDS SQL Server執行個體但儲存空間不足,可以增加儲存空間,請參見變更配置

    • 執行個體系列:基礎系列、高可用系列(2012及以上版本)、叢集系列

    • 執行個體規格:通用型、獨享型(不支援共用型)

    • 計費方式:訂用帳戶或隨用隨付(不支援Serverless執行個體)

    • 網路類型:專用網路。如需變更網路類型,請參見更改網路類型

    • 執行個體建立時間:

      • 高可用系列和叢集系列執行個體的建立時間需在2021年01月01日或之後。

      • 基礎系列執行個體的建立時間需在2022年09月02日或之後。

      說明

      建立時間可在基本資料頁內的運行狀態中查看。

  • 已在本地安裝SSMS工具。

    說明

    您也可以建立專用網路、Windows Server鏡像、分配公網IP的ECS執行個體,並在ECS執行個體中安裝SSMS工具。ECS執行個體的建立方法,請參見建立ECS執行個體

注意事項

  • 為了避免發生資料不一致的情況,您需要停止源庫的資料寫入,停止資料寫入的時間取決於待遷移的資料量和實際操作的時間。

  • 資料匯出的速度主要取決於源庫的規格。

準備工作

  • 開啟Azure SQL Database的公網存取權限,並在防火牆中允許您本地IP或ECS執行個體的公網IP訪問Azure服務和資源。

    說明

    具體操作,請查看Azure官方的相關文檔,或聯絡Azure的技術支援人員。

  • 確認源庫中的約束、視圖等不會導致資料匯出失敗。

  • RDS SQL Server執行個體中,建立超級許可權帳號。

    說明

    您需登入阿里雲主帳號後才能建立超級許可權帳號。建立方法,請參見建立SA許可權的資料庫帳號

  • 在源和目標庫中分別執行SELECT name, compatibility_level FROM sys.databases; 命令,確認目標庫是否相容源庫。是否相容的判斷標準,請參見相容性層級

  • RDS SQL Server執行個體設定白名單,允許用戶端所在的ECS或本地裝置訪問RDS SQL Server執行個體。具體操作,請參見設定白名單

    說明
    • 如果使用ECS通過內網訪問RDS SQL Server,ECS和RDS SQL Server執行個體需要位於同一個地區的同一VPC下,然後將ECS的私網IP添加到白名單。

    • 如果使用本地裝置訪問RDS SQL Server,則將本地裝置的公網IP添加到白名單。

操作步驟

說明

實際操作步驟可能會因SSMS工具的安裝位置、版本、設定等因素而有所差異,請以實際情況為準。本樣本以SSMS 19.1為例,為您介紹遷移上雲的操作步驟。

  1. 暫停在Azure SQL Database寫入資料。

  2. 匯出Azure SQL Database中的資料。

    1. 使用SSMS工具串連Azure SQL Database。

      說明

      具體操作,請參見串連和查詢資料庫

    2. 進入匯出資料的介面。

      1. 物件總管中,展開資料庫

      2. 按右鍵目標庫。

      3. 選擇任務 > 匯出資料層應用程式

      說明

      匯出資料操作的更多資訊,請參見匯出資料層應用程式

    3. 單擊下一步

    4. 選擇需要匯出的對象。

      1. 匯出設定設定頁簽中,選擇儲存到本地磁碟

      2. 單擊瀏覽,選擇儲存路徑和檔案名稱。

      3. 進階頁簽中,選擇需要匯出的表。

        說明

        若您需要選擇其他對象(如觸發器和預存程序),請在物件總管中按右鍵目標庫,然後選擇任務 > 產生指令碼,並根具實際情況,完成後續步驟。

      4. 單擊下一步

    5. 單擊完成

    6. 資料匯出成功後,單擊關閉

  3. 將匯出的資料匯入到RDS SQL Server

    1. 使用SSMS工具串連RDS SQL Server

      1. 開啟SSMS工具。

      2. 串連到伺服器對話方塊,配置如下資訊。

        配置項

        說明

        伺服器類型

        選擇為資料庫引擎

        伺服器名稱

        填入RDS SQL Server執行個體的內網地址外網地址。擷取方法,請參見查看或修改串連地址和連接埠

        身分識別驗證

        選擇為SQL Server 身分識別驗證

        登入名稱

        填入超級許可權帳號。

        密碼

        填入超級許可權帳號的密碼。

      3. 單擊串連

    2. 物件總管中,按右鍵資料庫

    3. 選擇匯入資料層應用程式

    4. 單擊下一步

    5. 配置匯入設定

      1. 選擇從本地磁碟匯入

      2. 單擊瀏覽,選擇從Azure SQL Database中匯出的.bacpac檔案。

      3. 單擊下一步

    6. 配置資料庫設定

      1. 新資料庫名稱中,填入源庫在RDS SQL Server執行個體中對應的資料庫名稱。

        重要
        • 建議與Azure SQL Database中的資料庫名稱一致,否則在業務切換至RDS SQL Server後,可能會導致業務涉及的功能異常。

        • 若您填入的資料庫名稱在RDS SQL Server執行個體中已存,可能會導致匯入失敗或資料不一致。

      2. SQL Server設定地區中,將資料檔案路徑記錄檔路徑修改為E:\SQLDATA\DATA

      3. 單擊下一步

    7. 單擊完成

    8. 資料匯入成功後,單擊關閉

  4. 校正資料一致性。

    資料匯入完成後,需要分別在源庫和目標庫執行如下命令進行校正,源庫和目標庫返回的結果相同則表示資料一致。

    • 查詢資料庫的資料行數(返回所有業務表資料的總和)

      重要

      請確保資料移轉過程中,源表和快照資料無變更,否則可能會導致資料行數不一致。

      use <dbname>;
      
      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 <dbname>;
      
      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]
  5. 資料一致性校正完成後,您可以將業務切換至RDS SQL Server,並測試業務涉及的功能是否正常。