Data Distribution Topology Data Replication using REST API Commands

Create a Broadcast Topology Based Data Replication Using REST API Commands

Copy and use the following cURL script to set up Oracle GoldenGate data replication environment on an pre-installed database and Oracle GoldenGate deployment.

Note:

The given sample script uses names and values of database server, parameter values, Extract, Replicat, and other processes. You must change these values according to your environment for this script to work.
#!/bin/bash

# ----------------------------------------------------------------------------------------------------
# --
# -- Create USERIDALIAS to connection from GoldenGate to the Databases
# --
# ----------------------------------------------------------------------------------------------------

# Add UserIdAlias GGNORTH to connect to the Database instance DBNORTH
curl -s -k -X POST https://north:9001/services/v2/credentials/OracleGoldenGate/ggnorth                    \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"userid":"ggadmin@dbnorth","password":"ggadmin"}' | jq '.messages'

curl -s -k -X GET https://north:9001/services/v2/credentials/OracleGoldenGate/ggnorth                     \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq '.response'

# ----------------------------------------------------------------------------------------------------
# --
# -- Add Schematranda
# -- Add Heartbeattable
# -- Add Checkpointtables
# --
# ----------------------------------------------------------------------------------------------------

# Add Supplemental Logging to Database Schema HR (Schematrandata) on source database GGNORTH
curl -s -k -X POST https://north:9001/services/v2/connections/OracleGoldenGate.ggnorth/trandata/schema    \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"operation":"add","schemaName":"hr"}' | jq '.messages'

curl -s -k -X POST https://north:9001/services/v2/connections/OracleGoldenGate.ggnorth/trandata/schema    \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"operation":"info", "schemaName":"hr"}' | jq '.response'

# Add Heartbeattable on source database GGNORTH
curl -s -k -X POST https://north:9001/services/v2/connections/OracleGoldenGate.ggnorth/tables/heartbeat   \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"frequency":60}' | jq '.messages'

curl -s -k -X GET https://north:9001/services/v2/connections/OracleGoldenGate.ggnorth/tables/heartbeat    \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq .'messages'

# ----------------------------------------------------------------------------------------------------
# --
# -- Add Extracts on source database GGNORTH
# --
# ----------------------------------------------------------------------------------------------------

curl -s -k -X POST https://north:9001/services/v2/extracts/EXTN                                           \
     -H 'Content-Type: application/json'                                                                  \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"description":"Extract - Region North"
         ,"config":["EXTRACT EXTN"
                   ,"USERIDALIAS ggnorth"
                   ,"DDL INCLUDE MAPPED"
                   ,"DDLOPTIONS REPORT"
                   ,"REPORTCOUNT EVERY 10 MINUTES, RATE"
                   ,"WARNLONGTRANS 15MINUTES, CHECKINTERVAL 5MINUTES"
                   ,"EXTTRAIL north/ea"
                   ,"TABLE hr.job_history_a;"
                   ,"EXTTRAIL north/eb"
                   ,"TABLE hr.job_history_b;"
                   ,"EXTTRAIL north/ec"
                   ,"TABLE hr.job_history_c;"
                   ]
	     ,"source": "tranlogs"
	     ,"credentials":{"alias":"ggnorth"}
	     ,"registration": {"optimized": false}
	     ,"begin":"now"
	     ,"targets":[{"name":"ea", "path":"north/"}
                        ,{"name":"eb", "path":"north/"}
                        ,{"name":"ec", "path":"north/"}
                        ]
             ,"status":"running"
	     }' | jq '.messages'

curl -s -k -X GET https://north:9001/services/v2/extracts/EXTN                                            \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq '.response'
	 	
# ----------------------------------------------------------------------------------------------------
# --
# -- Add DistPath from source to target system
# --
# ----------------------------------------------------------------------------------------------------

#ea: north -> A
curl -s -k -X POST https://north:9002/services/v2/sources/DPNS_A                                          \
     -H 'Content-Type: application/json'                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"description": "Region: From: North, To: A"
          ,"name": "DPNS_A"
          ,"source":
            {"uri": "trail://north:9002/services/v2/sources?trail=north/ea"
            ,"details": {"encryption": {"algorithm": "NONE"}}
            }
          ,"target":
            {"uri": "wss://south:9103/services/v2/targets?trail=north/da"
            ,"authenticationMethod": {"certificate": "default"}
            ,"details":
               {"trail": {"sizeMB": 100}
               ,"encryption": {"algorithm": "NONE"}
               ,"compression": {"enabled": false}
               }
            }
          ,"options":
            {"eofDelayCSecs": 10
            ,"checkpointFrequency": 10
            ,"critical": false
            ,"autoRestart": {"retries": 10, "delay": 2}
            ,"streaming": true
            }
          ,"begin": "now"
          ,"encryptionProfile": "LocalWallet"
          ,"status": "running"
          }'                                              | jq '.messages'

#eb: north -> B
curl -s -k -X POST https://north:9002/services/v2/sources/DPNS_B                                          \
     -H 'Content-Type: application/json'                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"description": "Region: From: North, To: B"
          ,"name": "DPNS_B"
          ,"source":
            {"uri": "trail://north:9002/services/v2/sources?trail=north/eb"
            ,"details": {"encryption": {"algorithm": "NONE"}}
            }
          ,"target":
            {"uri": "wss://south:9103/services/v2/targets?trail=north/db"
            ,"authenticationMethod": {"certificate": "default"}
            ,"details":
               {"trail": {"sizeMB": 100}
               ,"encryption": {"algorithm": "NONE"}
               ,"compression": {"enabled": false}
               }
            }
          ,"options":
            {"eofDelayCSecs": 10
            ,"checkpointFrequency": 10
            ,"critical": false
            ,"autoRestart": {"retries": 10, "delay": 2}
            ,"streaming": true
            }
          ,"begin": "now"
          ,"encryptionProfile": "LocalWallet"
          ,"status": "running"
          }'                                              | jq '.messages'

curl -s -k -X POST https://north:9002/services/v2/sources/DPNS_C                                          \
     -H 'Content-Type: application/json'                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"description": "Region: From: North, To: C"
          ,"name": "DPNS_C"
          ,"source":
            {"uri": "trail://north:9002/services/v2/sources?trail=north/ec"
            ,"details": {"encryption": {"algorithm": "NONE"}}
            }
          ,"target":
            {"uri": "wss://south:9103/services/v2/targets?trail=north/dc"
            ,"authenticationMethod": {"certificate": "default"}
            ,"details":
               {"trail": {"sizeMB": 100}
               ,"encryption": {"algorithm": "NONE"}
               ,"compression": {"enabled": false}
               }
            }
          ,"options":
            {"eofDelayCSecs": 10
            ,"checkpointFrequency": 10
            ,"critical": false
            ,"autoRestart": {"retries": 10, "delay": 2}
            ,"streaming": true
            }
          ,"begin": "now"
          ,"encryptionProfile": "LocalWallet"
          ,"status": "running"
          }'                                          | jq '.messages'

curl -s -k -X GET https://north:9002/services/v2/sources                                                  \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq '.response'

curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_A                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq '.response'

curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_B                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq '.response'

curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_C                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='   | jq '.response'

Check the Statistics in a Broadcast Topology Based Data Replication Using REST API Commands

Note:

The given sample script uses names and values of database server, parameter values, Extract, Replicat, and other processes. You must change these values according to your environment for this script to work.
#!/bin/bash

# ----------------------------------------------------------------------------------------------------
# --
# -- Create USERIDALIAS to connection from GoldenGate to the Databases
# --
# ----------------------------------------------------------------------------------------------------

echo " "
echo "------------------------------------------------------------------------------------------"
echo "--"
echo "-- Extract EXN "
echo "--"
echo "------------------------------------------------------------------------------------------"
echo " "

echo "Extract EXTN status:"
curl -s -k -X GET https://north:9001/services/v2/extracts/EXTN                                            \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='  | jq '.response.status'

echo "Extract EXTN lag:"
curl -s -k -X POST https://north:9001/services/v2/extracts/EXTN/command                                   \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"command": "GETLAG", "isReported": true}' | jq '.response.reply'                                \
      | sed 's/\\n/\n/g' |  sed 's/\\t/\t/g'| grep -v OKNODOT 

echo "Extract EXTN statistics:"
curl -s -k -X POST https://north:9001/services/v2/extracts/EXTN/command                                   \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"command":"STATS", "arguments":"TOTAL"}'                                                        \
      | jq '.response.reply' | json_reformat | sed 's/\\n/\n/g' |  sed 's/\\t/\t/g'| grep -v OKNODOT


echo " "
echo "------------------------------------------------------------------------------------------"
echo "--"
echo "-- DistPath DPNS"
echo "--"
echo "------------------------------------------------------------------------------------------"
echo " "


echo "DistPath DPNS_A status:"
curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_A                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='  | jq '.response.status'

echo "DistPath DPNS_A statistics:"
curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_A/stats                                       \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
      | jq '.response' | json_reformat | sed 's/\\n/\n/g' |  sed 's/\\t/\t/g'| grep -v OKNODOT


echo "DistPath DPNS_B status:"
curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_B                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='  | jq '.response.status'

echo "DistPath DPNS_B statistics:"
curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_B/stats                                     \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
      | jq '.response' | json_reformat | sed 's/\\n/\n/g' |  sed 's/\\t/\t/g'| grep -v OKNODOT


echo "DistPath DPNS_C status:"
curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_C                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='  | jq '.response.status'

echo "DistPath DPNS_C statistics:"
curl -s -k -X GET https://north:9002/services/v2/sources/DPNS_C/stats                                     \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
      | jq '.response' | json_reformat | sed 's/\\n/\n/g' |  sed 's/\\t/\t/g'| grep -v OKNODOT

exit

# ----------------------------------------------------------------------------------------------------

Remove Broadcast Topology Setup Using REST API Commands

Note:

The given sample script uses names and values of database server, parameter values, Extract, Replicat, and other processes. You must change these values according to your environment for this script to work.
#!/bin/bash

# ----------------------------------------------------------------------------------------------------
# --
# -- Stop & Delete DistPath
# -- Purge Target Trail File
# --
# ----------------------------------------------------------------------------------------------------

curl -s -k -X PATCH https://north:9002/services/v2/sources/DPNS_A                                           \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"status":"stopped"}'                                         |  jq '.messages'

curl -s -k -X PATCH https://north:9002/services/v2/sources/DPNS_B                                         \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"status":"stopped"}'                                         |  jq '.messages'

curl -s -k -X PATCH https://north:9002/services/v2/sources/DPNS_C                                         \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"status":"stopped"}'                                         |  jq '.messages'

curl -s -k -X DELETE https://north:9002/services/v2/sources/DPNS_A                                        \
     -H 'Content-Type: application/json'                                                                  \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'

curl -s -k -X DELETE https://north:9002/services/v2/sources/DPNS_B                                        \
     -H 'Content-Type: application/json'                                                                  \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'

curl -s -k -X DELETE https://north:9002/services/v2/sources/DPNS_C                                        \
     -H 'Content-Type: application/json'                                                                  \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'

curl -s -k -X POST https://north:9001/services/v2/commands/execute                                        \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"name": "purge"
         ,"purgeType": "trails"
         ,"trails": [{"name": "da","path": "north/"}]
         ,"useCheckpoints": false
         ,"keep": [{"type": "min","units": "files","value": 0}]
         }' 	                                                       | jq '.messages'
		 
curl -s -k -X POST https://north:9001/services/v2/commands/execute                                        \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"name": "purge"
         ,"purgeType": "trails"
         ,"trails": [{"name": "db","path": "north/"}]
         ,"useCheckpoints": false
         ,"keep": [{"type": "min","units": "files","value": 0}]
         }'                                                            | jq '.messages'

curl -s -k -X POST https://north:9001/services/v2/commands/execute                                        \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"name": "purge"
         ,"purgeType": "trails"
         ,"trails": [{"name": "dc","path": "north/"}]
         ,"useCheckpoints": false
         ,"keep": [{"type": "min","units": "files","value": 0}]
         }'                                                            | jq '.messages'

# ----------------------------------------------------------------------------------------------------
# --
# -- Stop & Delete Extracts
# --
# ----------------------------------------------------------------------------------------------------

curl -s -k -X PATCH https://north:9001/services/v2/extracts/EXTN                                          \
     -H 'Content-Type: application/json'                                                                  \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"status":"stopped"}'                                         |  jq '.messages'


curl -s -k -X DELETE https://north:9001/services/v2/extracts/EXTN                                         \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'

curl -s -k -X POST https://north:9001/services/v2/commands/execute                                        \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"name": "purge"
	 ,"purgeType": "trails"
         ,"trails": [{"name": "ea","path": "north/"}]
         ,"useCheckpoints": false
         ,"keep": [{"type": "min","units": "files","value": 0}]
         }' 	                                                       | jq '.messages'

curl -s -k -X POST https://north:9001/services/v2/commands/execute                                        \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"name": "purge"
         ,"purgeType": "trails"
         ,"trails": [{"name": "eb","path": "north/"}]
         ,"useCheckpoints": false
         ,"keep": [{"type": "min","units": "files","value": 0}]
         }'                                                            | jq '.messages'

curl -s -k -X POST https://north:9001/services/v2/commands/execute                                        \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"name": "purge"
         ,"purgeType": "trails"
         ,"trails": [{"name": "ec","path": "north/"}]
         ,"useCheckpoints": false
         ,"keep": [{"type": "min","units": "files","value": 0}]
         }'                                                            | jq '.messages'


# ----------------------------------------------------------------------------------------------------
# --
# -- Delete Schematranda
# -- Delete Checkpointtable
# -- Delete Heartbeattables
# --
# ----------------------------------------------------------------------------------------------------

# Delete SchemaTrandata at Database GGNORTH
curl -s -k -X POST https://north:9001/services/v2/connections/OracleGoldenGate.ggnorth/trandata/schema    \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                                                       \
     -d '{"operation":"delete","schemaName":"hr"}'                     | jq '.messages'

# Delete Heartbeattable at Database GGNORTH	 
curl -s -k -X DELETE https://north:9001/services/v2/connections/OracleGoldenGate.ggnorth/tables/heartbeat \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'

# ----------------------------------------------------------------------------------------------------
# --
# --Delete USERIDALIAS from GoldenGate
# --
# ----------------------------------------------------------------------------------------------------

curl -s -k -X DELETE https://north:9001/services/v2/credentials/OracleGoldenGate/ggnorth                  \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'                                                         

curl -s -k -X GET https://north:9001/services/v2/credentials/OracleGoldenGate                             \
     -H "Content-Type: application/json"                                                                  \
     -H "Accept: application/json"                                                                        \
     -H 'Authorization: Basic Z2dtYTpHR21hXzIzYWk='                    | jq '.messages'
	 
# --------------------------------------------------------------------------------------------------