GoldenGate 21c was released back in May 2021 and has introduced some very exciting new features, I wanted to share with you my top 5. Although it was a hard decision to pick 5, I felt those below were most relevant based on my experiences with clients’ requests and pain points. I am focusing this post on GoldenGate for Oracle. Also, notice this is a personal opinion and not Oracle Best Practices or recommendations.
#5 Unified Builds
This has always been a little pain. In the past, we had to have an installation of GoldenGate for each database version we were connecting to. 21c has now a “Unified Build” that one single installation can connect to all Oracle databases versions. (11g – 21c).
#4 Auto Capture
We have now the ability to set up table capture at the DDL level (CREATE TABLE or ALTER TABLE). Initially, I was wondering the difference from have “SCHEMATRANDATA” and DDL enabled and this new feature. But after I put some additional thought there are some cases where this can be very helpful, especially when working with ERP systems where there are thousands of tables and users might only want to replicate a sub-set of those tables. This feature requires an Oracle Database 21c at this time.
TRANLOGOPTIONS enable_auto_capture Y CREATE/ATLER TABLE table_name ENABLE LOGICAL REPLICATION ALLKEYS or CREATE/ALTER TABLE table_name ENABLE LOGICAL REPLICATION ALLOWNONVALIDATEDKEYS
#3 Partition and Filtering Capture
PARTITION and PARTITIONEXCLUDE are new TABLE or MAP parameters that can help when we want to replicate just a subset of the table and filter by partition.
PARTITION [container.]schema.table.partition; PARTITIONEXCLUDE [container.]schema.table.partition; Examples: TABLE schema.tab1; PARTITION schema.tab2.part; TABLE schema.tab1 PARTITION schema.tab*.part1; PARTITIONEXCLUDE schema.tab1.part*;
#2 INCLUDETAG Support
This is a feature that a lot of people are still not aware of or have not explored. SETTAG and EXCLUDETAG is an exciting feature very helpful in multi-master or cascade user cases. We can even set up SETTAG at the application level with DBMS_STREAMS.SET_TAG package in addition to the replicat parameter file. INCLUDETAG is additional flexibility for that capabilities. I encourage you to explore the functionality as it can be very helpful in complex replications.
e.g. SET_TAG at application session level:
BEGIN DBMS_STREAMS.SET_TAG( tag => HEXTORAW('1D')); END; / In the extract parameter we would: INCLUDETAG 1D
#1 Auto CDR
This is definitely my favorite one and it’s probably because I have worked on several bi-direction and multi-master architectures. The feature that was missing with Auto CDR was the ability to resolve the conflict with the “earliest timestamp-based resolution” commit transaction.
Prior to 21c, we could only configure wining conflict by the last committed transaction. That has been resolved with 21c, we can now resolve the conflict for the first committed transaction. I’ve always given an example of an airline seat assignment selection, if two users select the same seat at virtually the same time, you would want the first user that selected to be able to book the seat. This was not available prior to 21c with Auto CDR.
In addition, we can also resolve conflict by site priority. e.g. A transaction from a specific location will always win.
Configuring Earlier Timestamp Conflict Detection and Resolution for a Table BEGIN DBMS_GOLDENGATE_ADM.ADD_AUTO_CDR( schema_name => 'hr', table_name => 'emp', additional_options => 1); END; /
I have an old post that details the Auto CDR feature:
I could easily add a few more features to this list, but one notable enhancement that is a HUGE benefit for the user is the Unified WebUI screens. All services tabs are now in one browser page/tab instead of individual tabs for each service.