このトピックでは、SQL Server Management Studio (SSMS) を使用して、別のクラウドプラットフォーム上の SQL Server データベースまたは自己管理 SQL Server データベースから Alibaba Cloud RDS for SQL Server インスタンスにデータを移行する方法について説明します。このトピックでは、Azure SQL Database を例として使用します。
前提条件
ソースインスタンスよりも大きいストレージ容量を持つ RDS for SQL Server インスタンス が作成されていること。RDS インスタンスは、次の要件を満たしている必要があります。
説明宛先インスタンスのストレージ容量は、ソースインスタンスのストレージ容量の 1.2 倍にすることをお勧めします。RDS for SQL Server インスタンスをお持ちで、インスタンスのストレージ容量が不足している場合は、できるだけ早く ストレージ容量を拡張する 必要があります。
インスタンスエディション: Basic Edition、High-availability Edition (SQL Server 2012 以降)、または Cluster Edition
インスタンスタイプ: 汎用、専用 (共有 タイプはサポートされていません)
課金方法: サブスクリプションまたは従量課金 (サーバーレスインスタンス ではサポートされていません)
ネットワークタイプ: VPC (virtual private cloud)。ネットワークタイプを変更するには、「ネットワークタイプを変更する」をご参照ください。
インスタンス作成時間:
High-availability Edition および Cluster Edition インスタンスは、2021 年 1 月 1 日以降に作成する必要があります。
Basic Edition インスタンスは、2022 年 9 月 2 日以降に作成する必要があります。
説明実行ステータス の下の 基本情報 ページで [作成時間] を表示できます。
SSMS がコンピューターまたは ECS インスタンス にインストールされていること。ECS インスタンスは、VPC (virtual private cloud) 内に存在し、Windows Server イメージを実行し、パブリック IP アドレスが割り当てられている必要があります。
説明この例では、
SSMS 19.1を使用して、データをクラウドに移行する方法を説明します。実際の手順は、SSMS のインストールの場所、バージョン、設定など、複数の要因によって異なります。
使用上の注意
データ不整合を防ぐために、ソースインスタンスへのデータ書き込みを停止する必要があります。ソースインスタンスにデータを書き込めない期間は、移行するデータの量と実際の操作時間によって異なります。
データのエクスポート速度は、ソースインスタンスの仕様によって異なります。
準備
インターネット経由での Azure SQL Database へのアクセスを有効にします。ECS インスタンスのパブリック IP アドレスまたはオンプレミスデバイスの IP アドレスが Azure のサービスとリソースにアクセスできるように、ファイアウォールを設定します。
説明詳細については、Azure の公式ドキュメントをご参照いただくか、Azure のテクニカルサポートにお問い合わせください。
ソースインスタンスの制約とビューがエクスポートの失敗を引き起こさないことを確認します。
Alibaba Cloud アカウント を使用して RDS インスタンスにログオンし、システム管理者アカウントを作成します。
ソースインスタンスと宛先インスタンスの両方で
SELECT name, compatibility_level FROM sys.databases;文を実行して、宛先インスタンスが ソースインスタンスと互換性がある かどうかを確認します。RDS インスタンスの ホワイトリストを設定 して、クライアントがデプロイされている ECS インスタンスまたはオンプレミスデバイスが RDS インスタンスに接続できるようにします。
説明ECS インスタンスを内部ネットワーク経由で RDS インスタンスに接続する場合は、これらのインスタンスが同じリージョンと同じ VPC に存在し、ECS インスタンスのプライベート IP アドレスが RDS インスタンスの IP アドレスホワイトリストに追加されていることを確認してください。
オンプレミスデバイスを RDS インスタンスに接続する場合は、オンプレミスデバイスのパブリック IP アドレスが RDS インスタンスの IP アドレスホワイトリストに追加されていることを確認してください。
1. Azure SQL Database からデータをエクスポートする
Azure SQL Database へのデータ書き込みを停止し、データベース内のデータをエクスポートします。
データをエクスポートするページに移動します。
[オブジェクトエクスプローラー] で、[データベース] を展開します。
目的のデータベースを右クリックします。
を選択します。
説明データのエクスポートの詳細については、「データ層アプリケーションのエクスポート」をご参照ください。
[次へ] をクリックします。
エクスポートするオブジェクトを選択します。
[エクスポート設定] ページの [設定] タブで、[ローカルディスクに保存] を選択します。
[参照] をクリックし、ファイルの保存パスとファイル名を選択します。
[詳細設定] タブで、エクスポートするテーブルを選択します。
説明トリガーやストアドプロシージャなど、他のオブジェクトを選択する必要がある場合は、[オブジェクトエクスプローラー] で目的のデータベースを右クリックし、 を選択します。
[次へ] をクリックします。
[完了] をクリックします。
データがエクスポートされたら、[閉じる] をクリックします。
2. RDS インスタンスにデータをインポートする
エクスポートしたデータを RDS for SQL Server インスタンスにインポートします。
SSMS を開きます。
[サーバーへの接続] ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
サーバーの種類
[データベースエンジン] を選択します。
サーバー名
RDS for SQL Server インスタンスの [内部エンドポイント] または [パブリックエンドポイント] を入力します。エンドポイントの取得方法の詳細については、「エンドポイントとポート番号の表示と変更」をご参照ください。
認証
[SQL Server 認証] を選択します。
ログイン
システム管理者アカウントのユーザー名を入力します。
パスワード
システム管理者アカウントのパスワードを入力します。
[接続] をクリックします。
[オブジェクトエクスプローラー] で、[データベース] を右クリックします。
[データ層アプリケーションのインポート] を選択します。
[次へ] をクリックします。
[インポート設定] を設定します。
[ローカルディスクからインポート] を選択します。
[参照] をクリックし、Azure SQL Database からエクスポートされた .bacpac ファイルを選択します。
[次へ] をクリックします。
[データベース設定] を設定します。
[新しいデータベース名] フィールドに、RDS for SQL Server インスタンス上のデータベースの名前を入力します。このデータベースはソースデータベースに対応します。
重要Azure SQL Database のデータベースと同じ名前を使用することをお勧めします。同じ名前を使用しない場合、ワークロードを RDS for SQL Server インスタンスに切り替えた後、一部の機能が期待どおりに動作しない可能性があります。
入力したデータベース名が RDS for 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 for SQL Server インスタンスに切り替えて、機能が期待どおりに実行されるかどうかをテストできます。