Oracle GoldenGate 23ai における TRANDATAについて

## はじめに
Oracle GoldenGate 23ai でレプリケーション環境を構築するケースでは、Database への最小サプリメンタル・ロギングに加えてスキーマ、あるいは表レベルのサプリメンタル・ロギングを行います。(推奨はスキーマ)
この時、GoldenGate 23ai の 管理サービス (GUI) から TRANDATA情報+で実行する場合が多いと思いますが、その確認操作まわりを実施してみたいと思います。
## デプロイメントの準備とTRANDATA情報+まで
[Oracle GoldenGate 23ai for Oracle 簡易インストール](https://qiita.com/TDM26587/items/64efd8f124fe745dd5f5) をご参照下さい。

(デプロイメント作成後の管理サービス・ホーム画面)
![Q11-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/8b508e40-7af3-0e71-2a60-cba93e6e9d25.png)
・	TRANDATA情報 + から SCOTT スキーマレベルのサプリメンタル・ロギング設定をします。 
![Q11-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/649f217c-1e0e-6c3a-66ac-5deda61129b1.png)
用意された表の数が5となっています。
```
scott@PDBTK> select TABLE_NAME from user_tables;
TABLE_NAME
--------------------
DEPT
EMP
BONUS
SALGRADE
GALAXIES 👈
```
これは、Vector型のレプリケーションを試した際に、GALAXIES表を作成したためです。
ちなみにスキーマレベルでTRANDATAしている場合、GALAXIES表は作成直後からサプリメンタル・ロギング対象となります。
[Oracle GoldenGate 23ai による Vector 型のレプリケーションについて](https://qiita.com/TDM26587/items/301eb0e1b0e55aae8cf9)を参照して下さい。
## AdminClient から TRANDATA情報を取得する
GoldenGate 23ai S/Wには AdminClient (管理クライアント)というコマンド・ラインI/Fがあります。GoldenGate が Microservice Architecture (Edition)へ完全移行する前に存在していた ggsciというツールに類似するものです。

・	AdminClient の起動
```
[oracle@ggtest bin]$ cd /u01/app/oracle/product/goldengate/23ai/bin
[oracle@ggtest bin]$ ./adminclient
Oracle GoldenGate Administration Client for Oracle
Version 23.4.1.24.05 OGGCORE_23.4.0.0.0OGGR_LINUX.X64_240529.0500_FBO
Copyright (C) 1995, 2024, Oracle and/or its affiliates. All rights reserved.
Linux, x64, 64bit (optimized) on May 29 2024 09:21:59
オペレーティング・システムの文字セットはUTF-8と識別されました。
OGG (接続されていません) 1>
OGG (接続されていません) 1>connect http://ggtest:9001 DEPLOYMENT dep01 as ggadmin PASSWORD パスワード <return>
```
PDBに接続し、EMP表のサプリメンタル・ロギングの状況を確認します。
```
OGG (http://ggtest:9001 dep01) 2> DBLOGIN USERIDALIAS PDB
データベースに正常にログインしました。

OGG (http://ggtest:9001 dep01 as PDB@ORCL235) 8> INFO TRANDATA scott.EMP <return>
表SCOTT.EMPのサプリメンタル・トランザクション・ログ・データのロギングは有効です。
表SCOTT.EMPの論理レプリケーションは有効化されています。
表SCOTT.EMPの列が補足的にログに記録されます:
  - "EMPNO"
表SCOTT.EMPの準備済CSN: 3917223
表SCOTT.EMPのJSONの部分更新が無効化されています
```
サプリメンタル・ロギングが有効である事に加え、準備済(Instantiation) CSN 値が表示されます。これは、初期データ・ロードの際に使用されるSCNになります。(GoldenGateだとCSNと表記される)
GUIからの ADD (SCHEMA)TRANDATA が正常に処理できた事が確認できました。
## Oracle Database 21c 新機能 - LOGICAL REPLICATION
GoldenGateによる ADD (SCHEMA)TRANDATA と同等な機能として、Oracle Database 21c から実装されたDLLにLOGICAL REPLICATION句があるので、ここで試してみます。
[Oracle 21cのマニュアル・リンクはこちら](https://docs.oracle.com/cd/F39414_01/sqlrf/CREATE-TABLE.html#GUID-F9CE0CC3-13AE-4744-A43C-EAC7A71AAAB6__SECTION_WMZ_QTB_GNB)

![Q11-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470713/4aefda0e-3b3e-5210-a9b1-24a3240921db.png)

これは表定義に対してENABLE LOGICAL REPLICATION を付加する事でGoldenGate による論理的なレプリケーションが可能なスキーマ・オブジェクトとして作成または変更できる機能です。以下サンプルです。
```
SQL>Create table foo
(
    pk_col number primary key, 
    b varchar(200)
) 
enable logical replication; 👈
表が作成されました。

scott@PDBTK> select TABLE_NAME from user_tables;

TABLE_NAME
--------------------
DEPT
EMP
BONUS
SALGRADE
FOO 👈
GALAXIES
```
先ほどと同様にAdminClient から状況を確認します。
```
OGG (http://ggtest:9001 dep01 as PDB@ORCL235) 10> INFO TRANDATA scott.foo
表SCOTT.FOOのサプリメンタル・トランザクション・ログ・データのロギングは有効です。
表SCOTT.FOOの論理レプリケーションは有効化されています。
表SCOTT.FOOの列が補足的にログに記録されます:
  - "PK_COL"
表SCOTT.FOOの準備済CSN: 13780348
表SCOTT.FOOのJSONの部分更新が無効化されています
```
参考までに、以下でサプリメンタル・ロギングを止める事もできます。
```
scott@PDB>Alter table 表名 disable LOGICAL REPLICATION;
```
## Oracle Database ディクショナリによる確認
AdminClient は PDBに接続して情報を収集していますが、SQL*PlusやSQL Developer などの標準的なツールでディクショナリを検索する事でも確認が可能です。
・	DBA_CAPTURE_PREPARED_TABLES
```
sys@ORCL235> select * from dba_capture_prepared_tables;
TABLE_OWNER          TABLE_NAME                  SCN TIMESTAM SUPPLEME SUPPLEME SUPPLEME SUPPLEME PARTIAL_
-------------------- -------------------- ---------- -------- -------- -------- -------- -------- --------
SCOTT                BONUS                   3917218 24-07-19 NO       NO       NO       NO       DISABLED
SCOTT                DEPT                    3917220 24-07-19 NO       NO       NO       NO       DISABLED
SCOTT                EMP                     3917223 24-07-19 NO       NO       NO       NO       DISABLED
SCOTT                SALGRADE                3917226 24-07-19 NO       NO       NO       NO       DISABLED
SCOTT                GALAXIES                3976630 24-07-22 NO       NO       NO       NO       DISABLED
SCOTT                FOO                    13780348 24-08-20 NO       NO       NO       NO       DISABLED
```
・	DBA_OGG_AUTO_CAPTURED_TABLES
```
sys@ORCL235> select* from SYS.DBA_OGG_AUTO_CAPTURED_TABLES;

OWNER                NAME                 ALLOW_NOVALIDATE_PK
-------------------- -------------------- ----------------------------
SCOTT                DEPT                 NO
SCOTT                EMP                  NO
SCOTT                BONUS                NO
SCOTT                SALGRADE             NO
SCOTT                GALAXIES             NO
SCOTT                FOO                  NO
```
・	USER_OGG_AUTO_CAPTURED_TABLES (scott から)
```
scott@PDB> select * from USER_OGG_AUTO_CAPTURED_TABLES;
NAME                 ALLOW_NOVALIDATE_PK
-------------------- --------------------------------
BONUS                NO
DEPT                 NO
EMP                  NO
FOO                  NO
GALAXIES             NO
SALGRADE             NO
```
## 最後に
ここでの内容は、あまり表立って話題になるケースは少ないかも知れません。が、GoldenGate による論理的なレプリケーション環境を構築する際には重要です。特定の表だけがレプリケーションに失敗するなどの状況においては、まず調査すべき内容かも知れません。また、ADD (SCHEMA)TRANDATAで表に対する準備済CSNが付加される仕組みは別途まとめたいと考えています。