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.

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.

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 new profile appears in the Profile Name list of the path, after PipeProfile.

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

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 answersOGG-12108in the REST API andUnexpected valuein theadminclient. - The REST property is
managedPathSettings, a profile name. A request with both a profile and explicit auto-restart options returnsOGG-30812, and an unknown profile returnsOGG-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
delaySecondsobject. - 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
adminclienthas aPROFILEclause inADD DISTPATH,ALTER DISTPATHandADD RECVPATH, andINFO DISTPATHshows it. The web UI has aProfile Namelist in Edit Managed Options.