4.3.6. データベーススキーマの進化
Debezium は、時間の経過とともにスキーマの変更をキャプチャーできます。CDC が SQL Server に実装される方法により、スキーマの更新時にコネクターがデータ変更イベントの生成を継続するには、データベース Operator と連携して作業する必要があります。
前述のように、Debezium は SQL Server の変更データキャプチャー機能を使用します。これは、SQL Server がソーステーブルで実行されるすべての変更が含まれるキャプチャーテーブルを作成することを意味します。ただし、キャプチャーテーブルは静的であるため、ソーステーブル構造が変更された場合に更新する必要があります。この更新はコネクター自体によって実行されませんが、昇格された権限を持つ Operator によって実行する必要があります。
通常、スキーマの変更を実行する方法は 2 つあります。
- Cold: これは Debezium が停止したときに実行されます。
- hot - Debezium の実行中に実行されます
どちらのアプローチも、それぞれ長所と短所があります。
いずれの場合も、同じソーステーブルで新しいスキーマが更新される前に、手順を完全に実行することが重要です。そのため、手順が一度だけ実行されるように、すべての DDL を 1 つのバッチで実行することが推奨されます。
CDC がソーステーブルに対して有効になっている場合、スキーマの変更がすべてサポートされるわけではありません。このような例外の 1 つが列の名前を変更したり、そのタイプを変更したりすることです。SQL Server では操作を実行できません。
SQL Server の CDC メカニズム自体では必要ありませんが、列を NULL
から NOT NULL
に変更する場合やその逆の場合、新しいキャプチャーインスタンスを作成する必要があります。これは、SQL Server コネクターが変更された情報を選択できるようにするために必要です。それ以外の場合は、出力される変更イベントには、元の値に一致するように対応するフィールド(true
または false
)の オプション
の値が設定されます。
4.3.6.1. コールドスキーマの更新
これは最も安全な手順ですが、高可用性要件のあるアプリケーションでは実行できない可能性があります。オペレーターは、以下のステップに従う必要があります。
- データベースレコードを生成するアプリケーションを一時停止します。
- Debezium がストリーミングされていないすべての変更をストリーミングするのを待機します。
- コネクターを停止する
- ソーステーブルスキーマにすべての変更を適用します。
-
パラメーター
@capture_instance
の一意の値でsys.sp_cdc_enable_table
の手順を使用して、更新ソーステーブルの新しいキャプチャーテーブルを作成します。 - アプリケーションの再開
- コネクターの起動
-
Debezium が新しいキャプチャーテーブルからストリーミングを開始する場合、パラメーター
@capture_instance
を古いキャプチャーインスタンス名に設定したsys.sp_cdc_disable_table
ストアドプロシージャーを使用すると、古いキャプチャーテーブルからストリーミングを削除できます。