表からの競合検出および解消の削除

Oracle Database 23ai以降では、AUTO_CDRが削除されるとAUTO_CDR関連の列がUNUSEDとマークされるため、表から完全に自動競合検出および解決(ACDR)を削除すると、表への影響が少なくなります。

REMOVE_AUTO_CDRプロシージャをコールした後、メンテナンス・ウィンドウで未使用列を手動で削除できます。これは、ALTER TABLE ... DROP COLUMN操作がリソースを大量に消費する大規模な表の場合に役立ちます。

REMOVE_AUTO_CDRプロシージャのコール時にすべてのAUTO_CDR内部列をすぐに削除する場合は、最初にADD_AUTO_CDRまたはALTER_AUTO_CDRプロシージャのadditional_optionsパラメータREMOVE_HIDDEN_COLUMNSを使用して表をマークする必要があります。

DBMS_GOLDENGATE_ADMパッケージのREMOVE_AUTO_CDRプロシージャを使用して、表をUNUSEDとしてタグ付けし、ブロックを最小限に抑えます。後のステージで、列を削除するか、列を保持するかを選択できます。

  1. Oracle GoldenGate管理者としてインバウンド・サーバー・データベースに接続します。
  2. REMOVE_AUTO_CDRプロシージャを実行して表を指定します。
  3. 表をレプリケートする各Oracle Databaseに対して前述のすべてのステップを繰り返します。

例9-28 表の競合検出および解決の削除

この例では、HR.EMPLOYEES表の競合検出および解決を削除します。

BEGIN
  DBMS_GOLDENGATE_ADM.REMOVE_AUTO_CDR(
    SCHEMA_NAME => 'HR',
    TABLE_NAME  => 'EMPLOYEES');
END;
/

列を削除するには、ADD_AUTO_CDR.REMOVE_HIDDEN_COLUMNSフラグをADD_AUTO_CDRプロシージャのadditional_flagsパラメータとして使用します。

表内の非表示列の表示に使用できる例を次に示します。

次の問合せでは、DBA_UNUSED_COL_TABSパッケージを使用して、EMPLOYEES表に未使用列があるかどうかを判断します。

SELECT OWNER, TABLE_NAME, COUNT
  FROM DBA_UNUSED_COL_TABS
  WHERE OWNER = 'HR'
  AND TABLE_NAME = 'EMPLOYEES'
  ORDER BY OWNER, TABLE_NAME;
出力は次のように表示されます。
OWNER        TABLE_NAME    COUNT
--------    ------------ ----------
HR            EMPLOYEES      1  
次の問合せでは、EMPLOYEES表の列グループに対してACDRが削除されたときにシステムによってタグ付けされた非表示列をリストします。
SELECT OWNER, TABLE_NAME, COLUMN_ID, COLUMN_NAME, DATA_TYPE, HIDDEN_COLUMN
  FROM DBA_TAB_COLS
  WHERE OWNER = 'HR'
  AND TABLE_NAME = 'EMPLOYEES'
  AND HIDDEN_COLUMN = 'YES' AND USER_GENERATED= 'NO'
  ORDER BY OWNER, TABLE_NAME, COLUMN_ID;
出力は次のように表示されます。
OWNER        TABLE_NAME    COLUMN_ID  COLUMN_NAME      DATA_TYPE     HIDDEN_COLUMN  
------------ ------------ ---------- -------------    ------------ ---------------
HR           EMPLOYEES    SYS_C00014_22092220:30:52$   TIMESTAMP(6)       YES