フィルタでのデータ使用可能性の確保

データベースで、変更された列の値のみをトランザクション・ログに記録している場合、変更されていない列のいずれかが選択基準によって参照されると、エラーが発生する可能性があります。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)