Data Transmission Service (DTS) を使用して、ApsaraDB RDS for SQL Server インスタンスの増分データ変更をリアルタイムで DataHub プロジェクトにストリーミングします。DTS は変更データキャプチャ (CDC) を活用し、SQL Server のトランザクションログからコミット済みの INSERT、UPDATE、DELETE 操作を読み取り、対応する DataHub トピックに書き込みます。
仕組み
DTS 移行タスクを開始すると、DTS はまずスキーマ移行を実行し、選択したオブジェクトの構造を宛先 DataHub プロジェクトに複製します。スキーマ移行が完了後、DTS はソースインスタンスで CDC を有効化し、行レベルの変更をキャプチャし始めます。各キャプチャされた変更は、対応する DataHub トピックに書き込まれます。このタスクは継続的に実行され、手動で停止するか、回復不能なエラーが発生した場合にのみ終了します。
この移行パスでは、完全なデータ移行はサポートされていません。スキーマ移行および増分データ移行のみ利用可能です。
サポートされる構成
以下の表は、この移行パスにおけるハード制限をまとめたものです。開始前にご確認ください。
| カテゴリ | サポートされる値または制限 |
|---|---|
| 移行タイプ | スキーマ移行、増分データ移行(完全なデータ移行はサポートされていません) |
| タスクあたりのデータベース数 | 最大 10 個 |
| タスクあたりのテーブル数(テーブルまたは列の名前変更時) | 最大 1,000 個 |
| SQL Server — Enterprise Edition | 2008 以降 |
| SQL Server — Standard Edition | 2016 SP1 以降 |
| 送信先文字列サイズ | 文字列値あたり最大 2 MB |
| フィールド値が 64 KB を超える CDC 対応テーブル | タスクを開始する前に、exec sp_configure 'max text repl size', -1; を実行します。 |
| 透過的データ暗号化 (TDE) | 増分データ移行を含む場合は無効化する必要があります |
前提条件
開始する前に、以下の準備を行ってください。
ソースの ApsaraDB RDS for SQL Server インスタンスは、DTS がサポートするバージョンを実行しています。詳細については、「データ移行シナリオの概要」をご参照ください。
DataHub が有効化されており、移行データを受け取るためのプロジェクトが作成済みであること。「DataHub の使い始め」および「プロジェクトの管理」をご参照ください。
ソースインスタンスが以下のいずれかの条件を満たす場合、複数の DTS インスタンスを購入し、個別の移行タスクを設定してください。
インスタンスに 10 個を超えるデータベースが含まれている
単一のデータベースが 1 時間以内に複数回トランザクションログをバックアップしている
単一のデータベースが 1 時間あたり 100 回を超える DDL 文を実行している
単一のデータベースでトランザクションログの書き込み速度が 20 MB/s を超えている
CDC を有効化するテーブル数が 1,000 個を超える
制限事項
ソースデータベース
ソースサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足していると、移行速度が低下します。
移行対象のテーブルには、すべてのフィールドが一意である PRIMARY KEY または一意制約 (UNIQUE constraint) が設定されている必要があります。これらの制約がないテーブルを使用すると、宛先で重複レコードが生成される可能性があります。
宛先でテーブルまたは列の名前を変更する場合、1 つの移行タスクでは最大 1,000 個のテーブルをサポートします。この上限を超えるとリクエストエラーが発生します。その場合は、テーブルを複数のタスクに分割するか、データベース単位での移行を実施してください。
1 つの移行タスクでは最大 10 個のデータベースをサポートします。1 つのタスクで 10 個を超えるデータベースを移行すると、パフォーマンスおよび安定性が低下する可能性があります。
増分データ移行の場合:
ソースデータベースでデータログを有効化します。バックアップモードを フル に設定し、フル物理バックアップを実行します。
増分データ移行のみを実行する場合、トランザクションログの保持期間を 24 時間以上確保してください。完全なデータ移行と増分データ移行の両方を実行する場合、ログの保持期間は最低でも 7 日間確保してください。保持期間が短すぎると、DTS がログを取得できず、タスクの失敗、データの不整合、またはデータ損失を引き起こす可能性があります。完全なデータ移行が完了後は、保持期間を 24 時間以上に短縮できます。これらの要件を満たさない保持期間は、DTS のサービスレベルアグリーメント (SLA) の適用範囲外となります。
CDC が正しく機能するためには、以下の条件を満たす必要があります。条件を満たさない場合、事前チェックは失敗します。
srvnameフィールドの値が、sys.sysserversビュー内に存在し、SERVERPROPERTY関数の戻り値と一致する必要があります。自己管理 SQL Server データベースでは、データベース所有者は
saユーザーである必要があります。ApsaraDB RDS for SQL Server データベースでは、データベース所有者はsqlsaユーザーである必要があります。Enterprise Edition:SQL Server 2008 以降
Standard Edition:SQL Server 2016 SP1 以降
ソースが SQL Server 2017(Standard Edition または Enterprise Edition)の場合、移行前に後続のバージョンに更新してください。
DTS は
fn_log関数を使用してソースデータベースのログを読み取ります。タスクが完了する前にログをクリアしないでください。ログのクリアによりタスクが失敗する可能性があります。スキーマ移行および完全なデータ移行中は、ソースデータベースに対して DDL 文を実行しないでください。移行中のスキーマ変更はタスクの失敗を引き起こします。
増分データ移行のみを実行する場合、移行中にソースデータベースへのデータ書き込みを行わないでください。データ整合性を保証するためには、スキーマ移行、完全なデータ移行、および増分データ移行を同時に実行してください。
ソースが Azure SQL Database の場合、1 つのタスクで移行できるのは 1 つのデータベースのみです。
ソースが ApsaraDB RDS for SQL Server インスタンスで、タスクに増分データ移行が含まれる場合は、そのインスタンスで透過的データ暗号化 (TDE) を無効化してください。詳細については、「TDE の設定」をご参照ください。
完全なデータ移行中は、ソースデータベースで
READ_COMMITTED_SNAPSHOT分離レベルを有効化してください。これを設定しないと、共有ロックによって書き込みがブロックされ、データの不整合が発生したり、インスタンスの動作が妨げられたりする可能性があります。これらの問題は DTS の SLA の適用範囲外となります。ハイブリッドログベース解析モードでは、10 分間のウィンドウ内で同一の列を複数回追加または削除しないでください。たとえば、以下の 2 つの文を 10 分以内に実行すると、タスクエラーが発生します。
ALTER TABLE test_table DROP COLUMN Flag; ALTER TABLE test_table ADD Remark nvarchar(50) not null default('');
宛先 DataHub プロジェクト
1 つの文字列値の長さは 2 MB を超えてはなりません。
オブジェクトおよびデータ型
DTS は、スキーマ、テーブル、ビュー、関数、およびストアドプロシージャのスキーマ移行をサポートしています。
以下のオブジェクトタイプは移行されません。
アセンブリ
サービスブローカー
全文インデックスおよび全文カタログ
分散スキーマおよび分散関数
共通言語ランタイム (CLR) ストアドプロシージャ、CLR スカラー値関数、CLR テーブル値関数
内部テーブル、システムオブジェクト、および集計関数
計算列を含むテーブル
以下の SQL Server データ型は移行されません。
| データ型 | 備考 |
|---|---|
| CURSOR | サポートされていません |
| ROWVERSION | サポートされていません |
| SQL_VARIANT | サポートされていません |
| HIERARCHYID | サポートされていません |
| POLYGON | サポートされていません |
| GEOMETRY | サポートされていません |
| GEOGRAPHY | サポートされていません |
増分データ移行
サポートされる DML 操作:INSERT、UPDATE、DELETE。
UPDATE 操作で大規模なフィールド値のみが変更される場合、DTS はその操作を移行しません。
増分データ移行の実行中は、再インデックス作成操作を実行しないでください。再インデックス作成によりタスクが失敗し、データ損失を引き起こす可能性があります。
DTS は、CDC が有効化されたテーブルのプライマリキーに関連する DDL 操作を移行できません。
1 つの移行タスクで CDC が有効化されたテーブル数が DTS でサポートされる最大数を超えると、事前チェックは失敗します。
CDC が有効化されたテーブルのフィールド値が 64 KB を超える場合、タスク開始前にソースデータベースで以下のコマンドを実行してください。
exec sp_configure 'max text repl size', -1;デフォルトでは、CDC ジョブはフィールドあたり最大 64 KB のデータを処理できます。
DTS は外部キーを移行しません。ソースデータベースで定義されたカスケードおよび削除操作は、宛先に複製されません。
DTS が作成する内部オブジェクト
DTS は、移行の進行状況を追跡するために、ソースデータベースに以下のオブジェクトを作成します。
| モード | 作成されるオブジェクト |
|---|---|
| ソースデータベースログに基づく増分同期 | トリガー dts_cdc_sync_ddl、ハートビートテーブル dts_sync_progress、DDL 履歴テーブル dts_cdc_ddl_history |
| ハイブリッドログベース解析 | 上記と同じものに加え、ソースデータベースおよび特定のテーブルで CDC が有効化されます |
CDC が有効化されたテーブルについては、最大取り込みレートを 1 秒あたり 1,000 レコード (RPS) に設定してください。
その他の考慮事項
非ピーク時間帯にデータを移行してください。完全なデータ移行は、ソースおよび宛先の両方の読み取りおよび書き込み負荷を増加させます。
移行中は、DTS 以外のツールを使用して宛先 DataHub プロジェクトにデータを書き込まないでください。これによりデータの不整合が発生する可能性があります。
同じソース SQL Server データベースを共有する複数の DTS インスタンスは、増分データを独立してキャプチャします。
タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内にその復旧を試みます。復旧中、タスクが再起動されたり、タスクパラメーター (データベースパラメーターではなく) が変更されたりすることがあります。変更される可能性のあるパラメーターについては、「インスタンスパラメーターの変更」をご参照ください。
完全なデータ移行では同時 INSERT 操作が使用されるため、宛先でテーブルの断片化が発生する可能性があります。移行後の宛先表領域サイズは、ソースよりも大きくなる場合があります。
特殊ケース
ソースが ApsaraDB RDS for SQL Server インスタンスの場合、DTS は自動的に rdsdt_dtsacct という名前のアカウントをそのインスタンス上に作成します。移行タスクが実行中の間は、このアカウントを削除したり、パスワードを変更したりしないでください。詳細については、「システムアカウント」をご参照ください。
課金
| 移行タイプ | タスク構成料金 | データ転送料金 |
|---|---|---|
| スキーマ移行 | 無料 | 無料(Alibaba Cloud からインターネット経由で移行する場合にのみ課金されます)。詳細については、「課金概要」をご参照ください。 |
| 増分データ移行 | 課金対象です。「課金概要」をご参照ください。 | — |
必要なデータベースアカウント権限
| インスタンス | スキーマ移行 | 増分データ移行 |
|---|---|---|
| ソース ApsaraDB RDS for SQL Server | 移行対象オブジェクトに対する読み取り権限 | 移行対象オブジェクトに対する所有者権限 |
「特権アカウントまたは標準アカウントの作成」および「アカウントの権限の変更」をご参照ください。
移行タスクの作成
ステップ 1:データ移行ページを開く
以下のコンソールのいずれかを使用します。
DTS コンソール
DTS コンソールにログインします。
左側のナビゲーションウィンドウで、データ移行 をクリックします。
左上隅から、移行インスタンスが配置されているリージョンを選択します。
DMS コンソール
正確なナビゲーション パスは、DMS コンソールのモードおよびレイアウトによって異なります。詳細については、「シンプル モード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
DMS コンソールにログインします。
上部のナビゲーションバーで、Data + AI > DTS (DTS) > データ移行 の順に移動します。
データ移行タスク の横にあるドロップダウンリストから、移行インスタンスが配置されているリージョンを選択します。
ステップ 2:タスクの構成
タスクの作成 をクリックします。
ソースおよび宛先データベースを構成します。
警告ソースおよび宛先データベースを構成した後、ページ上部に表示される 制限事項 を必ずご確認ください。このステップをスキップすると、タスクが失敗したりデータの不整合が発生したりする可能性があります。
ソースデータベース
パラメーター 説明 タスク名 DTS タスクの名前です。DTS が自動的に名前を生成しますが、タスクを識別しやすくするために、意味のある名前を指定することを推奨します。名前は一意である必要はありません。 既存の接続を選択 ソースインスタンスが DTS に登録済みの場合、ドロップダウンリストからそのインスタンスを選択します。DTS により、残りのパラメーターが自動的に設定されます。それ以外の場合は、以下のパラメーターを設定してください。DMS コンソールで、[DMS データベースインスタンスの選択] からインスタンスを選択します。詳細については、「データベース接続の管理」をご参照ください。 データベースタイプ SQL Server を選択します。 アクセス方法 Alibaba Cloud インスタンス を選択します。 インスタンスリージョン ソース ApsaraDB RDS for SQL Server インスタンスが配置されているリージョンです。 Alibaba Cloud アカウント間でのデータ複製 同一アカウント間の移行の場合は、いいえ を選択します。 RDS インスタンス ID ソース ApsaraDB RDS for SQL Server インスタンスの ID です。 データベースアカウント ソースインスタンスのデータベースアカウントです。「必要なデータベースアカウント権限」をご参照ください。 データベースパスワード データベースアカウントのパスワードです。 暗号化 ソースデータベースで SSL が無効化されている場合は、暗号化なし を選択します。SSL が有効化されている場合は、SSL 暗号化 を選択します。DTS はデフォルトでサーバー証明書を信頼します。 宛先データベース
パラメーター 説明 [既存の接続を選択] 宛先インスタンスが DTS に登録済みの場合、ドロップダウンリストから選択します。DTS により残りのパラメーターが自動的に入力されます。それ以外の場合は、以下のパラメーターを設定します。詳細については、「データベース接続の管理」をご参照ください。 [データベースタイプ] DataHub を選択します。 [アクセス方法] Alibaba Cloud インスタンス を選択します。 [インスタンスリージョン] 宛先 DataHub プロジェクトが存在するリージョンです。 [プロジェクト] 宛先 DataHub プロジェクトの名前です。 接続テストと続行 をクリックします。
DTS サーバーの CIDR ブロックを、ソースおよびターゲットデータベースのセキュリティ設定に追加する必要があります。DTS で自動的に追加することもできますし、手動で追加することもできます。詳細については、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。ソースまたはターゲットが、Alibaba Cloud Instance を介さずにアクセスされる自己管理データベースである場合、[接続テスト] を [DTS サーバーの CIDR ブロック] ダイアログボックスでクリックします。
ステップ 3:移行対象オブジェクトの選択
オブジェクトの構成 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | スキーマ移行 および 増分データ移行 を選択します。完全なデータ移行 は、この移行パスでは利用できません。もし 増分データ移行 を選択しない場合、データ整合性を維持するため、移行中にソースデータベースへのデータ書き込みを行わないでください。 |
| 追加列の命名規則 | DTS が DataHub にデータを移行する際、宛先トピックに追加の列が挿入されます。これらの列名がトピック内の既存の列名と衝突すると、移行が失敗します。ニーズに応じて、新規ルール または 従来のルール を選択してください。このパラメーターを構成する前に、命名の衝突がないか確認してください。「追加列の命名規則の変更」をご参照ください。 |
| 競合テーブルの処理モード | 事前チェックとエラーの報告: ソーステーブルと同じ名前のテーブルが送信先に存在する場合、事前チェックは失敗します。競合を解決するには、オブジェクト名マッピング機能を使用してください。詳しくは、「データベース、テーブル、および列名のマッピング」をご参照ください。エラーを無視して続行: 同じ名前のテーブルについての事前チェックをスキップします。完全移行中は、一致するプライマリキーを持つ既存の送信先レコードが保持されます。増分移行中は、それらのレコードが上書きされます。スキーマが異なる場合、一部の列のみが移行されるか、タスクが失敗する可能性があります。 |
| 宛先インスタンスにおけるオブジェクト名の大文字小文字の処理 | 宛先インスタンスにおけるデータベース名、テーブル名、および列名の大文字小文字を制御します。デフォルトは DTS デフォルトポリシー です。詳細については、「宛先インスタンスにおけるオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | ソースオブジェクト リストからオブジェクトを選択し、右向き矢印アイコンをクリックして 選択済みオブジェクト に追加します。列、テーブル、またはデータベースを選択できます。 |
| 選択済みオブジェクト | 単一のオブジェクトの名前を変更するには、そのオブジェクトを右クリックします。複数のオブジェクトを一度に名前変更するには、右上隅の [編集] をクリックします。詳細については、「移行対象のオブジェクトの名前を変更する」および「複数の移行対象オブジェクトを一度に名前変更する」をご参照ください。注意:データベース名はマッピングできません。データベースの名前を変更すると、依存オブジェクトが失敗する可能性があります。WHERE 条件を使用して行をフィルターするには、テーブルを右クリックします。詳細については、「フィルター条件を指定する」をご参照ください。 |
ステップ 4:高度な設定の構成
次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング専用クラスター | デフォルトでは、DTS は共有クラスター上でタスクをスケジュールします。より高い安定性を得るには、専用クラスターをご購入ください。「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | DTS が接続失敗時に再試行する時間範囲です。有効な値:10~1,440 分。デフォルト:720 分。少なくとも 30 分に設定することを推奨します。この時間枠内で再接続が成功した場合、DTS はタスクを再開します。それ以外の場合はタスクが失敗します。注:複数のタスクが同一のソースまたは宛先データベースを共有する場合、最も最近に構成された再試行時間が優先されます。接続再試行期間中も DTS の課金が発生します。 |
| その他の問題発生時の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間範囲です。有効な値:1~1,440 分。デフォルト:10 分。少なくとも 10 分に設定し、常に 接続失敗時の再試行時間 よりも短い値に設定してください。 |
| 増分データ移行の速度制限の有効化 | 増分データ移行 を選択した場合にのみ利用可能です。増分データ移行の RPS および 増分移行のデータ移行速度 (MB/s) を構成することで、宛先への負荷を制限できます。 |
| 環境タグ | DTS インスタンスを識別するための任意のタグです。 |
| ETL の構成 | 「はい」を選択して、抽出・変換・書き出し (ETL) 機能を有効化し、コードエディタにデータ処理文を入力します。「いいえ」を選択して、ETL をスキップします。詳細については、「ETL とは?」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 |
| モニタリングとアラート | タスクが失敗した場合、または移行遅延がしきい値を超えた場合に通知を受信するには、[はい] を選択します。アラートのしきい値と通知設定を設定します。詳細については、「DTS タスクを作成するときにモニタリングとアラートを設定する」をご参照ください。 |
ステップ 5:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
このタスク構成の OpenAPI パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック 上にカーソルを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
DTS は、移行タスクを開始する前に事前チェックを実行します。事前チェックが通過した場合にのみ、タスクを開始できます。
事前チェックが失敗した場合:
各失敗項目の横にある 詳細の表示 をクリックし、原因を分析して問題を解決した後、再び事前チェック をクリックします。
事前チェックアラートがトリガーされた場合:
無視できないアラートの場合:詳細の表示 をクリックし、問題を解決した後、再度事前チェックを実行します。
無視可能なアラートの場合:アラート詳細の確認 > 無視 > OK の順にクリックし、その後 再び事前チェック をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 6:データ移行インスタンスの購入
成功率 が 100% に達するまで待機し、次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下の設定を行います。
パラメーター 説明 リソースグループ 移行インスタンスのリソースグループです。 デフォルト: デフォルトのリソースグループ。 詳細については、「Resource Management とは インスタンスクラス インスタンスクラスによって移行速度が決まります。 ワークロードに応じてクラスを選択します。 詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 Data Transmission Service (従量課金) 利用規約 をお読みになり、同意してください。
購入して開始 をクリックし、確認ダイアログで OK をクリックします。
移行タスクの検証
タスクが開始された後、データ移行 ページでそのステータスを確認できます。
完了:タスクにはスキーマ移行のみが含まれており(増分データ移行は含まれません)、タスクは自動的に停止しました。
実行中:タスクには増分データ移行が含まれており、タスクは継続的に実行され、自動的に停止しません。