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