Data Transmission Service (DTS) を使用して、自己管理 SQL Server データベースから PolarDB for MySQL クラスターへ、スキーマ、既存データ、および継続的な変更を含むデータを継続的に同期します。
前提条件
開始する前に、以下の要件を満たしていることを確認してください。
DTS がサポートするバージョンで実行されている自己管理 SQL Server データベース。サポートされるバージョンについては、「データ同期シナリオの概要」をご参照ください。
PolarDB for MySQL クラスターがすでに作成済みであること。「Enterprise Edition クラスターの購入」または「サブスクリプションクラスターの購入」をご参照ください。
PolarDB for MySQL クラスターに、ソース SQL Server データベースからの全データを格納できる十分な空きストレージがあること。
ソースデータベースが以下のいずれかの条件を満たす場合、タスクを複数のサブタスクに分割してください。
10 個を超えるデータベースを含む場合
1 時間あたり 1 回を超える頻度でログをバックアップする場合
データベースごとに 1 時間あたり 100 件を超える DDL 文を実行する場合
データベースごとに 1 秒あたり 20 MB を超える速度でログを書き込む場合
1,000 個を超えるテーブルに対して変更データキャプチャ (CDC) を有効にする必要がある場合
増分同期モードの選択
タスクを構成する前に、ソースデータベースに適した増分同期モードを選択してください。この選択により、ソースデータベースの準備手順および適用される制限が異なります。
| モード | サポートされるテーブルの種類 | ソースデータベースへの影響 | 推奨用途 |
|---|---|---|---|
| ハイブリッドログベース解析 | ヒープテーブル、プライマリキーを持たないテーブル、圧縮テーブル、計算列を含むテーブルなど、すべてのテーブルタイプ | トリガー dts_cdc_sync_ddl、ハートビートテーブル dts_sync_progress、DDL 履歴テーブル dts_cdc_ddl_history を作成し、ソースデータベースおよび特定のテーブルで CDC を有効化 | DTS がアーティファクトを書き込んでも問題ないほとんどの SQL Server デプロイメント |
| ソースデータベースログに基づく増分同期 | クラスター化インデックスとプライマリキー列を持つテーブルのみ。ヒープテーブル、プライマリキーを持たないテーブル、圧縮テーブル、計算列を含むテーブルはサポートされません。 | ソースデータベース内にトリガー dts_cdc_sync_ddl、ハートビートテーブル dts_sync_progress、DDL 履歴テーブル dts_cdc_ddl_history を作成 | データベースを変更できない環境 |
| CDC インスタンスのポーリング | Amazon RDS for SQL Server、Microsoft Azure SQL Database、Microsoft Azure SQL Managed Instance、Microsoft Azure SQL Server on Virtual Machine、Google Cloud SQL for SQL Server | DTS がデータベースレベルおよびテーブルレベルで CDC を有効化。一時的なテーブルロック(数秒)が発生 | サードパーティクラウド上の SQL Server データベース |
ApsaraDB RDS for SQL Server の Web エディションを実行しているインスタンスでは、必ずソースデータベースログに基づく増分同期を使用する必要があります。
テーブルがヒープテーブル、プライマリキーのないテーブル、圧縮テーブル、または計算列を含むテーブルであるかどうかを確認するには、「よくある質問」をご参照ください。
課金
| 同期タイプ | 費用 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 課金対象です。「課金概要」をご参照ください。 |
サポートされる同期トポロジ
一方向 1 対 1 同期
一方向 1 対多同期
一方向 多対 1 同期
サポートされるすべてのトポロジについては、「同期トポロジ」をご参照ください。
同期可能な SQL 操作
| 操作タイプ | 文 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE、ADD COLUMN、DROP COLUMN、DROP TABLE、CREATE INDEX、DROP INDEX |
以下の DDL 操作は同期されません。
パーティションテーブルまたは関数を含むテーブルに対する
CREATE TABLEユーザー定義型を含む DDL 操作
オンライン DDL 操作
トランザクション DDL 文
制限事項
ソースデータベースの制限事項
テーブルには PRIMARY KEY または一意制約が設定されており、すべてのフィールドが一意である必要があります。これがない場合、ターゲットデータベースに重複レコードが含まれる可能性があります。
テーブルをオブジェクトとして選択し、ターゲットデータベースで名前を変更する場合、タスクあたり最大 5,000 テーブルまで可能です。それ以上のテーブルを同期する場合は、複数のタスクを構成するか、データベースレベルで同期を実施してください。
同期タスクあたり最大 10 データベースまでです。それ以上の場合は、複数のタスクを構成してください。
DTS はソースログを読み取るために
fn_log関数を使用します。タスク完了前にソースデータベースのログをクリアしないでください。これを行うと、タスクが失敗する可能性があります。データログに関する要件:
バックアップモードは Full に設定し、フル物理バックアップを実行する必要があります。
増分同期のみの場合:ログを少なくとも 24 時間保持する必要があります。
完全同期+増分同期の場合:ログを少なくとも 7 日間保持する必要があります。完全同期完了後は、保持期間を 24 時間に短縮できます。
ソースが読み取り専用インスタンスの場合、DDL 操作は同期できません。
ソースデータベースが Azure SQL Database の場合、1 つのデータ同期タスクで同期できるのは 1 データベースのみです。
ApsaraDB RDS for SQL Server インスタンスの場合:タスクを開始する前に、透過的データ暗号化 (TDE) を無効化します。 「TDE の無効化」を参照してください。
スキーマ同期および完全データ同期中は、DDL 文を実行しないでください。これを行うと、タスクが失敗します。
完全データ同期では、ソースデータベースで
READ_COMMITTED_SNAPSHOTトランザクション隔離モードを使用して、共有ロックによるデータ書き込みのブロッキングを防止してください。これを省略した場合、データの不整合やインスタンス障害が発生する可能性があり、そのような状況は DTS のサービスレベル契約 (SLA) の対象外となります。
CDC 要件(ソーステーブルで CDC を有効化する必要がある場合に適用):
sys.sysservers内のsrvnameフィールドが、SERVERPROPERTY関数の戻り値と一致している必要があります。自己管理 SQL Server データベースの場合:データベース所有者は
saユーザーである必要があります。ApsaraDB RDS for SQL Server の場合:データベース所有者はsqlsaユーザーである必要があります。Enterprise エディション:SQL Server 2008 以降が必要です。
Standard エディション:SQL Server 2016 SP1 以降が必要です。
SQL Server 2017(Standard または Enterprise エディション)を実行している場合は、より新しいバージョンに更新してください。
CDC を有効化したテーブルの数が DTS がサポートする上限を超えると、事前チェックに失敗します。
CDC を有効化したテーブルの単一フィールドが 64 KB を超える場合、次のコマンドを実行してください:
exec sp_configure 'max text repl size', -1;
モード固有の制限事項
ハイブリッドログベース解析:
10 分以内の時間枠で列の追加または削除を行わないでください。たとえば、以下のシーケンスを 10 分以内に実行すると、タスクエラーが発生します。
ALTER TABLE test_table DROP COLUMN Flag; ALTER TABLE test_table ADD Remark nvarchar(50) not null default('');CDC を有効化したテーブルに対して
SELECT INTOまたはTRUNCATEを実行しないでください。また、DTS が作成したトリガーを削除しないでください。CDC コンポーネントは、デフォルトで増分データを 3 日間保持します。保持期間を変更するには、次のコマンドを実行してください。
exec console.sys.sp_cdc_change_job @job_type = 'cleanup', @retention = <time>;<time>は保持期間(分単位)です。1 日あたりの増分レコードが 1,000 万件を超える場合は、<time>を1,440に設定してください。遅延や不安定さを回避するため、タスクあたりの CDC 有効化テーブル数を 1,000 以下に維持してください。
CDC を有効化したテーブルの最大書き込みレートを 1 秒あたり 1,000 レコードに設定してください。
CDC を有効化すると、ソースデータベース上で一時的なテーブルロック(数秒)が発生します。
ソースデータベースログに基づく増分同期:
プライマリキー列を含むクラスター化インデックスを持つテーブルのみがサポートされます。
CDC インスタンスのポーリング:
DTS アカウントは、データベースレベルの CDC を有効化するために
sysadminロールのメンバーである必要があります。テーブルレベルの CDC では、特権アカウントが必要です。Microsoft Azure SQL Database(vCore モデル):すべてのデータベースがサポートされます。Azure SQL Database(DTU モデル):S3 以上のサービスタイアのデータベースのみがサポートされます。
Amazon RDS for SQL Server:特権アカウントはストアドプロシージャ経由でデータベースレベルで CDC を有効化できます。
クラスター化列ストアインデックスは CDC でサポートされません。
タスクあたり最大 1,000 テーブルまでです。
1 分間に 2 回を超えて列の追加または削除を行わないでください。
同期中にソースデータベース上の CDC インスタンスを変更しないでください。これにより、データ損失が発生する可能性があります。
CDC はデフォルトで増分データを 3 日間保持します。保持期間の変更コマンドはハイブリッドモードと同じです。
CDC を有効化すると、ソースデータベース上で一時的なテーブルロック(数秒)が発生します。
一般的な制限事項
スキーマ同期は、データベース、スキーマ、テーブルをサポートします。異種データベースエンジン間のシナリオでは、ビュー、トリガー、ストアドプロシージャは同期されません。
サポートされないデータの型:
TIMESTAMP、CURSOR、ROWVERSION、SQL_VARIANT、HIERARCHYID、POLYGON、GEOMETRY、およびGEOGRAPHY。同期データに 4 バイト文字(希少文字または絵文字)が含まれる場合、ターゲットデータベースおよびテーブルは
UTF8mb4文字セットを使用する必要があります。ターゲットデータベースのcharacter_set_serverパラメーターをUTF8mb4に設定してください。DTS は、複雑な DDL 操作、ユーザー定義型を含む DDL 操作、オンライン DDL 操作、トランザクション DDL 文をサポートしません。
増分同期中にインデックスの再作成を実行しないでください。これにより、タスクが失敗し、データが失われる可能性があります。また、DTS は CDC を有効化したテーブルに対するプライマリキー関連の DDL 操作も同期できません。
DTS がターゲットデータベースへの DDL 文の書き込みに失敗した場合、タスクは実行を継続します。 失敗した DDL 文はタスクログで確認できます。 詳細については、「タスクログの表示」をご参照ください。
完全データ同期では同時 INSERT 操作が使用されるため、ターゲットテーブルに断片化が発生します。完全同期完了後、ターゲットの表領域はソースよりも大きくなります。
データ同期を開始する前に、ソースおよびターゲットデータベースのパフォーマンスへの影響を評価してください。オフピーク時間帯にデータ同期を実施することを推奨します。初期完全データ同期中、DTS はソースおよびターゲットデータベースの読み取り・書き込みリソースを使用するため、データベースサーバーの負荷が増加する可能性があります。
同期中に他のソースからターゲットデータベースにデータを書き込まないでください。これにより、データの不整合が発生します。
タスク開始後に同期オブジェクトを変更する際、データベースの追加または削除はできません。
ソースインスタンスが ApsaraDB RDS for SQL Server インスタンスの場合、DTS は
rdsdt_dtsacctという名前のアカウントを作成します。タスクの実行中は、このアカウントを削除したりパスワードを変更したりしないでください。詳細については、「システムアカウント」をご参照ください。DTS タスクが失敗した場合、DTS テクニカルサポートは 8 時間以内に復旧を試みます。復旧中、タスクが再起動され、タスクパラメーター(データベースパラメーターではない)が変更される可能性があります。
ソースデータベースの準備
同期タスクを作成する前に、自己管理 SQL Server データベースでログ設定を構成してください。複数のデータベースから同期する場合は、各データベースに対してこれらの手順を繰り返してください。
復元モードを Full に変更します。これは、SQL Server Management Studio (SSMS) でも実行できます。詳細については、「データベースの復元モードの表示または変更 (SQL Server)」をご参照ください。
use master; GO ALTER DATABASE <database_name> SET RECOVERY FULL WITH ROLLBACK IMMEDIATE; GO<database_name>はご利用のソースデータベース名に置き換えてください。例:use master; GO ALTER DATABASE mytestdata SET RECOVERY FULL WITH ROLLBACK IMMEDIATE; GOソースデータベースの論理バックアップを作成します。すでに論理バックアップが存在する場合は、この手順をスキップしてください。
<database_name>:ソースデータベース名<physical_backup_device_name>:バックアップファイルのパスおよびファイル名
BACKUP DATABASE <database_name> TO DISK='<physical_backup_device_name>'; GO例:
BACKUP DATABASE mytestdata TO DISK='D:\backup\dbdata.bak'; GOソースデータベースのログバックアップを作成します。
BACKUP LOG <database_name> to DISK='<physical_backup_device_name>' WITH init; GO例:
BACKUP LOG mytestdata TO DISK='D:\backup\dblog.bak' WITH init; GO
同期タスクの構成
データ同期タスクページに移動します。
Data Management (DMS) コンソール にログインします。
上部ナビゲーションバーで、Data + AI をクリックします。
左側のナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
ナビゲーションパスは、DMS コンソールのモードおよびレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。また、「データ同期タスクページ」に直接アクセスすることもできます。
同期インスタンスが配置されているリージョンを選択します。新しい DTS コンソールでは、上部ナビゲーションバーでリージョンを選択します。
タスクの作成 をクリックします。以下のパラメーターを使用して、ソースおよびターゲットデータベースを構成します。
セクション パラメーター 説明 該当なし タスク名 タスクを識別するためのわかりやすい名前。一意である必要はありません。DTS がデフォルト名を生成します。 ソースデータベース DMS データベースインスタンスの選択 既存の DMS データベースインスタンスを選択するとパラメーターが自動入力されます。手動で構成する場合は空白のままにしてください。 データベースタイプ SQL Server を選択します。 アクセス方法 Express Connect、VPN Gateway、または Smart Access Gateway を選択します。 インスタンスリージョン 自己管理 SQL Server データベースが配置されているリージョン。自己管理データベースの場合は、事前に必要なネットワーク環境をデプロイしてください。「準備の概要」をご参照ください。 Alibaba Cloud アカウント間でのデータレプリケーション このシナリオでは、いいえ を選択します。 接続先 VPC ソース SQL Server データベースがデプロイされている仮想プライベートクラウド (VPC) の ID。 IP アドレス ソースデータベースのサーバー IP アドレス。 ポート番号 サービスポート。デフォルト:1433。 データベースアカウント ソースデータベースへの接続に使用するアカウントには、 sysadminロールの権限が必要です。CREATE USER および GRANT (Transact-SQL) をご参照ください。データベースパスワード データベースアカウントのパスワード。 ターゲットデータベース DMS データベースインスタンスの選択 既存の DMS データベースインスタンスを選択するとパラメーターが自動入力されます。手動で構成する場合は空白のままにしてください。 データベースタイプ PolarDB for MySQL を選択します。 アクセス方法 Alibaba Cloud インスタンス を選択します。 インスタンスリージョン PolarDB for MySQL クラスターが配置されているリージョン。 PolarDB クラスター ID ターゲットとなる PolarDB for MySQL クラスターの ID。 データベースアカウント ターゲットクラスターへの接続に使用するアカウント。ターゲットデータベースに対する読み取り・書き込み権限が必要です。 データベースパスワード データベースアカウントのパスワード。 [接続をテストして続行] をクリックします。 DTS は、Alibaba Cloud データベースインスタンスのホワイトリストと Elastic Compute Service (ECS) インスタンスのセキュリティグループルールに、DTS サーバーの CIDR ブロックを自動的に追加します。 データセンターまたはサードパーティのクラウドプラットフォーム上の自己管理データベースの場合、DTS サーバーの CIDR ブロックをデータベースのホワイトリストに手動で追加してください。 詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
警告ホワイトリストまたはセキュリティグループルールに DTS CIDR ブロックを追加すると、セキュリティリスクが生じます。続行する前に、強力な認証情報の使用、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的な監査などの予防措置を講じてください。さらにセキュリティを強化するには、Express Connect、VPN Gateway、または Smart Access Gateway 経由でデータベースを DTS に接続することを推奨します。
同期するオブジェクトおよび詳細設定を構成します。
パラメーター 説明 同期タイプ スキーマ同期、完全データ同期、および 増分データ同期 を選択します。完全データ同期が最初に実行され、既存データをコピーして増分同期のベースラインを提供します。 競合テーブルの処理モード 事前チェックしてエラーを報告オブジェクト名マッピング(デフォルト):ターゲットにソーステーブルと同じ名前のテーブルが存在する場合、事前チェックに失敗します。ターゲットテーブルの名前を変更する必要がある場合は、「」をご利用ください。エラーを無視して続行:名前競合のチェックをスキップします。完全同期中は、プライマリキーまたは一意キーが競合するレコードはスキップされます。増分同期中は、ターゲットレコードを上書きします。スキーマが異なる場合、初期化が失敗するか、一部のデータが失われる可能性があります。 SQL Server 増分同期モード 「増分同期モードの選択」で選択したモードを選択します。UI 上のラベルは次のとおりです:非ヒープテーブルのログベース解析およびヒープテーブルの CDC ベース増分同期(ハイブリッドログベース解析)、ソースデータベースのログに基づく増分同期(ヒープテーブルはサポートされません)、および CDC インスタンスのポーリングおよびクエリによる増分同期。 ソースオブジェクト 同期するオブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト に移動させます。この異種データベースのシナリオでは、テーブルのみを同期できます。 選択済みオブジェクト 送信先で単一オブジェクトの名前を変更するには、そのオブジェクトを右クリックし、名前の変更オプションを使用します。詳細については、「単一オブジェクトの名前をマップする」をご参照ください。複数のオブジェクトを一度に名前を変更するには、[一括編集] をクリックします。詳細については、「複数のオブジェクト名を一度にマップする」をご参照ください。特定のテーブルについて同期する SQL 操作を選択するには、そのテーブルを右クリックして操作を設定します。条件で行をフィルターするには、オブジェクトを右クリックし、WHERE 条件を指定します。詳細については、「フィルター条件を指定する」をご参照ください。 次へ:詳細設定 をクリックし、以下のパラメーターを構成します。
パラメーター 説明 モニタリングとアラート タスクが失敗した場合や同期遅延がしきい値を超えた場合に通知を受け取るには、[Yes] を選択します。アラートのしきい値と通知設定を構成してください。詳細については、「モニタリングとアラートの設定」をご参照ください。 接続失敗時の再試行時間 DTS が接続失敗後に再試行する時間を設定します。有効値:10~1,440 分。デフォルト値:720。少なくとも 30 分以上に設定してください。この期間内に DTS が再接続できた場合、タスクは再開されます。複数のタスクで同じソースまたはターゲットデータベースを共有している場合、最も短い再試行時間が適用されます。DTS が接続を再試行している間は、DTS インスタンスに対して課金されます。ビジネス要件に基づいて再試行時間の範囲を適切に指定し、ソースおよび宛先インスタンスをリリースした後は、速やかに DTS インスタンスをリリースすることを推奨します。 その他の問題発生時の再試行時間 DDL または DML の失敗後に DTS が再試行する時間を設定します。有効値:1~1,440 分。デフォルト値:10。少なくとも 10 分以上に設定してください。接続失敗時の再試行時間より短く設定する必要があります。 ETL の設定 同期中に抽出・変換・書き出し(ETL)を使用してデータを変換する場合は、[Yes] を選択します。詳細については、「ETL とは」および「ETL の設定」をご参照ください。 次へ:タスク設定の保存と事前チェック をクリックします。この構成の API パラメーターをプレビューするには、ボタンにカーソルを合わせて OpenAPI パラメーターのプレビュー をクリックしてから、次へ進んでください。
DTS はタスク開始前に事前チェックを実行します。いずれかのチェックに失敗した場合は、詳細を表示 をクリックして原因を確認し、トラブルシューティングを行ってください。その後、再度事前チェック をクリックします。アラート項目を無視できる場合は、アラートの詳細を確認 をクリックし、次に 無視、そして 再度事前チェック をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。
成功率 が 100% に達したら、次へ:インスタンスの購入 をクリックします。
同期インスタンスの課金方法およびインスタンスクラスを構成します。
セクション パラメーター 説明 新しいインスタンスクラス 課金方法 サブスクリプション:固定期間分を前払いする方式で、長期利用の場合にコスト効率が高くなります。従量課金:1 時間単位で課金される方式で、短期利用に適しています。ご利用のインスタンスが不要になった場合は、課金を停止するためにインスタンスをリリースしてください。 リソースグループ設定 同期インスタンスのリソースグループです。デフォルト:default resource group。詳細については、「What is Resource Management? インスタンスクラス 同期スループットのクラスです。詳細については、「Instance classes of data synchronization instances」をご参照ください。 サブスクリプション期間 サブスクリプション課金方法でのみ利用可能です。1~9 か月、または 1 年、2 年、3 年、5 年の期間を選択できます。 Data Transmission Service (従量課金) サービス利用規約 を読み、同意してください。
購入して開始 をクリックします。確認ダイアログで、OK をクリックします。
タスクがタスクリストに表示されます。ここから同期の進行状況をモニターできます。
次のステップ
「同期トポロジ」— 1 対多または多対 1 トポロジの設定
オブジェクト名のマップ — ターゲットデータベース内のオブジェクト名の変更
モニタリングとアラートの設定 — 遅延および障害アラートを設定します
タスクログの表示 — DDL の失敗とタスクの活動を確認する