このドキュメントでは、ロックフリー構造変更タスクを送信することでデータベースのロックフリー構造変更を実現する方法について説明します。
背景
原理
ロックフリー構造変更の実行プロセスは、以下の図のようになります:

説明
タスクが複数のテーブルにまたがる場合、直列変更を行います。つまり、あるテーブルのすべてのステップの処理が完了してから、次のテーブルの処理に移ります。
単一テーブルの処理手順は以下のとおりです:
シャドウテーブルの作成:ユーザーが入力した変更内容に基づき、シャドウテーブルを生成します。シャドウテーブルの構造は、ユーザーが最終的に期待するテーブル構造になります。
データ同期:元のテーブルのデータを、フル同期および増分同期の形式でシャドウテーブルに同期します。
データ一貫性検証:増分同期の過程で、定期的にデータ一貫性検証を行います。
業務の一時停止:元のテーブルとシャドウテーブルのデータが近づいたら、業務を一時停止します。OceanBaseデータベースのバージョンに応じて、ユーザーロックとテーブルロックの2種類の業務一時停止方法が提供されます。lock userとlock tableの時間はデータベースカーネルが決定し、プログラムでは制限しません。その中で、ユーザーロックが成功すると、そのユーザーのセッションを同期的にキルします。2秒以内にキルに成功しない場合、ロックは失敗します。
データの均衡:業務が一時停止された後、増分同期とデータ検証は継続的に実行されます。25秒以内にデータが均衡しない場合、タスクは失敗して終了します。
新旧テーブル名の切り替え:データが均衡した後、元のテーブルとシャドウテーブルをrenameし、シャドウテーブルを新しい業務テーブルとして本番業務に使用します。
ロックフリー構造変更タスクの実行プロセス
ユーザーがロックフリー構造変更タスクを送信します。
ユーザーが入力したSQL文を事前チェックします。
タスクの承認プロセス。
ロックフリー構造変更タスクを実行します。
サポートされる変更範囲
分類 |
操作 |
サポート |
備考 |
|---|---|---|---|
| 列操作 | 列型修改 | はい | |
| 並べ替え (before/after/first) | はい | ||
| 文字セットの変換 | はい | ||
| 列の名前変更 | いいえ | ||
| 列の追加 | はい | ||
| 列の削除 | はい | ||
| 主キー列の追加 | いいえ | ||
| 主キー | 主キーの追加 | はい | テーブルにはNULLではない一意のキーが存在する必要があります |
| 主キーの変更 | はい | テーブルにはNULLではない一意のキーが存在する必要があります | |
| 主キーの削除 | はい | テーブルにはNULLではない一意のキーが存在する必要があります | |
| パーティション | パーティションの削除 | はい | |
| truncateパーティション | いいえ | ||
| パーティションの再編成 | はい | ||
| 非パーティションテーブルからパーティションテーブルへの変更 | はい | ||
注意事項
データベースのディスク容量が十分であることを確認してください。
テーブルには 主キーまたはNULLではない一意のキー が 存在し、外部キーは存在しない 必要があります。
現在のテーブルでロックフリー構造変更を実行している間に、他のDDL操作を実行するとタスクが失敗します。
OceanBaseデータベースのMySQLモードでは、テーブル名は54文字以下である必要があります。
ODCがOceanBaseデータベースCommunity Editionに接続する場合、データソース設定情報にはクラスタ名とSYSテナントアカウントが含まれている必要があります。
テーブル名切り替え時の書き込み禁止ポリシーについて、デフォルトではロックユーザー方式のみが提供されます。一部のOceanBaseバージョンでは、ロックテーブル方式も追加で提供されます。
単一のロックフリー構造変更タスクの実行中は、列の追加と削除を同時に行うことはできません。必要に応じて、数回に分けて変更を行ってください。
ロックフリー構造変更タスクの新規作成
左側のナビゲーションペインで、チケット > オンラインスキーマ変更 > ロックフリー構造変更の新規作成 をクリックします。
ロックフリー構造変更の新規作成 ページで、以下の情報を入力します。
情報項目説明データベース 変更対象のデータベースを選択します。 テーブル名切り替え時の書き込み禁止ポリシー - ロックユーザー:テーブル名切り替え前に、システムは指定したデータベースアカウントをロックし、そのアカウントの現在のセッションを終了します。切り替え中は、当該アカウントを使用するすべてのアプリケーションがデータベースにアクセスできなくなります。業務のピーク時間帯は避けて実行し、業務への影響を軽減することを推奨します。
注意
ロックフリー構造変更タスクの実行中は、当該タスクを実行したユーザーは、ロックフリー構造変更に関連するテーブルの変更操作を実行できません。
- ロックテーブル:テーブル名切り替え前に、システムは変更対象のテーブルをロックし、他のセッションからのアクセスをブロックします。業務のピーク時間帯は避けて実行し、業務への影響を軽減することを推奨します。
変更定義 - CREATE TABLE:OceanBaseデータベースでサポートされていない構文には、CREATEステートメントを使用する必要があります。
- ALTER TABLE:OceanBaseデータベースV4.0.0以降では、ALTER TABLE OFFLINEモードでALTERステートメントを使用できます。
SQL内容 編集エリアにSQLスクリプトを入力します。 テーブル切り替え設定 データの一貫性が確認された後、元のテーブルを対象テーブルに切り替えます。 - ロック失敗時のリトライ回数:業務上書き込みが禁止されている場合、ロックに失敗した場合の自動リトライ回数です。
- 完了後のソーステーブルクリーンアップポリシー:名前変更後処理なし を選択すると、ソーステーブルは名前変更されますが削除されません。即時削除 を選択すると、ロックフリー構造変更完了後にソーステーブルが削除されます。
タスク設定 - 実行方法:即時実行、スケジュール実行、手動実行 のいずれかを選択してタスクの実行方法を設定します。
- テーブル名切り替え方法:自動切り替え、手動切り替え のいずれかを選択します。
説明 説明 テキストボックスに、200文字以内の説明情報を入力できます。この項目はオプションです。 - ロックユーザー:テーブル名切り替え前に、システムは指定したデータベースアカウントをロックし、そのアカウントの現在のセッションを終了します。切り替え中は、当該アカウントを使用するすべてのアプリケーションがデータベースにアクセスできなくなります。業務のピーク時間帯は避けて実行し、業務への影響を軽減することを推奨します。
作成する をクリックし、ロックフリー構造変更の新規作成を完了します。
タスクが生成された後、チケット > オンラインスキーマ変更 リストでタスク情報を確認できます。
ロックフリー構造変更タスクの表示
タスク情報の表示
ロックフリー構造変更リストで、操作項目の 表示 ボタンをクリックします。
表示されたタスク詳細パネルで、タスク情報 タブをクリックし、所属データベース、タスクタイプ、リスクレベル、SQL内容などの情報を確認します。
再度開始する をクリックすると、ロックフリー構造変更タスクを再開始できます。
タスクプロセスの表示
タスク詳細パネルで、タスクプロセス タブをクリックし、タスク開始状態、事前チェック、承認状態、実行状態、実行結果などの情報を確認します。
実行履歴の表示
タスク詳細パネルで、実行履歴 タブをクリックし、新規テーブルとソーステーブルのDDL、およびタスクの実行進捗を確認します。
タスクログの表示
タスク詳細パネルで、タスクログ タブをクリックし、タスクのすべてのログとアラートログを確認します。
情報項目 |
説明 |
|---|---|
| 全部ログ | 全部ログには、タスクの INFO、ERROR、WARN ログなどの全量情報が表示されます。検索、ダウンロード、コピー ボタンをクリックすると、情報の検索、全部ログのダウンロード、またはコピーができます。 |
| アラートログ | アラートログには、タスクの ERROR と WARN ログが個別に表示されます。タスクが失敗した場合、アラートログからエラー情報を確認できます。検索、ダウンロード、コピー ボタンをクリックすると、情報の検索、アラートログのダウンロード、またはコピーができます。 |