# Real-Time Oracle to Snowflake Replication with GoldenGate 26ai on GCP

**Oracle GoldenGate 26ai | Snowflake | Google Cloud Platform**  
*Complete Step-by-Step Implementation Guide — April 2026*

* * *

## 1\. Architecture Overview

This guide walks through the complete implementation of **real-time Oracle Database replication to Snowflake** using Oracle GoldenGate (OGG) 26ai on Google Cloud Platform (GCP).

The solution captures change data from an **Oracle 19c CDB** on a GCP Compute Engine VM and delivers it to a **Snowflake data warehouse** using the OGG for Distributed Applications and Analytics (DAA) binary.

### 1.1 Pipeline Flow

The replication pipeline flows through four main stages:

```plaintext
Oracle 19c CDB  →  EXTSRC (Integrated Extract)  →  DISTPATH (Distribution Service)
                                                          ↓
                                          Receiver Service on Hub VM
                                                          ↓
                                     REPSF (Replicat) → Snowflake
```

| Stage | Component | Role |
| --- | --- | --- |
| **1** | EXTSRC (Integrated Extract) | Reads Oracle redo logs on the source VM |
| **2** | DISTPATH (Distribution Service) | Ships trail files over the internal GCP network |
| **3** | Receiver Service | Accepts incoming trail files on the hub VM |
| **4** | REPSF (Replicat) | Applies changes to Snowflake via the Snowflake Event Handler |

### 1.2 Infrastructure Summary

| Component | VM / Service | Ports |
| --- | --- | --- |
| Oracle 19c CDB (source) | oraksddblab1 (GCP) | 1521 |
| OGG for Oracle (Extract) | oraksddblab1 (GCP) | 9100–9104 |
| OGG DAA (Replicat) | oraksdprod (GCP) | 9200–9204 |
| Snowflake (target) | AWS US East (N. Virginia) | 443 |
| GCP Internal Network | 10.142.0.0/24 | 9100–9204 |

### 1.3 Software Versions

| Component | Version |
| --- | --- |
| Oracle GoldenGate for Oracle | 23.26.1.0.0 (OGG 26ai) |
| Oracle GoldenGate DAA | 23.26.1.0.0 (OGG 26ai) |
| Oracle Database | 19c Enterprise Edition (19.3.0.0.0) |
| Snowflake JDBC Driver | 3.26.1 |
| Java | OpenJDK 17 (bundled with OGG) |
| Operating System | Oracle Linux 8 (x86-64) |

* * *

## 2\. Required Downloads

Download the following binaries from the **Oracle Software Delivery Cloud** ([edelivery.oracle.com](https://edelivery.oracle.com)) or the Oracle GoldenGate Downloads page. A valid Oracle account is required for production use.

### 2.1 Binaries

| File / Part Number | Purpose — Install On |
| --- | --- |
| `V1054774-01.zip` (OGG 26ai for Oracle) | Source VM — Extract side |
| `V1054834-01.zip` (OGG DAA 26ai) | Hub VM — Replicat / Snowflake side |
| `snowflake-jdbc-3.26.1.jar` (Maven) | Hub VM — Snowflake JDBC driver |

> **Important:** The OGG DAA binary is separate from the Oracle-source binary. Both must be downloaded and installed on their respective VMs.

### 2.2 Using the Bundled Dependency Downloader

OGG DAA includes a Maven-based dependency downloader for Snowflake JDBC. After installing the DAA binary, run:

```bash
cd /u01/app/ogg/ogg_home/opt/DependencyDownloader
./snowflake.sh
# JAR lands at: dependencies/snowflake-jdbc-3.26.1/snowflake-jdbc-3.26.1.jar
```

* * *

## 3\. Operating System Preparation

Perform these steps on **both VMs as root** before running any OGG installer.

### 3.1 Create OS User and Directory Structure

```bash
# Install required packages
dnf install -y libaio bc binutils gcc make libgcc glibc glibc-devel sysstat

# Create OS user and groups
groupadd oinstall
groupadd dba
useradd -g oinstall -G dba -m ogg

# Create directory structure
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/ogg/ogg_home      # OGG_HOME (binaries)
mkdir -p /u01/app/ogg/ogg_sm        # Service Manager
mkdir -p /u01/app/ogg/ogg_deploy    # Deployment
mkdir -p /u01/software              # ZIP staging

chown -R ogg:oinstall /u01/app/ogg
chown -R ogg:oinstall /u01/app/oraInventory
chown -R ogg:oinstall /u01/software
```

### 3.2 Add Swap Space

The OGG installer requires at least **150 MB of swap**. GCP VMs have none by default.

```bash
dd if=/dev/zero of=/swapfile bs=1M count=512
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo '/swapfile swap swap defaults 0 0' >> /etc/fstab
```

### 3.3 Environment Variables (ogg user)

Add to `/home/ogg/.bash_profile` on the **source VM**:

```bash
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export OGG_HOME=/u01/app/ogg/ogg_home
export TNS_ADMIN=/u01/app/ogg/ogg_home/network/admin
export ORACLE_SID=SRCDB
export PATH=$ORACLE_HOME/bin:$OGG_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME/lib:$LD_LIBRARY_PATH
```

* * *

## 4\. Installing OGG Binaries

Install OGG binaries on each VM using **silent mode**. The response file schema version must match the OGG 26ai release.

### 4.1 oggcore.rsp — Source VM (Oracle binary)

```ini
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v26_1_0
INSTALL_OPTION=ORA23ai
SOFTWARE_LOCATION=/u01/app/ogg/ogg_home
INVENTORY_LOCATION=/u01/app/oraInventory
UNIX_GROUP_NAME=oinstall
```

### 4.2 oggcore.rsp — Hub VM (DAA binary)

```ini
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v26_1_0
INSTALL_OPTION=Generic
SOFTWARE_LOCATION=/u01/app/ogg/ogg_home
INVENTORY_LOCATION=/u01/app/oraInventory
UNIX_GROUP_NAME=oinstall
```

> **Important:** For the DAA binary, `INSTALL_OPTION` must be `Generic` — **not** `BigData`. Check the bundled `oggcore.rsp` for the exact value.

### 4.3 Run the Installer

```bash
# Unzip binary
unzip /u01/software/V1054774-01.zip -d /u01/software/ogg_stage

# Run silent installer
cd /u01/software/ogg_stage/fbo_ggs_Linux_x64_Oracle_services_shiphome/Disk1
./runInstaller -silent -showProgress -responseFile /home/ogg/oggcore.rsp

# Run as root (first Oracle product only)
/u01/app/oraInventory/orainstRoot.sh
```

* * *

## 5\. Creating Deployments with oggca.sh

After binary installation, create the Service Manager and deployment using `oggca.sh` in silent mode.

### 5.1 Key Lessons Learned

| Rule | Detail |
| --- | --- |
| **Strong passwords** | Must have uppercase, lowercase, digit, and special char from: `- ! @ % & * . # _` |
| **Different usernames** | Use separate users for `ADMINISTRATOR_USER` (SM) and `DEPLOYMENT_ADMINISTRATOR_USER` |
| **Bind to all interfaces** | Set `HOST_SERVICEMANAGER=0.0.0.0` for browser and inter-VM access |
| **Directory pre-creation** | Only pre-create `ogg_sm/` and `ogg_deploy/var/data/bdb/` — let oggca create all subdirs |
| **Environment variables** | Set `TNS_ADMIN`, `ORACLE_HOME`, `ORACLE_SID` in the shell AND in the response file |
| **CDB schema naming** | `OGG_SCHEMA` must use `C##OGGADMIN` format for CDB databases |

### 5.2 oggca.rsp — Source VM

```ini
oracle.install.responseFileVersion=/oracle/install/rspfmt_oggca_response_schema_v23_1_0
CONFIGURATION_OPTION=ADD
DEPLOYMENT_NAME=OGG_SRC
ADMINISTRATOR_USER=oggadmin
ADMINISTRATOR_PASSWORD=Ogg_Admin26
DEPLOYMENT_ADMINISTRATOR_USER=oggdeploy
DEPLOYMENT_ADMINISTRATOR_PASSWORD=Ogg_Admin26
SERVICEMANAGER_DEPLOYMENT_HOME=/u01/app/ogg/ogg_sm
SERVICEMANAGER_ETC_HOME=/u01/app/ogg/ogg_sm/etc
SERVICEMANAGER_CONF_HOME=/u01/app/ogg/ogg_sm/etc/conf
SERVICEMANAGER_SSL_HOME=/u01/app/ogg/ogg_sm/etc/ssl
SERVICEMANAGER_VAR_HOME=/u01/app/ogg/ogg_sm/var
SERVICEMANAGER_DATA_HOME=/u01/app/ogg/ogg_sm/var/data
HOST_SERVICEMANAGER=0.0.0.0
PORT_SERVICEMANAGER=9100
SECURITY_ENABLED=false
STRONG_PWD_POLICY_ENABLED=true
CREATE_NEW_SERVICEMANAGER=true
REGISTER_SERVICEMANAGER_AS_A_SERVICE=false
INTEGRATE_SERVICEMANAGER_WITH_XAG=false
EXISTING_SERVICEMANAGER_IS_XAG_ENABLED=false
OGG_SOFTWARE_HOME=/u01/app/ogg/ogg_home
OGG_DEPLOYMENT_HOME=/u01/app/ogg/ogg_deploy
OGG_ETC_HOME=/u01/app/ogg/ogg_deploy/etc
OGG_CONF_HOME=/u01/app/ogg/ogg_deploy/etc/conf
OGG_SSL_HOME=/u01/app/ogg/ogg_deploy/etc/ssl
OGG_VAR_HOME=/u01/app/ogg/ogg_deploy/var
OGG_DATA_HOME=/u01/app/ogg/ogg_deploy/var/data
ENV_TNS_ADMIN=/u01/app/ogg/ogg_home/network/admin
ENV_ORACLE_SID=SRCDB
OGG_SCHEMA=C##OGGADMIN
SHARDING_ENABLED=false
ADMINISTRATION_SERVER_ENABLED=true
PORT_ADMINSRVR=9101
DISTRIBUTION_SERVER_ENABLED=true
PORT_DISTSRVR=9102
NON_SECURE_DISTSRVR_CONNECTS_TO_SECURE_RCVRSRVR=false
RECEIVER_SERVER_ENABLED=true
PORT_RCVRSRVR=9103
METRICS_SERVER_ENABLED=true
METRICS_SERVER_IS_CRITICAL=false
PORT_PMSRVR=9104
UDP_PORT_PMSRVR=9105
PMSRVR_DATASTORE_TYPE=BDB
PMSRVR_DATASTORE_HOME=/u01/app/ogg/ogg_deploy/var/data/bdb
REMOVE_DEPLOYMENT_FROM_DISK=false
```

### 5.3 Run oggca and Register Daemon

```bash
# Clean and recreate directories
rm -rf /u01/app/ogg/ogg_sm /u01/app/ogg/ogg_deploy
mkdir -p /u01/app/ogg/ogg_sm
mkdir -p /u01/app/ogg/ogg_deploy/var/data/bdb

# Set environment variables
export TNS_ADMIN=/u01/app/ogg/ogg_home/network/admin
export ORACLE_SID=SRCDB
export ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
export OGG_HOME=/u01/app/ogg/ogg_home
export PATH=$ORACLE_HOME/bin:$OGG_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME/lib:$LD_LIBRARY_PATH

# Run oggca
/u01/app/ogg/ogg_home/bin/oggca.sh -silent -responseFile /home/ogg/oggca.rsp

# Register as systemd daemon (run as root)
export OGG_USER=ogg
export OGG_HOME=/u01/app/ogg/ogg_home
export OGG_CONF_HOME=/u01/app/ogg/ogg_sm/etc/conf
export OGG_VAR_HOME=/u01/app/ogg/ogg_sm/var

/u01/app/ogg/ogg_home/lib/utl/install/OracleGoldenGateInstall.sh \
  --install --ogg-home /u01/app/ogg/ogg_home \
  --sm-home /u01/app/ogg/ogg_sm --ogg-user ogg
```

* * *

## 6\. Oracle Database Preparation (CDB)

These steps configure Oracle 19c to work with OGG integrated capture. All commands run as **SYSDBA in the CDB root** unless noted.

### 6.1 Enable GoldenGate and Supplemental Logging

```sql
-- Enable GoldenGate replication
ALTER SYSTEM SET enable_goldengate_replication=TRUE SCOPE=BOTH;

-- Enable supplemental logging at CDB level
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE FORCE LOGGING;

-- Enable at PDB level
ALTER SESSION SET CONTAINER=SRCDBPDB;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
```

### 6.2 Create OGG Common User

> **Important:** For CDB databases, the OGG user must be a **common user** (`C##` prefix) created in `CDB$ROOT`.

```sql
CREATE USER C##OGGADMIN IDENTIFIED BY "OggAdmin_2026"
  DEFAULT TABLESPACE USERS
  TEMPORARY TABLESPACE TEMP
  CONTAINER=ALL;

GRANT CREATE SESSION       TO C##OGGADMIN CONTAINER=ALL;
GRANT ALTER SESSION        TO C##OGGADMIN CONTAINER=ALL;
GRANT RESOURCE             TO C##OGGADMIN CONTAINER=ALL;
GRANT DBA                  TO C##OGGADMIN CONTAINER=ALL;
GRANT SELECT ANY DICTIONARY TO C##OGGADMIN CONTAINER=ALL;
GRANT FLASHBACK ANY TABLE  TO C##OGGADMIN CONTAINER=ALL;
GRANT SELECT ANY TABLE     TO C##OGGADMIN CONTAINER=ALL;
GRANT CREATE ANY TABLE     TO C##OGGADMIN CONTAINER=ALL;
GRANT INSERT ANY TABLE     TO C##OGGADMIN CONTAINER=ALL;
GRANT UPDATE ANY TABLE     TO C##OGGADMIN CONTAINER=ALL;
GRANT DELETE ANY TABLE     TO C##OGGADMIN CONTAINER=ALL;

EXEC DBMS_GOLDENGATE_AUTH.GRANT_ADMIN_PRIVILEGE('C##OGGADMIN', CONTAINER=>'ALL');
```

### 6.3 TNS Configuration

```bash
# Copy Oracle tnsnames.ora to OGG's network/admin directory
cp /u01/app/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora \
   /u01/app/ogg/ogg_home/network/admin/tnsnames.ora

# Test resolution
tnsping SRCDB
```

* * *

## 7\. GCP Firewall Rules

Two firewall rules are needed: one for **inter-VM traffic**, one for **browser access** to the OGG Web UI.

```bash
# Allow inter-VM traffic on all OGG ports
gcloud compute firewall-rules create allow-ogg-internal \
  --project=<your-project> \
  --direction=INGRESS --network=default --action=ALLOW \
  --rules=tcp:9100-9204 --source-ranges=10.142.0.0/24

# Allow browser access (replace YOUR_IP)
gcloud compute firewall-rules create allow-ogg-browser \
  --project=<your-project> \
  --direction=INGRESS --network=default --action=ALLOW \
  --rules=tcp:9100,9101,9200,9201 --source-ranges=YOUR_IP/32
```

> **Note:** OGG services bind to `127.0.0.1` by default. Set `HOST_SERVICEMANAGER=0.0.0.0` in `oggca.rsp` before deployment creation to bind to all interfaces.

* * *

## 8\. Snowflake Preparation

### 8.1 RSA Key Pair Generation

Generate on the **hub VM as the ogg user**:

```bash
# Generate private key
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM \
  -out /u01/app/ogg/ogg_deploy/etc/conf/ogg/snowflake_rsa_key.p8 -nocrypt

# Extract public key (copy this output)
openssl rsa -in /u01/app/ogg/ogg_deploy/etc/conf/ogg/snowflake_rsa_key.p8 \
  -pubout 2>/dev/null | grep -v 'PUBLIC KEY' | tr -d '\n'
```

### 8.2 Snowflake Setup

```sql
USE ROLE ACCOUNTADMIN;

-- Create OGG user
CREATE USER IF NOT EXISTS OGG_USER
  DEFAULT_ROLE = SYSADMIN
  DEFAULT_WAREHOUSE = COMPUTE_WH
  MUST_CHANGE_PASSWORD = FALSE;

-- Register public key (paste key string from above)
ALTER USER OGG_USER SET RSA_PUBLIC_KEY='<paste_public_key_here>';

-- Create target database and schema
CREATE DATABASE IF NOT EXISTS OGG_REPLICATION;
CREATE SCHEMA IF NOT EXISTS OGG_REPLICATION.COMICS;

-- Grant privileges
GRANT ROLE SYSADMIN TO USER OGG_USER;
GRANT ALL ON DATABASE OGG_REPLICATION TO ROLE SYSADMIN;
GRANT ALL ON SCHEMA OGG_REPLICATION.COMICS TO ROLE SYSADMIN;
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE SYSADMIN;

ALTER WAREHOUSE COMPUTE_WH RESUME IF SUSPENDED;
```

### 8.3 Finding Your Snowflake Account Identifier

```sql
-- Run in Snowflake worksheet
SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();
-- Example result: DTDKDSZ-UDC61024
-- Use as: jdbc:snowflake://DTDKDSZ-UDC61024.snowflakecomputing.com/...
```

* * *

## 9\. Configuring the Replication Pipeline

### 9.1 Add Database Credential (Source VM)

```bash
curl -u oggdeploy:Ogg_Admin26 \
  -X POST 'http://localhost:9101/services/v2/credentials/OracleGoldenGate/SRCDB' \
  -H 'Content-Type: application/json' \
  -d '{"userid": "C##OGGADMIN@SRCDB", "password": "OggAdmin_2026"}'
```

### 9.2 Create and Register Extract (adminclient)

```bash
/u01/app/ogg/ogg_home/bin/adminclient

connect http://localhost:9101 as oggdeploy password Ogg_Admin26

dblogin useridalias SRCDB domain OracleGoldenGate

-- Register Extract with Oracle LogMiner (required for CDB)
register extract EXTSRC database container (SRCDBPDB)

-- Create Extract and trail
add extract EXTSRC, integrated tranlog, begin now
add exttrail lt, extract EXTSRC, megabytes 500
```

### 9.3 EXTSRC.prm Parameter File

Save to: `/u01/app/ogg/ogg_deploy/etc/conf/ogg/EXTSRC.prm`

```plaintext
EXTRACT EXTSRC
USERIDALIAS SRCDB DOMAIN OracleGoldenGate
EXTTRAIL lt
LOGALLSUPCOLS
UPDATERECORDFORMAT COMPACT
TABLE SRCDBPDB.COMICS.*;
```

### 9.4 Network Credentials (Both VMs)

Add Network domain credentials on both VMs for Distribution Path authentication:

```bash
# Source VM (port 9101)
curl -u oggdeploy:Ogg_Admin26 \
  -X POST 'http://localhost:9101/services/v2/credentials/Network/oggdeploy' \
  -H 'Content-Type: application/json' \
  -d '{"userid": "oggdeploy", "password": "Ogg_Admin26"}'

# Hub VM (port 9201)
curl -u oggdeploy:Ogg_Admin26 \
  -X POST 'http://localhost:9201/services/v2/credentials/Network/oggdeploy' \
  -H 'Content-Type: application/json' \
  -d '{"userid": "oggdeploy", "password": "Ogg_Admin26"}'
```

### 9.5 Replicat Parameter File (REPSF.prm)

```plaintext
REPLICAT REPSF
TARGETDB LIBFILE libggjava.so SET property=/u01/app/ogg/ogg_deploy/etc/conf/ogg/REPSF.properties
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 1000
DISCARDFILE /u01/app/ogg/ogg_deploy/var/lib/dirrpt/REPSF.dsc, APPEND, MEGABYTES 500
MAP SRCDBPDB.COMICS.*, TARGET COMICS.*;
```

### 9.6 Replicat Properties File (REPSF.properties)

> **Important:** OGG 26ai DAA uses `gg.target=snowflake` and `gg.eventhandler.snowflake.*` — **NOT** the older `gg.handlerlist` format.

```properties
gg.target=snowflake
gg.eventhandler.snowflake.connectionURL=jdbc:snowflake://<ACCOUNT>.snowflakecomputing.com/?user=OGG_USER&db=OGG_REPLICATION&schema=COMICS&warehouse=COMPUTE_WH&CLIENT_SESSION_KEEP_ALIVE=true&authenticator=snowflake_jwt&private_key_file=/u01/app/ogg/ogg_deploy/etc/conf/ogg/snowflake_rsa_key.p8
gg.eventhandler.snowflake.UserName=OGG_USER
gg.classpath=/u01/app/ogg/ogg_home/opt/DependencyDownloader/dependencies/snowflake-jdbc-3.26.1/snowflake-jdbc-3.26.1.jar
goldengate.userexit.writers=jvm
jvm.bootoptions=-Xmx512m -Xms64m
```

Replace `<ACCOUNT>` with your Snowflake organization-based identifier (e.g. `DTDKDSZ-UDC61024`).

### 9.7 Create Distribution Path (Web UI)

In the **source VM Web UI** (`http://<source-external-ip>:9101`), log in as `oggdeploy` and navigate to **Distribution Service Paths > Add Path**:

| Field | Value |
| --- | --- |
| Path Name | DISTPATH |
| Source Extract | EXTSRC |
| Trail Name | lt |
| Target Protocol | ws |
| Target Host | 10.142.0.3 (hub VM internal IP) |
| Port Number | 9203 |
| Target Trail Name | rt |
| Domain | Network |
| Alias | oggdeploy |

* * *

## 10\. Verification and Testing

### 10.1 Check All Processes Running

```bash
# Source VM — adminclient
connect http://localhost:9101 as oggdeploy password Ogg_Admin26
info all

# Expected:
# EXTRACT   RUNNING   EXTSRC   INTEGRATED   00:00:00   <seconds>

# Hub VM
connect http://localhost:9201 as oggdeploy password Ogg_Admin26
info all

# Expected:
# REPLICAT   RUNNING   REPSF   ...
```

### 10.2 Test Real-Time Replication

Insert test data in Oracle and verify it appears in Snowflake within seconds:

```sql
-- Oracle: Insert test data
ALTER SESSION SET CONTAINER=SRCDBPDB;

INSERT INTO COMICS.PUBLISHERS (NAME) VALUES ('Marvel Comics');

INSERT INTO COMICS.SERIES (BP_SERIES_ID, DISPLAY_NAME, LAST_NAME, SORT_NAME, IS_COMPLETE)
  VALUES (9001, 'Amazing Spider-Man', 'Amazing Spider-Man', 'Amazing Spider-Man', 'N');

INSERT INTO COMICS.OWNERS (DISPLAY_NAME) VALUES ('Test Owner');

INSERT INTO COMICS.COMICS (
  HASH, SERIES_ID, ISSUE_NR, ISSUE_TITLE, PUBLISHER_ID,
  COVER_YEAR, COVER_MONTH, PAGE_COUNT, COVER_PRICE, CURRENT_PRICE,
  FORMAT, COUNTRY, LANGUAGE, QUANTITY, READ_IT, IS_SLABBED,
  STATUS_ID, OWNER_ID, ADDED_TIMESTAMP, MODIFIED_TIMESTAMP,
  CREATED_AT, UPDATED_AT
) VALUES (
  'ABC123HASH001',
  (SELECT SERIES_ID FROM COMICS.SERIES WHERE DISPLAY_NAME = 'Amazing Spider-Man'),
  '300', 'The Amazing Spider-Man #300',
  (SELECT PUBLISHER_ID FROM COMICS.PUBLISHERS WHERE NAME = 'Marvel Comics'),
  1988, 5, 25, 0.75, 450.00, 'Standard', 'USA', 'English',
  1, 'Y', 'N', 9001,
  (SELECT OWNER_ID FROM COMICS.OWNERS WHERE DISPLAY_NAME = 'Test Owner'),
  1711843200, 1711843200, SYSTIMESTAMP, SYSTIMESTAMP
);

COMMIT;
```

```sql
-- Snowflake: Verify replication (~30 seconds later)
USE DATABASE OGG_REPLICATION;
USE SCHEMA COMICS;
SHOW TABLES;
SELECT COMIC_ID, ISSUE_TITLE, COVER_YEAR, CURRENT_PRICE FROM COMICS;
```

### 10.3 Web UI URLs

| Service | URL |
| --- | --- |
| Source Service Manager | `http://<source-external-ip>:9100` |
| Source Admin Service | `http://<source-external-ip>:9101` |
| Hub Service Manager | `http://<hub-external-ip>:9200` |
| Hub Admin Service | `http://<hub-external-ip>:9201` |

Login with: `oggdeploy / Ogg_Admin26`

* * *

## 11\. Troubleshooting Reference

### 11.1 Common Errors and Fixes

| Error | Cause | Fix |
| --- | --- | --- |
| `INS-75022 Install option not specified` | Wrong `INSTALL_OPTION` value in `oggcore.rsp` | Use `ORA23ai` for Oracle binary, `Generic` for DAA binary |
| `INS-85037 Deployment creation failed` / `OGG-12064 401 Unauthorized` | Password mismatch or weak password policy | Use strong password: uppercase + lowercase + digit + special char. Use different SM and deployment usernames. |
| `ORA-12154 Cannot connect to database` | `TNS_ADMIN` not set or `tnsnames.ora` missing | Copy Oracle `tnsnames.ora` to `/u01/app/ogg/ogg_home/network/admin/` and export `TNS_ADMIN` before `oggca.sh` |
| `OGG-02024 Failed to gather logmining info` | OGG apply process dropped after recreation | Run: `register extract EXTSRC database container (SRCDBPDB)` in adminclient |
| `ClassNotFoundException: snowflake` | Wrong properties file format (old `gg.handlerlist=` format) | Use `gg.target=snowflake` and `gg.eventhandler.snowflake.*` format |
| `HTTP 404 on Snowflake connect` | Wrong account identifier in JDBC URL | Run `SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME()` in Snowflake |
| `Missing user name for opening session` | Username not in JDBC URL | Add `user=OGG_USER` as URL parameter in `connectionURL` |
| `NoSuchFileException: rsa_key.p8` | Key file path wrong or deleted during reinstall | Regenerate RSA key pair and re-register public key in Snowflake |
| `OGG-30402 Alias not found in domain Network` | Network credential not added to hub VM | POST to `/services/v2/credentials/Network/oggdeploy` on hub VM port `9201` |
| `Connection refused on port 9203` | Services bound to `127.0.0.1` only | Set `HOST_SERVICEMANAGER=0.0.0.0` in `oggca.rsp`, or edit `deploymentConfiguration.dat` |
| `ORA-32795 Cannot insert into identity column` | Specifying value for `GENERATED ALWAYS` column | Omit identity columns from INSERT — let Oracle auto-generate them |

### 11.2 Useful Diagnostic Commands

```bash
# Check OGG process status
systemctl status OracleGoldenGate

# Check ports listening
ss -tlnp | grep -E '910|920'

# Check Replicat report file
tail -50 /u01/app/ogg/ogg_deploy/var/lib/report/REPSF.rpt

# Check error log
tail -30 /u01/app/ogg/ogg_deploy/var/log/ggserr.log

# Verify Snowflake connection URL
grep connectionURL /u01/app/ogg/ogg_deploy/etc/conf/ogg/REPSF.properties

# REST API — check deployments
curl -u oggdeploy:Ogg_Admin26 http://localhost:9101/services/v2/deployments
curl -u oggdeploy:Ogg_Admin26 http://localhost:9201/services/v2/deployments
```

* * *

## 12\. Credentials and Ports Summary

### 12.1 OGG Credentials

| Account | Credentials |
| --- | --- |
| Service Manager (both VMs) | `oggadmin / Ogg_Admin26` |
| Deployment Admin (both VMs) | `oggdeploy / Ogg_Admin26` |
| Oracle OGG User (CDB) | `C##OGGADMIN / OggAdmin_2026` |
| Snowflake OGG User | `OGG_USER / RSA key pair auth` |

### 12.2 Port Reference

| VM | Service | Port |
| --- | --- | --- |
| oraksddblab1 (source) | Service Manager | 9100 |
| oraksddblab1 (source) | Admin Service | 9101 |
| oraksddblab1 (source) | Distribution Service | 9102 |
| oraksddblab1 (source) | Receiver Service | 9103 |
| oraksddblab1 (source) | Performance Metrics | 9104 |
| oraksdprod (hub) | Service Manager | 9200 |
| oraksdprod (hub) | Admin Service | 9201 |
| oraksdprod (hub) | Distribution Service | 9202 |
| oraksdprod (hub) | Receiver Service | 9203 |
| oraksdprod (hub) | Performance Metrics | 9204 |

* * *
