フィルタでのデータ使用可能性の確保
データベースで、変更された列の値のみをトランザクション・ログに記録している場合、変更されていない列のいずれかが選択基準によって参照されると、エラーが発生する可能性があります。Oracle GoldenGateは、このような行操作を無視し、それらを破棄ファイルに出力して警告を発行します。
欠落列エラーを回避するには、次のように選択条件を作成します。
-
可能であれば、選択基準として主キー列のみを使用します。
-
それらの列に対するサプリメンタル・ロギングを有効にして、必要な列値を使用できるようにします。あるいは、
TABLE
パラメータのFETCHCOLS
オプションまたはFETCHCOLSEXCEPT
オプションを使用することもできます。これらのオプションは、すべてのサポートされているデータベースに対して有効です。値がログに存在しない場合に、データベースに問い合せて値をフェッチします。FILTER
句またはWHERE
句が実行される前に値を取得するため、TABLE文の
FETCHBEFOREFILTER
オプションをFILTER
句またはWHERE
句の前に指定します。たとえば:TABLE DEMO.PEOPLE, FETCHBEFOREFILTER, FETCHCOLS (age), FILTER (age > 50);
-
最初に列が存在するかどうかをテストし、次に列の値をテストします。列が存在するかどうかをテストするには、次の構文を使用します。
column_name
{= | <>} {@PRESENT | @ABSENT}次の例では、
amount
列が10,000を超えている場合にすべてのレコードが戻されます。amount
が存在しない場合、レコードは破棄されません。WHERE (amount = @PRESENT AND amount > 10000)