ROWID列を含む表の処理

ROWID GENERATED ALWAYS(デフォルト)のデータ型の列を含むターゲット表に挿入しようとすると、次のODBCエラーで失敗します。

ODBC error: SQLSTATE 428C9 native database error -798. {DB2 FOR OS/390}{ODBC DRIVER}{DSN08015} DSNT408I SQLCODE = -798, ERROR: YOU CANNOT INSERT A VALUE INTO A COLUMN THAT IS DEFINED WITH THE OPTION GENERATED ALWAYS. COLUMN NAME ROWIDCOL.

次のいずれかを行って、ROWID列を含む表がOracle GoldenGateによって処理されるように準備します。

  • ターゲット表のROWID列がGENERATED BY DEFAULTとして定義されていることを確認します。

  • 表定義を変更できない場合、次の手順を使用して回避します。

ROWID GENERATE ALWAYSを回避する手順:

  1. ソース表に対するExtract TABLE文を作成し、その文で、ROWID列を除外するCOLSEXCEPT句を使用します。たとえば:

    TABLE tab1, COLSEXCEPT (rowidcol);

    COLSEXCEPT句で、ROWID列が取得されてターゲット表にレプリケートされないようにします。

  2. ターゲット表では、ReplicatがROWIDをキーとして使用しないようにします。これは、次のいずれかの方法で行えます。

    • ターゲット表定義で主キーを指定します。

    • キーを作成できない場合、表に対するReplicat MAPパラメータを作成し、その文にKEYCOLS句を使用してROWID列以外の一意の列を含めます。Replicatは、それらの列をキーとして使用します。たとえば:

      MAP tab1, TARGET tab1, KEYCOLS (num, ckey);