In a previous post about updating the profiles of all extracts and replicats at once, I wrote that a profile does not apply to distribution paths. With GoldenGate 23.26.4.0.0, that is no longer true. When looking at the help of ADD DISTPATH in the adminclient, it shows a new PROFILE clause:

OGG (http://oggall:7809 ogg_test_01) 2> HELP ADD DISTPATH

ADD DISTPATH

Syntax:
| ADD DISTPATH <path-name>
|          SOURCE <source-uri>
|          TARGET <target-uri> [ TARGETTYPE ( MANAGER | COLLECTOR | RECVSRVR ) ]
|                  [ AUTHENTICATION (  OAUTH
|                                   | ( CERTIFICATE <certificate-name> )
|                                   | ( USERIDALIAS <alias> [ DOMAIN <domain> ] )
|                                   )
|                  ]
|          [ ENCRYPTIONPROFILE <encryption-profile> ]
|          [ PROFILE <profile-name> ]

A distribution path or a receiver path can now take a managed process profile for its auto-restart settings. The REST property is called managedPathSettings, and its value is the profile name. An extract uses managedProcessSettings with a prefixed name, so the two properties are not the same. The client argument managed_path_settings arrived with oggrestapi 1.0.4. The profile itself is the same object: a path, an extract and a replicat read it from the same ogg:managedProcessSettings object. In this blog, I test this new feature in the REST API, the adminclient and the web UI.

Before: 23.26.3.0.0 refuses a profile on a path

On a deployment running 23.26.3.0.0, a path only takes explicit auto-restart options. The REST API rejects the new property. I create the profile with oggrestapi.py, then create a new path that uses it.

import json

from oggrestapi import OGGRestAPI

client = OGGRestAPI(
    url='http://oggall:7809',
    username='ogg',
    password='ogg',
    deployment='ogg_test_01',
    auto_discovery=True,
)

template = client.get_distribution_path('path5')
source, target = template['source'], template['target']
begin = {'sequence': 0, 'offset': 0}

client.create_managed_process_profile(
    'PathProfile',
    auto_restart=True,
    restart_delay=30,
    restart_retries=5,
)

client.create_distribution_path(
    'path1',
    source=source,
    target=target,
    begin=begin,
    status='stopped',
    managed_path_settings='PathProfile',
)

The server answers with a 400 error, OGG-12108.

RuntimeError: ERROR (code 400) - http://oggall:7811/services/v2/sources/path1: JSON element '/' has an invalid additional property, 'managedPathSettings'

The adminclient of the same release has no PROFILE clause either. With the ADD DISTPATH command:

ADD DISTPATH path4 SOURCE trail://vmogg1:7811/services/v2/sources?trail=dl TARGET ws://vmogg2:7812/services/v2/targets?trail=dq AUTHENTICATION USERIDALIAS recv02 DOMAIN OracleGoldenGate PROFILE PathProfile

It answers with an error.

OGG> ADD DISTPATH path4 SOURCE trail://vmogg1:7811/services/v2/sources?trail=dl TARGET ws://vmogg2:7812/services/v2/targets?trail=dq AUTHENTICATION USERIDALIAS recv02 DOMAIN OracleGoldenGate PROFILE PathProfile

Error: Unexpected value 'PROFILE PathProfile'.

The web UI has the same limit. Edit Managed Options on a path shows Autorestart Retries and an Autorestart Delay in minutes, with no profile selector.

The Edit Managed Options panel of a distribution path in GoldenGate 23.26.3.0.0: Critical, Auto Restart, Autorestart Retries and Autorestart Delay in minutes, and no profile selector

Starting with 26.4: paths accept profiles

After the patch, the same call succeeds. The response of a successful call is long, so I only show its messages.

>>> client.create_distribution_path(
...     'path1',
...     source=source,
...     target=target,
...     begin=begin,
...     status='stopped',
...     managed_path_settings='PathProfile',
... )['messages']
[{'$schema': 'ogg:message', 'title': "The path 'path1' has been added.", 'code': 'OGG-08511', 'severity': 'INFO', 'issued': '2026-10-25T16:12:42Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> print(json.dumps(client.get_distribution_path('path1'), indent=2))
{
  "$schema": "ogg:distPath",
  "source": {
    "uri": "trail://vmogg1:7811/services/v2/sources?trail=dl"
  },
  "target": {
    "uri": "ws://vmogg2:7812/services/v2/targets?trail=dq",
    "authenticationMethod": {
      "domain": "OracleGoldenGate",
      "alias": "recv02"
    }
  },
  "begin": {
    "sequence": 0,
    "offset": 0
  },
  "status": "stopped",
  "managedPathSettings": "PathProfile",
  "name": "path1",
  "encryptionProfile": "LocalWallet",
  "options": {
    "autoRestart": {
      "retries": 5,
      "delay": {
        "delaySeconds": 30
      }
    }
  }
}

The path stores the profile name and reads the restart settings from the profile. The options.autoRestart object of the response is the profile as the path uses it. The profile delay is in seconds, so the path now reports delaySeconds.

What the REST API accepts and refuses

A profile and explicit options exclude each other

A path takes either a profile or explicit auto-restart options. A request with both is refused with OGG-30812, and an unknown profile name with OGG-08122. The delay of explicit options is still an integer in minutes.

>>> common = {'source': source, 'target': target, 'begin': begin, 'status': 'stopped'}
>>> options = {'autoRestart': {'retries': 3, 'delay': 1}}

>>> client.create_distribution_path('path2', options=options, **common)['messages']
[{'$schema': 'ogg:message', 'title': "The path 'path2' has been added.", 'code': 'OGG-08511', 'severity': 'INFO', 'issued': '2026-10-25T16:12:42Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> client.create_distribution_path(
...     'path3',
...     options=options,
...     managed_path_settings='PathProfile',
...     **common,
... )
RuntimeError: ERROR (code 400) - http://oggall:7811/services/v2/sources/path3: Cannot specify both a managed settings profile and explicit auto-restart option values.

>>> client.create_distribution_path('path3', managed_path_settings='NoSuchProfile', **common)
RuntimeError: ERROR (code 400) - http://oggall:7811/services/v2/sources/path3: The managed process settings profile 'NoSuchProfile' does not exist.

An existing path with explicit options takes the profile through an update. The restart options of the path then become the ones of the profile.

>>> d = client.get_distribution_path('path2')
>>> (d.get('managedPathSettings'), d['options'])
(None, {'autoRestart': {'retries': 3, 'delay': 1}})

>>> client.update_distribution_path('path2', managed_path_settings='PathProfile')['messages']
[{'$schema': 'ogg:message', 'title': "The path 'path2' has been updated.", 'code': 'OGG-08512', 'severity': 'INFO', 'issued': '2026-10-25T16:12:43Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> d = client.get_distribution_path('path2')
>>> (d.get('managedPathSettings'), d['options'])
('PathProfile', {'autoRestart': {'retries': 5, 'delay': {'delaySeconds': 30}}})

A change of the profile applies to every path that uses it

As expected, changing the profile applies to all paths following the profile.

new = {
    '$schema': 'ogg:managedProcessSettings',
    'autoStart': {'enabled': False},
    'autoRestart': {'enabled': True, 'retries': 7, 'delay': 11, 'window': 60, 'disableOnFailure': True},
}

client.update_config_value(
    type='ogg:managedProcessSettings',
    value='ogg:managedProcessSettings:PathProfile',
    data=new,
)

d = client.get_distribution_path('path1')
(d.get('managedPathSettings'), d['options'])

d = client.get_distribution_path('path2')
(d.get('managedPathSettings'), d['options'])
>>> d = client.get_distribution_path('path1')
>>> (d.get('managedPathSettings'), d['options'])
('PathProfile', {'autoRestart': {'retries': 7, 'delay': {'delaySeconds': 11}}})

>>> d = client.get_distribution_path('path2')
>>> (d.get('managedPathSettings'), d['options'])
('PathProfile', {'autoRestart': {'retries': 7, 'delay': {'delaySeconds': 11}}})

A profile in use cannot be deleted

The deletion of a profile that a path uses is refused, and the message names the path.

>>> client.delete_managed_process_profile('PathProfile')
RuntimeError: ERROR (code 500) - http://oggall:7810/services/v2/config/types/ogg:managedProcessSettings/values/ogg:managedProcessSettings:PathProfile: The managed process settings profile 'PathProfile' is used by distpath 'path1'.

Explicit options replace the profile without a warning

An update with explicit auto-restart options on a path that uses a profile succeeds, and the profile is gone. A request with both is refused with OGG-30812, but sending only the explicit options is not. managedPathSettings is then None.

>>> client.update_distribution_path('path1', options={'autoRestart': {'retries': 2}})['messages']
[{'$schema': 'ogg:message', 'title': "The path 'path1' has been updated.", 'code': 'OGG-08512', 'severity': 'INFO', 'issued': '2026-10-25T16:12:43Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> d = client.get_distribution_path('path1')
>>> (d.get('managedPathSettings'), d['options'])
(None, {'autoRestart': {'retries': 2}})

There is no way to clear the property with a null or an empty string, as the two next requests show, even when the same request also contains the explicit options. Sending the explicit options alone is the only way back.

>>> client.update_distribution_path(
...     'path1',
...     data={
...         'managedPathSettings': None,
...         'options': {'autoRestart': {'retries': 2}},
...     },
... )
RuntimeError: ERROR (code 400) - http://oggall:7811/services/v2/sources/path1: JSON element '/managedPathSettings' is the incorrect type

>>> client.update_distribution_path(
...     'path1',
...     data={
...         'managedPathSettings': '',
...         'options': {'autoRestart': {'retries': 2}},
...     },
... )
RuntimeError: ERROR (code 400) - http://oggall:7811/services/v2/sources/path1: JSON string '/managedPathSettings' does not meet the minimum required length of 1

Explicit options can now express the delay in seconds, with a delaySeconds object, where it used to be an integer in minutes.

>>> client.update_distribution_path(
...     'path1',
...     options={'autoRestart': {'retries': 4, 'delay': {'delaySeconds': 45}}},
... )['messages']
[{'$schema': 'ogg:message', 'title': "The path 'path1' has been updated.", 'code': 'OGG-08512', 'severity': 'INFO', 'issued': '2026-10-25T16:12:43Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> d = client.get_distribution_path('path1')
>>> (d.get('managedPathSettings'), d['options'])
(None, {'autoRestart': {'retries': 4, 'delay': {'delaySeconds': 45}}})

Receiver paths

A receiver path created by the target, with target_initiated set to true, takes the same argument. OGG-30812 applies to it too.

>>> client.create_receiver_path(
...     'path6',
...     target_initiated=True,
...     source={
...         'uri': 'ws://vmogg1:7811/services/v2/sources?trail=dl',
...         'authenticationMethod': {'domain': 'OracleGoldenGate', 'alias': 'recv02'},
...     },
...     target={'uri': 'trail://vmogg2:7812/services/v2/targets?trail=rp'},
...     begin=begin,
...     status='stopped',
...     managed_path_settings='PathProfile',
... )['messages']
[{'$schema': 'ogg:message', 'title': "The path 'path6' has been added.", 'code': 'OGG-08511', 'severity': 'INFO', 'issued': '2026-10-25T16:12:43Z', 'type': 'https://www.rfc-editor.org/rfc/rfc9110.html#name-status-codes'}]

>>> d = client.get_receiver_path('path6')
>>> (d['managedPathSettings'], d['options'])
('PathProfile', {'autoRestart': {'retries': 7, 'delay': {'delaySeconds': 11}}})

>>> client.create_receiver_path(
...     'path7',
...     target_initiated=True,
...     source={
...         'uri': 'ws://vmogg1:7811/services/v2/sources?trail=dl',
...         'authenticationMethod': {'domain': 'OracleGoldenGate', 'alias': 'recv02'},
...     },
...     target={'uri': 'trail://vmogg2:7812/services/v2/targets?trail=rp'},
...     begin=begin,
...     status='stopped',
...     managed_path_settings='PathProfile',
...     options={'autoRestart': {'retries': 2, 'delay': {'delaySeconds': 5}}},
... )
RuntimeError: ERROR (code 400) - http://oggall:7812/services/v2/targets/path7: Cannot specify both a managed settings profile and explicit auto-restart option values.

adminclient syntax

The PROFILE clause is available in ADD DISTPATH, ALTER DISTPATH and ADD RECVPATH. INFO DISTPATH shows it as Settings Profile.

ADD DISTPATH path4 SOURCE trail://vmogg1:7811/services/v2/sources?trail=dl TARGET ws://vmogg2:7812/services/v2/targets?trail=dq AUTHENTICATION USERIDALIAS recv02 DOMAIN OracleGoldenGate PROFILE PathProfile
INFO DISTPATH path4
ALTER DISTPATH path4 PROFILE NoSuchProfile
ALTER DISTPATH path2 PROFILE RestartFast
INFO DISTPATH path2
OGG> ADD DISTPATH path4 SOURCE trail://vmogg1:7811/services/v2/sources?trail=dl TARGET ws://vmogg2:7812/services/v2/targets?trail=dq AUTHENTICATION USERIDALIAS recv02 DOMAIN OracleGoldenGate PROFILE PathProfile

13:44:28Z  INFO    OGG-08511  The path 'path4' has been added.

OGG> INFO DISTPATH path4

 Path Name: path4
 Status: stopped
 Source URI: trail://vmogg1:7811/services/v2/sources?trail=dl
 Target URI: ws://vmogg2:7812/services/v2/targets?trail=dq
 Authentication Method: USERIDALIAS recv02 domain OracleGoldenGate
 Settings Profile: PathProfile
 Encryption Profile: LocalWallet

OGG> ALTER DISTPATH path4 PROFILE NoSuchProfile

13:44:28Z  ERROR   OGG-08122  The managed process settings profile 'NoSuchProfile' does not exist.

OGG> ALTER DISTPATH path2 PROFILE RestartFast

13:44:28Z  INFO    OGG-08512  The path 'path2' has been updated.

OGG> INFO DISTPATH path2

 Path Name: path2
 Status: stopped
 Source URI: trail://vmogg1:7811/services/v2/sources?trail=dl
 Target URI: ws://vmogg2:7812/services/v2/targets?trail=dq
 Authentication Method: USERIDALIAS recv02 domain OracleGoldenGate
 Settings Profile: RestartFast
 Encryption Profile: LocalWallet

PROFILE cannot be combined with OPTIONS AUTORESTART in the same command, which matches OGG-30812. With ALTER DISTPATH path4 OPTIONS AUTORESTART RETRIES 1 PROFILE PathProfile, the adminclient answers Error: Unexpected value 'PROFILE PathProfile'.

Web UI: create a profile, then assign it

The Edit Managed Options panel of a path has a Profile Name selector in 23.26.4.0.0. Here is the state before creating a profile. The field shows Custom, which is the explicit options of the path, and the list below it has the existing profiles.

The Profile Name list of a distribution path in GoldenGate 23.26.4.0.0, with the profiles Default, DGPDBAR, PathProfile, RestartFast and PipeProfile, and Custom selected in the field

Let’s create a profile in the Managed Process Profiles page, with 3 retries, a retry delay of 20 seconds and a window of 2 minutes. The text of the panel still says that the profile is for extracts and replicats, but a path accepts it.

The Add Managed Process Settings Profile panel with the name SlowRestart, Auto Restart on, 3 maximum retries, a retry delay of 20 seconds and a retries window of 2 minutes

The new profile appears in the Profile Name list of the path, after PipeProfile.

The Profile Name list of the same distribution path after the creation, with the profile SlowRestart added before Custom

Select SlowRestart and submit. Path Information now shows the profile name, with the auto-restart settings of the profile:

The Managed Options section of the path information after the assignment: Profile Name SlowRestart, Critical No, Auto Start Off, and Auto Restart after 20 seconds delay within a 2 minutes window with a maximum of 3 retries

The REST API returns the same state.

>>> d = client.get_distribution_path('path8')
>>> (d.get('managedPathSettings'), d['options'])
('SlowRestart', {'autoRestart': {'retries': 3, 'delay': {'delaySeconds': 20}}})

Can I use the same profile for an extract, a replicat and a distribution path?

Yes. There is one list of profiles, and only the property that names the profile changes. In the transcript below, SharedProfile is created once, then assigned to the extract EXTSHR, the replicat REPSHR and the path DPSHR. The extract and the replicat take the name with its ogg:managedProcessSettings: prefix, while the path takes the name without prefix. The variables source, target and begin are the ones used in the previous sections.

>>> client.create_managed_process_profile(
...     'SharedProfile',
...     auto_restart=True,
...     restart_delay=15,
...     restart_retries=4,
... )['messages']
[]

>>> profile = 'ogg:managedProcessSettings:SharedProfile'

>>> client.create_extract(
...     'EXTSHR',
...     begin='now',
...     config=[
...         'EXTRACT EXTSHR',
...         'USERIDALIAS oggadmin_pdb1 DOMAIN OracleGoldenGate',
...         'EXTTRAIL sh',
...         'TABLE OGGADMIN.SMK264;',
...     ],
...     source='tranlogs',
...     credentials={'alias': 'oggadmin_pdb1', 'domain': 'OracleGoldenGate'},
...     targets=[{'name': 'sh'}],
...     registration={'optimized': False},
...     status='stopped',
...     managed_process_settings=profile,
... )['messages']
[{'$schema': 'ogg:message', 'title': 'Integrated Extract added.', 'code': 'OGG-08100', 'severity': 'INFO', 'issued': '2026-10-25T10:08:49Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}, {'$schema': 'ogg:message', 'title': 'Extract group EXTSHR successfully registered with database at SCN 224857171.', 'code': 'OGG-02003', 'severity': 'INFO', 'issued': '2026-10-25T10:08:50Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}, {'$schema': 'ogg:message', 'title': 'Parameter file EXTSHR.prm passed validity check.', 'code': 'OGG-10183', 'severity': 'INFO', 'issued': '2026-10-25T10:08:50Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> client.create_replicat(
...     'REPSHR',
...     config=[
...         'REPLICAT REPSHR',
...         'USERIDALIAS oggadmin_pdb2 DOMAIN OracleGoldenGate',
...         'MAP OGGADMIN.SMK264, TARGET OGGADMIN.SMK264;',
...     ],
...     mode={'type': 'integrated'},
...     source={'name': 'sh'},
...     credentials={'alias': 'oggadmin_pdb2', 'domain': 'OracleGoldenGate'},
...     checkpoint={'table': 'OGGADMIN.CHECKPOINT'},
...     status='stopped',
...     managed_process_settings=profile,
... )['messages']
[{'$schema': 'ogg:message', 'title': 'Integrated Replicat added.', 'code': 'OGG-08100', 'severity': 'INFO', 'issued': '2026-10-25T10:08:51Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}, {'$schema': 'ogg:message', 'title': 'Parameter file REPSHR.prm passed validity check.', 'code': 'OGG-10183', 'severity': 'INFO', 'issued': '2026-10-25T10:08:51Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> client.create_distribution_path(
...     'DPSHR',
...     source=source,
...     target=target,
...     begin=begin,
...     status='stopped',
...     managed_path_settings='SharedProfile',
... )['messages']
[{'$schema': 'ogg:message', 'title': "The path 'DPSHR' has been added.", 'code': 'OGG-08511', 'severity': 'INFO', 'issued': '2026-10-25T10:08:51Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]

>>> client.get_extract('EXTSHR')['managedProcessSettings']
'ogg:managedProcessSettings:SharedProfile'

>>> client.get_replicat('REPSHR')['managedProcessSettings']
'ogg:managedProcessSettings:SharedProfile'

>>> d = client.get_distribution_path('DPSHR')

>>> (d['managedPathSettings'], d['options'])
('SharedProfile', {'autoRestart': {'retries': 4, 'delay': {'delaySeconds': 15}}})

>>> new = client.get_config_value(
...     type='ogg:managedProcessSettings',
...     value=profile,
... )

>>> new['autoRestart'].update(retries=9, delay=25)

>>> client.update_config_value(
...     type='ogg:managedProcessSettings',
...     value=profile,
...     data=new,
... )['messages']
[]

>>> d = client.get_distribution_path('DPSHR')

>>> (d['managedPathSettings'], d['options'])
('SharedProfile', {'autoRestart': {'retries': 9, 'delay': {'delaySeconds': 25}}})

>>> client.delete_managed_process_profile('SharedProfile')
RuntimeError: ERROR (code 500) - http://localhost:7810/services/v2/config/types/ogg:managedProcessSettings/values/ogg:managedProcessSettings:SharedProfile: The managed process settings profile 'SharedProfile' is used by distpath 'DPSHR'.

The three objects report the same profile. After the retries of the profile are set to 9 and its delay to 25 seconds, the path reports the new values without being touched. The deletion of the profile is refused while it is in use, and the message names the path.

Summary

  • A distribution path or a receiver path takes a managed process profile in GoldenGate 23.26.4.0.0. The previous release answers OGG-12108 in the REST API and Unexpected value in the adminclient.
  • The REST property is managedPathSettings, a profile name. A request with both a profile and explicit auto-restart options returns OGG-30812, and an unknown profile returns OGG-08122.
  • The path follows the profile. A change of the profile applies to every path that uses it, and the deletion of a profile in use is refused.
  • An update with explicit options replaces the profile without an error, and no request clears the property. The explicit options of a path are in minutes, unless the delay is a delaySeconds object.
  • The profile is shared. The same profile can be used by an extract, a replicat and a path, and a change applies to all of them.
  • The adminclient has a PROFILE clause in ADD DISTPATH, ALTER DISTPATH and ADD RECVPATH, and INFO DISTPATH shows it. The web UI has a Profile Name list in Edit Managed Options.