GoldenGate Replicat Abends Due to Invisible Index

Root Cause and Production-Safe Fix

GoldenGate Replicat failed with OGG-01296 mapping error due to an invisible unique index on the target table. Learn why invisible indexes break replication and how to fix it safely.

Introduction

Oracle GoldenGate is widely used for real-time database replication, but certain Oracle database features can unexpectedly impact Replicat behavior.

In this article, we will walk through a real-world GoldenGate Replicat failure caused by an invisible unique index on the target database. Although the index existed and was valid, Replicat was unable to initialize table mapping and aborted during startup.

Component ValueSource

Database . SRCDB_TEST

Target Database TRGDB_TEST

Schema APP_TEST

Replicat Process . REP_TEST01

Table "test_payroll_txn"

Key Column TXN_ACTION_ID

DDL Replication Enabled (filtered)

Index DDL Explicitly excluded

Problem Statement

After starting Replicat, the process immediately aborted:

OGG-01296 Error mapping from SRCDB_TEST.APP_TEST.test_payroll_txn
to TRGDB_TEST.APP_TEST.test_payroll_txn

OGG-01668 PROCESS ABENDING

Additional symptoms:

– No transactions processed

– No DML errors reported

– Replicat exited immediately after startup

Source vs Target Schema Comparison

Source Database

The source table contained a proper primary key and several supporting indexes:

TEST_PAYROLL_TXN_PK
UNIQUE | VISIBLE | PARTITIONED

Target Database

Only one index existed on the target:

TEST_987654_PK_RPL
UNIQUE | INVISIBLE | PARTITIONED

Root Cause Analysis

Key Index Was INVISIBLE

Although the index was:

  • UNIQUE
  • Defined on the correct key column
  • Valid and usable for queries

GoldenGate relies on visible key structures to:

  • Identify rows for UPDATE and DELETE
  • Build internal metadata during Replicat startup
  • Establish table-level mapping

Invisible indexes may be ignored during this phase, causing Replicat mapping failure.

The Fix (No Drop, No Rebuild)

Instead of dropping and recreating the index, the issue was resolved safely using:

ALTER INDEX APP_TEST.TEST_987654_PK_RPL VISIBLE;

Why This Works

  • No index rebuild required
  • No data movement
  • No performance impact
  • Immediate effect
  • Replicat can now detect the key structure

This is the preferred production-safe fix.

Result After Fix

  • Replicat started successfully
  • Table mapping completed without errors
  • Data replication resumed normally
  • No further abends observed

Key Takeaways

Invisible Indexes Are Unsafe for GoldenGate Keying

Even if an index is unique and correct, GoldenGate may not recognize invisible indexes for replication mapping.

Excluding Index DDL Requires Careful Target Preparation

If index DDL is excluded:

  • Required PK/UK indexes must exist on target
  • They must be VISIBLE
  • Schema alignment must be intentional

Best Practices for GoldenGate Replication

  • Avoid invisible indexes on replicated tables
  • Ensure PK/UK constraints or visible unique indexes exist
  • Validate index visibility before starting Replicat
  • Document required target-side objects when excluding DDL
  • Use invisible indexes only for optimizer testing, not replication correctness

High-Level Flow (Replication Model)

Think of Replicat startup like a metadata validation phase before any data moves.

Replicat START
|
v
Read table metadata (columns, constraints, indexes)
|
v
Determine KEY for UPDATE / DELETE
|
v
Can a stable key be resolved?
| |
YES NO
| |
v v
Apply DML OGG-01296
successfully Mapping failure

Key Resolution Priority Order (Very Important)

When Replicat decides how to uniquely identify rows, it checks objects in this order:

1️⃣ Primary Key constraint (P)
2️⃣ Unique Key constraint (U)
3️⃣ Visible UNIQUE index
4️⃣ KeyCols / explicit key mapping (if configured)
5️⃣ ❌ Failure (no usable key)

What Happened in our Case

Source Side

Replicat has a clear key definition on source

Table: "test_payroll_txn"

Primary Key:
TEST_PAYROLL_TXN_PK
UNIQUE | VISIBLE | PARTITIONED

Target Side (Before Fix)

Table: "test_payroll_txn"

Indexes:
TEST_987654_PK_RPL
UNIQUE | INVISIBLE | PARTITIONED

Problems:

  • No PK constraint
  • Only key index was INVISIBLE
  • Replicat could not “see” a valid key

Why INVISIBLE Index Breaks Replicat

Invisible indexes are designed so that:

  • Optimizer ignores them
  • SQL execution does not consider them
  • They exist or been changed only for testing

GoldenGate Replicat behaves similarly — during metadata resolution:

VISIBLE index? ❌ No
PK constraint? ❌ No
UK constraint? ❌ No
---------------------
Result: ❌ No usable key

Replicat fails with:

OGG-01296 Error mapping table
OGG-01668 PROCESS ABENDING

Making the Index Visible Fixes the issue

Instead of dropping/recreating, you used the correct fix:

ALTER INDEX APP_TEST.TEST_987654_PK_RPL VISIBLE;

What Changed Internally

Before:
UNIQUE + INVISIBLE → Ignored by Replicat

After:
UNIQUE + VISIBLE → Accepted as replication key

Now Replicat sees:

✔ Visible UNIQUE index available
✔ Key resolved
✔ Mapping succeeds
✔ Replication starts

Comparison (Before vs After)

Before (Failure)

Replicat
|
v
Target Table Metadata
|
├─ PK constraint ❌
├─ UK constraint ❌
└─ UNIQUE index (INVISIBLE) ❌
|
v
OGG-01296 ABEND

After (Success)

Replicat
|
v
Target Table Metadata
|
├─ PK constraint ❌
├─ UK constraint ❌
└─ UNIQUE index (VISIBLE) ✅
|
v
Key resolved → Apply DML

Conclusion

GoldenGate Replicat failures are not always caused by missing keys or data conflicts. In this case, a single invisible index caused Replicat to abort before processing any data.

Understanding how GoldenGate interprets database metadata — especially index visibility — is essential when operating production replication systems.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *