<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Julien Delattre, auteur/autrice sur dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/author/juliendelattre/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/author/juliendelattre/</link>
	<description></description>
	<lastBuildDate>Fri, 10 Apr 2026 06:28:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/cropped-favicon_512x512px-min-32x32.png</url>
	<title>Julien Delattre, auteur/autrice sur dbi Blog</title>
	<link>https://www.dbi-services.com/blog/author/juliendelattre/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Create Distribution Paths in NGINX-Secured GoldenGate 26ai</title>
		<link>https://www.dbi-services.com/blog/create-distribution-paths-in-nginx-secured-goldengate-26ai/</link>
					<comments>https://www.dbi-services.com/blog/create-distribution-paths-in-nginx-secured-goldengate-26ai/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 06:18:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[distribution]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[secure]]></category>
		<category><![CDATA[validation]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43475</guid>

					<description><![CDATA[<p>Setting up a distribution path is an important step when connecting two GoldenGate deployments. However, there are so many connection options that it&#8217;s hard to know how to proceed. In this blog, I will present the way to connect two deployments secured through NGINX. Here are the prerequisites before attempting the distribution path creation: In [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/create-distribution-paths-in-nginx-secured-goldengate-26ai/">Create Distribution Paths in NGINX-Secured GoldenGate 26ai</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Setting up a distribution path is an important step when connecting two GoldenGate deployments. However, there are so many connection options that it&#8217;s hard to know how to proceed. In this blog, I will present the way to <strong>connect two deployments secured through NGINX</strong>.</p>



<p>Here are the prerequisites before attempting the distribution path creation:</p>



<ul class="wp-block-list">
<li>Having<strong> two servers</strong>, each running a <strong>GoldenGate</strong> Microservices Architecture. I will use the latest version here, <strong>26ai</strong>.</li>



<li>Having a<strong> running extract on the source</strong> setup.</li>



<li><strong>Port openings</strong>: port <code>443</code> should be open between the two deployments.</li>
</ul>



<p>In my environment, I have the following:</p>



<ul class="wp-block-list">
<li><strong>Source environment</strong>: <code>oggvm1</code>, with a deployment named <code>ogg_test_01</code>, a <code>CDB01</code> with a <code>PDB1</code> containing a <code>APP_PDB1</code> schema and a <code>table1</code> table.</li>



<li><strong>Target environment</strong>: <code>oggvm2</code>, with the equivalent deployment <code>ogg_test_02</code>, <code>CDB02</code>, <code>PDB2</code>, <code>APP_PDB2</code> schema, and a <code>table2</code> table.</li>
</ul>



<p>With all of this in mind, here are the three steps needed to create a working distribution path between two GoldenGate deployments secured with NGINX:</p>



<ul class="wp-block-list">
<li><strong>Create a Path Connection</strong></li>



<li><strong>Add the certificates</strong> used in NGINX to secure the target deployment to the source&#8217;s certificate management store.</li>



<li><strong>Create and start the distribution path</strong>.</li>
</ul>



<h2 class="wp-block-heading" id="h-path-connection-creation">Path Connection Creation</h2>



<p>To open a connection to the target deployment <code>ogg_test_02</code>, the source deployment needs a <strong>path connection</strong>. As explained in a <a href="https://www.dbi-services.com/blog/creating-path-connections-with-goldengate-rest-api/" target="_blank" rel="noreferrer noopener">previous blog</a>, <strong>path connections are aliases of an existing user on a target deployment</strong>.</p>



<p>It is recommended to separate roles and not use the administrator account of your target deployment, so let&#8217;s first create the user.</p>



<ul class="wp-block-list">
<li>On <code>ogg_test_02</code> (target deployment), go to the <em><strong>User Administration</strong></em> tab and <strong>add a new user</strong>. For the role, Oracle recommends using the <code>Operator</code> role, so there is no reason to use the higher-privileged <code>Administrator</code> or <code>Security</code> roles.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="1015" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user-1024x1015.png" alt="" class="wp-image-43760" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user-1024x1015.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user-300x297.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user-150x150.png 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user-768x761.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user-1536x1522.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_user.png 1538w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>On <code>ogg_test_01</code> (source deployment), <strong>create the path connection</strong>. Only the <code>Userid</code> and <code>Password</code> fields must match what you just created on the target. The alias is just known on the source side and doesn&#8217;t have to match the username set on the target deployment. The <strong>alias</strong> defined here in the source deployment <strong>will only appear when choosing a connection</strong> during the <strong>distribution path creation</strong>.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img decoding="async" width="1024" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path-1024x1024.png" alt="" class="wp-image-43761" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path-1024x1024.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path-300x300.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path-150x150.png 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path-768x769.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path-1534x1536.png 1534w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_path.png 1538w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-certificate-management">Certificate Management</h2>



<p>Because your <strong>deployments are secured with NGINX</strong>, you have to make sure that the certificates being used by one deployment are recognized by the other deployment. To do so, <strong>on the source only</strong>, you have to <strong>register the root certificate authority of the target deployment</strong>.</p>



<p>This can <strong>only</strong> be done at the <strong>Service Manager level</strong>. In the Service Manager web UI, go to <em><strong>Certificate Management</strong></em> and add a CA Certificate in the source deployment <code>ogg_test_01</code>. You have two options here.</p>



<ul class="wp-block-list">
<li>If the CA only needs to be registered on this specific deployment, you can register it with the <strong><em>Local</em></strong> option. This is the more secure option, but it is very often not needed.</li>



<li>If the CA registration should be shared with other deployments, you can register it with the <em><strong>Shared</strong></em> option.</li>
</ul>



<p>Paste the root certificate file used to secure your second deployment. The name used must be unique but will not be used anywhere else in the process.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1017" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca-1017x1024.png" alt="" class="wp-image-43776" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca-1017x1024.png 1017w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca-298x300.png 298w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca-150x150.png 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca-768x773.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca-1526x1536.png 1526w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_add_ca.png 1538w" sizes="(max-width: 1017px) 100vw, 1017px" /></figure>



<h2 class="wp-block-heading" id="h-how-should-i-register-a-certificate-chain">How should I register a certificate chain ?</h2>



<p>If the certificate file contains multiple certificates, GoldenGate doesn&#8217;t allow you to register them in one go. Instead, you need to <strong>break down the file and register each part individually</strong>. Again, the name and order in which you register the certificates do not matter, except for management purposes. I described the issue in more detail in a <a href="https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/" target="_blank" rel="noreferrer noopener">blog about the <code>OGG-30007</code> error</a>.</p>



<h2 class="wp-block-heading" id="h-distribution-path-creation">Distribution Path Creation</h2>



<p>We can now finally create the distribution path. On the <strong>source deployment</strong>, go on the <strong><em>Distribution Service Paths</em></strong> tab and register the path as such:</p>



<ul class="wp-block-list">
<li><strong><em>Path information</em></strong>: Specify the path name. If possible, make the target (and the source) visible in the name, to ease management when having multiple distribution paths.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="1019" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1-1024x1019.png" alt="" class="wp-image-43762" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1-1024x1019.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1-300x298.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1-150x150.png 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1-768x764.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1-1536x1528.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_1.png 1538w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong><em>Source options</em></strong>: Here, you should only select the extract at the source of this distribution path. The rest will be filled automatically or can stay with the default value.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="1012" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_2-1024x1012.png" alt="" class="wp-image-43764" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_2-1024x1012.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_2-300x297.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_2-768x759.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_2-1536x1518.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_2.png 1544w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong><em>Target options</em></strong>: This is where the configuration is specific. Because we are using a <strong>NGINX-secured deployment</strong> on the target, you must click on <strong><em>Reverse proxy enabled</em></strong> and choose the <code>wss</code> <strong>target protocol</strong>.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1011" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_3-1011x1024.png" alt="" class="wp-image-43765" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_3-1011x1024.png 1011w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_3-296x300.png 296w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_3-768x778.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_3-1516x1536.png 1516w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_blog_nginx_dist_path_3.png 1528w" sizes="auto, (max-width: 1011px) 100vw, 1011px" /></figure>
</div>


<ul class="wp-block-list">
<li><strong><em>Advanced, Filtering and Managed Options</em></strong>: Nothing here is specific to our setup, but you can of course customize these options as needed.</li>
</ul>



<p>And that&#8217;s it. Your deployments are now connected, and you should see the trail files on the target once you start the distribution path.</p>



<pre class="wp-block-code"><code>oracle@oggvm2:~/ ll $OGG_DEPLOYMENT_HOME/var/lib/data/PDB1
total 0
-rw-r-----. 1 oracle oinstall 0 Mar 22 07:34 bb000000000</code></pre>



<h2 class="wp-block-heading" id="h-the-remote-peer-submitted-a-certificate-that-failed-validation">The remote peer submitted a certificate that failed validation</h2>



<p>If your distribution path doesn&#8217;t start and generates a &#8220;<em>certificate that failed validation</em>&#8221; error, it means that you incorrectly registered your certificates. Make sure that the target deployment&#8217;s certificates are registered on the source deployment&#8217;s service manager and not the other way around.</p>



<p>You can also try to use the certificate in an <code>OGG_CLIENT_TLS_CAPATH</code> environment variable on the source and connect with the <code>adminclient</code> to check if it&#8217;s working.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/create-distribution-paths-in-nginx-secured-goldengate-26ai/">Create Distribution Paths in NGINX-Secured GoldenGate 26ai</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/create-distribution-paths-in-nginx-secured-goldengate-26ai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OGG-30007 : How To Register Certificates In GoldenGate ?</title>
		<link>https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/</link>
					<comments>https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 06:39:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[ca]]></category>
		<category><![CDATA[Certificate]]></category>
		<category><![CDATA[intermediate]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[ogg-30007]]></category>
		<category><![CDATA[PEM]]></category>
		<category><![CDATA[truststore]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43737</guid>

					<description><![CDATA[<p>After working on a GoldenGate deployment recently, I felt that the OGG-30007 error would be worth writing about. This error happens when registering certificates in GoldenGate. Whether you do it from the web UI or with the REST API, this GoldenGate error is detailed as such: This error occurs because GoldenGate expects exactly one PEM [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/">OGG-30007 : How To Register Certificates In GoldenGate ?</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>After working on a GoldenGate deployment recently, I felt that the <code>OGG-30007</code> error would be worth writing about. This error happens when <a href="https://docs.oracle.com/en/database/goldengate/core/26/coredoc/deploy-add-ca-certificate.html" target="_blank" rel="noreferrer noopener">registering certificates in GoldenGate</a>. Whether you do it from the web UI or with the REST API, this GoldenGate error is detailed as such:</p>



<pre class="wp-block-code"><code>Processing of the certificate PEM portion of the certificate bundle resulted in more than one (1) certificate objects.

Code: OGG-30007

Cause: The read and decode processing of the specified portion of the certificate bundle produced more than one (1) objects. More than one PEM encoded object is present in the data.

Action: Review the specified portion of the certificate bundle and correct as needed. Only a single PEM encoded object is expected.</code></pre>



<p>This error occurs because GoldenGate expects exactly <strong>one PEM object per import</strong>, while a certificate chain file contains multiple certificates. In the web UI, a pop-up will alert you that something is wrong:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="367" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_ogg30007-1-1024x367.png" alt="" class="wp-image-43739" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_ogg30007-1-1024x367.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_ogg30007-1-300x108.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_ogg30007-1-768x275.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_ogg30007-1.png 1490w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>As mentioned, this typically happens when registering a certificate chain. For instance, you could face the issue when <strong>connecting two deployments secured with NGINX</strong>. The server presents a certificate chain including the intermediate, while the client (GoldenGate) must trust both the root and the intermediate.</p>



<p>But when the Certificate Authority doesn&#8217;t sign your certificate directly with the <strong>Root Certificate</strong>, but with an <strong>Intermediate Certificate</strong>, the server presents a certificate chain including the intermediate. A certificate like the following will generate an <code>OGG-30007</code> error if you try to add it to the truststore:</p>



<pre class="wp-block-code"><code>-----BEGIN CERTIFICATE-----
(intermediate)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(root)
-----END CERTIFICATE-----</code></pre>



<p>And to make sure that your connections work, you should <strong>not only add the root certificate, but also the intermediate certificate</strong>. Because of the way GoldenGate stores these certificates, two separate entries must be created in the truststore. To ease monitoring and certificate management, you can name them <code>rootCA_ogg_target</code> and <code>intermediateCA_ogg_target</code></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="145" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_root_and_intermediate_CA-1024x145.png" alt="" class="wp-image-43740" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_root_and_intermediate_CA-1024x145.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_root_and_intermediate_CA-300x43.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_root_and_intermediate_CA-768x109.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_root_and_intermediate_CA-1536x218.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_webui_root_and_intermediate_CA.png 2044w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>With this, you should have no problem connecting GoldenGate deployments ! To avoid <code>OGG-30007</code>, ensure that each certificate is imported separately. In practice, this means <strong>extracting the root and intermediate certificates from the chain</strong> file and <strong>registering them as individual entries</strong> in the GoldenGate truststore.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/">OGG-30007 : How To Register Certificates In GoldenGate ?</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/ogg-30007-how-to-register-certificates-in-goldengate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Overcome GoldenGate 26ai Bug On Custom Profiles</title>
		<link>https://www.dbi-services.com/blog/overcome-goldengate-26ai-bug-on-custom-profiles/</link>
					<comments>https://www.dbi-services.com/blog/overcome-goldengate-26ai-bug-on-custom-profiles/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 06:56:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[add profile]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[custom profile]]></category>
		<category><![CDATA[hang]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[profile]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43587</guid>

					<description><![CDATA[<p>In GoldenGate, processes have a few options that can be managed to fit your needs. When creating an extract, for instance, you can act on the following parameters: In the web UI, an extract profile can be customized during the third step of an extract creation called Managed Options. Here, you can choose to use [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/overcome-goldengate-26ai-bug-on-custom-profiles/">Overcome GoldenGate 26ai Bug On Custom Profiles</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In GoldenGate, processes have a few options that can be managed to fit your needs. When creating an extract, for instance, you can act on the following parameters:</p>



<ul class="wp-block-list">
<li><code>autoStart.enabled</code>: whether the process will start automatically after the Administration Server starts.</li>



<li><code>autoStart.delay</code>: delay in seconds before starting the process.</li>



<li><code>autoRestart.enabled</code>: whether to restart the process after it fails.</li>



<li><code>autoRestart.onSuccess</code>: the process is only restarted if it fails.</li>



<li><code>autoRestart.delay</code>: waiting time (in seconds) before attempting to restart a process once it fails.</li>



<li><code>autoRestart.retries</code>: maximum number of retries before stopping restart attempts.</li>



<li><code>autoRestart.window</code>: timeframe before GoldenGate will attempt to restart the process again.</li>



<li><code>autoRestart.disableOnFailure</code>: if set to True, GoldenGate will disable the restart if it fails to restart within the <code>retries</code>/<code>window</code> setting. You will have to start the process manually if this happens.</li>
</ul>



<p>In the web UI, an extract profile can be customized during the third step of an extract creation called <em><strong>Managed Options</strong></em>. Here, you can choose to use the default profile, a user-defined profile or custom settings specific to the new process.</p>



<p>However, <strong>a bug was introduced in GoldenGate 26ai</strong>. If you <strong>create a custom profile with the <code>adminclient</code></strong>, the web UI will sometimes hang when creating any new extract or replicat. This also affects 23ai installations that are patched to 26ai, so be very careful when patching an existing GoldenGate 23ai setup containing custom profiles ! After patching, you will not<strong> be able to access and manage </strong>your profiles<strong> </strong>anymore <strong>from the web UI</strong>.</p>



<h2 class="wp-block-heading" id="h-what-is-the-bug-exactly">What is the bug exactly ?</h2>



<p>To reproduce the bug, simply create an extract from the <code>adminclient</code>.</p>



<pre class="wp-block-code"><code>OGG (https://vmogg ogg_test_01) 1&gt; info profile *
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Auto&nbsp;&nbsp;&nbsp;&nbsp; Delay&nbsp;&nbsp;&nbsp;&nbsp; Auto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait&nbsp;&nbsp;&nbsp;&nbsp; Reset&nbsp;&nbsp;&nbsp;&nbsp; Disable
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp; Seconds&nbsp; Restart&nbsp;&nbsp; Retries&nbsp;&nbsp; Seconds&nbsp;&nbsp; Seconds&nbsp; on Failure
--------------------------------&nbsp; -----&nbsp; --------&nbsp; -------&nbsp; --------&nbsp; --------&nbsp; --------&nbsp; ----------
Default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No
OGG (https://vmogg ogg_test_01) 2&gt; add profile TestProfile autostart no
OGG (https://vmogg ogg_test_01) 3&gt; info profile *
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Auto&nbsp;&nbsp;&nbsp;&nbsp; Delay&nbsp;&nbsp;&nbsp;&nbsp; Auto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait&nbsp;&nbsp;&nbsp;&nbsp; Reset&nbsp;&nbsp;&nbsp;&nbsp; Disable
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Start&nbsp;&nbsp; Seconds&nbsp; Restart&nbsp;&nbsp; Retries&nbsp;&nbsp; Seconds&nbsp;&nbsp; Seconds&nbsp; on Failure
--------------------------------&nbsp; -----&nbsp; --------&nbsp; -------&nbsp; --------&nbsp; --------&nbsp; --------&nbsp; ----------
Default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No
TestProfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; No</code></pre>



<p>In a GoldenGate 23ai web UI, you will see the following when creating an extract, in the <em><strong>Managed Options</strong></em> step:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="417" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_add_extract_23ai_working-4-1024x417.png" alt="" class="wp-image-43713" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_add_extract_23ai_working-4-1024x417.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_add_extract_23ai_working-4-300x122.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_add_extract_23ai_working-4-768x313.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_add_extract_23ai_working-4.png 1213w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>However, in GoldenGate 26ai, the extract creation hangs indefinitely, and no error gets reported.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="397" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_add_extract_26ai_bug-1024x397.png" alt="" class="wp-image-43714" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_add_extract_26ai_bug-1024x397.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_add_extract_26ai_bug-300x116.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_add_extract_26ai_bug-768x298.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_add_extract_26ai_bug-1536x596.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_add_extract_26ai_bug.png 1542w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Before the bug is solved by Oracle, <strong>what can you do</strong> ? The first thing you can do is <a href="https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/" target="_blank" rel="noreferrer noopener">modify the <code>Default</code> GoldenGate profile</a>, so that all extracts with this profile are affected. However, it means that you cannot fine-tune the settings for different processes, with different needs. After all, it is the reason why you should define profiles in the first place.</p>



<h2 class="wp-block-heading" id="h-is-there-a-workaround">Is there a workaround ?</h2>



<p>But if you still want to overcome this bug and having working profiles on 26ai until the bug gets corrected, you have two ways of doing this:</p>



<ul class="wp-block-list">
<li>Create profiles from the web UI. You can do this in the <em><strong>Managed Process Profiles</strong></em> tab of your deployment. Profiles created through this tab do not make the web UI hang indefinitely.</li>



<li>Create profiles with the REST API. As presented in <a href="https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/">this blog</a>, you can do this in two steps :
<ul class="wp-block-list">
<li>Creation of a new profile with the <a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-config-types-type-values-value-post.html" target="_blank" rel="noreferrer noopener">Create Configuration Value</a> endpoint on the <code>ogg:managedProcessSettings</code> type.</li>



<li>Creation of a new configuration <code>isDefault</code> set to <code>False</code> on the <code>ogg:<span style="background-color: initial;font-family: inherit;font-size: inherit;text-align: initial;color: initial">configDataDescription</span></code> type.</li>
</ul>
</li>
</ul>



<p>This way, you can create or recreate your profiles until the bug is solved.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/overcome-goldengate-26ai-bug-on-custom-profiles/">Overcome GoldenGate 26ai Bug On Custom Profiles</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/overcome-goldengate-26ai-bug-on-custom-profiles/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Monitoring GoldenGate Certificates Expiration</title>
		<link>https://www.dbi-services.com/blog/monitoring-goldengate-certificates-expiration/</link>
					<comments>https://www.dbi-services.com/blog/monitoring-goldengate-certificates-expiration/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Mon, 06 Apr 2026 07:09:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Certificate]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[restapi]]></category>
		<category><![CDATA[truststore]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43627</guid>

					<description><![CDATA[<p>Your GoldenGate certificates should be granted by a trusted Certificate Authority, which normally handles the monitoring of certificates. However, if you don&#8217;t want your future you, or a colleague, to spend too much time debugging which certificate should be renewed, you could monitor your certificates. In this blog, I will present a way to do [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/monitoring-goldengate-certificates-expiration/">Monitoring GoldenGate Certificates Expiration</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Your GoldenGate certificates should be <strong>granted by a trusted Certificate Authority</strong>, which normally handles the monitoring of certificates. However, if you don&#8217;t want your future you, or a colleague, to spend too much time debugging which certificate should be renewed, you could monitor your certificates. In this blog, I will present a way to do this with the REST API.</p>



<h2 class="wp-block-heading" id="h-certificates-types-in-goldengate">Certificates types in GoldenGate</h2>



<p>The first thing you need to know is that there are three types of certificates in a GoldenGate deployment. Each of them can be monitored separately in the REST API.</p>



<ul class="wp-block-list">
<li><strong>Server Certificates</strong>, which belong to the <code>server</code> type</li>



<li><strong>Client Certificates</strong>, which belong to the <code>client</code> type</li>



<li><strong>CA Certificates</strong>, which belong to the <code>truststore</code> type</li>
</ul>



<h2 class="wp-block-heading" id="h-certificate-monitoring-from-the-web-ui">Certificate monitoring from the web UI</h2>



<p>Before presenting the REST API monitoring of certificates, let&#8217;s see what we are supposed to be looking at. From the web UI, when <strong>connected to the Service Manager</strong>, you can observe the details of your certificates in the <em><strong>Certificate Management</strong></em> tab. I give below an example for both the Service Manager and a deployment in a secure GoldenGate installation.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="217" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_sm_certificates-1-1024x217.png" alt="" class="wp-image-43728" style="object-fit:cover" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_sm_certificates-1-1024x217.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_sm_certificates-1-300x63.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_sm_certificates-1-768x162.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_sm_certificates-1-1536x325.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_sm_certificates-1.png 1749w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="394" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_deployment_certificates-1-1024x394.png" alt="" class="wp-image-43729" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_deployment_certificates-1-1024x394.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_deployment_certificates-1-300x116.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_deployment_certificates-1-768x296.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_deployment_certificates-1-1536x591.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/ogg_deployment_certificates-1.png 1901w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>I create short-term certificates on purpose for the example, and we see that the UI is designed to tell the user when the certificates are close to expiration. But of course, it&#8217;s better to have some sort of monitoring do the job for us.</p>



<h2 class="wp-block-heading" id="h-certificate-monitoring-with-the-rest-api">Certificate monitoring with the REST API</h2>



<p>With GoldenGate REST API, it is rather easy to monitor certificate expiration. Unfortunately, you <strong>cannot ask the API for a list of certificates close to expiration</strong>, so you will have to iterate over all certificates in your monitoring script.</p>



<p>I will use the Python client I presented in another blog, but you can of course rebuild each call manually. Here are the methods / endpoints you should use:</p>



<ul class="wp-block-list">
<li><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-deployments-get.html" target="_blank" rel="noreferrer noopener">List Deployments</a> &#8211; <code>GET /services/{version}/deployments</code>, to retrieve the list of deployments. The Service Manager is considered as a normal deployment here, so there is no need to separate it from the other deployments.</li>



<li><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-deployments-deployment-certificates-get.html" target="_blank" rel="noreferrer noopener">Retrieve Available Certificate Types</a> &#8211; <code>GET /services/{version}/deployments/{deployment}/certificates</code>, to retrieve the collection of certificate types. It should always be the list given earlier (<code>client</code>, <code>server</code> and <code>truststore</code>).</li>



<li><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-deployments-deployment-certificates-type-get.html" target="_blank" rel="noreferrer noopener">Retrieve Certificate Types</a> &#8211; <code>GET /services/{version}/deployments/{deployment}/certificates/{type}</code>, to get the <strong>list of certificates that belong to a specific type</strong> inside a deployment.</li>



<li><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-deployments-deployment-certificates-type-certificate-info-get.html" target="_blank" rel="noreferrer noopener">Retrieve Certificate Information</a> &#8211; <code>GET /services/{version}/deployments/{deployment}/certificates/{type}/{certificate}/info</code>, to retrieve the information on a specific certificate.</li>
</ul>



<p>I share below a full monitoring script that you can use to monitor all certificates in a GoldenGate setup. Feel free to adapt it to your own monitoring tool.</p>



<pre class="wp-block-code"><code>#!/usr/bin/env python3
"""
Oracle GoldenGate Certificate Monitoring Script
"""

from datetime import datetime, timezone
import sys

from oggrestapi import OGGRestAPI

if __name__ == '__main__':
    exit_code = 0  # 0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN

    try:
        # Initialize the OGG REST API client
        ogg_client = OGGRestAPI(
            url='https://vmogg:7809',
            username='ogg',
            password='ogg',
            verify_ssl=False)

        # Retrieve the list of deployments
        deployments = ogg_client.list_deployments()
        print(f"Deployments: {&#091;d&#091;'name'] for d in deployments]}")

        # For each deployment, retrieve the list of certificates and check their expiration dates
        for deployment in deployments:
            deployment_name = deployment&#091;'name']
            print(f"    Checking certificates for deployment: {deployment_name}")

            certificate_types = ogg_client.retrieve_available_certificate_types_deployment(
                deployment=deployment_name)
            print(f"    Certificate types for deployment {deployment_name}: {&#091;ct&#091;'name'] for ct in certificate_types]}")
            for cert_type in certificate_types:
                cert_type_name = cert_type&#091;'name']
                print(f"        Checking certificates for type: {cert_type_name}")
                certificates = ogg_client.retrieve_certificate_types(
                    deployment=deployment_name,
                    type=cert_type_name)
                for cert in certificates:
                    cert_name = cert&#091;'name']
                    print(f"            Certificate: {cert_name}")
                    certificate_information = ogg_client.retrieve_certificate_information_deployment(
                        deployment=deployment_name,
                        type=cert_type_name,
                        certificate=cert_name)
                    expiration_date = certificate_information&#091;'certificate']&#091;'validTo']
                    print(f"                Certificate Expiry Date: {expiration_date}")
                    expire_in = datetime.strptime(expiration_date, "%Y-%m-%dT%H:%M:%SZ").replace(tzinfo=timezone.utc) - datetime.now(timezone.utc)
                    is_expired = expire_in.total_seconds() &lt; 0

                    if is_expired:
                        print(f"                WARNING: Certificate '{cert_name}' in deployment '{deployment_name}' of type '{cert_type_name}' has expired on {expiration_date}")
                        exit_code = max(exit_code, 2)  # CRITICAL
                    else:
                        days_left = int(expire_in.total_seconds() / 86400)
                        print(f"                Certificate '{cert_name}' in deployment '{deployment_name}' of type '{cert_type_name}' will expire in {days_left} days on {expiration_date}")
                        if days_left &lt; 30:
                            exit_code = max(exit_code, 1)  # WARNING

    except Exception as e:
        print(f"UNKNOWN: {e}")
        sys.exit(3)

    sys.exit(exit_code)</code></pre>



<p>On an installation where certificates are close to expire, the output looks like this:</p>



<pre class="wp-block-code"><code>Deployments: &#091;'ServiceManager', 'ogg_test_01']
    Checking certificates for deployment: ServiceManager
    Certificate types for deployment ServiceManager: &#091;'client', 'server', 'truststore']
        Checking certificates for type: client
        Checking certificates for type: server
            Certificate: default
                Certificate Expiry Date: 2026-03-31T05:54:15Z
                Certificate 'default' in deployment 'ServiceManager' of type 'server' will expire in 0 days on 2026-03-31T05:54:15Z
        Checking certificates for type: truststore
    Checking certificates for deployment: ogg_test_01
    Certificate types for deployment ogg_test_01: &#091;'client', 'server', 'truststore']
        Checking certificates for type: client
            Certificate: default
                Certificate Expiry Date: 2026-03-31T05:54:15Z
                Certificate 'default' in deployment 'ogg_test_01' of type 'client' will expire in 0 days on 2026-03-31T05:54:15Z
        Checking certificates for type: server
            Certificate: default
                Certificate Expiry Date: 2026-03-31T05:54:15Z
                Certificate 'default' in deployment 'ogg_test_01' of type 'server' will expire in 0 days on 2026-03-31T05:54:15Z
        Checking certificates for type: truststore
            Certificate: XCertUser-467fd0986deb
                Certificate Expiry Date: 2026-03-31T05:54:15Z
                Certificate 'XCertUser-467fd0986deb' in deployment 'ogg_test_01' of type 'truststore' will expire in 0 days on 2026-03-31T05:54:15Z
            Certificate: installed_0
                Certificate Expiry Date: 2026-03-31T05:54:15Z
                Certificate 'installed_0' in deployment 'ogg_test_01' of type 'truststore' will expire in 0 days on 2026-03-31T05:54:15Z</code></pre>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/monitoring-goldengate-certificates-expiration/">Monitoring GoldenGate Certificates Expiration</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/monitoring-goldengate-certificates-expiration/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Change GoldenGate Default Extract Profile</title>
		<link>https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/</link>
					<comments>https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 06:31:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[autorestart]]></category>
		<category><![CDATA[autostart]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[default]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[profile]]></category>
		<category><![CDATA[restapi]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43567</guid>

					<description><![CDATA[<p>As part of a GoldenGate setup automation, changing the Default profile of your extracts and replicats seems like a good start if you don&#8217;t want to deal with custom profiles or changing each individual configuration. Unfortunately, there is no easy way to modify an existing profile from the adminclient (there is no alter profile command). [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/">Change GoldenGate Default Extract Profile</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As part of a GoldenGate setup automation, changing the <code>Default</code> profile of your extracts and replicats seems like a good start if you don&#8217;t want to deal with custom profiles or changing each individual configuration.</p>



<p>Unfortunately, there is no easy way to modify an existing profile from the <code>adminclient</code> (there is no <code>alter profile</code> command). The <code>Default</code> profile makes no exception, so you will have to use the REST API for this. In this blog, I will present two ways of doing it:</p>



<ul class="wp-block-list">
<li>Updating the <code>Default</code> profile directly.</li>



<li>Creating a custom profile, and setting it as <code>Default</code>.</li>
</ul>



<p>Using the Python client for GoldenGate I presented in another <a href="https://www.dbi-services.com/blog/production-ready-goldengate-rest-client-in-python/" target="_blank" rel="noreferrer noopener">blog post</a>, you can easily create a session connecting to your GoldenGate setup and retrieve the existing configuration. For this, we will use the following methods / endpoints:</p>



<ul class="wp-block-list">
<li><code><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-config-types-type-values-value-get.html" target="_blank" rel="noreferrer noopener">retrieve_configuration_value</a></code> to get the current configuration (<code>GET /services/{version}/config/types/{type}/values/{value}</code>)</li>



<li><code><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-config-types-type-values-value-put.html" target="_blank" rel="noreferrer noopener">replace_configuration_value</a></code> to update the profile (<code>PUT /services/{version}/config/types/{type}/values/{value}</code>) </li>
</ul>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: python; title: ; notranslate">
from oggrestapi import OGGRestAPI

ogg_client=OGGRestAPI(
    url=&quot;https://vmogg:7810&quot;,
    username=&quot;ogg&quot;,
    password=&quot;ogg&quot;
)

ogg_client.retrieve_configuration_value(
    value=&#039;ogg:managedProcessSettings:Default&#039;,
    type=&#039;ogg:managedProcessSettings&#039;)
</pre></div>


<p>This gives us the basic configuration of all new extracts and replicats in GoldenGate. Let&#8217;s see the default values:</p>



<pre class="wp-block-code"><code>&gt;&gt;&gt; ogg_client.retrieve_configuration_value(
&nbsp;&nbsp;&nbsp; value='ogg:managedProcessSettings:Default',
&nbsp;&nbsp;&nbsp; type='ogg:managedProcessSettings')
{'$schema': 'ogg:managedProcessSettings', 'autoStart': {'enabled': False, 'delay': 0}, 'autoRestart': {'enabled': False, 'onSuccess': False, 'delay': 0, 'retries': 9, 'window': 60, 'disableOnFailure': True}}</code></pre>



<p>Let&#8217;s have a look at the different parameters here:</p>



<ul class="wp-block-list">
<li><code>autoStart.enabled</code>: whether the process will start automatically after the Administration Server starts.</li>



<li><code>autoStart.delay</code>: delay in seconds before starting the process.</li>



<li><code>autoRestart.enabled</code>: whether to restart the process after it fails.</li>



<li><code>autoRestart.onSuccess</code>: the process is only restarted if it fails.</li>



<li><code>autoRestart.delay</code>: waiting time (in seconds) before attempting to restart a process once it fails.</li>



<li><code>autoRestart.retries</code>: maximum number of retries before stopping restart attempts.</li>



<li><code>autoRestart.window</code>: timeframe before GoldenGate will attempt to restart the process again.</li>



<li><code>autoRestart.disableOnFailure</code>: if set to True, GoldenGate will disable the restart if it fails to restart within the <code>retries</code>/<code>window</code> setting. You will have to start the process manually if this happens.</li>
</ul>



<h2 class="wp-block-heading" id="h-updating-the-default-profile-directly">Updating the <code>Default</code> profile directly</h2>



<p>To update the <code>Default</code> profile, just create your own configuration and use the following example (based on the description given above) to push it to your GoldenGate deployment. Here, for instance, <code>autoStart</code> will be delayed by 30 seconds, and the process will try to restart every 5 minutes, and stop trying to restart after six retries. It will attempt to start again after two hours.</p>



<pre class="wp-block-code"><code>ogg_client.replace_configuration_value(
&nbsp;&nbsp;&nbsp; value='ogg:managedProcessSettings:Default',
&nbsp;&nbsp;&nbsp; type='ogg:managedProcessSettings',
&nbsp;&nbsp;&nbsp; data={
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '$schema': 'ogg:managedProcessSettings',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'autoStart': {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'enabled': True,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'delay': 30
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'autoRestart': {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'enabled': True,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'retries': 6,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'delay': 300,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'window': 7200,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'onSuccess': False,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'disableOnFailure': False
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }
)</code></pre>



<p>We can check by retrieving the configuration again.</p>



<pre class="wp-block-code"><code># Checking new configuration with the REST API
ogg_client.retrieve_configuration_value(
&nbsp;&nbsp;&nbsp; value='ogg:managedProcessSettings:Default',
&nbsp;&nbsp;&nbsp; type='ogg:managedProcessSettings')
{'$schema': 'ogg:managedProcessSettings', 'autoStart': {'enabled': True, 'delay': 30}, 'autoRestart': {'enabled': True, 'retries': 6, 'delay': 300, 'window': 7200, 'onSuccess': False, 'disableOnFailure': False}}</code></pre>



<p>Or you can check in the web UI in the <strong><em>Managed Process Profiles</em></strong> tab.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="1535" height="168" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.44.png" alt="" class="wp-image-43717" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.44.png 1535w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.44-300x33.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.44-1024x112.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.44-768x84.png 768w" sizes="auto, (max-width: 1535px) 100vw, 1535px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="959" height="545" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.46.png" alt="" class="wp-image-43718" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.46.png 959w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.46-300x170.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/04/Screenshot-2026-04-01-at-16.55.46-768x436.png 768w" sizes="auto, (max-width: 959px) 100vw, 959px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-setting-a-custom-profile-to-default">Setting a custom profile to <code>Default</code></h2>



<p>If for some reason you would rather keep the <code>Default</code> profile and have a custom profile as default, you have to create a new profile first and set it as default. To do this, we use the <code><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-config-types-type-values-value-post.html" target="_blank" rel="noreferrer noopener">create_configuration_value</a></code> method / endpoint, which is the same endpoint as before but with the <code>POST</code> verb. If we keep the same profile as in the previous example, here is the script to run. Only the method changes, as well as the value, where <code>Default</code> is changed with the name of your profile (<code>NewDefaultProfile</code>, here).</p>



<pre class="wp-block-code"><code>ogg_client.create_configuration_value(
&nbsp;&nbsp;&nbsp; value='ogg:managedProcessSettings:NewDefaultProfile',
&nbsp;&nbsp;&nbsp; type='ogg:managedProcessSettings',
&nbsp;&nbsp;&nbsp; data={
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '$schema': 'ogg:managedProcessSettings',
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'autoStart': {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'enabled': True,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'delay': 30
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'autoRestart': {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'enabled': True,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'retries': 6,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'delay': 300,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'window': 7200,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'onSuccess': False,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'disableOnFailure': False
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp; }
)</code></pre>



<p>After this, you need to do two things:</p>



<ul class="wp-block-list">
<li><strong>Create</strong> the <code>isDefault</code> <strong>flag for your new profile</strong>, and set it to <code>True</code>. This is done with the same <code>create_configuration_value</code> method, but on a different type called <code>ogg:configDataDescription</code>.</li>



<li><strong>Update</strong> the <code>isDefault</code> <strong>flag for the <code>Default</code> profile</strong> to <code>False</code>. Since the property already exists, we will use the <code>replace_configuration_value</code> method.</li>
</ul>



<p>Here is how to do the creation of the flag:</p>



<pre class="wp-block-code"><code>ogg_client.create_configuration_value(
&nbsp;&nbsp;&nbsp; value='ogg:managedProcessSettings:NewDefaultProfile',
&nbsp;&nbsp;&nbsp; type='ogg:<span style="background-color: initial;font-family: inherit;font-size: inherit;text-align: initial;color: initial">configDataDescription</span>',
&nbsp;&nbsp;&nbsp; data={
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'isDefault': True
    }
)</code></pre>



<p>And to update the <code>Default</code> profile:</p>



<pre class="wp-block-code"><code>ogg_client.replace_configuration_value(
&nbsp;&nbsp;&nbsp; value='ogg:managedProcessSettings:Default',
&nbsp;&nbsp;&nbsp; type='ogg:<span style="background-color: initial;font-family: inherit;font-size: inherit;text-align: initial;color: initial">configDataDescription</span>',
&nbsp;&nbsp;&nbsp; data={
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'isDefault': False
    }
)</code></pre>



<p>From now on, any new extract or replicat will be assigned to this <code>NewDefaultProfile</code> !</p>
<p>L’article <a href="https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/">Change GoldenGate Default Extract Profile</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/change-goldengate-default-extract-profile/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Undocumented GoldenGate &#8216;all&#8217; Role You Should Know About</title>
		<link>https://www.dbi-services.com/blog/the-undocumented-goldengate-all-role-you-should-know-about/</link>
					<comments>https://www.dbi-services.com/blog/the-undocumented-goldengate-all-role-you-should-know-about/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 05:27:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[delete]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[ogg-12430]]></category>
		<category><![CDATA[recreate]]></category>
		<category><![CDATA[restapi]]></category>
		<category><![CDATA[role]]></category>
		<category><![CDATA[user]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43582</guid>

					<description><![CDATA[<p>Let me tell you a story about how I discovered an undocumented role in GoldenGate that could break your automation. Recently, I wanted to do a massive update of the role of a GoldenGate user on multiple deployments. First of all, you should know that GoldenGate users are assigned to a role within the following [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/the-undocumented-goldengate-all-role-you-should-know-about/">The Undocumented GoldenGate &#8216;all&#8217; Role You Should Know About</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Let me tell you a story about how <strong>I discovered an undocumented role in GoldenGate</strong> that could break your automation. Recently, I wanted to do a massive update of the role of a GoldenGate user on multiple deployments. First of all, you should know that <strong>GoldenGate users are assigned to a role</strong> within the following list: <code>User</code>, <code>Operator</code>, <code>Administrator</code> and <code>Security</code>.</p>



<p>I will not dwell on the differences between them, but you just have to know something important here: <strong>you cannot change the role assigned to a GoldenGate user</strong>. If you try to edit a user, the only thing that you can change is the password.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="390" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_1-4-1024x390.png" alt="" class="wp-image-43605" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_1-4-1024x390.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_1-4-300x114.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_1-4-768x293.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_1-4.png 1281w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>That being said, the <strong>only possible option to change the role of a user</strong> in GoldenGate is to <strong>recreate it</strong>. In the web UI, it is rather simple. You just delete it, and recreate it with the same credentials, but a different role.</p>



<p>But as mentioned, I wanted to do it for multiple deployments and users, without having to do the operation manually.every time. That is why I decided to use the GoldenGate REST API to quickly iterate over users and deployments. And this is where the trouble began.</p>



<p>According to the GoldenGate documentation on the REST API, there are two endpoints that appear to replicate the web UI behavior :</p>



<ul class="wp-block-list">
<li><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-authorizations-role-user-delete.html" target="_blank" rel="noreferrer noopener">Delete User</a> : <code>DELETE /services/{version}/authorizations/{role}/{user}</code></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="555" height="118" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_delete_user.png" alt="" class="wp-image-43607" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_delete_user.png 555w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_delete_user-300x64.png 300w" sizes="auto, (max-width: 555px) 100vw, 555px" /></figure>
</div>


<ul class="wp-block-list">
<li><a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-authorizations-role-user-post.html" target="_blank" rel="noreferrer noopener">Create User</a> : <code>POST /services/{version}/authorizations/{role}/{user}</code></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="555" height="120" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_create_user-2.png" alt="" class="wp-image-43606" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_create_user-2.png 555w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_create_user-2-300x65.png 300w" sizes="auto, (max-width: 555px) 100vw, 555px" /></figure>
</div>


<p>However, <strong>when calling the API</strong> with these endpoints and the Python client I presented in <a href="https://www.dbi-services.com/blog/production-ready-goldengate-rest-client-in-python/" target="_blank" rel="noreferrer noopener">another blog</a>, I <strong>had the following error</strong> after trying to recreate the user:</p>



<pre class="wp-block-code"><code># Deletion works as intended
&gt;&gt;&gt; ogg_client.delete_user('dbiblog','Operator')
{'$schema': 'api:standardResponse', 'links': &#091;{'rel': 'canonical', 'href': 'https://vmogg/se/Operator', 'mediaType': 'application/json'}, {'rel': 'self', 'href': 'https://vmogg/se/Operator', 'mediaType': 'application/json'}], 'messages': &#091;]}

# Creation doesn't work
&gt;&gt;&gt; ogg_client.create_user('dbiblog', 'User', data={'credential':'**'})
Exception: ERROR - https://vmogg/services/ogg_test_01/adminsrvr/v2/authorizations/Operator/dbiblog: The specified user already exists.</code></pre>



<p>In the UI, <strong>the user was gone, but I couldn&#8217;t recreate it</strong> with the REST API. And even from the UI, the user couldn&#8217;t be recreated. Instead, I had the following error: <code>OGG-12430 : The specified user already exists.</code></p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="221" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_err_webui-1024x221.png" alt="" class="wp-image-43608" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_err_webui-1024x221.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_err_webui-300x65.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_err_webui-768x166.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_undocumented_role_err_webui.png 1304w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>At first, I thought something was wrong with either my deployment or my client, but I found nothing wrong. So I checked the <code>restapi.log</code> files of my deployment to understand:</p>



<ul class="wp-block-list">
<li>What the REST API calls were doing</li>



<li>What the web UI was doing.</li>
</ul>



<h2 class="wp-block-heading" id="h-restapi-log-analysis"><code>restapi.log</code> analysis</h2>



<p>Let&#8217;s try to create the exact same user (<code>dbiblog</code> / <code>Operator</code>) from the UI, and see <strong>what passes through the API</strong>. For more insight about how to query the <code>restapi.log</code> file efficiently, you can read a <a href="https://www.dbi-services.com/blog/querying-goldengate-rest-api-log-efficiently/" target="_blank" rel="noreferrer noopener">blog</a> I wrote on the topic. Otherwise, you can just search through the logs.</p>



<p>As shown below, the <strong>creation of a user from the UI</strong> only generated one call to the API (excluding <code>GET</code> calls) to the same endpoint used by my method.</p>



<pre class="wp-block-code"><code>{
&nbsp; "content": {
&nbsp;&nbsp;&nbsp; "credential": "** Masked **",
&nbsp;&nbsp;&nbsp; "type": "Basic"
&nbsp; },
&nbsp; "uri": "/services/v2/authorizations/Operator/dbiblog",
&nbsp; "uriTemplate": "/services/{version}/authorizations/{role}/{user}",
&nbsp; "verb": "POST",
&nbsp; "restapi_datetime": "2026-03-27 05:40:58.776+0000",
&nbsp; "restapi_reqno": 1840,
&nbsp; "restapi_service": "adminsrvr",
&nbsp; "restapi_status": "INFO"
}</code></pre>



<p>Now, when <strong>deleting the user from the UI</strong>, <strong>two <code>DELETE</code> operations</strong> go through the API.</p>



<pre class="wp-block-code"><code>{
&nbsp; "content": null,
&nbsp; "uri": "/services/v2/authorizations/Operator/dbiblog",
&nbsp; "uriTemplate": "/services/{version}/authorizations/{role}/{user}",
&nbsp; "verb": "DELETE",
&nbsp; "restapi_datetime": "2026-03-27 05:42:20.994+0000",
&nbsp; "restapi_reqno": 1926,
&nbsp; "restapi_service": "adminsrvr",
&nbsp; "restapi_status": "INFO"
}
{
&nbsp; "content": null,
&nbsp; "uri": "/services/v2/authorizations/all/dbiblog",
&nbsp; "uriTemplate": "/services/{version}/authorizations/{role}/{user}",
&nbsp; "verb": "DELETE",
&nbsp; "restapi_datetime": "2026-03-27 05:42:21.012+0000",
&nbsp; "restapi_reqno": 1927,
&nbsp; "restapi_service": "adminsrvr",
&nbsp; "restapi_status": "INFO"
}</code></pre>



<p>On top of making a <code>DELETE</code> call to the <code>dbiblog</code> / <code>Operator</code> pair, the UI generates another <code>DELETE</code> call on the <code>dbiblog</code> user with an undocumented <code>all</code> role !</p>



<p>This <strong>explains why you get an error</strong> when recreating a user with the REST API. If the user was deleted by a single REST API call, <strong>it still exists with the hidden <code>all</code> role</strong>.</p>



<p>To verify this hypothesis, let&#8217;s look at the <strong>list of users</strong> with the <code>Operator</code> and <code>all</code> roles <strong>before and after the user creation</strong>. <strong>Before</strong>, we only have the default <code>ogg</code> user (with the <code>Security</code> role, not shown here).</p>



<pre class="wp-block-code"><code>&gt;&gt;&gt; ogg_client.list_users('Operator')
&#091;]

&gt;&gt;&gt; ogg_client.list_users('all')
&#091;{'username': 'ogg'}]</code></pre>



<p>But <strong>after, the newly created user</strong> also gets the <code>all</code> role.</p>



<pre class="wp-block-code"><code>&gt;&gt;&gt; ogg_client.create_user(user='dbiblog', role='Operator', data={'credential':'**'})
{'$schema': 'api:standardResponse', 'links': &#091;{'rel': 'canonical', 'href': 'https://vmogg/ser/Operator/dbiblog', 'mediaType': 'application/json'}, {'rel': 'self', 'href': 'https://vmogg/ser/Operator/dbiblog', 'mediaType': 'application/json'}], 'messages': &#091;]}

&gt;&gt;&gt; ogg_client.list_users('Operator')
&#091;{'username': 'dbiblog'}]

&gt;&gt;&gt; ogg_client.list_users('all')
&#091;{'username': 'ogg'}, {'username': 'dbiblog'}]</code></pre>



<p>And of course, when deleting the user, <strong>I was only deleting it with the role I knew about</strong>.</p>



<h2 class="wp-block-heading" id="h-how-to-recreate-a-goldengate-user-with-the-rest-api">How to recreate a GoldenGate user with the REST API ?</h2>



<p>The conclusion is simple: to<strong> recreate a GoldenGate user with the REST API</strong>, you need to <strong>delete the user on its current role, but also on the <code>all</code> role</strong>. After doing this, you can recreate the user:</p>



<pre class="wp-block-code"><code># User deletion on the 'Operator' role
&gt;&gt;&gt; ogg_client.delete_user(user='dbiblog', role='Operator')
{'$schema': 'api:standardResponse', 'links': &#091;{'rel': 'canonical', 'href': 'https://vmogg/Operator', 'mediaType': 'application/json'}, {'rel': 'self', 'href': 'https://vmogg/ser/Operator', 'mediaType': 'application/json'}], 'messages': &#091;]}

# User deletion on the 'all' role
&gt;&gt;&gt; ogg_client.delete_user(user='dbiblog', role='all')
{'$schema': 'api:standardResponse', 'links': &#091;{'rel': 'canonical', 'href': 'https://vmogg/ser/All', 'mediaType': 'application/json'}, {'rel': 'self', 'href': 'https://vmogg/ser/All', 'mediaType': 'application/json'}], 'messages': &#091;]}

# User creation on the 'Operator' role
&gt;&gt;&gt; ogg_client.create_user(user='dbiblog', role='Operator', data={'credential':'**'})
{'$schema': 'api:standardResponse', 'links': &#091;{'rel': 'canonical', 'href': 'https://vmogg/ser/Operator/dbiblog', 'mediaType': 'application/json'}, {'rel': 'self', 'href': 'https://vmogg/ser/Operator/dbiblog', 'mediaType': 'application/json'}], 'messages': &#091;]}</code></pre>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/the-undocumented-goldengate-all-role-you-should-know-about/">The Undocumented GoldenGate &#8216;all&#8217; Role You Should Know About</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/the-undocumented-goldengate-all-role-you-should-know-about/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deployment Creation INS-85037 Error With GoldenGate 26ai for DB2 z/OS</title>
		<link>https://www.dbi-services.com/blog/deployment-creation-ins-85037-error-with-goldengate-26ai-for-db2-z-os/</link>
					<comments>https://www.dbi-services.com/blog/deployment-creation-ins-85037-error-with-goldengate-26ai-for-db2-z-os/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 07:38:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[clidriver]]></category>
		<category><![CDATA[DB2]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[INS-85037]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[oggca]]></category>
		<category><![CDATA[zOS]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43563</guid>

					<description><![CDATA[<p>Among all the automation I was doing around a GoldenGate installation for DB2, I recently ended up with an INS-85037 error when running the configuration assistant oggca.sh. And because this error is quite common and has many different possible root causes, I wanted to write about it. Differences in GoldenGate setup between Oracle and DB2 [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/deployment-creation-ins-85037-error-with-goldengate-26ai-for-db2-z-os/">Deployment Creation INS-85037 Error With GoldenGate 26ai for DB2 z/OS</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Among all the automation I was doing around a GoldenGate installation for DB2, I recently ended up with an <code>INS-85037</code> error when running the configuration assistant <code>oggca.sh</code>. And because this error is quite common and has many different possible root causes, I wanted to write about it.</p>



<h2 class="wp-block-heading" id="h-differences-in-goldengate-setup-between-oracle-and-db2">Differences in GoldenGate setup between Oracle and DB2</h2>



<p>If you&#8217;re wondering how to set up <strong>GoldenGate 26ai for DB2 z/OS</strong>, it is <strong>very similar</strong> to what you would do with GoldenGate for Oracle. For more information on standard GoldenGate setups, you can read my blog posts about both <a href="https://www.dbi-services.com/blog/goldengate-26ai-installation-and-new-administration-features/">26ai</a> and <a href="https://www.dbi-services.com/blog/goldengate-23ai-installation-graphic-and-silent-mode-comparison-for-automation/">23ai</a> installations.</p>



<p>For the binary installation, the main difference is that <code>INSTALL_OPTION</code> should be set to <code>DB2ZOS</code>. A complete <code>oggcore.rsp</code> response file would look like this:</p>



<pre class="wp-block-code"><code>oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v23_1_0
INSTALL_OPTION=DB2ZOS
SOFTWARE_LOCATION=/u01/app/oracle/product/oggzos
INVENTORY_LOCATION=/u01/app/oraInventory
UNIX_GROUP_NAME=oinstall</code></pre>



<p>When running the configuration assistant, some options are not available, but the main difference is in the environment variables section of the response file. You should have an <code>IBMCLIDRIVER</code> variable set to your DB2 driver&#8217;s path.</p>



<pre class="wp-block-code"><code>ENV_LD_LIBRARY_PATH=${IBMCLIDRIVER}/1ib:${OGG_HOME}/1ib
IBMCLIDRIVER=/path/to/ibmclidriver
ENV_USER_VARS=</code></pre>



<h2 class="wp-block-heading" id="h-possible-solution-for-ins-85037">Possible Solution for INS-85037</h2>



<p>That being said, here is the exact error I had when running the Configuration Assistant <code>oggca.sh</code>:</p>



<pre class="wp-block-code"><code>&#091;FATAL] &#091;INS-85037] Deployment creation failed.
  ACTION: Check logs at /u01/app/oraInventory/logs/OGGCAConfigActions2026-03-22_15-19-15PM for more information.
*MORE DETAILS*
Return code 503 (Service Unavailable) does not match the expected code 201 (Created).
Verification failed for REST call to 'http://127.0.0.1:7810/services/v2/authorizations/security/ogguser'
Results for "Add a new deployment":
..."Verifying Service Manager deployment status.": SUCCEEDED
..."Adding 'zos_test' deployment.": SUCCEEDED
...."Configuring and starting the Administration Service.": SUCCEEDED
..."Verifying the initial Administration Service configuration.": SUCCEEDED
..."Adding user 'ogguser' to administer the deployment.": FAILED
Log of this session available at: /u01/app/oraInventory/logs/OGGCAConfigActions2026-03-22_15-19-15PM
The deployment creation failed and the associated files will be deleted from disk. Oracle recommends that if you want to keep the log files, you should move them to another location.
Log files will be copied to:
/u01/app/oraInventory/logs/OGGCAConfigActions2026-03-22_15-19-15PM/userdeploy_logs_2026-03-22_15-19-15PM
&#091;WARNING] &#091;INS-32090] Software installation was unsuccessful.
ACTION: Refer to the log files for details or contact Oracle Support Services.</code></pre>



<p>Unfortunately, the installation logs did not show anything other than the following:</p>



<pre class="wp-block-code"><code>SEVERE: Deployment creation job failed.
INFO: Service Manager deployment that was created as part of the process needs to be removed.
INFO: Running clean-up job for Service Manager.
SEVERE: Removing Service Manager deployment.</code></pre>



<p>The deployment and the service manager get deleted after the installation failure, but the logs are also copied to the <code>oraInventory</code> installation logs. Looking at the <code>ServiceManager.log</code> in the <code>smdeploy</code> folder, we don&#8217;t get much information.</p>



<pre class="wp-block-code"><code>ERROR| Configuration does not contain a 'config/network' specification. (ServiceManager.Topology)</code></pre>



<p>The same applies to the <code>restapi.log</code>, where the logs start after the initial deployment creation error. Unfortunately, none of this was really helpful in my case. After quite some digging, I found that the <strong>response file I was using</strong> when running <code>oggca.sh</code> had <strong>an error</strong>. In the custom section for environment variables, I had the following settings:</p>



<pre class="wp-block-code"><code># SECTION G - ENVIRONMENT VARIABLES
ENY_LD_LIBRARY_PATH-S{IBMCLIDRIVER}/1ib:${OGG_HOME}/11b
IBMCLIDRIVER=/u01/app/ibm/db2_odbc_cli_11_5
ENV_USER_VARS=</code></pre>



<p>It looks like what I gave earlier, except that the path for the clidriver was incomplete.</p>



<pre class="wp-block-code"><code>oracle@vmogg:/home/oracle/ &#091;ogg] ls -l /u01/app/ibm/db2_odbc_cli_11_5
drwxr-xr-x 3 oracle oinstall 23 Mar 22 2026 odbc_cli

oracle@vmogg:/home/oracle/ &#091;ogg] ls -l /u01/app/ibm/db2_odbc_cli_11_5/odbc_cli/clidriver/
-r-xr-xr-x 1 oracle oinstall 4170 Mar 17 2021 Readme.txt
drwxr-xr-x 2 oracle oinstall 36 Mar 22 2026 adm
drwxr-xr-x 2 oracle oinstall 122 Mar 22 2026 bin
drwxr-xr-x 2 oracle oinstall 197 Mar 22 2026 bnd
drwxr-xr-x 2 oracle oinstall 157 Mar 22 09:16 cfg
drwxr-xr-x 2 oracle oinstall 24 Mar 22 2026 cfecache
drwxr-xr-x 4 oracle oinstall 27 Mar 22 2026 conv
drwxr-xr-x 3 oracle oinstall 49 Mar 22 09:26 db2dump
drwxr-xr-x 3 oracle oinstall 217 Mar 22 2026 lib
drwxr-xr-x 3 oracle oinstall 124 Mar 22 09:26 license
drwxr-xr-x 3 oracle oinstall 28 Mar 22 2026 msg
drwxr-xr-x 3 oracle oinstall 21 Mar 22 2026 properties
drwxr-xr-x 3 oracle oinstall 20 Mar 22 2026 security32
drwxr-xr-x 3 oracle oinstall 20 Mar 22 2026 security64</code></pre>



<p>After correcting the <code>oggca.rsp</code> response file with the correct path, the configuration assistant ran successfully.</p>



<pre class="wp-block-code"><code>oracle@vmogg:/u01/app/oracle/product/ogg26/bin &#091;ogg] oggca.sh -silent -responseFile /home/oracle/oggca.rsp
Successfully Setup Software.</code></pre>



<p>Next time you encounter an error like this when setting up GoldenGate for DB2, make sure to check not only the variable value but also the actual content of the <code>IBMCLIDRIVER</code> directory !</p>



<p><em><strong>NB:</strong> If you had this error for any other kind of setup, make sure to always check all the content of the response file you are using, as well as the prerequisites. (CLIDRIVER in this case, but it could be XAG, etc.)</em></p>
<p>L’article <a href="https://www.dbi-services.com/blog/deployment-creation-ins-85037-error-with-goldengate-26ai-for-db2-z-os/">Deployment Creation INS-85037 Error With GoldenGate 26ai for DB2 z/OS</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/deployment-creation-ins-85037-error-with-goldengate-26ai-for-db2-z-os/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Creating Path Connections with GoldenGate REST API</title>
		<link>https://www.dbi-services.com/blog/creating-path-connections-with-goldengate-rest-api/</link>
					<comments>https://www.dbi-services.com/blog/creating-path-connections-with-goldengate-rest-api/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Mon, 23 Mar 2026 07:33:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[connection]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restapi]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43525</guid>

					<description><![CDATA[<p>When automating your GoldenGate deployment management, you might want to create path connections with the GoldenGate REST API. This is an important aspect when connecting GoldenGate deployments with distribution paths. A first step towards this is to create a path connection on the same deployment as the distribution server where the distribution path will run. [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/creating-path-connections-with-goldengate-rest-api/">Creating Path Connections with GoldenGate REST API</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>When automating your GoldenGate deployment management, you might want to <strong>create path connections with the GoldenGate REST API</strong>. This is an important aspect when <strong>connecting GoldenGate deployments</strong> with distribution paths. A first step towards this is to create a path connection on the same deployment as the distribution server where the distribution path will run.</p>



<p>In the GoldenGate web UI, you can easily create <strong>Path Connections</strong>. Just go to the <strong><em>Path Connections</em></strong> tab, add a path, and specify the following information:</p>



<ul class="wp-block-list">
<li><strong><em>Credential Alias</em></strong>: Alias used to connect to the target deployment. It doesn&#8217;t have to match any name on the target deployment.</li>



<li><strong><em>User ID</em></strong>: Real username that must exist on the target deployment.</li>



<li><strong><em>Password</em></strong>: Password associated with the User ID given before.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="393" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections_creation-1024x393.png" alt="" class="wp-image-43527" style="width:600px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections_creation-1024x393.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections_creation-300x115.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections_creation-768x295.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections_creation.png 1464w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-restapi-log-analysis"><code>restapi.log</code> analysis</h2>



<p>But what about the REST API ? When looking at the <a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/rest-endpoints.html" target="_blank" rel="noreferrer noopener">list of endpoints</a> given by Oracle, no REST endpoint explicitly refers to <em>path connections</em>, so <strong>how to create path connections through the REST API</strong> ?</p>



<p>The key point to understand is that <strong>path connections are not independent GoldenGate objects</strong>. In fact, they exist as a subset of another object, which you should know by now : aliases. <strong>Aliases</strong> are created to <strong>store credentials</strong> and are <strong>organized in domains</strong>. The default domain is called <code>OracleGoldenGate</code>, and Oracle has a reserved name for a subtype of domains : <code>Network</code>.</p>



<p>We can see this easily when creating a path connection through the web UI, and then looking at the <code>restapi.log</code> file. Open the log file located in the <code>var/log</code> folder of your deployment, or read the <a href="https://www.dbi-services.com/blog/querying-goldengate-rest-api-log-efficiently/" target="_blank" rel="noreferrer noopener">blog I wrote</a> about <code>restapi.log</code> analysis. Using this method, we see the endpoint and the content of the API call. Here, for instance, I created a path connection from the web UI, to connect to <code>ogg_user</code> with the <code>ogg_target</code> alias.</p>



<pre class="wp-block-code"><code>oracle@vmogg: jq -c 'select (.request.context.verb == "POST" and .request.context.uriTemplate == "/services/{version}/credentials/{domain}/{alias}")' restapi.ndjson

{"request":{"context":{"verb":"POST","uri":"/services/v2/credentials/Network/ogg_target","uriTemplate":"/services/{version}/credentials/{domain}/{alias}"}},"content":{"userid":"ogg_user","password":"** Masked **"},...}</code></pre>



<h2 class="wp-block-heading" id="h-path-connection-creation-with-the-rest-api">Path connection creation with the REST API</h2>



<p>To summarize, <strong>path connections are just aliases in the <code>Network</code> domain</strong>. This simplifies the <strong>creation of path connections</strong>. You just need to make a <code>POST</code> <strong>API call to the alias endpoint</strong>, specifying <code>Network</code> as the domain. The exact endpoint is then <code>/services/{version}/credentials/Network/{alias}</code>.</p>



<p>Quick example: using the <a href="https://www.dbi-services.com/blog/production-ready-goldengate-rest-client-in-python/" target="_blank" rel="noreferrer noopener">GoldenGate Python client</a> I presented in another blog, let&#8217;s create an alias in the <code>Network</code> domain :</p>



<pre class="wp-block-code"><code>&gt;&gt;&gt; from oggrestapi import OGGRestAPI

&gt;&gt;&gt; ogg_client = OGGRestAPI(
&nbsp;&nbsp;&nbsp; url="https://vmogg",
&nbsp;&nbsp;&nbsp; username="ogg",
&nbsp;&nbsp;&nbsp; password="ogg")
Connected to OGG REST API at https://vmogg

&gt;&gt;&gt; ogg_client.create_alias(
    alias='ogg_dbi_blog',
    domain='Network',
    data={
&nbsp;&nbsp;&nbsp;&nbsp;    "userid": "ogg_user_on_target",
&nbsp;&nbsp;&nbsp;&nbsp;    "password": "***"
    }
)
{'$schema': 'api:standardResponse', 'links': &#091;{'rel': 'canonical', 'href': 'https://vmogg/services/v2/credentials/Network/ogg_dbi_blog', 'mediaType': 'application/json'}, {'rel': 'self', 'href': 'https://vmogg/services/v2/credentials/Network/ogg_dbi_blog', 'mediaType': 'application/json'}], 'messages': &#091;{'$schema': 'ogg:message', 'title': 'Credential store altered.', 'code': 'OGG-15114', 'severity': 'INFO', 'issued': '2026-03-22T10:14:01Z', 'type': 'https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/'}]}</code></pre>



<p>After refreshing the web UI, the newly created path connection is visible.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="641" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections-1-1024x641.png" alt="" class="wp-image-43528" style="width:500px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections-1-1024x641.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections-1-300x188.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections-1-768x481.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/ogg_blog_restapi_path_connections-1.png 1042w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div><p>L’article <a href="https://www.dbi-services.com/blog/creating-path-connections-with-goldengate-rest-api/">Creating Path Connections with GoldenGate REST API</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/creating-path-connections-with-goldengate-rest-api/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Credential Errors (OGG-15409) with GoldenGate Migration Utility</title>
		<link>https://www.dbi-services.com/blog/credential-errors-ogg-15409-with-goldengate-migration-utility/</link>
					<comments>https://www.dbi-services.com/blog/credential-errors-ogg-15409-with-goldengate-migration-utility/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 19 Mar 2026 06:51:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[credential]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[ogg-15409]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[utility]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43402</guid>

					<description><![CDATA[<p>The GoldenGate migration utility provided by Oracle allows you to quickly upgrade your classic architecture into GoldenGate 26ai with Microservices Architecture. But even after some updates, it still has a few bugs, as I explained in a previous blog post. One of them can lead to an OGG-15409 error during the migration. This error will [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/credential-errors-ogg-15409-with-goldengate-migration-utility/">Credential Errors (OGG-15409) with GoldenGate Migration Utility</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>The <a href="https://docs.oracle.com/en/database/goldengate/core/26/coredoc/migration-utility-migrate-classic-ma.html" target="_blank" rel="noreferrer noopener">GoldenGate migration utility</a> provided by Oracle allows you to quickly upgrade your classic architecture into GoldenGate 26ai with Microservices Architecture. But even after some updates, it still has a few bugs, as I explained in a previous blog post.</p>



<p>One of them can lead to an <code>OGG-15409</code> error during the migration. This error will not appear when running the migration tool in <code>dryrun</code> mode. You might then be faced with this issue only when doing the real migration. Here is the exact error:</p>



<pre class="wp-block-code"><code>ERROR: Unable to patch EXTRACT EXT, response is HTTP Status-Code 400: Bad Request..
&#091;ERROR] OGG-15409 - Alias &amp;#x27;ggadmin_alias&amp;#x27; not found in credential store domain &amp;#x27;OracleGoldenGate&amp;#x27;.
Extract EXT Process Definitions patched.</code></pre>



<h2 class="wp-block-heading" id="h-where-does-the-error-come-from">Where does the error come from ?</h2>



<p>The first step is to understand what is causing the issue. For this, you need to understand how the GoldenGate migration utility works.</p>



<p>When migrating extracts (or replicats), GoldenGate will make API calls to the new Microservices Architecture administration service to register the extract (or replicat). Once created, it will alter it with a <code>PATCH</code> request to update the credentials used.</p>



<p>We can see it in the <code>restapi.log</code>:</p>



<pre class="wp-block-code"><code>{"context":{"verb":"PATCH","uri":"/services/v2/extract/EXT",...},"content":{"credentials":{"alias":"ggadmin_alias","domain":"OracleGoldenGate"}},...}</code></pre>



<p id="h-unfortunately-once-the-migration-is-done-you-cannot-re-run-the-migration-you-will-need-to-fix-this-manually">Unfortunately, once the migration is done, you cannot re-run the migration. You will need to fix this manually.</p>



<p>But since this is the only post-migration task made on extracts and replicats, it is rather easy to do. You can just create the aliases first, and call the REST API to alter all extracts and replicats. In Python, using the client I presented in a previous <a href="https://www.dbi-services.com/blog/production-ready-goldengate-rest-client-in-python/" target="_blank" rel="noreferrer noopener">blog post</a>, it would look like the following. First, create the client connection.</p>



<pre class="wp-block-code"><code>from oggrestapi import OGGRestAPI
ogg_client = OGGRestAPI(url='https://vmogg:7810', username='ogg', password='***')</code></pre>



<p>Then, check the content of the extract (or replicat) using the <code>retrieve_extract</code> (or <code>retrieve_replicat</code>) method. For the moment, we don&#8217;t see any <code>credentials</code> key.</p>



<pre class="wp-block-code"><code># This retrieves all the configuration of an extract, except for the configuration file
&gt;&gt;&gt; {k:v for k,v in ogg_client.retrieve_extract('EXT').items() if k != 'config'}
{'$schema': 'ogg:extract', 'targets': &#091;{'name': 'aa', 'path': 'source', 'sizeMB': 500, ...}], 'description': 'dbi blog migration', 'source': 'tranlogs', 'type': 'Integrated'}</code></pre>



<p>Then, create the alias(es) with the <code>create_alias</code> method.</p>



<pre class="wp-block-code"><code>ogg_client.create_alias(
    alias='ggadmin_alias',
    domain='OracleGoldenGate',
    data={
        "userid":"ggadmin@vmora:1521/DB",
        "password": "***"
    }
)</code></pre>



<p>And finally, alter the extracts with the <code>update_extract</code> method.</p>



<pre class="wp-block-code"><code>ogg_client.update_extract(
    extract='EXT',
    data={
        "alias": "ggadmin_alias",
        "domain": "OracleGoldenGate"
    }
)</code></pre>



<p>If you had the issue with a replicat, the syntax is exactly the same, with the <code>update_replicat</code> method.</p>



<pre class="wp-block-code"><code>ogg_client.update_replicat(
    replicat='REP',
    data={
        "alias": "ggadmin_alias",
        "domain": "OracleGoldenGate"
    }
)</code></pre>



<p>You can check that the credentials are there by reusing the <code>retrieve_extract</code> (or <code>retrieve_replicat</code>) method. This time, we see the <code>credentials</code> key !</p>



<pre class="wp-block-code"><code>&gt;&gt;&gt; {k:v for k,v in ogg_client.retrieve_extract('EXT').items() if k != 'config'}
{'$schema': 'ogg:extract', 'credentials': {'alias': 'ggadmin_alias', 'domain': 'OracleGoldenGate'}, 'targets': &#091;{'name': 'aa', 'path': 'source', 'sizeMB': 500, ...}], 'description': 'dbi blog migration', 'source': 'tranlogs', 'type': 'Integrated', ...}</code></pre>



<h2 class="wp-block-heading" id="h-how-to-avoid-this-error">How to avoid this error ?</h2>



<p>For some reason, the credentials of the source setup will not always be migrated. If you don&#8217;t have too many aliases, I would suggest <strong>creating the aliases in the target environment</strong>. This way, you know they are <strong>working even before attempting the migration</strong>. This should definitely be part of your new deployment tests.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/credential-errors-ogg-15409-with-goldengate-migration-utility/">Credential Errors (OGG-15409) with GoldenGate Migration Utility</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/credential-errors-ogg-15409-with-goldengate-migration-utility/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OGG-12020 Payload Error in GoldenGate Migration Utility</title>
		<link>https://www.dbi-services.com/blog/ogg-12020-payload-error-in-goldengate-migration-utility/</link>
					<comments>https://www.dbi-services.com/blog/ogg-12020-payload-error-in-goldengate-migration-utility/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Mon, 16 Mar 2026 08:09:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[ogg-12020]]></category>
		<category><![CDATA[payload]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[strsub]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43395</guid>

					<description><![CDATA[<p>While migrating a GoldenGate classic architecture setup with the migration utility, I recently had the following OGG-12020 error: It is a very cryptic error at first glance, but let&#8217;s try to understand what happened. Where does the error come from ? The first step is to understand what is causing the issue. For this, you [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/ogg-12020-payload-error-in-goldengate-migration-utility/">OGG-12020 Payload Error in GoldenGate Migration Utility</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>While migrating a GoldenGate classic architecture setup with the <a href="https://docs.oracle.com/en/database/goldengate/core/26/coredoc/migration-utility-migrate-classic-ma.html#GUID-D2515415-01D0-43CB-A439-F13BC9D36D58" target="_blank" rel="noreferrer noopener">migration utility</a>, I recently had the following <code>OGG-12020</code> error:</p>



<pre class="wp-block-code"><code>&#091;ERROR] OGG-12020 - The request payload for &amp;#x27;POST /services/v2/config/files/ext.prm&amp;#x27; is not defined as an object</code></pre>



<p>It is a very cryptic error at first glance, but let&#8217;s try to understand what happened.</p>



<h2 class="wp-block-heading" id="h-where-does-the-error-come-from">Where does the error come from ?</h2>



<p>The first step is to understand what is causing the issue. For this, you need to understand how the GoldenGate migration utility works.</p>



<p>When migrating extracts (or any other GoldenGate object), GoldenGate will make <strong>API calls</strong> to the new microservices architecture administration service to register the extracts. The <code>OGG-12020</code> error is just the API telling you that the <code>POST</code> call is invalid.</p>



<p>Let&#8217;s use the API log reader from a previous <a href="https://www.dbi-services.com/blog/querying-goldengate-rest-api-log-efficiently/" target="_blank" rel="noreferrer noopener">blog post</a> to ease the analysis. You can also just read through the <code>restapi.log</code> of your target deployment, but it will be harder to read.</p>



<pre class="wp-block-code"><code>python3 restapi_to_ndjson.py $OGG_DEPLOYMENT_HOME/var/log restapi.ndjson</code></pre>



<p>Using <code>jq</code>, we filter the failed <code>POST</code> calls against the URI given in the migration logs (<code>/services/v2/config/files/ext.prm</code>).</p>



<pre class="wp-block-code"><code>&gt; jq -c 'select (.request.context.verb == "POST" and .request.context.uri == "/services/v2/config/files/ext.prm" and .restapi_status == "ERROR")' restapi.ndjson
{"request":{"context":{"httpContextKey":140077954104240,"verbId":4,"verb":"POST","originalVerb":"POST","uri":"/services/v2/config/files/ext.prm","protocol":"https","headers":{"Authorization":"** Masked **","Content-type":"application/json","User-Agent":"Java/1.8.0_482","Host":"oggma:port","Accept":"text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2","Connection":"keep-alive","Content-Length":"12417", "Content-Type":null,"X-OGG-Requestor-Id":"","X-OGG-Feature-List":""},"host":"oggma:port","securityEnabled":true,"authorization":{"authUserName":"ogg_user","authPassword":"** Masked **", "authMode":"Basic","authUserRole":"Security"},"requestId":5,"uriTemplate":"/services/{version}/config/files/{file}"},"content":null,"isScaRequest":true,"parameters":{"uri":{"file":"ext.prm","version":"v2"}}},"response":{"context":{"httpContextKey":140077954104240,"requestId":5,"code":"400 Bad Request","headers":{"Content-Type":"application/json","Strict-Transport-Security":"max-age=31536000;includeSubDomains","Set-Cookie":"** Masked **"},"Content-Type":"application/json","contentType":"text/html"},"isScaResponse":true,"content":{"$schema":"api:standardResponse","links":&#091;{"rel":"canonical","href":"https://oggma:port/services/v2/config/files/ext.prm","mediaType":"text/html"},{"rel":"self","href":"https://oggma:port/services/v2/config/files/ext.prm","mediaType":"text/html"}],"messages":&#091;{"$schema":"ogg:message","title":"The request payload for 'POST /services/v2/config/files/ext.prm' is not defined as an object.","code":"OGG-12020","severity":"ERROR","issued":"2026-03-05T09:55:24Z","type":"https://docs.oracle.com/en/middleware/goldengate/core/23.26/error-messages/"}]}},"restapi_datetime":"2026-03-05 10:55:24.448+0100","restapi_epoch":1772704524,"restapi_status":"ERROR","restapi_service":"adminsrvr","restapi_reqno":18}</code></pre>



<p>You might not see the root cause at first, but if we only retrieve the <code>content</code> object:</p>



<pre class="wp-block-code"><code>&gt; jq -c 'select (.request.context.verb == "POST" and .request.context.uri == "/services/v2/config/files/ext.prm" and .restapi_status == "ERROR") | {content:.request.content, message:.response.content.messages&#091;0].title}' restapi.ndjson
{"content":null,"message":"The request payload for 'POST /services/v2/config/files/ext.prm' is not defined as an object."}</code></pre>



<p>The migration utility is sending a request to the API with a <code>null</code> content, which obviously fails. Normally, the <code>content</code> key should contain a <strong>list with all the lines</strong> from the parameter file.</p>



<h2 class="wp-block-heading" id="h-how-to-solve-this-issue">How to solve this issue ?</h2>



<p>Unfortunately, there is <strong>no easy solution here</strong>. But here are the steps I took to solve the issue.</p>



<ul class="wp-block-list">
<li>First, you should make sure that the <code>dryrun</code> of the migration utility did not highlight any error in the formatting of the file.</li>



<li>Then, make sure you are using the <strong>latest version of the migration utility</strong>.</li>



<li>If it still doesn&#8217;t work, you unfortunately found a bug in the migration utility, and there is little you can do.</li>
</ul>



<p>However, you can still use the tool to migrate. In my case, I managed to pinpoint the error to this line of the extract parameter file:</p>



<pre class="wp-block-code"><code>TOKENS (
    &#091;...]
    TK_COL = &#091;...] @STRSUB(column_name, '|', '\|', '\', '\\') &#091;...]
);</code></pre>



<p>The migration utility seems to have poor handling of these escape characters and does not fail properly. It should either fail before attempting the API call or send proper <code>content</code> to the API.</p>



<p>If you are sure that the incriminated syntax is valid in your target GoldenGate version, migrate with the following steps:</p>



<ul class="wp-block-list">
<li><strong>Remove the incriminated syntax</strong> from the file. In my case, it meant removing the <code>STRSUB</code> section of the file.</li>



<li><strong>Migrate</strong> with the temporary parameter file</li>



<li><strong>Modify the parameter file</strong> in the target GoldenGate deployment, undoing the changes.</li>
</ul>



<p>If you have a lot of extracts and replicats that need to be migrated, using this temporary file trick might be your best chance to secure your GoldenGate migration.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/ogg-12020-payload-error-in-goldengate-migration-utility/">OGG-12020 Payload Error in GoldenGate Migration Utility</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/ogg-12020-payload-error-in-goldengate-migration-utility/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: www.dbi-services.com @ 2026-04-17 14:35:35 by W3 Total Cache
-->