Data Transmission Service (DTS) を使用して、ApsaraDB RDS for SQL Server インスタンスの増分変更を DataHub プロジェクトにストリーミングします。DTS は変更データキャプチャ(CDC)を活用して変更を検出し、完全なデータエクスポートを必要とせずに継続的なストリームとして配信します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ApsaraDB RDS for SQL Server インスタンス。対応する SQL Server のバージョンについては、「データ同期シナリオの概要」をご参照ください。
DataHub の有効化および、同期データを受信するためのプロジェクトの作成。詳細については、「DataHub の使い始め」および「プロジェクトの管理」をご参照ください。
同期対象オブジェクトに対する所有者権限。詳細については、「特権アカウントまたは標準アカウントの作成」および「アカウントの権限の変更」をご参照ください。
タスクの分割を検討してください — ソースインスタンスに以下のいずれかの条件が該当する場合:
データベース数が 10 を超える
各データベースのトランザクションログバックアップ間隔が 1 時間未満である
各データベースで 1 時間あたり 100 回を超えるデータ定義言語(DDL)操作が実行される
各データベースのトランザクションログ書き込みレートが 20 MB/s である
1,000 テーブルを超えるテーブルに対して CDC を有効化する必要がある
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期と完全データ同期 | 無料 |
| 増分データ同期 | 有料です。課金概要をご参照ください。 |
対応する同期トポロジ
一方通行・一対一同期
一方通行・一対多同期
一方通行・多対一同期
詳細については、「同期トポロジ」をご参照ください。
対応する SQL 操作
DTS は以下の DML 操作を同期します:INSERT、UPDATE、および DELETE。
UPDATE 操作で大規模フィールドのみが変更された場合、DTS では同期されません。完全データ同期はサポートされていません。このソース/送信先の組み合わせでは、増分データ同期およびスキーマ同期のみが利用可能です。
制限事項
ソースデータベースの要件
テーブルにはプライマリキーまたは一意キーが必要であり、すべてのフィールドが一意である必要があります。これらの制約がないテーブルは、送信先で重複レコードを生成する可能性があります。
同期対象としてテーブルを選択し、オブジェクト名の変更を適用する場合、1 つのタスクで最大 5,000 テーブルまで同期できます。5,000 テーブルを超える場合は、複数のタスクを設定するか、データベース単位で同期を行ってください。
1 つのタスクで最大 10 個のデータベースからのデータ同期が可能です。10 個を超えるデータベースの場合は、複数のタスクを設定してください。
DTS はトランザクションログを読み取るために
fn_log関数を使用します。タスク実行中にトランザクションログをクリアしないでください。これによりタスクが失敗する可能性があります。タスクの安定性を確保するため、ソースの RDS SQL Server インスタンスで透過的データ暗号化 (TDE) を無効化します。詳しくは、「TDE の無効化」を参照してください。
スキーマ同期中にデータベースまたはテーブルのスキーマを変更する DDL 操作を実行しないでください。タスクが失敗します。
ハイブリッドログベース解析モードでは、10 分以内に複数の
ADD COLUMNまたはDROP COLUMN操作を実行しないでください。たとえば、以下の操作を 10 分以内に連続して実行すると、タスクエラーが発生します。ALTER TABLE test_table DROP COLUMN Flag; ALTER TABLE test_table ADD Remark nvarchar(50) NOT NULL DEFAULT('');完全データ同期中に、共有ロック競合を防ぐために、ソースデータベースで
READ_COMMITTED_SNAPSHOTを有効化してください。この設定がない場合、データの不整合やインスタンス障害が発生する可能性があり、これらは DTS のサービスレベルアグリーメント(SLA)の対象外となります。ソースが Azure SQL Database の場合、1 つのタスクで同期できるのは 1 つのデータベースのみです。
トランザクションログの要件
| シナリオ | 最低ログ保持期間 |
|---|---|
| 増分同期のみ | 24 時間以上 |
| 完全+増分同期 | 最低 7 日間 |
その他の要件:
データログ機能を有効化し、バックアップモードを フル に設定したうえで、フル物理バックアップを実行済みであること。
完全同期完了後は、ログ保持期間を 24 時間以上に短縮できます。
ログ保持要件を満たさない場合、DTS がトランザクションログを取得できず、タスクの失敗、データの不整合、またはデータ損失を引き起こす可能性があります。このような状況における結果は、DTS の SLA の対象外となります。
CDC の要件
ソーステーブルに対して 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 または Enterprise Edition)を実行中の場合、より新しいバージョンに更新してください。
1 つのタスクで CDC を有効化するテーブル数は 1,000 を超えてはなりません。この上限を超えると、事前チェックが失敗します。
CDC が有効化されたテーブルに書き込まれる単一フィールド値が 64 KB を超える場合、ソースデータベースで以下のコマンドを実行してください。
CDC では、デフォルトで最大 64 KB のフィールドが処理されます。
exec sp_configure 'max text repl size', -1;
送信先およびその他の制限
送信先の DataHub プロジェクトにおける単一文字列は、2 MB を超えてはなりません。
DTS は外部キーを同期しません。ソース側でのカスケードおよび削除操作は、送信先に伝播されません。
DTS は計算列を含むテーブルを同期しません。
同期中に他のソースから送信先へデータを書き込まないでください。これによりデータの不整合が発生します。たとえば、Data Management(DMS)経由でオンライン DDL 操作を実行しながら、他のソースから送信先へ書き込むと、データ損失が発生する可能性があります。
タスクが増分同期を含む場合、再インデックス操作はサポートされていません。再インデックス操作を実行すると、タスクが失敗し、データ損失を引き起こす可能性があります。
DTS は、CDC が有効化されたテーブルのプライマリキーに関連する DDL 操作を同期できません。
同期対象オブジェクトを変更する際、データベースを削除することはできません。
複数の DTS インスタンスが同じソース SQL Server データベースを共有する場合、それらの増分データ収集モジュールは独立して動作します。
DTS タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。この期間中、タスクを再起動したり、タスクパラメーター(データベースパラメーターではない)を変更したりできます。
スキーマ同期の範囲
DTS は、スキーマ、テーブル、ビュー、関数、およびプロシージャの初期スキーマ同期をサポートしています。
ソースおよび送信先は、異種データベースです。データの型は一対一でマッピングされません。タスクを開始する前に、データ型変換の影響を評価します。詳細については、「初期スキーマ同期のためのデータの型マッピング」をご参照ください。
DTS は、アセンブリ、サービスブローカー、フルテキストインデックス、フルテキストカタログ、分散スキーマ、分散関数、CLR ストアドプロシージャ、CLR スカラー値関数、CLR テーブル値関数、内部テーブル、システム、および集計関数といったオブジェクトタイプは同期しません。
DTS は、以下のデータ型は同期しません:CURSOR、ROWVERSION、SQL_VARIANT、HIERARCHYID、POLYGON、GEOMETRY、GEOGRAPHY、および CREATE TYPE で作成されたカスタム型。
DTS がソースデータベースに作成するオブジェクト
ソースデータベースのログに基づく増分同期モードでは、DTS は同期ステータスを追跡するために、ソースデータベースに以下のオブジェクトを作成します。
| オブジェクト | タイプ | 目的 |
|---|---|---|
dts_cdc_sync_ddl | トリガー | DDL 変更をキャプチャ |
dts_sync_progress | テーブル | 同期遅延(ハートビート)を追跡 |
dts_cdc_ddl_history | テーブル | DDL 変更履歴を保存 |
ハイブリッドログベース解析モードでは、DTS はソースデータベースおよび特定のテーブルで CDC を有効化します。CDC が有効化されたテーブルの最大スループットを 1 秒あたり 1,000 レコード(RPS)に設定してください。
同期タスクの設定
ステップ 1:データ同期ページを開く
以下のいずれかの方法を使用してください。
DTS コンソール
DMS コンソール
手順は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
ステップ 2:ソースおよび送信先データベースの構成
タスクの作成 をクリックし、以下のパラメーターを設定します。
| パラメーター | 説明 | 必須 |
|---|---|---|
| タスク名 | DTS タスクの名前。DTS が自動的に名前を生成しますが、識別しやすいように記述的な名前を指定することを推奨します。名前は一意である必要はありません。 | いいえ |
| ソースデータベース — 既存の接続を選択 | 登録済みのデータベースインスタンスを選択して、接続パラメーターを自動入力します。登録済みのインスタンスがない場合は、以下でパラメーターを手動で構成します。 | いいえ |
| データベースタイプ(ソース) | SQL Server を選択します。 | はい |
| アクセス方法(ソース) | Alibaba Cloud インスタンス を選択します。 | はい |
| インスタンスリージョン(ソース) | ソースの ApsaraDB RDS for SQL Server インスタンスのリージョン。 | はい |
| Alibaba Cloud アカウント間でのデータ複製 | アカウント間で同期する場合を除き、いいえ を選択します。 | はい |
| RDS インスタンス ID | ソースの ApsaraDB RDS for SQL Server インスタンスの ID。 | はい |
| データベースアカウント | 同期対象オブジェクトに対する所有者権限を持つデータベースアカウント。 | はい |
| データベースパスワード | データベースアカウントのパスワード。 | はい |
| 暗号化 | ソースで SSL が有効化されていない場合は、非暗号化 を選択します。SSL が有効化されている場合は、SSL 暗号化 を選択します(DTS はサーバー証明書をデフォルトで信頼します)。 | はい |
| 送信先データベース — 既存の接続を選択 | 登録済みのデータベースインスタンスを選択して、接続パラメーターを自動入力します。登録済みのインスタンスがない場合は、以下でパラメーターを手動で構成します。 | いいえ |
| データベースタイプ(送信先) | DataHub を選択します。 | はい |
| アクセス方法(送信先) | Alibaba Cloud インスタンス を選択します。 | はい |
| インスタンスリージョン(送信先) | 送信先の DataHub プロジェクトのリージョン。 | はい |
| プロジェクト | 送信先の DataHub プロジェクトの名前。 | はい |
パラメーターを入力後、接続テストと続行 をクリックします。
DTS サーバーの CIDR ブロックが、ソースデータベースとターゲットデータベースのセキュリティ設定に追加されていることを確認してください。 詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。 ソースまたはターゲットが、[Alibaba Cloud インスタンス] 以外のアクセス方法を使用する自己管理データベースの場合は、[DTS サーバーの CIDR ブロック] ダイアログボックスで [接続テスト] をクリックします。
ステップ 3:同期対象の構成
オブジェクトの構成 ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 | 必須 |
|---|---|---|
| 同期タイプ | 増分データ同期 がデフォルトで選択されています。スキーマ同期 も選択してください。 | はい |
| 競合テーブルの処理モード | 事前チェックとエラー報告:送信先に同名のテーブルが存在する場合、事前チェックが失敗します。エラーを無視して続行:名前の競合チェックをスキップします(注意して使用してください。データの不整合を引き起こす可能性があります)。下記の競合処理の動作の詳細をご参照ください。 | はい |
| 追加列ルール | DTS が DataHub トピックへデータを書き込む際に、追加列が挿入されます。これらの列が送信先トピックの既存列名と競合する場合、タスクが失敗します。要件に応じて、新規ルール または 既存ルール を選択してください。このパラメーターを設定する前に、名前の競合を確認してください。「追加列の命名規則」をご参照ください。 | はい |
| 宛先インスタンスでのオブジェクト名の大文字化 | 送信先のデータベース、テーブル、および列名の大文字小文字を制御します。デフォルト: DTS デフォルトポリシー宛先インスタンス内のオブジェクト名の大文字/小文字の指定。「」をご参照ください。 | いいえ |
| ソースオブジェクト | オブジェクトを選択し、 | はい |
| 選択済みオブジェクト | 単一オブジェクトの名前を変更するには、そのオブジェクトを右クリックします。詳細については、「個別のデータベース、テーブル、および列名のマッピング」をご参照ください。複数のオブジェクトの名前を変更するには、[一括編集] をクリックします。詳細については、「一括データベース、テーブル、および列名のマッピング」をご参照ください。右クリックして、同期する特定の SQL 操作を選択するか、行をフィルターするための WHERE 条件を設定します。詳細については、「フィルター条件の設定」をご参照ください。オブジェクトの名前を変更すると、そのオブジェクトに依存する他のオブジェクトが機能しなくなる場合があります。 | はい |
競合処理の動作(エラーを無視して続行 を選択した場合):
同一スキーマで、プライマリキーまたは一意キーが一致する場合:完全同期中は既存の送信先レコードが保持され、増分同期中は送信先レコードが上書きされます。
異なるスキーマの場合:初期化が失敗する、一部の列のみが同期される、またはタスクが失敗する可能性があります。
ステップ 4:高度な設定の構成
次へ:高度な設定 をクリックし、以下の設定を行います。
| パラメーター | 説明 | 必須 |
|---|---|---|
| タスクスケジューリング専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。タスクの安定性を向上させるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 | いいえ |
| 接続失敗時の再試行時間 | タスク開始後にソースまたは送信先に到達できない場合の DTS の再試行時間。有効な値:10~1440 分。デフォルト:720。30 分を超える値を設定してください。共有ソースタスク間で最短の再試行時間が適用される場合、より短い再試行時間が優先されます。再試行期間中は、インスタンスに対して課金されます。 | いいえ |
| その他の問題発生時の再試行時間 | DDL または DML 操作が失敗した場合の DTS の再試行時間。有効な値:1~1440 分。デフォルト:10。10 分を超える値を設定し、接続失敗時の再試行時間 よりも短い値を設定してください。 | いいえ |
| 増分データ同期の速度制限を有効化 | 送信先への負荷を軽減するために同期レートを制限します。有効化した場合、増分データ同期の RPS および 増分同期のデータ同期速度(MB/s) を設定します。 | いいえ |
| 環境タグ | DTS インスタンスを識別するためのタグ。 | いいえ |
| ETL の構成 | 「はいアラート通知設定を有効化し、抽出・変換・書き出し (ETL) 処理を実行して、データ処理文を入力します。「いいえ」を選択するとスキップされます。「ETL とは何か」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 | いいえ |
| モニタリングとアラート | タスクが失敗した場合、または同期遅延がしきい値を超えた場合に通知を受信するには、[はい] を選択します。アラートのしきい値と通知設定を設定します。詳細については、「DTS タスクを作成する際にモニタリングとアラート機能を設定する」をご参照ください。 | いいえ |
ステップ 5:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
このタスク構成の API パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック の上にポインターを置き、OpenAPI パラメーターのプレビュー をクリックします。
DTS はタスク開始前に事前チェックを実行します。事前チェックの結果は、以下のとおりに対応してください。
失敗:失敗した項目の横にある 詳細の表示 をクリックし、問題を解決してから再度事前チェックを実行してください。
警告 — 無視不可:詳細の表示 をクリックし、問題を解決してから再度事前チェックを実行してください。
警告 — 無視可能:警告の詳細の確認 をクリックします。詳細の表示 ダイアログボックスで 無視 をクリックし、OK をクリックします。再び事前チェック をクリックして続行します。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 6:インスタンスの購入および開始
成功率 が 100% になるまで待ち、その後 次へ:インスタンスの購入 をクリックします。
購入 ページで、以下の設定を行います。
パラメーター 説明 必須 課金方法 サブスクリプション:前払い方式。長期利用にコスト効率が良いです。従量課金:時間単位で課金されます。短期利用に適しています。不要になったらインスタンスを解放して課金を停止してください。 はい リソースグループ設定 同期インスタンスのリソースグループ。デフォルト: デフォルトリソースグループResource Management とは いいえ インスタンスクラス 同期スループットの階層。データ量および遅延要件に基づいて選択してください。「データ同期インスタンスのインスタンスクラス」をご参照ください。 はい サブスクリプション期間 サブスクリプション 課金方法で利用可能です。選択肢:1~9 か月、または 1、2、3、5 年。 条件付き Data Transmission Service(従量課金)サービス利用規約 を読み、同意してください。
購入および開始 をクリックします。ダイアログボックスで OK をクリックします。
タスクはタスクリストに表示されます。そこで進行状況を監視してください。
特殊ケース
ソースが ApsaraDB RDS for SQL Server インスタンスの場合、DTS は同期のためにインスタンス上に rdsdt_dtsacct という名前のアカウントを自動的に作成します。 タスクの実行中にこのアカウントを削除したり、パスワードを変更したりしないでください — そうしないと、タスクが失敗する可能性があります。 詳細については、「システムアカウント」をご参照ください。
次のステップ
DTS コンソールのタスクリストで、タスクのステータスおよび同期遅延を監視します。
タスク開始後に同期対象を調整するには、タスク構成を編集してください。ただし、同期範囲からデータベースを削除することはできません。
高スループットワークロード向けにタスクの信頼性を向上させるには、専用クラスターの購入を検討してください。