Data Transmission Service (DTS) を使用して、最小限のダウンタイムまたはダウンタイムなしで ApsaraDB RDS for SQL Server インスタンス間でデータベースを移行します。DTS は、スキーマ移行、完全データ移行、増分データ移行の 3 つの移行タイプをサポートしており、これらを組み合わせることで、許容できるダウンタイムに合わせて対応できます。
必要な権限
ソースインスタンスと宛先インスタンスのデータベースアカウントに、以下の権限があることを確認してください。アカウントの作成または変更については、「アカウントの作成」および「アカウント権限の変更」をご参照ください。
| データベース | スキーマ移行 | 完全移行 | 増分移行 |
|---|---|---|---|
| ソースインスタンス | 読み取り | 読み取り | 移行対象オブジェクトの所有者 |
| 宛先インスタンス | 読み取りと書き込み | ||
制限事項と注意事項
移行タスクを設定する前に、すべての制限事項を確認してください。これらを無視すると、タスクの失敗、データの不整合、またはデータ損失の原因となる可能性があります。
スケール制限
-
1 つの移行タスクでサポートされるデータベースは最大 10 個です。この制限を超えると、安定性やパフォーマンスの問題が発生します。必要に応じて、データベースを複数のタスクに分割してください。
-
増分移行の場合、ソースデータベースのテーブル数を 1,000 未満にしてください。これを超えると、タスクの遅延や不安定性の原因となります。
-
オブジェクト名マッピングを使用して宛先でテーブル名を変更する場合、1 つのタスクでサポートされるテーブルは最大 1,000 個です。これを超えると、リクエストエラーが発生します。タスクを分割するか、データベース全体を移行してください。
-
ソースインスタンスに以下のいずれかの条件が適用される場合は、複数のタスクに分割してください。
-
10 個を超えるデータベース
-
単一データベースのログバックアップ頻度が 1 時間に 1 回を超える
-
単一データベースの DDL 頻度が 1 時間に 100 回を超える
-
単一データベースのログボリュームが 20 MB/s を超える
-
テーブル構造の要件
-
移行するテーブルには、
PRIMARY KEYまたはUNIQUE制約があり、すべてのフィールドが一意である必要があります。そうでない場合、ターゲットデータベースに重複レコードが含まれる可能性があります。 -
増分同期モードが [ソースデータベースのログに基づく増分同期 (ヒープテーブルはサポートされていません)] に設定されている場合、テーブルにはプライマリキー列を含むクラスター化インデックスが必要です。ヒープテーブル、プライマリキーのないテーブル、圧縮テーブル、および計算列を持つテーブルはサポートされていません。
-
増分同期モードが [ハイブリッドログベース解析] に設定されている場合、上記のテーブル構造の制限は適用されませんが、ソースデータベースの変更データキャプチャ (CDC) ジョブが正常に実行されている必要があります。
-
クラスター化列ストアインデックスを持つテーブルでは CDC を有効にできません。
DDL 操作の制限
-
スキーマ移行または完全データ移行中に DDL 操作 (テーブルやデータベース構造の変更など) を実行しないでください。タスクは失敗します。
-
増分移行中に連続した列の追加/削除操作を実行しないでください。1 分以内に 2 回以上の列の追加または削除の DDL 操作を行うと、タスクの失敗の原因となる可能性があります。このような操作の間隔は 10 分以上にしてください。
-
DTS は、CDC が有効なテーブルのプライマリキーに対する DDL 操作を移行できません。
-
DTS は、トランザクション DDL (単一ステートメント内の複数列 DDL または DDL と DML の組み合わせ)、ユーザー定義型を持つ DDL、オンライン DDL、予約キーワードを含む名前のオブジェクトに対する DDL、またはシステムストアドプロシージャを介して実行される DDL を移行しません。
インデックス再作成の制限
増分データ移行中にインデックス再作成操作を実行しないでください。タスクが失敗し、データ損失が発生する可能性があります。
サポートされていないデータ型
次のデータ型はサポートされていません:CURSOR、ROWVERSION、SQL_VARIANT、HIERARCHYID、POLYGON、GEOMETRY、GEOGRAPHY。
ログ保持の要件
-
増分移行のみ:ソースデータベースのログを 24 時間以上保持します
-
完全データ + 増分データ移行:ログを少なくとも 7 日間保持します (完全移行が完了した後、これを 24 時間以上に短縮できます)
-
増分移行タスクの場合、ソースデータベースのデータログが有効になっており、バックアップモードが
Fullに設定され、フル物理バックアップが正常に完了している必要があります。
CDC 構成の要件
-
ソーステーブルで CDC を有効にする必要がある場合、
sys.sysserversビューのsrvnameフィールドはSERVERPROPERTY関数の戻り値と一致する必要があります。 -
ソースデータベースが ApsaraDB RDS for SQL Server の場合、データベース所有者はsqlsa である必要があります。
-
CDC コンポーネントは、デフォルトで増分データを 3 日間保持します。ビジネス要件に基づいてこれを調整してください。
-
単一テーブルの 1 日あたりの平均増分 SQL 変更が 1,000 万を超える場合、CDC の保持期間を 1,440 分 (1 日) に設定します。
-
CDC が有効なテーブルの単一フィールドに 64 KB を超えるデータを書き込む必要がある場合、タスクを開始する前にソースデータベースで次のコマンドを実行してください:
EXEC sp_configure 'max text repl size', -1;
トリガーと外部キー
移行タスクに増分データ移行が含まれる場合、開始前にターゲットデータベースのすべてのトリガーと外部キーを無効にしてください。そうしないと、タスクが失敗したり、データ損失が発生したりする可能性があります。
データベースの命名
移行するデータベース名が ApsaraDB RDS for SQL Server の命名規則に準拠していない場合、移行タスクを設定する前に、宛先インスタンスに手動でデータベースを作成してください。
TDE (透過的データ暗号化)
ソースデータベースが ApsaraDB RDS for SQL Server で、タスクに増分移行が含まれる場合、移行インスタンスの安定した動作を確保するために TDE を無効にしてください。
DTS システムアカウント
タスク実行中に DTS システムアカウント (例:rdsdt_dtsacct) を削除または変更しないでください。タスクは失敗します。
タスクの自動再開と切り替えリスク
DTS は、過去 7 日以内に失敗した移行タスクを自動的に再開しようとします。ワークロードを宛先インスタンスに切り替える前に、タスクを終了またはリリースするか、宛先インスタンスに対する DTS アカウントの書き込み権限を取り消してください。そうしないと、宛先インスタンスのデータが上書きされる可能性があります。
その他の注意事項
-
ソースデータベースをホストするサーバーに十分な送信帯域幅があることを確認してください。帯域幅が不足すると、移行速度が低下します。データベースの負荷増加を避けるため、オフピーク時に移行タスクを実行することを推奨します。
-
クロスバージョンの移行については、事前に互換性を確認してください。詳細については、「ApsaraDB RDS for SQL Server のバージョン間の機能差」をご参照ください。
-
ハイブリッドログベース解析中、DTS はソースデータベースに次のオブジェクトを作成します:
dts_cdc_sync_ddlトリガー、dts_sync_progressハートビートテーブル、およびdts_cdc_ddl_historyDDL ストレージテーブル。これらは手動で削除できません。 -
完全データ移行中、共有ロックが書き込み操作に影響を与えるのを避けるため、ソースデータベースで
READ_COMMITTED_SNAPSHOTトランザクション分離レベルを有効にしてください。 -
完全データ移行が完了した後、同時 INSERT 操作による断片化のため、宛先テーブルのストレージがソースよりも大きくなる場合があります。
-
ソースデータベースのバージョンが ApsaraDB RDS for SQL Server 2008 または 2008 R2 の場合、増分データ移行はサポートされていません。
移行タスクの設定
手順 1:ソースデータベースとターゲットデータベースの接続
-
左側のナビゲーションウィンドウで、[データ移行] をクリックし、リージョンを選択します。
-
[タスクの作成] をクリックし、ソースデータベースとターゲットデータベースの接続を設定します。
セクション パラメーター 説明 — タスク名 識別しやすいように、わかりやすい名前を入力します。一意である必要はありません。 ソースデータベース 既存の接続を選択 以前に DTS データ接続管理ページで接続詳細を保存した場合、ここで接続を選択すると手動入力をスキップできます。 データベースタイプ [SQL Server] を選択します。 アクセス方法 [クラウドインスタンス] を選択します。 インスタンスリージョン ソースの ApsaraDB RDS for SQL Server インスタンスのリージョンを選択します。 Alibaba Cloud アカウント間でのデータ複製 同じ Alibaba Cloud アカウント内のインスタンス間で移行する場合は、[いいえ] を選択します。 RDS インスタンス ID ソースインスタンスの ID を選択します。 データベースアカウント 必要な権限を持つソースインスタンスのデータベースアカウントを入力します。 データベースパスワード データベースアカウントのパスワードを入力します。 暗号化 SSL が有効でない場合は [非暗号化] を選択します。ソースデータベースで Secure Sockets Layer (SSL) が有効な場合は [SSL 暗号化] を選択します — DTS はデフォルトでサーバー証明書を信頼します。 ターゲットデータベース 既存の接続を選択 以前に DTS データ接続管理ページで接続詳細を保存した場合、ここで接続を選択すると手動入力をスキップできます。 データベースタイプ [SQL Server] を選択します。 アクセス方法 [クラウドインスタンス] を選択します。 インスタンスリージョン 宛先の ApsaraDB RDS for SQL Server インスタンスのリージョンを選択します。 インスタンス ID 宛先インスタンスの ID を選択します。 データベースアカウント 必要な権限を持つ宛先インスタンスのデータベースアカウントを入力します。 データベースパスワード データベースアカウントのパスワードを入力します。 暗号化 SSL が有効でない場合は [非暗号化] を選択します。宛先データベースで SSL が有効な場合は [SSL 暗号化] を選択します — DTS はデフォルトでサーバー証明書を信頼します。 -
[接続をテストして続行] をクリックします。
ソースデータベースとターゲットデータベースの両方のセキュリティ設定に、DTS サーバーの IP アドレス範囲が追加されていることを確認してください。 詳細については、「DTS サーバーの CIDR ブロックをセキュリティ設定に追加する」をご参照ください。
手順 2:移行するオブジェクトの選択
[オブジェクトの設定] ページで、移行設定を構成します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | アプローチに合った移行タイプを選択します。完全移行の場合:[スキーマ移行] と [完全データ移行] を選択します。最小ダウンタイム移行の場合:[スキーマ移行]、[完全データ移行]、[増分データ移行] を選択します。 |
| ソースデータベースのトリガーを移行する方法 | 要件に基づいてトリガー移行方法を選択します。移行するオブジェクトにトリガーが含まれていない場合は、これをスキップします。このパラメーターは、[スキーマ移行] と [増分データ移行] の両方が選択されている場合にのみ使用できます。 |
| SQL Server 増分同期モード | [増分データ移行] が選択されている場合にのみ使用できます。比較については、「増分同期モード」をご参照ください。 |
| DTS がサポートする CDC が有効なテーブルの最大数 | 現在の移行インスタンスで CDC が有効なテーブルの最大数を設定します。デフォルト:1,000。同期モードが [ソースデータベースのログに基づく増分同期 (ヒープテーブルはサポートされていません)] の場合は使用できません。 |
| 競合するテーブルの処理モード | [事前チェックしてエラーを報告] (デフォルト):DTS は、宛先でソースと同じ名前のテーブルをチェックします。競合が見つからない場合にのみタスクが開始されます。[エラーを無視して続行]:このチェックをスキップします。完全移行中、DTS は宛先の既存のレコードを保持し、競合するソースレコードをスキップします。増分移行中、新しいソースデータが宛先データを上書きし、データ損失を引き起こす可能性があります。注意して使用してください。 |
| ソースオブジェクト | 移行するオブジェクトを選択し、矢印アイコンをクリックして [選択したオブジェクト] に移動します。テーブルまたは列を選択すると、ビュー、トリガー、ストアドプロシージャなどの他のオブジェクトタイプは除外されます。 |
| 選択したオブジェクト | 送信先の単一オブジェクトの名前を変更するには、そのオブジェクトを右クリックします。「単一オブジェクトの名前をマッピングする」をご参照ください。複数のオブジェクトの名前を変更するには、[一括編集] をクリックします。「複数のオブジェクト名を一度にマッピングする」をご参照ください。条件に基づいて行をフィルターするには、テーブルを右クリックして フィルター条件を設定します。 |
オブジェクトの名前を変更すると、依存オブジェクトの移行が失敗する可能性があります。
手順 3:詳細設定
[次へ:詳細設定] をクリックし、以下のオプションを設定します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | DTS はデフォルトで共有クラスターを使用します。安定性を高めるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | タスク開始後に DTS が失敗した接続を再試行する時間。有効な値:10~1,440 分。デフォルト:720。30 より大きい値を設定してください。再試行中、DTS インスタンスに対して課金されます。 |
| その他の問題の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間。有効な値:1~1,440 分。デフォルト:10。10 より大きい値を設定してください。[接続失敗時の再試行時間] より小さい必要があります。 |
| 完全データ移行のスロットリングを有効化 | 完全データ移行中の読み取り/書き込みリソース使用量を制限して、データベースの負荷を軽減します。[ソースデータベースへの QPS (1 秒あたりのクエリ数)]、[完全データ移行の RPS]、[完全移行のデータ移行速度 (MB/s)] を設定します。[完全データ移行] が選択されている場合にのみ使用できます。 |
| 増分データ移行のスロットリングを有効化 | 増分移行中のリソース使用量を制限します。[増分データ移行の RPS] と [増分移行のデータ移行速度 (MB/s)] を設定します。[増分データ移行] が選択されている場合にのみ使用できます。 |
| 環境タグ | 環境によって DTS インスタンスを識別するためのオプションのタグ。 |
| ETL の設定 | 抽出・変換・書き出し (ETL) 処理を設定するには、[はい] を選択します。「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。スキップするには、[いいえ] を選択します。 |
| モニタリングとアラート | タスクが失敗した場合、またはレイテンシーがしきい値を超えた場合にアラートを受信するには、[はい] を選択し、アラートのしきい値と通知連絡先を設定します。「モニタリングとアラートの設定」をご参照ください。 |
手順 4:データ検証の設定 (オプション)
[次のステップ:データ検証] をクリックして、データ検証タスクを設定します。詳細については、「データ検証タスクの設定」をご参照ください。
手順 5:事前チェックの実行とインスタンスの購入
-
[次へ:タスク設定を保存して事前チェック] をクリックします。
このタスク設定の API パラメーターをプレビューするには、[次へ:タスク設定を保存して事前チェック] にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
-
事前チェックが完了するのを待ちます。いずれかの項目が失敗した場合は、[詳細の表示] をクリックし、問題をトラブルシューティングして、再度事前チェックを実行します。無視できるアラートがトリガーされた場合は、[アラート詳細の確認] > [無視] > [OK] をクリックし、次に [再度事前チェック] をクリックします。アラートを無視すると、データの不整合が生じる可能性があります。
-
成功率が 100% に達したら、[次へ: インスタンスの購入] をクリックします。
-
[インスタンスの購入] ページで、インスタンスクラスを設定します。
パラメーター 説明 リソースグループ 移行インスタンスのリソースグループ。デフォルト:デフォルトリソースグループResource Management とは インスタンスクラス 必須の移行速度に基づいてインスタンスクラスを選択します。 詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 -
[Data Transmission Service (従量課金) 利用規約] に同意し、[購入して開始] をクリックします。確認ダイアログで、[OK] をクリックします。
タスクのモニタリング
[データ移行] ページでタスクの進捗状況を表示します。
-
増分データ移行のないタスクは、完了すると自動的に停止します。ステータスは [完了] と表示されます。
-
増分データ移行のあるタスクは継続的に実行され、自動的には停止しません。ステータスは [実行中] と表示されます。
増分同期モード
このセクションは、移行タイプとして [増分データ移行] が選択されている場合に適用されます。
| モード | 利点 | 欠点 | 使用場面 |
|---|---|---|---|
| ハイブリッドログベース解析 (非ヒープテーブルのログベース解析とヒープテーブルの CDC ベース増分同期) | ヒープテーブル、プライマリキーのないテーブル、圧縮テーブル、計算列を持つテーブルをサポートします。より多様な DDL ステートメントを提供します。 | DTS は、ソースデータベースに dts_cdc_sync_ddl トリガー、dts_sync_progress ハートビートテーブル、dts_cdc_ddl_history DDL ストレージテーブルを作成します。データベースレベルおよびテーブルレベルの CDC を有効にします。SELECT INTO、TRUNCATE、RENAME COLUMN は CDC 対応テーブルでは実行できません。DTS によって作成されたソースデータベースのトリガーは手動で削除できません。 |
ソーステーブルにヒープテーブル、プライマリキーのないテーブル、または圧縮テーブルや計算列テーブルが含まれる場合。サポートされるソースエディション:Enterprise または Enterprise Evaluation (2012, 2014, 2016, 2019, 2022)、Standard (2016, 2019, 2022)。 |
| ソースデータベースのログに基づく増分同期 (ヒープテーブルはサポートされていません) | ソースデータベースに変更は加えられません。 | ヒープテーブル、プライマリキーのないテーブル、圧縮テーブル、または計算列を持つテーブルをサポートしません。 | ソースが RDS for SQL Server の Web エディションである場合 (このモードは必須です)。ソーステーブルがすべての構造要件を満たしている場合。 |
| 増分同期のための CDC インスタンスのポーリングとクエリ | Amazon RDS for SQL Server、Azure SQL Database、Azure SQL Managed Instance、Azure SQL Server on Virtual Machine、および Google Cloud SQL for SQL Server からの移行をサポートします。SQL Server のネイティブ CDC コンポーネントを使用して、安定した増分移行をより低いネットワーク帯域幅使用量で実現します。 | DTS アカウントには CDC を有効にする権限が必要です。増分移行には約 10 秒の遅延があります。多数のデータベースとテーブルを同時に移行すると、安定性とパフォーマンスの問題が発生する可能性があります。 | ソースが Alibaba Cloud 以外のサードパーティクラウド SQL Server インスタンスである場合。 |
付録:増分移行でサポートされる SQL 操作
DML 操作
INSERT, UPDATE, DELETE
DTS は、ラージオブジェクト (LOB) フィールドのみを更新する UPDATE ステートメントを移行しません。
DDL 操作
-
ALTER TABLE—ADD COLUMN、DROP COLUMN、およびRENAME COLUMNのみをサポート -
CREATE TABLE、CREATE INDEXCREATE TABLEは、テーブル定義内のパーティションや関数をサポートしません。 -
DROP TABLE -
RENAME TABLE
以下の DDL 操作は移行されません:
トランザクション DDL (単一ステートメント内の複数列 DDL または DDL と DML の組み合わせ) — データ損失が発生する可能性があります
ユーザー定義型を持つ DDL
オンライン DDL
予約キーワードを含む名前のオブジェクトに対する DDL
システムストアドプロシージャを介して実行される DDL
TRUNCATE TABLE