「通常データ変更」機能を使用すると、事前チェック、承認、ロールバックのサポートが組み込まれたチケットベースのワークフローを通じて、データベースに対して INSERT、UPDATE、DELETE、TRUNCATE ステートメントを実行できます。
仕組み
すべてのデータ変更は、4 つのステージを経ます。
送信 — SQL ステートメントとチケットの詳細を設定し、チケットを送信します。
事前チェック — DMS は SQL 構文を検証し、送信されたステートメントタイプが「通常データ変更」でサポートされていることを確認します。
承認 — データベース管理者 (DBA) は、変更がデータベースパフォーマンスに影響を与える可能性があるか、また必要な権限が付与されているかを確認します。
実行 — 承認された SQL を実行します。結果が期待どおりでない場合は、ロールバックチケットを作成して元のデータを復元します。
前提条件
開始する前に、以下を確認してください。
対象のデータベースインスタンスは、DMS で 安定的な変更 モードまたは [セキュリティコラボレーション] モードで管理されています。詳細については、「コントロールモード」をご参照ください。
注意事項
チケットを送信した後、承認または拒否される前であっても、いつでもチケットをクローズできます。チケットをクローズすると、関連するタスクの実行が妨げられます。
まずテスト環境でチケットを送信してください。DMS は影響を受ける行数を確認し、変更ごとにバックアップファイルを生成するため、結果が期待どおりでない場合にデータを復元できます。
開発の速度を維持するために、テスト環境で承認をスキップするように設定できます。詳細については、「SQL Correct」をご参照ください。
DMS は、UPDATE または DELETE ステートメントを実行する前に、自動的にバックアップスクリプトを生成します。
論理データベース(論理データベース)、論理テーブル(論理テーブル)、およびルーティングアルゴリズム(ルーティングアルゴリズム)を使用する場合、1 つのチケットですべてのシャードをカバーできます。物理データベースまたは物理テーブルごとに個別のチケットを提出する必要はありません。
SQL ステートメントにルーティングフィールドが含まれ、ルーティングアルゴリズムが設定されている場合、DMS はステートメントを一致する物理テーブルにルーティングします。
ルーティングアルゴリズムが設定されていない、ルーティングフィールドが存在しない、またはルーティングフィールドのデータ型がアルゴリズムと一致しない場合、DMS はすべてのデータベースのすべてのテーブルでステートメントを順次実行します。これには完了までにより長い時間がかかります。
データ変更の送信と実行
ステップ 1:チケットの設定と送信
DMS コンソール V5.0 にログインします。
左上隅の
アイコンにポインターを合わせ、[すべての機能] > [データベース開発] > [データ変更] > [通常データ変更] を選択します。通常モードでは、トップナビゲーションバーで [データベース開発] > [データ変更] > [通常データ変更] を選択します。
データ変更チケットウィザードの [適用] ステップで、チケットの詳細を入力します。
以下のパラメーターは、セキュリティコラボレーションモードで管理されているインスタンスを反映しています。安定的な変更モードのインスタンスでは、オプションが若干異なる場合があります。データソースインスタンス変更機能はカナリアリリース中です。
パラメーター 必須 説明 変更ターゲット はい [データベース] または [データソースインスタンス] を選択します。データソースインスタンスの変更は、ApsaraDB RDS for MySQL、PolarDB for MySQL、および AnalyticDB for MySQL インスタンスでのみサポートされています。 データベース または インスタンス はい 変更するデータベースまたはインスタンス。変更権限を持つものを選択します。データソースインスタンスは 1 つしか選択できません。 理由カテゴリ はい データ変更の理由。後でチケットを見つけやすくするのに役立ちます。DMS 管理者は [O&M] > [設定管理] で理由カテゴリを追加または変更できます。詳細については、「設定管理」をご参照ください。 ビジネス背景 はい 変更の目的。詳細な説明は承認プロセスを迅速化します。 実行方法 はい 承認後にタスクを実行する担当者。オプション:[承認後にチケット申請者が実行]、[承認後に自動実行]、または [最終承認者が実行]。DMS 管理者は [O&M] > [設定管理] で利用可能なオプションを変更できます。詳細については、「設定管理」をご参照ください。 影響を受ける行 はい 変更によって影響を受けると推定される行数。 変更用 SQL ステートメント はい SQL の提供方法:[テキスト] (直接入力) または [添付ファイル] (ファイルをアップロード)。 SQL テキスト はい (テキストの場合) 実行する SQL ステートメント。複数のステートメントはセミコロン ( ;) で区切ります。DMS は送信時に構文を検証し、無効な SQL は送信をブロックします。[変更ターゲット] が [データソースインスタンス] の場合、すべてのテーブル名の前に${dbName}.${tableName}を付けます。添付ファイル はい (添付ファイルの場合) SQL ステートメントを含むファイル。サポートされているフォーマット:TXT、ZIP、または SQL。最大サイズ:15 MB。 ロールバック用 SQL ステートメント いいえ ロールバック SQL を [テキスト] または [添付ファイル] として提供します。提供された場合、DMS はロールバックチケット作成時にこれらのステートメントを事前に入力します。提供されない場合は、手動で入力する必要があります。 SQL テキスト (ロールバック) いいえ (テキストの場合) 変更をロールバックするために使用される SQL ステートメント。 添付ファイル (ロールバック) いいえ (添付ファイルの場合) ロールバック SQL を含むファイル。サポートされているフォーマット:TXT、ZIP、または SQL。最大サイズ:15 MB。 ステークホルダーの変更 いいえ チケットの詳細を表示し、承認プロセスに参加できる追加のユーザー。ここにリストされていないユーザー (DMS 管理者と DBA を除く) は、チケットの詳細にアクセスできません。 添付ファイル いいえ 変更に関する追加のコンテキストを提供するサポートファイル。 [送信] をクリックします。
ステップ 2:SQL ステートメントの事前チェック
チケットを送信すると、DMS は自動的に事前チェックを実行して SQL 構文を検証し、ステートメントタイプがサポートされていることを確認し、SQL ステートメントを実行するために必要な権限があることを検証します。事前チェックが失敗した場合は、指示に従って SQL を更新し、再送信してください。

ステップ 3:チケットの承認
事前チェックに合格したら、[承認申請] をクリックします。[プロンプト] ダイアログで、[OK] をクリックします。
デフォルトでは、DBA の承認が必要です。デフォルトの承認テンプレートを変更するには、「SQL Correct」トピックの「デフォルトの承認テンプレートの変更」セクションをご参照ください。
ステップ 4:変更の実行
ビジネスへの影響を最小限に抑えるため、オフピーク時にデータ変更を実行してください。
チケットが承認されたら、[変更を実行] をクリックします。[タスク設定] ダイアログで、実行オプションを設定し、[実行を確認] をクリックします。
ステップ 1 で [承認後に自動実行] を選択した場合、このステップは自動的にスキップされます。一時停止したタスクを再開すると、実行は一時停止したところから続行されます。
SQL の実行は、ロックタイムアウトチェック、データベース負荷チェック、実行後スリープポリシーなど、セキュリティルール内のチェックポイントによっても管理されます。セキュリティルールのチェックポイントを確認するには、ルールの詳細ページを開き、[SQL 実行制御] をクリックします。チェックポイントの設定を変更するには、「SQL 実行の制御を設定する」をご参照ください。
パラメーター 説明 実行戦略 タスクを実行するタイミング。[すぐに実行] は、[実行を確認] をクリックするとすぐにタスクを開始します。[スケジュール] では、日付と時刻 (例:2024年5月22日 00:00:00) を指定できます。 終了時刻を指定 DMS が完了状況に関わらずタスクを停止する時刻。これにより、長時間の変更がピーク時間と重なるのを防ぎます。実際の停止時刻は最大で ±1 分異なる場合があります。 単一トランザクションとして送信を有効化 デフォルト:オフ。オンの場合、すべての SQL ステートメントが単一のトランザクションとして実行されます。いずれかのステートメントが失敗した場合、トランザクション内のすべての DML ステートメントがロールバックされます。DDL ステートメントはロールバックできません。オフの場合、各ステートメントは独自のトランザクションとなり、失敗すると以前のステートメントをロールバックせずに実行が停止します。 バックアップを有効化 デフォルト:オフ。オンの場合、DMS は UPDATE または DELETE ステートメントを実行する前にバックアップ SQL を生成します。MySQL および MariaDB データベースの場合は REPLACE INTO ステートメント、その他のデータベースの場合は INSERT ステートメントです。バックアップは MongoDB または Redis ではサポートされていません。サポートされている MySQL データベースタイプ:ApsaraDB RDS for MySQL、PolarDB for MySQL、PolarDB-X、および Alibaba Cloud 上にない MySQL データベース。 プライマリ/セカンダリノードチェック 高可用性を維持するために、プライマリインスタンスとセカンダリインスタンス間のデータ同期を監視します。 カナリアリリースタイプ DMS が SQL 実行をどのように進めるかを制御します。[カナリアリリースなし]:すべてのステートメントを自動的に実行します。[最初の SQL ステートメント実行後に一時停止]:最初のステートメントが成功した後に一時停止します。続行するには [再試行] をクリックします。[SQL ステートメント実行後に一時停止]:各ステートメントの後に一時停止します。次のステートメントを実行するには [再試行] をクリックします。 タスクが完了したら、[操作] 列の [詳細] をクリックして、チケットのステータス、実行回数、影響を受けた行数、実行されたステートメント、およびログを確認します。
変更の検証
チケット詳細パネルの [基本情報] セクションで、データベース名にポインターを合わせ、[クエリ] をクリックします。

SQL コンソールタブで、テーブルデータが期待どおりであることを確認します。
変更のロールバック
データが期待どおりでない場合は、ロールバックチケットを作成して元の状態に復元します。
バックアップサポートマトリックス
ロールバックする前に、ご利用のシナリオがサポートされていることを確認してください。
| ロールバックソース | 利用可能な場合 |
|---|---|
| ロールバックテキスト | チケット送信時に [ロールバック用 SQL ステートメント] フィールドにロールバック SQL を提供した場合 |
| ロールバック添付ファイル | チケット送信時にロールバック SQL ファイルをアップロードした場合 |
| バックアップファイル | [バックアップを有効化] がオンになっており、変更で UPDATE または DELETE ステートメントが使用された場合 |
バックアップは MongoDB または Redis データベースではサポートされていません。
ロールバックチケットの作成
[実行] セクションで、データベースの [操作] 列にある [ロールバックチケットの生成] をクリックします。
ロールバックソースを選択し、[OK] をクリックします。
ロールバックテキスト — チケット送信時に入力したロールバック SQL から事前に入力されます
ロールバック添付ファイル — チケット送信時にアップロードしたロールバックファイル
バックアップファイル — 実行中に生成されたバックアップファイル (バックアップが有効だった場合のみ利用可能)
必要に応じて、ロールバック内容を編集します。
ロールバックテキスト — エディターで直接 SQL ステートメントを修正します。
ロールバック添付ファイルまたはバックアップファイル — ファイルをダウンロードし、SQL を編集して、ロールバックチケットに再アップロードします。
ロールバックの詳細を確認し、[送信] をクリックします。ロールバックチケットは、通常データ変更チケットと同じワークフローに従います。
バックアップファイルのダウンロード
バックアップファイルを保存したり、変更後に DMS にアップロードしたりするには、[操作] 列の [バックアップのダウンロード] をクリックします。
バックアップファイルには以下が含まれます。
変更のために実行された元の SQL ステートメント
元の SQL の SELECT 句
データバックアップのために生成された SQL ステートメント
例:
/*
[データベース]: rds@rm-bp144d5ky4l4rli0417****.mysql.rds.aliyuncs.com:3306[rds mysql]
*/
/*
[SQL]:
UPDATE t_order
SET product_id = 88
WHERE id = 10054
[バックアップ SQL]: SELECT *
FROM t_order
WHERE id = 10054
*/
REPLACE INTO `t_order`(`id`,`product_id`,`gmt_create`,`gmt_modified`,`customer_id`,`price`,`status`,`province`) VALUES
(10054,81,'2021-12-14 09:44:44','2021-12-14 09:44:44',71,63.45,'Success','Hangzhou');ファイルからバックアップ SQL を抽出し、それが正しいことを確認してから、通常データ変更チケットを送信してデータを復元します。
誤った UPDATE ステートメントが実行され、DMS がバックアップとして REPLACE INTO ステートメントの代わりに INSERT ステートメントを生成した場合、手動でデータを復元してください。
よくある質問
-
Q: DMS でデータ変更を送信すると、「公開されたデータベース XXX のトポロジーが、変更ベースラインデータベースのトポロジーと一致しません。トポロジーを修正して、もう一度お試しください。」というエラーメッセージで失敗します。
A: 論理データベースの場合、ベースラインデータベースと本番データベースのシャーディング構造は一致している必要があります。たとえば、ベースラインデータベースに 8 つのデータベースと 256 のテーブルがある場合、本番データベースにも 8 つのデータベースと 256 のテーブルが必要です。これは、本番環境の変更用スクリプトがベースラインデータベースとの比較によって生成されるためです。したがって、ベースライン環境と本番環境は一致している必要があります。
-
Q: DMS でデータ変更チケットを作成する際、Redis データベースが見つかりません。
A: ドロップダウンリストにはすべてのデータベースが表示されるわけではありません。通常は最近使用したデータベースのみが表示されます。データベースがドロップダウンリストにない場合は、検索する必要があります。SQL コンソールウィンドウから接続文字列をコピーして検索に使用できます。
次のステップ
SQL Correct — テスト環境向けの承認不要のデータ変更を設定する
SQL 実行の制御を設定する — SQL 実行のためのセキュリティルールチェックポイントをカスタマイズする
設定管理 — 理由カテゴリと実行方法を管理する