<?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>Archives des Oracle - dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/category/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/category/oracle/</link>
	<description></description>
	<lastBuildDate>Thu, 18 Jun 2026 13:09:40 +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>Archives des Oracle - dbi Blog</title>
	<link>https://www.dbi-services.com/blog/category/oracle/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>LOB Replication With GoldenGate and Importance of Primary Keys</title>
		<link>https://www.dbi-services.com/blog/lob-replication-with-goldengate-and-importance-of-primary-keys/</link>
					<comments>https://www.dbi-services.com/blog/lob-replication-with-goldengate-and-importance-of-primary-keys/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 15:13:07 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[bad_column]]></category>
		<category><![CDATA[blob]]></category>
		<category><![CDATA[CLOB]]></category>
		<category><![CDATA[dba_goldengate_not_unique]]></category>
		<category><![CDATA[keycols]]></category>
		<category><![CDATA[LOB]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[primary key]]></category>
		<category><![CDATA[Replication]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[table]]></category>
		<category><![CDATA[unsupported]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44906</guid>

					<description><![CDATA[<p>Every time I work on database migrations with GoldenGate, I have the same talks with application teams about missing primary keys. Especially when it comes to LOB replication with GoldenGate. In a previous blog, I wrote about how to interpret the DBA_GOLDENGATE_NOT_UNIQUE view, which lists tables with no primary key or non-null unique indexes. There [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/lob-replication-with-goldengate-and-importance-of-primary-keys/">LOB Replication With GoldenGate and Importance of Primary Keys</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Every time I work on database migrations with GoldenGate, I have the same talks with application teams about missing primary keys. Especially when it comes to LOB replication with GoldenGate. In a <a href="https://www.dbi-services.com/blog/goldengate-row-identification-misconceptions-and-solutions/" target="_blank" rel="noreferrer noopener">previous blog</a>, I wrote about how to interpret the <code><a href="https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/DBA_GOLDENGATE_NOT_UNIQUE.html" target="_blank" rel="noreferrer noopener">DBA_GOLDENGATE_NOT_UNIQUE</a></code> view, which lists tables with <strong>no primary key or non-null unique indexes</strong>. There are two main groups of tables listed here:</p>



<ul class="wp-block-list">
<li>Tables where all columns can be used to identify uniqueness (<code>bad_column='N'</code>)</li>



<li>Tables where not all columns can be used (<code>bad_column='Y'</code>)</li>
</ul>



<p class="wp-block-paragraph">To show what happens when primary keys are missing in GoldenGate replication, let&#8217;s see a few examples. In all the examples, I will extract data from <code>APP_SOURCE</code> schema and replicate it into an <code>APP_TARGET</code> schema.</p>



<p class="wp-block-paragraph">The parameters of the replication do not really matter here, but to be precise, here is the extract parameter file:</p>



<pre class="wp-block-code"><code>EXTRACT EXT1
USERIDALIAS source_cdb DOMAIN OracleGoldenGate
EXTTRAIL pdb1/aa
SOURCECATALOG PDB1
DDL INCLUDE MAPPED
TABLE APP_SOURCE.*;</code></pre>



<p class="wp-block-paragraph">And here is the replicat parameter file:</p>



<pre class="wp-block-code"><code>REPLICAT REP2
USERIDALIAS target_pdb DOMAIN OracleGoldenGate
DDL INCLUDE MAPPED
MAP PDB1.APP_SOURCE.*, TARGET PDB2.APP_TARGET.*;</code></pre>



<h2 id="h-first-test-simple-table-with-primary-key" class="wp-block-heading">First test : simple table with primary key</h2>



<p class="wp-block-paragraph">First, let&#8217;s try the most common example, with a table <code>APP_SOURCE.TEST_PK</code> created <strong>with a primary key</strong>. You can skip this part if you know how GoldenGate works, but I just wanted to include this for comparison.</p>



<pre class="wp-block-code"><code>CREATE TABLE APP_SOURCE.TEST_PK
(
    id   NUMBER PRIMARY KEY,
    data VARCHAR2(100)
);</code></pre>



<p class="wp-block-paragraph">Let&#8217;s <strong>insert a few rows</strong> in this table and look at the content of the table in both the source and the target.</p>



<pre class="wp-block-code"><code>INSERT INTO APP_SOURCE.TEST_PK VALUES (1,'A');
INSERT INTO APP_SOURCE.TEST_PK VALUES (2,'B');
COMMIT;

-- Verify source/target
SELECT * FROM APP_SOURCE.TEST_PK ORDER BY id;
SELECT * FROM APP_TARGET.TEST_PK ORDER BY id;</code></pre>



<p class="wp-block-paragraph">You will see the same content in both tables.</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT * FROM APP_SOURCE.TEST_PK ORDER BY id;

        ID DATA
---------- --------------------
         1 A
         2 B</code></pre>



<p class="wp-block-paragraph">Now, if you update the row with <code>id=1</code>, it will be updated in both tables as well.</p>



<pre class="wp-block-code"><code>UPDATE APP_SOURCE.TEST_PK SET data='A_UPDATED' WHERE id=1;
COMMIT;

-- Verify
SELECT * FROM APP_SOURCE.TEST_PK ORDER BY id;
SELECT * FROM APP_TARGET.TEST_PK ORDER BY id;</code></pre>



<p class="wp-block-paragraph">Checking the tables will give you the updated data.</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT * FROM APP_TARGET.TEST_PK ORDER BY id;

        ID DATA
---------- --------------------
         1 A_UPDATED
         2 B</code></pre>



<p class="wp-block-paragraph">Until then, nothing really interesting, but let&#8217;s look at the <strong>report file of the extract</strong> on the source. You will see the following information:</p>



<pre class="wp-block-code"><code>2026-06-06 07:00:52&nbsp; INFO&nbsp;&nbsp;&nbsp; OGG-06509&nbsp; Using the following key columns for source table PDB1.APP_SOURCE.TEST_PK: ID.</code></pre>



<p class="wp-block-paragraph">Because the <strong>table has a primary key</strong>, GoldenGate knows that it should <strong>only use this column</strong> to identify unique rows.</p>



<h2 id="h-second-test-table-with-no-primary-key-and-no-lob-columns" class="wp-block-heading">Second test : table with no primary key and no LOB columns</h2>



<p class="wp-block-paragraph">In this second test, I will create a table without a primary key, but using only types that GoldenGate can use to identify uniqueness.</p>



<pre class="wp-block-code"><code>CREATE TABLE APP_SOURCE.TEST_NOPK
(
    id   NUMBER,
    data VARCHAR2(100)
);</code></pre>



<p class="wp-block-paragraph">We can already query the <code>DBA_GOLDENGATE_NOT_UNIQUE</code> view to find this new table listed with <code>bad_column='N'</code> :</p>



<pre class="wp-block-code"><code>SELECT *
FROM dba_goldengate_not_unique
WHERE owner='APP_SOURCE'
ORDER BY owner, table_name;

OWNER                          TABLE_NAME                     BAD_COLUMN
------------------------------ ------------------------------ ----------
APP_SOURCE                     TEST_NOPK                      N</code></pre>



<p class="wp-block-paragraph">Let&#8217;s do the same steps as before, inserting data and updating the content.</p>



<pre class="wp-block-code"><code>INSERT INTO APP_SOURCE.TEST_NOPK VALUES (1,'A');
INSERT INTO APP_SOURCE.TEST_NOPK VALUES (2,'B');
COMMIT;

SELECT * FROM APP_SOURCE.TEST_NOPK ORDER BY id;
SELECT * FROM APP_TARGET.TEST_NOPK ORDER BY id;

UPDATE APP_SOURCE.TEST_NOPK SET data='A_UPDATED' WHERE id=1;
COMMIT;</code></pre>



<p class="wp-block-paragraph">The content of the table is the same on source and target, as expected.</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT * FROM APP_TARGET.TEST_NOPK ORDER BY id;

        ID DATA
---------- --------------------
         1 A_UPDATED
         2 B</code></pre>



<p class="wp-block-paragraph">And looking at the <strong>extract report file</strong>, we can see that <strong>all viable columns were used</strong>. In that case, it meant taking <code>ID</code> and <code>DATA</code>.</p>



<pre class="wp-block-code"><code>2026-06-06 07:08:13  INFO    OGG-06508  Wildcard MAP (TABLE) resolved (entry PDB1.APP_SOURCE.*): TABLE "PDB1"."APP_SOURCE"."TEST_NOPK".

2026-06-06 07:08:13  WARNING OGG-06439  No unique key is defined for table TEST_NOPK. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key. If using KEYCOLS, make sure that you create an INDEX in the target database for those column(s) as well.

2026-06-06 07:08:13  INFO    OGG-06509  Using the following key columns for source table PDB1.APP_SOURCE.TEST_NOPK: ID, DATA.</code></pre>



<p class="wp-block-paragraph">As mentioned in the other blog about primary keys in GoldenGate, this will work, but you will of course have <strong>performance issues</strong> when replicating data.</p>



<h2 id="h-third-test-table-with-no-pk-and-a-clob-column" class="wp-block-heading">Third test : Table with no PK and a <code>CLOB</code> column</h2>



<p class="wp-block-paragraph">Now, let me show you the bad use case, where you don&#8217;t have a primary key and the <strong>table contains a non-viable column for uniqueness identification</strong>. In this example, I will use a <code>CLOB</code> column, but it could be another unbounded data type.</p>



<pre class="wp-block-code"><code>CREATE TABLE APP_SOURCE.TEST_CLOB
(
    id   NUMBER,
    code VARCHAR2(10),
    txt  CLOB
);</code></pre>



<p class="wp-block-paragraph">If we check the <code>DBA_GOLDENGATE_NOT_UNIQUE</code> view, we see the new table listed with <code>bad_column='Y'</code>.</p>



<pre class="wp-block-code"><code>SELECT *
FROM dba_goldengate_not_unique
WHERE owner='APP_SOURCE'
ORDER BY owner, table_name;

OWNER                          TABLE_NAME                     BAD_COLUMN
------------------------------ ------------------------------ ----------
APP_SOURCE                     TEST_CLOB                      Y
APP_SOURCE                     TEST_NOPK                      N</code></pre>



<p class="wp-block-paragraph">Let&#8217;s insert some data. But this time, I will add <strong>two more rows that are unique</strong>, but for which only the <strong><code>TXT</code> content differs</strong>.</p>



<pre class="wp-block-code"><code>INSERT INTO app_source.test_clob VALUES (1,'A',TO_CLOB('LOB_1'));
INSERT INTO app_source.test_clob VALUES (2,'B',TO_CLOB('LOB_2'));
INSERT INTO app_source.test_clob VALUES (100,'DUP',TO_CLOB('LOB_1'));
INSERT INTO app_source.test_clob VALUES (100,'DUP',TO_CLOB('LOB_2'));
COMMIT;</code></pre>



<p class="wp-block-paragraph">The data was correctly inserted, and the content is the same on the source and target.</p>



<pre class="wp-block-code"><code>SQL&gt; SELECT id,code,DBMS_LOB.SUBSTR(txt,40,1) txt FROM app_target.test_clob ORDER BY id;

        ID CODE       TXT
---------- ---------- ----------------------------------------
         1 A	      LOB_1
         2 B	      LOB_2
       100 DUP	      LOB_1
       100 DUP	      LOB_2</code></pre>



<p class="wp-block-paragraph">In the <strong>report file</strong>, we do not see any difference between this example and the one before. GoldenGate mentions using <strong>two columns for uniqueness identification</strong> : <code>ID</code> and <code>CODE</code>. <strong>GoldenGate never mentions that a third column existed and was not used</strong>. The warning displayed is the same as before.</p>



<pre class="wp-block-code"><code>2026-06-06 07:10:13  INFO    OGG-06508  Wildcard MAP (TABLE) resolved (entry PDB1.APP_SOURCE.*): TABLE "PDB1"."APP_SOURCE"."TEST_CLOB".

2026-06-06 07:10:13  WARNING OGG-06439  No unique key is defined for table TEST_CLOB. All viable columns will be used to represent the key, but may not guarantee uniqueness. KEYCOLS may be used to define the key. If using KEYCOLS, make sure that you create an INDEX in the target database for those column(s) as well.

2026-06-06 07:10:13  INFO    OGG-06509  Using the following key columns for source table PDB1.APP_SOURCE.TEST_CLOB: ID, CODE.</code></pre>



<p class="wp-block-paragraph">And now, the main problem I wanted to discuss regarding LOB replication with GoldenGate. If you <strong>try to delete one row by specifying all three columns</strong>, it will <strong>not always work</strong>.</p>



<pre class="wp-block-code"><code>DELETE FROM app_source.test_clob
WHERE id = 100
AND code = 'DUP'
AND DBMS_LOB.COMPARE(txt,TO_CLOB('LOB_1')) = 0;</code></pre>



<p class="wp-block-paragraph">Sometimes, the line with <code>LOB_1</code> will be deleted:</p>



<pre class="wp-block-code"><code>        ID CODE       TXT
---------- ---------- ----------------------------------------
         1 A	      LOB_1
         2 B	      LOB_2
       100 DUP	      LOB_2</code></pre>



<p class="wp-block-paragraph">But sometimes, the line with <code>LOB_2</code> will be deleted:</p>



<pre class="wp-block-code"><code>        ID CODE       TXT
---------- ---------- ----------------------------------------
         1 A	      LOB_1
         2 B	      LOB_2
       100 DUP	      LOB_1</code></pre>



<p class="wp-block-paragraph">More precisely, it will just <strong>delete the first line that was inserted</strong>. You then have two cases. If you insert <code>LOB_1</code> first, it will be deleted correctly:</p>



<pre class="wp-block-code"><code>DROP TABLE app_source.test_clob PURGE;

CREATE TABLE app_source.test_clob (id NUMBER, code VARCHAR2(10), txt CLOB);

INSERT INTO app_source.test_clob VALUES (100,'DUP',TO_CLOB('LOB_1'));
INSERT INTO app_source.test_clob VALUES (100,'DUP',TO_CLOB('LOB_2'));
COMMIT;

DELETE FROM app_source.test_clob
WHERE id = 100
AND code = 'DUP'
AND DBMS_LOB.COMPARE(txt,TO_CLOB('LOB_1')) = 0;
COMMIT;

SQL&gt; SELECT id,code,DBMS_LOB.SUBSTR(txt,40,1) txt
FROM app_target.test_clob
WHERE code='DUP';

        ID CODE       TXT
---------- ---------- ----------------------------------------
       100 DUP	      LOB_2</code></pre>



<p class="wp-block-paragraph">And if you insert <code>LOB_2</code> first, the incorrect line will be deleted:</p>



<pre class="wp-block-code"><code>DROP TABLE app_source.test_clob PURGE;

CREATE TABLE app_source.test_clob (id NUMBER, code VARCHAR2(10), txt CLOB);

INSERT INTO app_source.test_clob VALUES (100,'DUP',TO_CLOB('LOB_2'));
INSERT INTO app_source.test_clob VALUES (100,'DUP',TO_CLOB('LOB_1'));
COMMIT;

DELETE FROM app_source.test_clob
WHERE id = 100
AND code = 'DUP'
AND DBMS_LOB.COMPARE(txt,TO_CLOB('LOB_1')) = 0;
COMMIT;

SQL&gt; SELECT id,code,DBMS_LOB.SUBSTR(txt,40,1) txt
FROM app_target.test_clob
WHERE code='DUP';

        ID CODE       TXT
---------- ---------- ----------------------------------------
       100 DUP	      LOB_1</code></pre>



<p class="wp-block-paragraph">You now know why <strong>you should always pay attention</strong> to tables in the <code><a href="https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/DBA_GOLDENGATE_NOT_UNIQUE.html" target="_blank" rel="noreferrer noopener">DBA_GOLDENGATE_NOT_UNIQUE</a></code> view with <code>bad_column='Y'</code>. If you have such tables, there are several scenarios that I presented in the <a href="https://www.dbi-services.com/blog/goldengate-row-identification-misconceptions-and-solutions/" target="_blank" rel="noreferrer noopener">last blog on the topic</a>. But <strong>ignoring them is not one of them</strong>. This way, you will avoid issues regarding LOB replication with GoldenGate.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/lob-replication-with-goldengate-and-importance-of-primary-keys/">LOB Replication With GoldenGate and Importance of Primary Keys</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/lob-replication-with-goldengate-and-importance-of-primary-keys/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GoldenGate Row Identification: Misconceptions and Solutions</title>
		<link>https://www.dbi-services.com/blog/goldengate-row-identification-misconceptions-and-solutions/</link>
					<comments>https://www.dbi-services.com/blog/goldengate-row-identification-misconceptions-and-solutions/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Fri, 12 Jun 2026 15:27:49 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[bad_column]]></category>
		<category><![CDATA[CLOB]]></category>
		<category><![CDATA[dba_goldengate_not_unique]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[LOB]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[pk]]></category>
		<category><![CDATA[primary key]]></category>
		<category><![CDATA[Replication]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44899</guid>

					<description><![CDATA[<p>GoldenGate is a powerful replication tool, but it is so versatile that you should always check whether what you intend to do is supported or not. Oracle provides a few interesting scripts and views to check your environments before attempting a replication with GoldenGate, and I wanted to write about the DBA_GOLDENGATE_NOT_UNIQUE view. Before explaining [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-row-identification-misconceptions-and-solutions/">GoldenGate Row Identification: Misconceptions and Solutions</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">GoldenGate is a <strong>powerful replication tool</strong>, but it is so versatile that <strong>you should always check</strong> whether what you intend to do is <strong>supported or not</strong>. Oracle provides a few interesting scripts and views to check your environments before attempting a replication with GoldenGate, and I wanted to write about the <code><a href="https://docs.oracle.com/en/database/oracle/oracle-database/26/refrn/DBA_GOLDENGATE_NOT_UNIQUE.html" target="_blank" rel="noreferrer noopener">DBA_GOLDENGATE_NOT_UNIQUE</a></code> view.</p>



<p class="wp-block-paragraph">Before explaining what this view contains and <strong>how to interpret it</strong>, you should remember that GoldenGate replicates data by replaying changes that occurred on the source database. One of the <strong>most important problems</strong> GoldenGate must solve is to <strong>identify the exact row</strong> that must be updated or deleted on the target database. This means that GoldenGate needs a way to <strong>uniquely identify</strong> every row in a table.</p>



<p class="wp-block-paragraph">The simplest solution is a <strong>primary key</strong>, but GoldenGate row identification can also be done through a <strong>non-null unique index</strong>. When neither exists, GoldenGate must <strong>fall back to less efficient mechanisms</strong>. This means <strong>using all available columns</strong> to identify a row.</p>



<p class="wp-block-paragraph">The <code>DBA_GOLDENGATE_NOT_UNIQUE</code> view contains tables that have <strong>no primary key</strong> and <strong>no non-null unique index</strong>. It is there to help you <strong>identify potential issues</strong> in your database schema and prepare in the best possible way a migration with GoldenGate or any replication work.</p>



<p class="wp-block-paragraph">Here is an example of the content of the view:</p>



<pre class="wp-block-code"><code>OWNER			       TABLE_NAME		      BAD_COLUMN
------------------------------ ------------------------------ ----------
APP_PDB1		       TEST_NOPK		      N
APP_PDB1		       TEST_CLOB		      Y</code></pre>



<p class="wp-block-paragraph">The view is very simple, yet very often misunderstood. The <code>owner</code> and <code>table_name</code> column names are self-explanatory, but let&#8217;s talk about <code>bad_column</code>. This column has two possible values: <code>Y</code> and <code>N</code>.</p>



<h2 id="h-first-case-bad-column-n" class="wp-block-heading">First case &#8211; <code>bad_column = 'N'</code></h2>



<p class="wp-block-paragraph" id="h-n-is-what-you-will-most-often-see-in-this-view-you-should-treat-these-as-warnings"><code>N</code> is what you will most often see in this view. You should treat these as <strong>warnings</strong>. If you intend to replicate a table from this list, you can choose to ignore the warning if you don&#8217;t care about <strong>replication performance</strong>.</p>



<p class="wp-block-paragraph" id="h-n-is-what-you-will-most-often-see-in-this-view-you-should-treat-these-as-warnings">Tables in this list will be <strong>replicated using all columns</strong> as a substitute key. GoldenGate can usually handle these tables without any functional issue. However, <code>UPDATE</code> and <code>DELETE</code> operations become more expensive because <strong>every column must be used</strong> to identify the target row.</p>



<p class="wp-block-paragraph">From my experience, you should still always <strong>discuss with the application owner</strong> or someone who knows the underlying database schema to try to <strong>avoid performance issues</strong>. A list of solutions is given at the end of the blog.</p>



<h2 id="h-second-case-bad-column-y" class="wp-block-heading">Second case &#8211; <code>bad_column = 'Y'</code></h2>



<p class="wp-block-paragraph">If there is one point to remember from this blog, it’s this: <strong>you should never replicate data from tables with <code>bad_column='Y'</code> without thorough investigation</strong>.</p>



<p class="wp-block-paragraph">Tables listed here contain one or more columns that GoldenGate cannot safely use as part of a substitute key, such as <code>LONG</code> or <code>CLOB</code>.</p>



<p class="wp-block-paragraph">Since GoldenGate cannot build a complete substitute key from all columns, row identification becomes problematic. Depending on the table structure and replication configuration, GoldenGate may be <strong>unable to correctly locate rows</strong> for <code>UPDATE</code> or <code>DELETE</code> operations.</p>



<p class="wp-block-paragraph">In practice, a table with <code>bad_column='Y'</code> should be considered a <strong>candidate for schema remediation</strong> before replication (see the list of options below).</p>



<h2 id="h-will-there-be-an-error-if-goldengate-cannot-identify-uniqueness" class="wp-block-heading">Will there be an error if GoldenGate cannot identify uniqueness ?</h2>



<p class="wp-block-paragraph">This is a very <strong>common misconception</strong> when talking about these primary key issues. <strong>GoldenGate does not verify</strong> that the columns used for row identification are truly unique. If duplicate rows exist, a replicat may update or delete an unintended row. In many cases no explicit GoldenGate error will be generated because, from GoldenGate’s perspective, a matching row was found. It could <strong>silently delete the wrong row</strong>, and you will never hear a word about it. In the logs, you won&#8217;t see the difference.</p>



<h2 id="h-what-can-be-done-to-solve-these-issues" class="wp-block-heading">What can be done to solve these issues ?</h2>



<p class="wp-block-paragraph">Essentially, there are four possible approaches:</p>



<ul class="wp-block-list">
<li>If you have the ability to <strong>create a primary key</strong> or a <strong>non-null unique index</strong> on the <strong>source database</strong>, go for it before the initial load of your target database. This is the <strong>safest approach</strong> because uniqueness is enforced by the database itself.</li>



<li>If you <strong>cannot alter the source</strong> schema but are <strong>100% sure</strong> that a <strong>subset of columns</strong> that already exists in the table <strong>can uniquely identify every row</strong>, you can use the <code>KEYCOLS</code> keyword in your parameter files.</li>



<li>Sometimes, the <strong>application</strong> design <strong>prevents duplicates</strong> from being generated. Again, you need to be sure about this. But sometimes, it means that you could <strong>rely on the application design</strong>.</li>



<li>When bad_column is <code>N</code>, you could decide to <strong>not do anything</strong>. For tables with a lot of activity, it could slow down your replication. During a migration, it could even completely block it in production. This should only be done in <strong>last resort</strong>.</li>
</ul>



<p class="wp-block-paragraph">A common misconception is that every table listed in <code>DBA_GOLDENGATE_NOT_UNIQUE</code> is unsupported by GoldenGate. This is not the case. At the other end of the spectrum, I&#8217;ve heard countless of times that these warnings can be ignored. Do that, and you will have nightmares solving issues once you hit production. The view merely highlights tables for which GoldenGate cannot rely on a primary key or a non-null unique index for row identification. The real concern is the <code>bad_column</code> flag: <code>N</code> is a <strong>performance warning</strong>, while <code>Y</code> deserves <strong>immediate investigation</strong> before any replication project.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-row-identification-misconceptions-and-solutions/">GoldenGate Row Identification: Misconceptions and Solutions</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/goldengate-row-identification-misconceptions-and-solutions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Temporary tablespace and ODA 19.31.</title>
		<link>https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/</link>
					<comments>https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Thu, 11 Jun 2026 06:55:15 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[autoextend]]></category>
		<category><![CDATA[oda]]></category>
		<category><![CDATA[oracle database appliance]]></category>
		<category><![CDATA[tempfile]]></category>
		<category><![CDATA[temporary tablespace]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=45038</guid>

					<description><![CDATA[<p>I recently patched Oracle Database Appliances (ODAs) to 19.31. For DBs with more than 1 tempfile in the temporary tablespace I got an error during the &#8220;odacli update-dbhome&#8221; : The issue is that Oracle tries to &#8220;set autoextend on&#8221; on the temporary files in 19.31., but runs a syntactically wrong command. E.g. in the alert.log [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/">Temporary tablespace and ODA 19.31.</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I recently patched Oracle Database Appliances (ODAs) to 19.31. For DBs with more than 1 tempfile in the temporary tablespace I got an error during the &#8220;odacli update-dbhome&#8221; :</p>



<pre class="wp-block-code"><code># odacli describe-job -i 2ff3fd5d-f611-4ae6-aae0-63df7c08ec71
 
Job details
----------------------------------------------------------------
                     ID:  2ff3fd5d-f611-4ae6-aae0-63df7c08ec71
            Description:  DB Home Patching to 19.31.0.0.0: Home ID is 1c101fd3-2ca8-55f6-9415-22ec5abc53da
                 Status:  Failure (To view Error Correlation report, run "odacli describe-job -i 2ff3fd5d-f611-4ae6-aae0-63df7c08ec71 --ecr" command)
                Created:  June 09, 2026 15:07:23 CEST
                Message:  DCS-10001:Internal error encountered: Unable to autoextend tablespace TEMP.</code></pre>



<p class="wp-block-paragraph">The issue is that Oracle tries to &#8220;set autoextend on&#8221; on the temporary files in 19.31., but runs a syntactically wrong command. E.g. in the alert.log I could see</p>



<pre class="wp-block-code"><code>2026-06-09T15:54:14.898088+02:00
alter database tempfile '/u02/app/oracle/oradata/mydbt_dc2/MYDBT_DC2/datafile/o1_mf_temp_m2d4kz32_.tmp /u02/app/oracle/oradata/mydbt_dc2/MYDBT_DC2/datafile/o1_mf_temp_m2d4l3wf_.tmp' autoextend on next 100m maxsize 20g
ORA-1516 signalled during:  alter database tempfile '/u02/app/oracle/oradata/mydbt_dc2/MYDBT_DC2/datafile/o1_mf_temp_m2d4kz32_.tmp /u02/app/oracle/oradata/mydbt_dc2/MYDBT_DC2/datafile/o1_mf_temp_m2d4l3wf_.tmp' autoextend on next 100m maxsize 20g ...</code></pre>



<p class="wp-block-paragraph">I.e. Oracle just listed all tempfiles separated by blank in one string. This is of course wrong and produces the error.</p>



<p class="wp-block-paragraph">The workaround was to&nbsp;</p>



<p class="wp-block-paragraph">&nbsp;&#8211; create a temporary tablespace temp2</p>



<p class="wp-block-paragraph">&nbsp;&#8211; make temp2 the default temporary tablespace</p>



<p class="wp-block-paragraph">&nbsp;&#8211; drop temporary tablespace temp</p>



<p class="wp-block-paragraph">&nbsp;&#8211; create the temporary tablespace temp with just 1 tempfile</p>



<p class="wp-block-paragraph">&nbsp;&#8211; make temp the default temporary tablespace</p>



<p class="wp-block-paragraph">&nbsp;&#8211; drop temporary tablespace temp2</p>



<p class="wp-block-paragraph">Then run the &#8220;odacli update-dbhome&#8221; again and it will be successful. Afterwards add your temporary files to tablespace temp again.&nbsp;</p>



<p class="wp-block-paragraph">Please consider that it is not obvious in the produced errors of odacli in what DB the error happened (odacli update-dbhome patches all DBs running in the specified ORACLE_HOME). To find out what DB is affected it&#8217;s a good idea to scan the alert-logs for the error:</p>



<pre class="wp-block-code"><code>$ find /u01/app/odaorabase/oracle/diag/rdbms/*/*/trace -name "alert*.log" -exec grep -il "ORA-1516" {}\;</code></pre>



<p class="wp-block-paragraph">To proactively avoid the issue when patching to 19.31. on the ODA, I&#8217;d recommend to check your databases in advance if they have more than 1 tempfile in the temporary tablespace and implement the workaround mentioned above.</p>



<pre class="wp-block-code"><code>select count(*) from dba_temp_files where tablespace_name='TEMP';</code></pre>



<p class="wp-block-paragraph">We opened a SR with Oracle to get the issue fixed for the next release.</p>



<p class="wp-block-paragraph">Update 18.06.2026: </p>



<p class="wp-block-paragraph">If you do use a Standby DB (Data Guard) and use the workaround mentioned above, then please consider that you have to add the tempfiles at the standby site as well after recreating TEMP. See <a href="https://www.dbi-services.com/blog/dataguard-environment-and-database-tempfiles/">here</a>, <a href="https://database-heartbeat.com/2023/09/26/temp-file-dg/">here</a> and <a href="https://www.ludovicocaldara.net/blog/dg26ai-tempfile-creation/">here</a>.</p>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/">Temporary tablespace and ODA 19.31.</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/temporary-tablespace-and-oda-19-31/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GoldenGate NGINX Reverse Proxy Behavior Changes</title>
		<link>https://www.dbi-services.com/blog/goldengate-nginx-reverse-proxy-behavior-changes/</link>
					<comments>https://www.dbi-services.com/blog/goldengate-nginx-reverse-proxy-behavior-changes/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 06:47:40 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Multiple]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[restapi]]></category>
		<category><![CDATA[reverse]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44863</guid>

					<description><![CDATA[<p>I recently wrote about NGINX reverse proxy reconfiguration after creating or deleting a deployment in GoldenGate. It reminded me that there is an overlooked aspect of the reverse proxy configuration, which is important when trying to automate GoldenGate management with the REST API. In fact, when using a reverse proxy with a single deployment, some [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-nginx-reverse-proxy-behavior-changes/">GoldenGate NGINX Reverse Proxy Behavior Changes</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I recently wrote about <a href="https://www.dbi-services.com/blog/reconfigure-nginx-after-adding-a-goldengate-deployment/" target="_blank" rel="noreferrer noopener">NGINX reverse proxy reconfiguration</a> after <strong>creating or deleting a deployment</strong> in GoldenGate. It reminded me that there is an <strong>overlooked aspect</strong> of the reverse proxy configuration, which is important when trying to <strong>automate GoldenGate management</strong> with the REST API.</p>



<p class="wp-block-paragraph">In fact, when using a <strong>reverse proxy with a single deployment</strong>, some <strong>endpoints are different</strong> from a <strong>multi-deployment</strong> configuration.</p>



<p class="wp-block-paragraph">Let&#8217;s take the <a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-extracts-get.html" target="_blank" rel="noreferrer noopener">extract listing</a> endpoint as example: <code>GET /services/v2/extracts</code>. With a <strong>basic GoldenGate configuration</strong> without NGINX reverse proxy, you could <strong>list the extracts</strong> with the following URL: <code>https://vmogg:7809/services/v2/extracts</code></p>



<p class="wp-block-paragraph">In a <strong>single-deployment</strong> setting using NGINX, the <code>/services/v2/extracts</code> endpoint is <strong>still valid</strong> and will list the extracts of your only deployment (API response given below).</p>



<pre class="wp-block-code"><code>{
    "$schema": "api:standardResponse",
    "links": &#091;
        {
            "rel": "canonical",
            "href": "https://vmogg_single_deployment/services/v2/extracts",
            "mediaType": "text/html"
        },
        {
            "rel": "self",
            "href": "https://vmogg_single_deployment/services/v2/extracts",
            "mediaType": "text/html"
        },
        {
            "rel": "describedby",
            "href": "https://vmogg_single_deployment/services/ogg_test_01/adminsrvr/v2/metadata-catalog/extracts",
            "mediaType": "application/schema+json"
        }
    ],
    "messages": &#091;],
    "response": {
        "$schema": "ogg:collection",
        "items": &#091;
            {
                "links": &#091;
                    {
                        "rel": "parent",
                        "href": "https://vmogg_single_deployment/services/v2/extracts",
                        "mediaType": "application/json"
                    },
                    {
                        "rel": "canonical",
                        "href": "https://vmogg_single_deployment/services/v2/extracts/EXT1",
                        "mediaType": "application/json"
                    }
                ],
                "$schema": "ogg:collectionItem",
                "name": "EXT1",
                "status": "running"
            }
        ]
    }
}</code></pre>



<p class="wp-block-paragraph"><br>In a <strong>multi-deployment</strong> configuration, the <strong>endpoint does not work</strong>:</p>



<pre class="wp-block-code"><code>{
	"links": &#091;],
	"messages": &#091;
		{
			"$schema": "ogg:message",
			"title": "The requested resource does not exist.",
			"code": "OGG-12031",
			"severity": "ERROR",
			"issued": "2026-05-28T18:25:48Z",
			"type": "https://www.rfc-editor.org/rfc/rfc9110.html#name-status-codes"
		}
	]
}</code></pre>



<p class="wp-block-paragraph">This is an behavior is <strong>expected</strong>, since you <strong>cannot query multiple deployments</strong> at once.</p>



<ul class="wp-block-list">
<li>With a <strong>single deployment</strong>, you can list extracts without specifying the deployment name.</li>



<li>With <strong>multiple deployments</strong>, there is <strong>no meaning</strong> in listing extracts without having to specify which deployment you are targeting.</li>
</ul>



<p class="wp-block-paragraph">In the NGINX reverse proxy configuration file, this is materialized by a change of behavior for all endpoints that are deployment-specific. To keep the extracts endpoint as example, here is what the configuration looks like in a <strong>single-deployment</strong> setup:</p>



<pre class="wp-block-code"><code>location ~ ^/services/ogg_test_01/(?&lt;version&gt;&#091;^/]+)/(?&lt;resource&gt;extracts.*)$ {
location ~ ^/services/(?&lt;version&gt;&#091;^/]+)/(?&lt;resource&gt;extracts.*)$ {</code></pre>



<p class="wp-block-paragraph">And here is what it looks like in a <strong>multi-deployment</strong> setup:</p>



<pre class="wp-block-code"><code>location ~ ^/services/ogg_test_01/(?&lt;version&gt;&#091;^/]+)/(?&lt;resource&gt;extracts.*)$ {
location ~ ^/services/ogg_test_02/(?&lt;version&gt;&#091;^/]+)/(?&lt;resource&gt;extracts.*)$ {</code></pre>



<p class="wp-block-paragraph">With a single deployment, we could access the extracts endpoint through the deployment or with the default endpoint. With multiple deployments, this second option is not available anymore, and you have to specify the deployment name every time.</p>



<p class="wp-block-paragraph">This is why a best practice is to <strong>always use deployment-specific endpoints</strong> whenever it is possible, to avoid NGINX behavior changes in GoldenGate when adding or deleting deployments.</p>



<h2 class="wp-block-heading" id="h-can-i-still-use-deployment-specific-endpoints-if-i-don-t-have-a-reverse-proxy">Can I still use deployment-specific endpoints if I don&#8217;t have a reverse proxy ?</h2>



<p class="wp-block-paragraph">In the same way that it does not make sense to have a single endpoint to list extracts if you have multiple deployments with a reverse proxy, it <strong>does not make sense to include the deployment</strong> name in the URL if you do not have a reverse proxy. If you try to access this:</p>



<pre class="wp-block-code"><code>http(s)://vmogg:port/services/deployment_name/adminsrvr/v2/extracts</code></pre>



<p class="wp-block-paragraph">You will receive an error stating that &#8220;<em>The requested resource does not exist</em>&#8220;. <strong>Without a reverse proxy</strong>, the <strong>port</strong> is what <strong>determines both the deployment and the service</strong> to which you connect.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-nginx-reverse-proxy-behavior-changes/">GoldenGate NGINX Reverse Proxy Behavior Changes</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/goldengate-nginx-reverse-proxy-behavior-changes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GoldenGate 26ai out-of-place patching with the web UI</title>
		<link>https://www.dbi-services.com/blog/goldengate-26ai-out-of-place-patching-with-the-web-ui/</link>
					<comments>https://www.dbi-services.com/blog/goldengate-26ai-out-of-place-patching-with-the-web-ui/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Sun, 31 May 2026 07:15:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[19]]></category>
		<category><![CDATA[23]]></category>
		<category><![CDATA[23ai]]></category>
		<category><![CDATA[26]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[out-of-place]]></category>
		<category><![CDATA[patching]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44392</guid>

					<description><![CDATA[<p>For some customers, the end of support for GoldenGate 19c in May this year and the migration to Microservices Architecture mean that they have to adapt their patching procedures (if they had any !). Let&#8217;s see how to patch a GoldenGate Microservices Architecture out of place efficiently. This guide is designed for GoldenGate 26ai because [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-26ai-out-of-place-patching-with-the-web-ui/">GoldenGate 26ai out-of-place patching with the web UI</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">For some customers, the <a href="https://www.dbi-services.com/blog/upgrade-goldengate-from-classic-to-microservices-architecture-before-its-too-late/" target="_blank" rel="noreferrer noopener">end of support for GoldenGate 19c</a> in May this year and the <strong>migration to Microservices Architecture</strong> mean that they have to adapt their patching procedures (if they had any !). Let&#8217;s see how to <strong>patch a GoldenGate Microservices Architecture out of place</strong> efficiently. This guide is designed for GoldenGate 26ai because this version introduces some small changes. However, you can follow this blog to patch other versions of GoldenGate.</p>



<p class="wp-block-paragraph">As for Oracle databases, the idea is to:</p>



<ul class="wp-block-list">
<li>Set up a <strong>new GoldenGate home</strong>.</li>



<li><strong>Switch the running processes</strong> to the new version of GoldenGate.</li>
</ul>



<p class="wp-block-paragraph">The nice thing is that since a few patches, Oracle now always delivers <strong>GoldenGate patches</strong> in <strong>two versions</strong>: the <strong>standard patch</strong>, applied on top of an existing installation, and a <strong>complete installation</strong>, which includes the patch. In this blog, we will use the second option.</p>



<h2 class="wp-block-heading" id="h-installing-the-latest-version-of-goldengate">Installing the latest version of GoldenGate</h2>



<p class="wp-block-paragraph">At the time of writing, version <code>23.26.2.0.1</code> (patch 39299258) was just released, but you should definitely check on the Oracle Support website to see if a new patch is available.</p>



<p class="wp-block-paragraph">As instructed in the installation guide for GoldenGate, just <strong>unzip the patched installation</strong> to a temporary directory and use the <code>runInstaller</code> with the following <code>oggcore.rsp</code> response file.</p>



<pre class="wp-block-code"><code>&gt; cat /home/oracle/oggcore.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v26_1_0
INSTALL_OPTION=ORA23ai
SOFTWARE_LOCATION=/u01/app/ogg/product/23.26.2.0.1
INVENTORY_LOCATION=/u01/app/oraInventory
UNIX_GROUP_NAME=oinstall

&gt; /u01/stage/fbo_ggs_Linux_x64_Oracle_services_shiphome/Disk1/runInstaller -silent -responseFile /home/oracle/oggcore.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 120 MB.   Actual 17094 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 4095 MB    Passed
&#091;...]
Successfully Setup Software.
The installation of Oracle GoldenGate Services was successful.</code></pre>



<p class="wp-block-paragraph">50% of the work is already done, but it&#8217;s definitely not the hardest part ! If you&#8217;re wondering how to take this out-of-place patching procedure and adapt it to GoldenGate 19c, just remember to set <code>INSTALL_OPTION=ORA19c</code> in the <code>oggcore.rsp</code> response file.</p>



<h2 class="wp-block-heading" id="h-changing-ogg-home-from-the-web-ui">Changing <code>OGG_HOME</code> from the web UI</h2>



<p class="wp-block-paragraph">Now that you have your new GoldenGate home, you are <strong>ready to switch</strong>. There are multiple ways of doing it, starting with updating your installation from the web UI. Here are the steps in the process:</p>



<ul class="wp-block-list">
<li>Updating the <code>OGG_HOME</code> of the Service Manager</li>



<li>Restarting the Service Manager</li>



<li>Optionally, restart the services attached to the Service Manager.</li>



<li>Updating the <code>OGG_HOME</code> of the deployments (one at a time)</li>



<li>Restarting the deployments</li>



<li>Restarting extracts, replicats and distribution paths</li>
</ul>



<p class="wp-block-paragraph">To start, just log in to the service manager and go to the <em><strong>Deployments &gt; Service Manager &gt; Details</strong></em> tab.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="549" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_details_tab-549x1024.png" alt="" class="wp-image-44785" style="width:300px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_details_tab-549x1024.png 549w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_details_tab-161x300.png 161w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_details_tab.png 620w" sizes="(max-width: 549px) 100vw, 549px" /></figure>
</div>


<p class="wp-block-paragraph">All you need to do is to edit the <em><strong>Deployment detail</strong></em>, by setting the new value for OGG_HOME. </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="310" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_alter_deployment-1024x310.png" alt="" class="wp-image-44786" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_alter_deployment-1024x310.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_alter_deployment-300x91.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_alter_deployment-768x232.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_alter_deployment.png 1528w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">After updating the Service Manager, you can safely restart it from the web UI <strong><em>Home</em></strong> tab.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="250" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_service_manager-1024x250.png" alt="" class="wp-image-44787" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_service_manager-1024x250.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_service_manager-300x73.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_service_manager-768x188.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_service_manager-1536x376.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_service_manager.png 2020w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">If you check on your server, you should see the <code>ServiceManager</code> process using the latest <code>OGG_HOME</code> location:</p>



<pre class="wp-block-code"><code>oracle@vmogg:~/ &#091;ogg] ps -ef|grep ServiceManager
oracle      1709       1  0 14:47 ?        00:00:03 /u01/app/ogg/product/23.26.2.0.1/bin/ServiceManager --quiet</code></pre>



<p class="wp-block-paragraph">A new process named <code>AIService</code> was introduced in 26ai. If it is still running on the old <code>OGG_HOME</code> even after restarting the <code>ServiceManager</code> deployment, you should <strong>restart it from the web UI</strong>. Just click on the <code>ServiceManager</code> deployment, stop the AI Service and restart it.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="268" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_webui_aiservice-1024x268.png" alt="" class="wp-image-44879" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_webui_aiservice-1024x268.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_webui_aiservice-300x79.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_webui_aiservice-768x201.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_webui_aiservice-1536x402.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_webui_aiservice-2048x536.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">At this point, it is important to know that all <strong>your deployment processes</strong>, including extracts and replicats, <strong>are still running</strong> on the old GoldenGate home directory. Besides checking the server processes, you can verify the version from the web UI by clicking on the top-right profile icon and on <em><strong>About</strong></em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="426" height="526" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about.png" alt="" class="wp-image-44783" style="width:200px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about.png 426w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about-243x300.png 243w" sizes="auto, (max-width: 426px) 100vw, 426px" /></figure>
</div>


<p class="wp-block-paragraph">In the service manager UI, you will have the new version:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="656" height="250" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about_sm.png" alt="" class="wp-image-44781" style="width:400px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about_sm.png 656w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about_sm-300x114.png 300w" sizes="auto, (max-width: 656px) 100vw, 656px" /></figure>
</div>


<p class="wp-block-paragraph">And in the administration service UI, the old version is still there:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="712" height="266" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about_admin.png" alt="" class="wp-image-44782" style="width:400px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about_admin.png 712w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_about_admin-300x112.png 300w" sizes="auto, (max-width: 712px) 100vw, 712px" /></figure>
</div>


<p class="wp-block-paragraph">You can now update your deployments, one at a time, by repeating the exact same procedure. From the Service Manager web UI, go to the <em><strong>Details</strong></em> tab of your deployments. Then, edit the <em><strong>Deployment detail</strong></em> and set <code>OGG_HOME</code> to the new value.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="432" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_deployment_detail-1024x432.png" alt="" class="wp-image-44784" style="width:700px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_deployment_detail-1024x432.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_deployment_detail-300x127.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_deployment_detail-768x324.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_deployment_detail.png 1378w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Once updated, restart the deployment from the same <em><strong>Home</strong></em> tab where you restarted the Service Manager earlier.</p>



<p class="wp-block-paragraph">Once all your deployments are running on the new home, you can restart the extracts, replicats and distribution paths. Connected to the <strong>Administration Service</strong> in the web UI, restart them one by one or using the <strong><em>Group Action</em></strong> button.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="156" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_proc-1024x156.png" alt="" class="wp-image-44788" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_proc-1024x156.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_proc-300x46.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_proc-768x117.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_proc-1536x233.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_patch_restart_proc.png 2014w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-some-services-are-still-running-on-the-old-ogg-home">Some services are still running on the old <code>OGG_HOME</code></h2>



<p class="wp-block-paragraph">If some <strong>services are still running</strong> on the old <code>OGG_HOME</code>, do not worry. The web UI or the REST API will return a response before restarting all services. More specifically, for the deployments, the restart will succeed as long as the Administration Service (<code>adminsrvr</code>) is restarted. The Receiver Service (<code>recvsrvr</code>) or the Distribution Service (<code>distsrvr</code>) might take more time to restart. Just <strong>wait a bit</strong> and it should be good. If, after a few minutes, the services are still running on the old home, <strong>restart them manually</strong> (still from the web UI).</p>



<h2 class="wp-block-heading" id="h-other-things-to-consider">Other things to consider</h2>



<p class="wp-block-paragraph">If you decide to change the name of your home at every release, remember to change the <code>OGG_HOME</code> in all scripts and environments. This might include:</p>



<ul class="wp-block-list">
<li>DMK environment files.</li>



<li><code>systemd</code> service file, which might include the <code>OGG_HOME</code> variable.</li>
</ul>
<p>L’article <a href="https://www.dbi-services.com/blog/goldengate-26ai-out-of-place-patching-with-the-web-ui/">GoldenGate 26ai out-of-place patching with the web UI</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/goldengate-26ai-out-of-place-patching-with-the-web-ui/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GoldenGate : Regenerate NGINX Reverse Proxy After Deployment Changes</title>
		<link>https://www.dbi-services.com/blog/reconfigure-nginx-after-adding-a-goldengate-deployment/</link>
					<comments>https://www.dbi-services.com/blog/reconfigure-nginx-after-adding-a-goldengate-deployment/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 28 May 2026 15:50:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[19c]]></category>
		<category><![CDATA[21c]]></category>
		<category><![CDATA[23ai]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[configure]]></category>
		<category><![CDATA[Deployment]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[ogg-12031]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[reverse]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44851</guid>

					<description><![CDATA[<p>Configuring an NGINX reverse proxy for GoldenGate is well documented by Oracle, but what is not is the implication of adding or removing deployments. In fact, when modifying your GoldenGate deployments, you will have to reconfigure the NGINX reverse proxy. If you don&#8217;t, part of your installation will not be working anymore. This is what [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/reconfigure-nginx-after-adding-a-goldengate-deployment/">GoldenGate : Regenerate NGINX Reverse Proxy After Deployment Changes</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Configuring an <strong>NGINX reverse proxy</strong> for <strong>GoldenGate</strong> is well <a href="https://docs.oracle.com/en/database/goldengate/core/26/coredoc/secure-configure-reverse-proxy-nginx-access-oggma.html#GUID-E492EF39-EA43-44D5-A096-BAE1ED8FC007" target="_blank" rel="noreferrer noopener">documented</a> by Oracle, but what is not is the implication of <strong>adding or removing deployments</strong>. In fact, when modifying your GoldenGate deployments, you will have to reconfigure the NGINX reverse proxy.</p>



<p class="wp-block-paragraph">If you don&#8217;t, part of your installation will not be working anymore. This is what will happen in the web UI:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="475" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_webui_nginx_multi_deploy-1024x475.png" alt="" class="wp-image-44852" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_webui_nginx_multi_deploy-1024x475.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_webui_nginx_multi_deploy-300x139.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_webui_nginx_multi_deploy-768x356.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_webui_nginx_multi_deploy.png 1228w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">In the <code>adminclient</code>, you will receive an <code>OGG-12031</code> error when connecting to the deployment, with the same error : &#8220;<em>The requested resource does not exist</em>&#8220;.</p>



<pre class="wp-block-code"><code>OGG (not connected) &gt; connect https://vmogg deployment ogg_test_02 user ogg
Password for 'ogg' at 'https://vmogg':

2026-05-28T12:42:54Z  ERROR   OGG-12031  The requested resource does not exist.</code></pre>



<p class="wp-block-paragraph">And the same error will happen when calling the REST API of your new deployment:</p>



<pre class="wp-block-code"><code>RuntimeError: ERROR (code 404) - https://vmogg/services/ogg_test_02/adminsrvr/v2/extracts: The requested resource does not exist.</code></pre>



<p class="wp-block-paragraph">The <strong>NGINX configuration</strong> generated by GoldenGate is <strong>static</strong>. Indeed, the file located in the <code>/etc/nginx/conf.d</code> directory contains deployment-specific routes generated from the GoldenGate setup at the time of execution. You can verify this by searching for an existing deployment name in the configuration:</p>



<pre class="wp-block-code"><code>&gt; grep ogg_test_01 /etc/nginx/conf.d/ogg.conf | wc -l
187</code></pre>



<p class="wp-block-paragraph">Since the deployment name is an integral part of the API calls, and given that the configuration is not dynamic, after <strong>adding or removing a deployment</strong>, you will have to <strong>regenerate the configuration file</strong>.</p>



<h2 class="wp-block-heading" id="h-reconfiguring-nginx-reverse-proxy">Reconfiguring NGINX reverse proxy</h2>



<p class="wp-block-paragraph">You can regenerate the configuration with the <code>ReverseProxySettings</code> utility in the <code>$OGG_HOME/lib/utl/reverseproxy</code> directory. With the <code>oracle</code> user:</p>



<pre class="wp-block-code"><code>$OGG_HOME/lib/utl/reverseproxy/ReverseProxySettings --user ogg --port 443 --output /home/oracle/ogg.conf http://localhost:7809</code></pre>



<p class="wp-block-paragraph">Make sure to adapt the GoldenGate username and the port to the Service Manager (<code>7809</code> is the default). If GoldenGate is accessed through a VIP (in a RAC setup, for instance), add the <code>--host</code> parameter:</p>



<pre class="wp-block-code"><code>$OGG_HOME/lib/utl/reverseproxy/ReverseProxySettings --user ogg --port 443 --output /home/oracle/ogg.conf http://localhost:7809 --host ogg-vip</code></pre>



<p class="wp-block-paragraph">Once the new configuration is available, as <code>root</code>, edit the new file to <strong>include SSL parameters</strong>. If you don&#8217;t do this, <strong>NGINX will fail to restart</strong>, and your whole GoldenGate installation will not be accessible anymore.</p>



<pre class="wp-block-code"><code>&gt; grep ssl_certificate /etc/nginx/conf.d/ogg.conf
    ssl_certificate         /etc/nginx/ssl/ogg.pem;
    ssl_certificate_key     /etc/nginx/ssl/ogg.key;</code></pre>



<p class="wp-block-paragraph">For these parameters, just reuse the ones you already had in your current configuration. With the <code>root</code> user, replace the old configuration with the new one.</p>



<pre class="wp-block-code"><code>cd /etc/nginx/conf.d/
mv ogg.conf ogg.conf_old
mv /home/oracle/ogg.conf .
chown root:root ogg.conf</code></pre>



<p class="wp-block-paragraph">Before restarting NGINX, <strong>test the configuration</strong>:</p>



<pre class="wp-block-code"><code>&gt; nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful</code></pre>



<p class="wp-block-paragraph">Finally, <strong>restart NGINX</strong> to apply the new configuration.</p>



<pre class="wp-block-code"><code>systemctl restart nginx</code></pre>



<p class="wp-block-paragraph">After restarting NGINX, the <strong>new deployment becomes accessible</strong> from the web UI, the <code>adminclient</code> and the REST API.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/reconfigure-nginx-after-adding-a-goldengate-deployment/">GoldenGate : Regenerate NGINX Reverse Proxy After Deployment Changes</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/reconfigure-nginx-after-adding-a-goldengate-deployment/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle Database 26ai Client and SQLNET.EXPIRE_TIME</title>
		<link>https://www.dbi-services.com/blog/oracle-database-26ai-client-and-sqlnet-expire_time/</link>
					<comments>https://www.dbi-services.com/blog/oracle-database-26ai-client-and-sqlnet-expire_time/#respond</comments>
		
		<dc:creator><![CDATA[Marc Wagner]]></dc:creator>
		<pubDate>Fri, 22 May 2026 13:34:46 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[Dead Connection Detection]]></category>
		<category><![CDATA[EXPIRE_TIME]]></category>
		<category><![CDATA[Oracle 26ai Client]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44747</guid>

					<description><![CDATA[<p>We have been facing one issue at one of our customer where the Oracle Client connections remained opened for days blocking some avaloq JobNetz. We have been doing some tests and we could fortunately find a solution resolving the problem thanks to Oracle Database 26ai supporting now SQLNET.EXPIRE_TIME on the client side. Through this blog, [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-database-26ai-client-and-sqlnet-expire_time/">Oracle Database 26ai Client and SQLNET.EXPIRE_TIME</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">We have been facing one issue at one of our customer where the Oracle Client connections remained opened for days blocking some avaloq JobNetz. We have been doing some tests and we could fortunately find a solution resolving the problem thanks to Oracle Database 26ai supporting now SQLNET.EXPIRE_TIME on the client side. Through this blog, I would like to share with you the problem and then the tests that have been performed helping us to conclude to a solution.</p>



<span id="more-44747"></span>



<h3>Environment and problem description</h3>



<p class="wp-block-paragraph">At our customer environment, client connection run from the HelperVM does not establish database connections directly to the database listener. The connection goes through the Network Load Balancer, so called NLB, and the Oracle Connection Manager, so called CMAN.</p>



<p class="wp-block-paragraph">The diagram below describes the database connection establishment process.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="537" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/diagram-1024x537.jpg" alt="" class="wp-image-44751" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/diagram-1024x537.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/diagram-300x157.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/diagram-768x403.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/diagram.jpg 1396w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">This is how it works.</p>



<ul class="wp-block-list">
<li>1 &#8211; Client seeks for connection details (ideally, get the connection details from Oracle Directory Service)</li>



<li>2 &#8211; Client connects to Network Load Balancer</li>



<li>3 &#8211; Network Load Balancer &#8220;forwards&#8221; the request to Oracle Connection MANager using Virtual IP</li>



<li>4 &#8211; Oracle Connection MANager acts as a rule-based firewall and ensure the database target service is running on the &#8220;white listed targets (next_hop)</li>



<li>5 &#8211; Oracle Database establish connectivity upon credential validate (Oracle listener acts in between). The listener hands the connection over to the Oracle CMAN gateway process, which passes data back and forth between the client and the db-server and collects statistics.</li>
</ul>



<p class="wp-block-paragraph">We could observed per reverse engineering&nbsp;&nbsp;technique that the TCP connection established between the Oracle client and Oracle CMAN works upon Network Load Balancer Virtual IP.</p>



<p class="wp-block-paragraph">The Network Load Balancer needs for Session persistence &#8220;statefullnes&#8221; to be enabled. This means that once the connection is established, the NLB &#8220;remembers&#8221; established connections and fails them over in case of planned downtime.</p>



<p class="wp-block-paragraph">We have been facing some broken connectivity issue. Checking Linux socket connection with linux ss command (# ss -nop) we could see TCP connection hungs between client and NLB virtual IP (CNAME DNS entry). On CMAN and DB-Server side the connection were already cleaned up as per Dead Connection Detection configuration. We can see in the diagram that EXPIRE_TIME is setup with a value of 10 minutes on the CMAN side and the listener configuration from the VM Cluster database.</p>



<p class="wp-block-paragraph">The connection was still opened on the client side because:</p>



<ul class="wp-block-list">
<li>The client was still waiting on a result which would never come</li>



<li>TCP connection to the NLB Virtual IP was still existing albeit closed with the CMAN and database listener</li>



<li>TCP connection to the NLB would remain alive for days</li>
</ul>



<p class="wp-block-paragraph">The problem is that by default Oracle client does not enable TCP Keepalive, which is an expected behavior. Oracle expects the keepalive to be set on the server side. The “Dead Connection Detection” will then be enforced for all clients.</p>



<p class="wp-block-paragraph">TCP Keepalive should then be managed in our case on the client side. And we are currently running Oracle 19c Client.</p>



<h3>EXPIRE_TIME handled on Oracle 19c Client</h3>



<p class="wp-block-paragraph">Oracle 19c client does not come with SQLNET.EXPIRE_TIME aka &#8220;Oracle dead connection detection&#8221;, unless hacked over connection string hidden (unsupported) parameter ENABLE_BROKEN. </p>



<p class="wp-block-paragraph">See following blog from a one of my former colleagues: </p>



<p class="wp-block-paragraph"><a href="https://www.dbi-services.com/blog/sqlnet-expire_time-and-enablebroken">sqlnet-expire_time and enablebroken</a></p>



<p class="wp-block-paragraph">And what about Oracle 26ai Client? Let&#8217;s do some test&#8230;</p>



<h3>Installation of Oracle 26ai Client</h3>



<p class="wp-block-paragraph">On the lab, I will use the VM called bastion to act as the client. The bastion has already an Oracle 19c Client installed. I&#8217;m going to installed new Oracle 26ai Client on it.</p>



<p class="wp-block-paragraph">First we need to download the client version, which can be done from the following website:</p>



<p class="wp-block-paragraph"><a href="https://www.oracle.com/database/technologies/oracle26ai-linux-downloads.html">https://www.oracle.com/database/technologies/oracle26ai-linux-downloads.html</a></p>



<p class="wp-block-paragraph">I will install Oracle 26ai Client version in /opt/oracle.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4]">
[root@bastion oracle]# pwd
/opt/oracle

[root@bastion oracle]# ls -ld client*
drwxr-xr-x. 52 oracle oinstall 4096 Jun  6  2024 client19c
drwxr-xr-x. 47 oracle oinstall 4096 Nov 11  2025 client_21c
[root@bastion oracle]#
</pre>
</br>




<p class="wp-block-paragraph">I will first unzip the downloaded oracle zip file.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4]">
[oracle@bastion oracle]$ pwd
/opt/oracle

[oracle@bastion oracle]$ unzip -q LINUX.X64_2326100_client.zip
</pre>
</br>



<p class="wp-block-paragraph">I will then rename the client installation directory:</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,6,9]">
[oracle@bastion oracle]$ ls -ld client*
drwxr-xr-x.  5 oracle oinstall   90 Jan 17 13:59 client
drwxr-xr-x. 52 oracle oinstall 4096 Jun  6  2024 client19c
drwxr-xr-x. 47 oracle oinstall 4096 Nov 11  2025 client_21c

[oracle@bastion oracle]$ mv client client26ai
[oracle@bastion oracle]$

[oracle@bastion oracle]$ ls -ld client*
drwxr-xr-x. 52 oracle oinstall 4096 Jun  6  2024 client19c
drwxr-xr-x. 47 oracle oinstall 4096 Nov 11  2025 client_21c
drwxr-xr-x.  5 oracle oinstall   90 Jan 17 13:59 client26ai
[oracle@bastion oracle]$
</pre>
</br>



<p class="wp-block-paragraph">I will prepare the response file for the command line installation.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,3,5]">
[oracle@bastion client26ai]$ cp -p response/client_install.rsp response/client_install_custom.rsp

[oracle@bastion client26ai]$ vi response/client_install_custom.rsp

[oracle@bastion client26ai]$ diff response/client_install.rsp response/client_install_custom.rsp
22c22
 UNIX_GROUP_NAME=oinstall
26c26
 INVENTORY_LOCATION=/opt/oracle/oraInventory
30c30
 ORACLE_HOME=/opt/oracle/client26ai
34c34
 ORACLE_BASE=/opt/oracle
48c48
 oracle.install.client.installType=Administrator
[oracle@bastion client26ai]$
</pre>
</br>



<p class="wp-block-paragraph">And I will run the Oracle 26ai Client installation.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4,12]">
[oracle@bastion client26ai]$ pwd
/opt/oracle/client26ai

[oracle@bastion client26ai]$ ls -ltrh
total 24K
-rwxrwx---.  1 oracle oinstall  500 Feb  6  2013 welcome.html
-rwxr-xr-x.  1 oracle oinstall 8.7K Jan 17 12:38 runInstaller
drwxr-xr-x.  4 oracle oinstall 4.0K Jan 17 12:38 install
drwxr-xr-x. 15 oracle oinstall 4.0K Jan 17 13:37 stage
drwxr-xr-x.  2 oracle oinstall   82 May 21 16:13 response

[oracle@bastion client26ai]$ ./runInstaller -silent -responseFile /opt/oracle/client26ai/response/client_install_custom.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 415 MB.   Actual 5025 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 4095 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2026-05-21_04-16-17PM. Please wait ... [WARNING] [INS-32016] The selected Oracle home contains directories or files.
   ACTION: To start with an empty Oracle home, either remove its contents or specify a different location.
*********************************************
Package: compat-openssl10-1.0.2 (x86_64): This is a prerequisite condition to test whether the package "compat-openssl10-1.0.2 (x86_64)" is available on the system.
Severity: IGNORABLE
Overall status: VERIFICATION_FAILED
Error message: PRVF-7532 : Package "compat-openssl10(x86_64)-1.0.2" is missing on node "bastion"
Cause:  A required package is either not installed or, if the package is a kernel module, is not loaded on the specified node.
Action:  Ensure that the required package is installed and available.
-----------------------------------------------
[WARNING] [INS-13014] Target environment does not meet some optional requirements.
   CAUSE: Some of the optional prerequisites are not met. See logs for details. /opt/oraInventory/logs/installActions2026-05-21_04-16-17PM.log.
   ACTION: Identify the list of failed prerequisite checks from the log: /opt/oraInventory/logs/installActions2026-05-21_04-16-17PM.log. Then either from the log file or from installation manual find the appropriate configuration to meet the prerequisites and fix it manually.
The response file for this session can be found at:
 /opt/oracle/client26ai/install/response/client_2026-05-21_04-16-17PM.rsp

You can find the log of this install session at:
 /opt/oraInventory/logs/installActions2026-05-21_04-16-17PM.log

The installation of Oracle Client 26ai was successful.
Please check '/opt/oraInventory/logs/silentInstall2026-05-21_04-16-17PM.log' for more details.
Successfully Setup Software with warning(s).
[INS-10115] All configuration tools were previously ran successfully, no further configuration is required.

[oracle@bastion client26ai]$
</pre>
</br>



<p class="wp-block-paragraph">And the Oracle 26ai Client is now installed.</p>



<h3>Prepare target database</h3>



<p class="wp-block-paragraph">I will create a user on the target lab PDB, named TESTZ_TMR_003I, in order to establish sqlplus connection and test the EXPIRE_TIME configuration.</p>



<p class="wp-block-paragraph">I will create a user test01 and grant the connect permissions.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4,16,31,35,39]">
[oracle@svl-oat ~]$ echo $ORACLE_SID
CDB001I

[oracle@svl-oat ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 21 14:30:39 2026
Version 19.23.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.23.0.0.0

SQL&gt; show pdbs

    CON_ID CON_NAME           OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
     2 PDB$SEED           READ ONLY  NO
     3 TESTZ_APP_006I         READ WRITE NO
     4 RCLON_TMR_003I         MOUNTED
     5 RCLON_TMR_002I         MOUNTED
     6 RCLON_TMR_001I         MOUNTED
     7 CLONZ_TMR_002I         MOUNTED
     8 TESTZ_TMR_003I         READ WRITE NO
    10 TESTZ_APP_004I         READ WRITE NO
    11 CLONZ_APP_001I         READ WRITE NO
    12 RCLON_APP_003I         READ WRITE NO

SQL&gt; alter session set container=TESTZ_TMR_003I;

Session altered.

SQL&gt; create user test01 identified by "test_expire";

User created.

SQL&gt; grant connect to test01;

Grant succeeded.

SQL&gt;
</pre>
</br>



<h3>Test connection with Oracle 26ai Client</h3>



<p class="wp-block-paragraph">I will first set the ORACLE_HOME variable on the appropriate client directory.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4,6]">
[oracle@bastion client26ai]$ echo $ORACLE_HOME
/opt/oracle/client19c

[oracle@bastion client26ai]$ export ORACLE_HOME=/opt/oracle/client26ai

[oracle@bastion client26ai]$ echo $ORACLE_HOME
/opt/oracle/client26ai
[oracle@bastion client26ai]$
</pre>
</br>



<p class="wp-block-paragraph">I will update the PATH variable to get tnsping and sqlplus binary from the appropriate Oracle 26ai Client.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4,6]">
[oracle@bastion client26ai]$ echo $PATH
/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/oracle/client19c/bin:/opt/oracle/sqlcl-24.1.0.087.0929//bin

[oracle@bastion client26ai]$ export PATH=/opt/oracle/client26ai/bin

[oracle@bastion client26ai]$ echo $PATH
/opt/oracle/client26ai/bin
[oracle@bastion client26ai]$
</pre>
</br>



<p class="wp-block-paragraph">I will check that the appropriate tnsping and sqlplus is taken.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,4]">
[oracle@bastion client26ai]$ which sqlplus
/opt/oracle/client26ai/bin/sqlplus

[oracle@bastion client26ai]$ which tnsping
/opt/oracle/client26ai/bin/tnsping
</pre>
</br>



<p class="wp-block-paragraph">I checked that the connection to target PDB is working.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[oracle@bastion ~]$ tnsping svl-oat:1521/testz_tmr_003i.db.jewlab.oraclevcn.com

TNS Ping Utility for Linux: Version 23.26.1.0.0 - Production on 21-MAY-2026 16:28:56

Copyright (c) 1997, 2026, Oracle.  All rights reserved.

Used parameter files:
/opt/oracle/client19c/network/admin/sqlnet.ora

Used EZCONNECT adapter to resolve the alias
Attempting to contact (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=testz_tmr_003i.db.jewlab.oraclevcn.com))(ADDRESS=(PROTOCOL=tcp)(HOST=X.X.1.135)(PORT=1521)))
OK (0 msec)
[oracle@bastion ~]$
</pre>
</br>



<p class="wp-block-paragraph">The TNS_ADMIN used is from the 19c Oracle client directory, which is absolutely not a problem.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[oracle@bastion ~]$ echo $TNS_ADMIN
/opt/oracle/client19c/network/admin
[oracle@bastion ~]$
</pre>
</br>



<h3>Test sqlplus connection with Oracle 26ai Client</h3>



<p class="wp-block-paragraph">As I can see on my client side, I do not have any sqlplus connection running right now.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[opc@bastion ~]$ ss -nop | grep 1521
[opc@bastion ~]$
</pre>
</br>



<p class="wp-block-paragraph"> I will generate a sqlplus connection.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[oracle@bastion client26ai]$ sqlplus test01/test_expire@svl-oat:1521/testz_tmr_003i.db.jewlab.oraclevcn.com

SQL*Plus: Release 23.26.1.0.0 - Production on Thu May 21 16:34:23 2026
Version 23.26.1.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.23.0.0.0

SQL&gt;
</pre>
</br>



<p class="wp-block-paragraph">And I can see that I have got a sqlplus connection with no timer/keepalive.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[opc@bastion ~]$ ss -nop | grep 1521
tcp   ESTAB  0      0   X.X.0.89:51404    X.X.1.135:1521
[opc@bastion ~]$
</pre>
</br>



<p class="wp-block-paragraph">I will now configure Oracle Dead Connection Detection with SQLNET.EXPIRE_TIME parameter set in the client sqlnet.ora with a value of 1 minute.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,3,6,8]">
[oracle@bastion ~]$ cd $TNS_ADMIN

[oracle@bastion admin]$ /usr/bin/grep -i expire sqlnet.ora
[oracle@bastion admin]$ 

[oracle@bastion admin]$ /usr/bin/vi sqlnet.ora

[oracle@bastion admin]$ /usr/bin/grep -i expire sqlnet.ora
SQLNET.EXPIRE_TIME=1
[oracle@bastion admin]$
</pre>
</br>



<p class="wp-block-paragraph">I will run a new sqlplus connection.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[oracle@bastion admin]$ sqlplus test01/test_expire@svl-oat:1521/testz_tmr_003i.db.jewlab.oraclevcn.com

SQL*Plus: Release 23.26.1.0.0 - Production on Thu May 21 16:41:06 2026
Version 23.26.1.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Last Successful login time: Thu May 21 2026 16:34:23 +02:00

Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.23.0.0.0

SQL&gt;
</pre>
</br>



<p class="wp-block-paragraph">I can now see that I have got a connection configured with a timer and keep alive remaining of 38s.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[opc@bastion ~]$ ss -nop | grep 1521
tcp   ESTAB  0      0     X.X.0.89:62868    X.X.1.135:1521   timer:(keepalive,38sec,0)
[opc@bastion ~]$
</pre>
</br>



<p class="wp-block-paragraph">Let&#8217;s configure the EXPIRE_TIME with a value of 15 minutes.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,3]">
[oracle@bastion admin]$ /usr/bin/vi sqlnet.ora

[oracle@bastion admin]$ /usr/bin/grep -i expire sqlnet.ora
SQLNET.EXPIRE_TIME=15
</pre>
</br>



<p class="wp-block-paragraph">I run a new sqlplus connection.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[oracle@bastion admin]$ sqlplus test01/test_expire@svl-oat:1521/testz_tmr_003i.db.jewlab.oraclevcn.com

SQL*Plus: Release 23.26.1.0.0 - Production on Thu May 21 16:43:25 2026
Version 23.26.1.0.0

Copyright (c) 1982, 2025, Oracle.  All rights reserved.

Last Successful login time: Thu May 21 2026 16:42:29 +02:00

Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.23.0.0.0

SQL&gt;
</pre>
</br>



<p class="wp-block-paragraph">And I now have got a connection configured with a timer and keep alive remaining of 14min.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[opc@bastion ~]$ ss -nop | grep 1521
tcp   ESTAB  0      0     X.X.0.89:60630    X.X.1.135:1521   timer:(keepalive,14min,0)
[opc@bastion ~]$
</pre>
</br>



<p class="wp-block-paragraph">So, all good Oracle 26ai Client is supporting Dead Connection Detection with SQLNET.EXPIRE_TIME parameter.</p>



<h3>Let&#8217;s test it with Oracle 19c Client</h3>



<p class="wp-block-paragraph">We can easily confirm again that Oracle 19c Client does not support Dead Connection Detection on the client side.</p>



<p class="wp-block-paragraph">Let&#8217;s move back to Oracle 19c Client home.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1,3]">
[oracle@bastion admin]$ export PATH=/opt/oracle/client19c/bin

[oracle@bastion admin]$ which sqlplus
/opt/oracle/client19c/bin/sqlplus
</pre>
</br>



<p class="wp-block-paragraph">Run a sqlplus connection.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[oracle@bastion admin]$ sqlplus test01/test_expire@svl-oat:1521/testz_tmr_003i.db.jewlab.oraclevcn.com

SQL*Plus: Release 19.0.0.0.0 - Production on Thu May 21 16:48:09 2026
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Thu May 21 2026 16:46:07 +02:00

Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.23.0.0.0

SQL&gt;
</pre>
</br>




<p class="wp-block-paragraph">And check connection configuration.</p>



<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">
[opc@bastion ~]$ ss -nop | grep 1521
tcp   ESTAB      0      0    X.X.0.89:64078    X.X.1.135:1521
[opc@bastion ~]$
</pre>
</br>



<p class="wp-block-paragraph">There is no timer/keepalive handled with Oracle 19c Client.</p>



<h3>To wrap up&#8230;</h3>



<p class="wp-block-paragraph">Oracle Database 26ai Client is now supporting Dead Connection Detection on the client side. For our customer configuration this will help the client to check every X minutes (EXPIRE_TIME configured value) for Dead Connection. So if the CMAN and listener connections have already died and if for any reason the Network Load Balancer is still keeping the connection with the client, the client will close the connection after X minutes.</p>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-database-26ai-client-and-sqlnet-expire_time/">Oracle Database 26ai Client and SQLNET.EXPIRE_TIME</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/oracle-database-26ai-client-and-sqlnet-expire_time/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Reduce downtime when refreshing your non-production databases using Multitenant</title>
		<link>https://www.dbi-services.com/blog/reduce-downtime-when-refreshing-your-non-production-databases-using-multitenant/</link>
					<comments>https://www.dbi-services.com/blog/reduce-downtime-when-refreshing-your-non-production-databases-using-multitenant/#respond</comments>
		
		<dc:creator><![CDATA[Jérôme Dubar]]></dc:creator>
		<pubDate>Thu, 21 May 2026 09:55:25 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[create pluggable database]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[duplicate]]></category>
		<category><![CDATA[fast refresh]]></category>
		<category><![CDATA[fast refresh pdb]]></category>
		<category><![CDATA[minimize downtime]]></category>
		<category><![CDATA[multitenant]]></category>
		<category><![CDATA[qual]]></category>
		<category><![CDATA[refresh]]></category>
		<category><![CDATA[test]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44737</guid>

					<description><![CDATA[<p>Introduction You probably refresh your non-production Oracle databases with production data from time to time or on a regular basis. Without Multitenant, the most common procedure to do this refresh is a DUPLICATE FROM BACKUP with RMAN. The drawback is the unavailability of the database being refreshed during the DUPLICATE. You first need to remove [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/reduce-downtime-when-refreshing-your-non-production-databases-using-multitenant/">Reduce downtime when refreshing your non-production databases using Multitenant</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="h-introduction">Introduction</h2>



<p class="wp-block-paragraph">You probably refresh your non-production Oracle databases with production data from time to time or on a regular basis. Without Multitenant, the most common procedure to do this refresh is a DUPLICATE FROM BACKUP with RMAN. The drawback is the unavailability of the database being refreshed during the DUPLICATE. You first need to remove the old version of the database, then start the DUPLICATE and wait until it&#8217;s finished. If you have Enterprise Edition and enough CPU, you can lower the time needed for the refresh by allocating a sufficient number of channels. But with a small number of CPU (which is normal for a non-production server), or eventually with Standard Edition (single channel RMAN operations only), a multi-TB database refresh can take several hours to complete. And if it fails for some reasons, you need to retry the refresh, extending even more the downtime.</p>



<p class="wp-block-paragraph">Multitenant brought new possibilities for refreshing a database, and my favorite one is a CREATE PLUGGABLE DATABASE from a database link (DB link). It&#8217;s dead easy compared to a DUPLICATE FROM BACKUP on a non-CDB database. And you can lower the downtime to the very minimum. Here is how I did this for several projects.</p>



<h2 class="wp-block-heading" id="h-how-to-lower-the-downtime-to-the-minimum-when-refreshing-a-non-production-pdb">How to lower the downtime to the minimum when refreshing a non-production PDB?</h2>



<p class="wp-block-paragraph">You probably know that one of the advantage of a pluggable database is the easiness of changing its name. You just need to stop the PDB, rename it, and restart it. You can then use this technique to refresh a PDB under a temporary name and let the actual PDB available during the refresh. Once the refresh is finished, drop or rename the actual PDB, and rename the newest one to its target name. Even if your refresh takes hours, your downtime is limited to a couple of seconds/minutes.</p>



<h2 class="wp-block-heading" id="h-step-1-add-an-additional-grant-for-source-pdb-s-administrator">Step 1: add an additional grant for source PDB&#8217;s administrator</h2>



<p class="wp-block-paragraph">The PDB administrator on the source database must have the CREATE PLUGGABLE DATABASE privilege:</p>



<pre class="wp-block-code"><code>ssh oracle@p01-srv-ora
. oraenv &lt;&lt;&lt; P19PMT
sqlplus / as sysdba
Alter session set container=P19_ERP;
grant create pluggable database to SYSERP;
exit</code></pre>



<h2 class="wp-block-heading" id="h-step-2-add-a-tns-entry-on-the-target-server">Step 2: add a TNS entry on the target server</h2>



<p class="wp-block-paragraph">The target server must have a TNS entry to the source PDB (production). If your source PDB and its container are protected by a Data Guard configuration, dont&#8217;t forget to add both addresses:</p>



<pre class="wp-block-code"><code>ssh root@t01-srv-ora
su – oracle
. oraenv &lt;&lt;&lt; D19PMT
vi $ORACLE_HOME/network/admin/tnsnames.ora
…
P19_ERP =
(DESCRIPTION =
   (LOAD_BALANCE = OFF)
   (FAILOVER = ON)
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = p01-srv-ora)(PORT = 1521))
     (ADDRESS = (PROTOCOL = TCP)(HOST = p02-srv-ora)(PORT = 1521))
   )
   (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = P19_ERP)
   )
)

tnsping P19_ERP
…
</code></pre>



<h2 class="wp-block-heading" id="h-step-3-create-a-db-link-on-the-target-container">Step 3: create a DB link on the target container</h2>



<p class="wp-block-paragraph">A DB link is required on the target container:</p>



<pre class="wp-block-code"><code>ssh root@t01-srv-ora
su – oracle
. oraenv &lt;&lt;&lt; D19PMT
sqlplus / as sysdba
CREATE DATABASE LINK P19_ERP CONNECT TO SYSERP IDENTIFIED BY "*************"  USING 'P19_ERP';

select count(*) from dual@P19_ERP;
  COUNT(*)
----------
         1
exit</code></pre>



<h2 class="wp-block-heading" id="h-step-4-prepare-the-scripts-for-the-refresh">Step 4: prepare the scripts for the refresh</h2>



<p class="wp-block-paragraph">Basically, refresh will have 5 main tasks:</p>



<ul class="wp-block-list">
<li>create a new PDB with a temporary name _NEW on the target container from the source PDB</li>



<li>start the new PDB for its correct registration in the container</li>



<li>run an optional script for modifying production data (masking, disabling tasks, …)</li>



<li>stop and rename the current PDB to _OLD, then start it again</li>



<li>stop and rename the new PDB to its target name and start it again</li>
</ul>



<p class="wp-block-paragraph">Task 2 is needed because you cannot rename a PDB immediately after creation. You first need to open it, then close it for being able to change its name.</p>



<p class="wp-block-paragraph">Let&#8217;s create 2 scripts on the target server, one shell script and one SQL script:</p>



<pre class="wp-block-code"><code>vi /home/oracle/scripts/refresh_D19_ERP.sh
#!/bin/bash
export ORACLE_SID=D19PMT
export REFRESH_LOG=/home/oracle/scripts/log/refresh_D19_ERP_`date +%d_%m_%Y-%H_%M_%S`.log
export ORACLE_HOME=`cat /etc/oratab | grep $ORACLE_SID | awk -F ':' '{print $2;}'`
date &gt;&gt; $REFRESH_LOG
$ORACLE_HOME/bin/sqlplus / as sysdba @/home/oracle/scripts/refresh_D19_ERP.sql &gt;&gt; $REFRESH_LOG
date &gt;&gt; $REFRESH_LOG
exit 0

vi /home/oracle/scripts/refresh_D19_ERP.sql
set timing on
show pdbs
alter pluggable database D19_ERP_OLD close immediate;
Drop pluggable database D19_ERP_OLD including datafiles;
show pdbs
create pluggable database D19_ERP_NEW from P19_ERP@P19_ERP ;
show pdbs
alter pluggable database D19_ERP_NEW open;
show pdbs
alter session set container=D19_ERP_NEW;
@/home/oracle/scripts/post_refresh_D19_ERP.sql 
alter session set container=CDB$ROOT;
alter pluggable database D19_ERP close immediate;
alter pluggable database D19_ERP rename global_name to D19_ERP_OLD;
alter pluggable database D19_ERP_OLD open;
show pdbs
alter pluggable database D19_ERP_NEW close immediate;
alter pluggable database D19_ERP_NEW rename global_name to D19_ERP;
Alter pluggable database D19_ERP open;
Alter pluggable database D19_ERP save state;
show pdbs
exit</code></pre>



<p class="wp-block-paragraph">It does the job, although these are very basic scripts: further controls could be added to trap errors, manage services, and so on.</p>



<h2 class="wp-block-heading" id="h-step-5-schedule-the-refresh">Step 5: schedule the refresh</h2>



<p class="wp-block-paragraph">Scheduling can be done through the crontab, for example every evening at 11.30PM:</p>



<pre class="wp-block-code"><code>crontab -l | grep D19_ERP | grep refresh
30 23 * * * sh /home/oracle/scripts/refresh_D19_ERP.sh
</code></pre>



<h2 class="wp-block-heading" id="h-conclusion">Conclusion</h2>



<p class="wp-block-paragraph">This is definitely a smart solution as soon as you have enough space on disk to have 2 copies of the PDB. It&#8217;s quite reliable and ticks all the boxes where I deployed these scripts.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/reduce-downtime-when-refreshing-your-non-production-databases-using-multitenant/">Reduce downtime when refreshing your non-production databases using Multitenant</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/reduce-downtime-when-refreshing-your-non-production-databases-using-multitenant/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OGG-08502 Path not found error from OGG Receiver Service</title>
		<link>https://www.dbi-services.com/blog/ogg-08502-path-not-found-error-from-ogg-receiver-service/</link>
					<comments>https://www.dbi-services.com/blog/ogg-08502-path-not-found-error-from-ogg-receiver-service/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Thu, 21 May 2026 06:39:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[distribution]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[OEM]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[ogg-08502]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[path not found]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[receiver]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44707</guid>

					<description><![CDATA[<p>Update: this bug seems to be corrected with the latest GoldenGate patch (23.26.2.0.1). If you face this error, try to patch your GoldenGate deployments. Recently, after a successful migration to GoldenGate 26ai, a customer complained that he was seeing a lot of the following error in the ggserr.log file of a GoldenGate deployment (I replaced [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/ogg-08502-path-not-found-error-from-ogg-receiver-service/">OGG-08502 Path not found error from OGG Receiver Service</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><strong><em>Update:</em></strong> this bug seems to be <strong>corrected</strong> with the latest GoldenGate patch (<code>23.26.2.0.1</code>). If you face this error, try to patch your GoldenGate deployments.</p>



<p class="wp-block-paragraph">Recently, after a successful <strong>migration to GoldenGate 26ai</strong>, a customer complained that he was seeing a lot of the following <strong>error</strong> in the <code>ggserr.log</code> file of a GoldenGate deployment (I replaced the names for the purpose of this blog).</p>



<pre class="wp-block-code"><code>2026-05-18T14:32:35.948+0200  ERROR   OGG-08502. Oracle GoldenGate Receiver Service for Oracle:   Path path21 not found.</code></pre>



<p class="wp-block-paragraph">More precisely, in that case, <code>path21</code> is a distribution path sending trail files from deployment <code>ogg_test_02</code> to <code>ogg_test_01</code>. And the error shown above appeared in the log file of the <code>ogg_test_01</code> deployment.</p>



<p class="wp-block-paragraph">While this error did not seem to indicate any operational issue in the replication, after checking on multiple environments, I confirmed that it appears everywhere. So what is happening exactly ?</p>



<p class="wp-block-paragraph">If you get this error and do not know where it comes from, <strong>log in to the web UI</strong> of the affected deployment, and go to the <strong><em>Receiver Service Paths</em></strong> tab. You should see a <strong>list of the distribution paths that are connecting to your deployments</strong>. The example below shows the <code>path21</code> that is mentioned in the error.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="425" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_ogg08502_bug_webui-1024x425.png" alt="" class="wp-image-44708" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_ogg08502_bug_webui-1024x425.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_ogg08502_bug_webui-300x124.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_ogg08502_bug_webui-768x319.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_ogg08502_bug_webui-1536x637.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_ogg08502_bug_webui-2048x850.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-how-to-reproduce-the-error"><strong>How to reproduce the error ?</strong></h2>



<p class="wp-block-paragraph">If you click on this path&#8230; Nothing happens ! And by &#8220;nothing&#8221;, I mean &#8220;nothing abnormal&#8221;. In fact, the statistics are properly displayed (see below), and there is <strong>no error shown</strong> to the user. However, if you look at your <code>ggserr.log</code> file you will see that <strong>the error given above appears</strong>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="461" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/Screenshot-2026-05-18-at-14.51.01-1024x461.png" alt="" class="wp-image-44709" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/Screenshot-2026-05-18-at-14.51.01-1024x461.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/Screenshot-2026-05-18-at-14.51.01-300x135.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/Screenshot-2026-05-18-at-14.51.01-768x346.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/Screenshot-2026-05-18-at-14.51.01-1536x692.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/Screenshot-2026-05-18-at-14.51.01-2048x923.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">At first glance, this might not seem like a huge issue, because if you don&#8217;t click on the receiver path, you will not get the error. However, in the log file of the customer, <strong>the error appeared regularly</strong>. Every minute, to be precise.</p>



<h2 class="wp-block-heading" id="h-why-do-i-get-this-error-even-when-i-m-not-accessing-the-web-ui"><strong>Why do I get this error even when I&#8217;m not accessing the web UI ?</strong></h2>



<p class="wp-block-paragraph">Luckily, when debugging this issue, I started by putting the target in a <strong>blackout in the Oracle Enterprise Manager</strong>. To my surprise, the <strong>error was gone</strong> during the blackout and reappeared right after.</p>



<p class="wp-block-paragraph">In this case, the <strong><a href="https://www.dbi-services.com/blog/install-and-configure-oem-plug-in-for-goldengate/" target="_blank" rel="noreferrer noopener">Enterprise Manager Plug-in for Oracle GoldenGate</a></strong> is monitoring the status of the deployment every minute and <strong>generates the error</strong> in the process.</p>



<p class="wp-block-paragraph">When looking at the targets in the OEM, there is no error. Again, <strong>no operational impact</strong>.</p>



<h2 class="wp-block-heading" id="h-does-it-depend-on-the-way-you-create-the-distribution-path"><strong>Does it depend on the way you create the distribution path ?</strong></h2>



<p class="wp-block-paragraph">GoldenGate offers multiple ways of managing deployments : REST API, <code>adminclient</code>, or the web UI. Unfortunately, some bugs (and some features&#8230;) mean that you should avoid managing some objects with some of these tools (read <a href="https://www.dbi-services.com/blog/overcome-goldengate-26ai-bug-on-custom-profiles/" target="_blank" rel="noreferrer noopener">why you shouldn&#8217;t create profiles through the <code>adminclient</code></a>, for instance).</p>



<p class="wp-block-paragraph">In this specific case, <strong>all distribution path creation methods lead to the same error</strong> in the log file. It doesn&#8217;t matter whether you create the distribution path with the <code>adminclient</code>, the REST API or the web UI. They will all lead to this error.</p>



<h2 class="wp-block-heading" id="h-advanced-what-s-happening-exactly"><strong>Advanced &#8211; What&#8217;s happening exactly ?</strong></h2>



<p class="wp-block-paragraph">Let&#8217;s dig a bit to see what is happening behind the scenes. By looking at the <code>restapi.log</code> file (read my blog on <a href="https://www.dbi-services.com/blog/querying-goldengate-rest-api-log-efficiently/" target="_blank" rel="noreferrer noopener">how to analyze REST API logs efficiently</a>), we can see the full error:</p>



<pre class="wp-block-code"><code>2026-05-18 09:08:58.402+0000 ERROR|RestAPI.recvsrvr | Request #9: {
     "context": {
         "httpContextKey": 140097141801744,
         "verbId": 2,
         "verb": "GET",
         "originalVerb": "GET",
         "uri": "/services/v2/targets/path21",
         "protocol": "http",
         "headers": {
             ...
         },
         "host": "vmogg",
         "securityEnabled": false,
         "authorization": {
             "authUserName": "ogg",
             "authUserRole": "Security",
             "authMode": "Cookie"
         },
         "requestId": 8,
         "uriTemplate": "/services/{version}/targets/{path}",
         "catalogUriTemplate": "/services/{version}/metadata-catalog/path"
     },
     "isScaRequest": true,
     "content": null,
     "parameters": {
         "uri": {
             "path": "path21",
             "version": "v2"
         },
         "query": {
             "WindowRef": "%2Fservices%2Fv2%2Fcontent%2F%23%2FrecvsrvrPaths%2Fpath21%2FpathNetworkStats"
         }
     }
 }
 Response: {
     "context": {
         ...
     },
     "isScaResponse": true,
     "content": {
         "$schema": "api:standardResponse",
         "links": &#091;
             {
                 "rel": "canonical",
                 "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets/path21",
                 "mediaType": "application/json"
             },
             {
                 "rel": "self",
                 "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets/path21",
                 "mediaType": "application/json"
             }
         ],
         "messages": &#091;
             {
                 "$schema": "ogg:message",
                 "title": "Path path21 not found",
                 "code": "OGG-08502",
                 "severity": "ERROR",
                 "issued": "2026-05-18T09:08:58Z",
                 "type": "https://www.rfc-editor.org/rfc/rfc9110.html#name-status-codes"
             }
         ]
     }
 }</code></pre>



<p class="wp-block-paragraph">The issue comes from the following endpoint : <code>/services/v2/targets/path21</code>. It is described in the documentation under <a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-targets-path-get.html" target="_blank" rel="noreferrer noopener">Retrieve an existing Oracle GoldenGate Collector Path</a>. But looking at another endpoint described in <a href="https://docs.oracle.com/en/database/goldengate/core/26/oggra/op-services-version-targets-get.html" target="_blank" rel="noreferrer noopener">Get a list of distribution paths</a>, we get the following response:</p>



<pre class="wp-block-code"><code>{
    "$schema": "api:standardResponse",
    "links": &#091;
        {
            "rel": "canonical",
            "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets",
            "mediaType": "text/html"
        },
        {
            "rel": "self",
            "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets",
            "mediaType": "text/html"
        },
        {
            "rel": "describedby",
            "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/metadata-catalog/targets",
            "mediaType": "application/schema+json"
        }
    ],
    "messages": &#091;],
    "response": {
        "$schema": "ogg:collection",
        "items": &#091;
            {
                "links": &#091;
                    {
                        "rel": "parent",
                        "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets",
                        "mediaType": "application/json"
                    },
                    {
                        "rel": "canonical",
                        "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets/path21_ogg26dist2_7811",
                        "mediaType": "application/json"
                    }
                ],
                "$schema": "ogg:collectionItem",
                "name": "path21",
                "status": "running",
                "targetInitiated": false
            }
        ]
    }
}</code></pre>



<p class="wp-block-paragraph">Here, we see that the endpoint associated with the <code>path21</code> object is not <code>recvsrvr/v2/targets/path21</code> but <code>recvsrvr/v2/targets/path21_ogg26dist2_7811</code>. And looking at this second endpoint, we do not get an error.</p>



<pre class="wp-block-code"><code>{
    "$schema": "api:standardResponse",
    "links": &#091;
        {
            "rel": "canonical",
            "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets/path21_ogg26dist2_7811",
            "mediaType": "text/html"
        },
        {
            "rel": "self",
            "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/targets/path21_ogg26dist2_7811",
            "mediaType": "text/html"
        },
        {
            "rel": "describedby",
            "href": "https://vmogg/services/ogg_test_01/recvsrvr/v2/metadata-catalog/path",
            "mediaType": "application/schema+json"
        }
    ],
    "messages": &#091;],
    "response": {
        "name": "path21",
        "status": "running",
        "$schema": "ogg:distPath",
        "source": {
            "uri": "trail://localhost:7811/services/v2/sources?trail=pdb2/bb"
        },
        "target": {
            "$schema": "ogg:distPathEndpoint",
            "uri": "ws://vmogg/services/v2/targets?trail=pdb2/bb"
        },
        "options": {
            "network": {
                "appOptions": {
                    "appFlushBytes": 27985,
                    "appFlushSecs": 1
                },
                "socketOptions": {
                    "tcpOptions": {
                        "ipDscp": "DEFAULT",
                        "ipTos": "DEFAULT",
                        "tcpNoDelay": false,
                        "tcpQuickAck": true,
                        "tcpCork": false,
                        "tcpSndBuf": 16384,
                        "tcpRcvBuf": 131072
                    }
                }
            }
        }
    }
}</code></pre>



<p class="wp-block-paragraph">The problem is that it was never decided for <code>path21</code> to be referred to as <code>path21_ogg26dist2_7811</code> internally. And it looks like GoldenGate does not know about it either&#8230; So until the bug is corrected, you will have to filter this <code>OGG-08502 Path not found</code> error out of the <code>ggserr.log</code> file if you use it for monitoring.</p>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/ogg-08502-path-not-found-error-from-ogg-receiver-service/">OGG-08502 Path not found error from OGG Receiver Service</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-08502-path-not-found-error-from-ogg-receiver-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Install and configure OEM plug-in for GoldenGate</title>
		<link>https://www.dbi-services.com/blog/install-and-configure-oem-plug-in-for-goldengate/</link>
					<comments>https://www.dbi-services.com/blog/install-and-configure-oem-plug-in-for-goldengate/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Mon, 18 May 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[GoldenGate]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[13c]]></category>
		<category><![CDATA[19c]]></category>
		<category><![CDATA[23ai]]></category>
		<category><![CDATA[24ai]]></category>
		<category><![CDATA[26ai]]></category>
		<category><![CDATA[configure]]></category>
		<category><![CDATA[enterprise manager]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[OEM]]></category>
		<category><![CDATA[ogg]]></category>
		<category><![CDATA[plug-in]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[promote]]></category>
		<category><![CDATA[target]]></category>
		<category><![CDATA[update]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44473</guid>

					<description><![CDATA[<p>If you are licensed for the GoldenGate Management Pack, using the Enterprise Manager plug-in for GoldenGate improves monitoring and management of your deployments. And after migrating to the Microservices Architecture, you should definitely update your plug-in and rediscover all targets. Let&#8217;s see how to do all that here. In this blog, I will use the [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/install-and-configure-oem-plug-in-for-goldengate/">Install and configure OEM plug-in for GoldenGate</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">If you are licensed for the GoldenGate Management Pack, using the Enterprise Manager plug-in for GoldenGate improves monitoring and management of your deployments. And after migrating to the Microservices Architecture, you should definitely update your plug-in and rediscover all targets. Let&#8217;s see how to do all that here.</p>



<p class="wp-block-paragraph">In this blog, I will use the latest version of the Enterprise Manager (24ai) and monitor GoldenGate 26ai deployments. The overall workflow is the same for other versions of the Enterprise Manager and GoldenGate, provided OGG is in the Microservices Architecture.</p>



<p class="wp-block-paragraph">Here are the main steps to monitor GoldenGate targets from the Enterprise Manager:</p>



<ul class="wp-block-list">
<li><strong>Update the catalog</strong> in the Enterprise Manager</li>



<li><strong>Deploy</strong> the plug-in on the <strong>management server</strong></li>



<li><strong>Deploy</strong> the plug-in on the <strong>agent</strong></li>



<li>Configure the <strong>discovery module</strong></li>



<li><strong>Promote the new targets</strong></li>
</ul>



<div class="wp-block-yoast-seo-table-of-contents yoast-table-of-contents"><h2>Table of contents</h2><ul><li><a href="#h-checking-if-the-plugin-is-already-installed" data-level="2">Checking if the plugin is already installed</a></li><li><a href="#h-update-the-enterprise-manager-catalog" data-level="2">Update the Enterprise Manager catalog</a></li><li><a href="#h-deploy-the-goldengate-plug-in-on-the-management-server" data-level="2">Deploy the GoldenGate plug-in on the Management Server</a></li><li><a href="#h-deploy-the-plug-in-on-the-agent" data-level="2">Deploy the plug-in on the agent</a></li><li><a href="#h-configure-goldengate-monitoring-in-the-enterprise-manager" data-level="2">Configure GoldenGate monitoring in the Enterprise Manager</a></li></ul></div>



<h2 class="wp-block-heading" id="h-checking-if-the-plugin-is-already-installed">Checking if the plugin is already installed</h2>



<p class="wp-block-paragraph">Before attempting to install the plug-in, make sure it is not already installed in your environment. To check this, go to <strong><em>Setup &gt; Extensibility &gt; Plug-ins</em></strong>, and expand the <em><strong>Middleware</strong></em> section. If you do not see any line named <em><strong>Oracle GoldenGate</strong></em>, it means the plug-in is not installed yet.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="592" height="491" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_noogg.png" alt="" class="wp-image-44477" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_noogg.png 592w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_noogg-300x249.png 300w" sizes="auto, (max-width: 592px) 100vw, 592px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-update-the-enterprise-manager-catalog">Update the Enterprise Manager catalog</h2>



<p class="wp-block-paragraph">Since most OEM environments do not have access to the Oracle Support directly, we&#8217;ll download the plug-in in offline mode. To do so, go to the <em><strong>Setup &gt; Provisioning and Patching &gt; Offline Patching</strong></em> section.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="324" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_tab_access-324x1024.png" alt="" class="wp-image-44476" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_tab_access-324x1024.png 324w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_tab_access-95x300.png 95w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_tab_access.png 365w" sizes="auto, (max-width: 324px) 100vw, 324px" /></figure>
</div>


<p class="wp-block-paragraph">Once in the <strong><em>Offline Patching</em></strong> section, make sure <em><strong>Offline</strong></em> is selected for the connection and <strong><a href="https://updates.oracle.com/download/em_catalog.zip" target="_blank" rel="noreferrer noopener">download the catalog</a></strong> file as instructed from an environment with access to the Oracle support website. Transfer it to where you have access to the OEM UI, and <strong>upload it</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="423" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode-1024x423.png" alt="" class="wp-image-44478" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode-1024x423.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode-300x124.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode-768x317.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode.png 1240w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Once the catalog is uploaded, you should see the following information message.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="404" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode_success-1024x404.png" alt="" class="wp-image-44479" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode_success-1024x404.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode_success-300x118.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode_success-768x303.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_offline_mode_success.png 1242w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Then, go to <em><strong>Setup &gt; Extensibility &gt; Self Update</strong></em> and click on <strong><em>Check Updates</em></strong>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="338" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin-1024x338.png" alt="" class="wp-image-44483" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin-1024x338.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin-300x99.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin-768x254.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin-1536x507.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin-2048x676.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">You should see the following pop-up appear, with a link from where you will be able to download the OEM Self Update catalog file. For reference, the one I had when writing this blog was the following : <a href="https://updates.oracle.com/Orion/Download/download_patch/p9348486_112000_Generic.zip" target="_blank" rel="noreferrer noopener">https://updates.oracle.com/Orion/Download/download_patch/p9348486_112000_Generic.zip</a></p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="332" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_oem_check_updates-1024x332.png" alt="" class="wp-image-44482" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_oem_check_updates-1024x332.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_oem_check_updates-300x97.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_oem_check_updates-768x249.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_oem_check_updates.png 1400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">As instructed, transfer this patch to the OMS host and <strong>import</strong> it with <code>emcli</code> and the <code>import_update_catalog</code> action. You can also import it from another managed host. It should take around twenty seconds to import everything.</p>



<pre class="wp-block-code"><code>oracle@oem24:~/ &#091;oem24] emcli import_update_catalog -file=/tmp/p9348486_112000_Generic.zip -omslocal
Processing catalog for Diagnostic Tools
Processing update: Diagnostic Tools - AHFFI 25.1.0.1.0 for Linux
Processing update: Diagnostic Tools - AHF 25.5.0.0.0 for HP

&#091;...]

Processing update: Plug-in - GoldenGate Plug-in now supports monitoring of Oracle GoldenGate Microservices, in addition to the Oracle GoldenGate Classic
Processing update: Plug-in - GoldenGate Plug-in now supports monitoring of Oracle GoldenGate Microservices, in addition to the Oracle GoldenGate Classic
Processing update: Plug-in - GoldenGate Plug-in now supports monitoring of Oracle GoldenGate Microservices, in addition to the Oracle GoldenGate Classic
Processing update: Plug-in - GoldenGate Plug-in now supports monitoring of GoldenGate Microservices Architecture, in addition to the GoldenGate Classic Architecture

&#091;...]

Successfully uploaded the Self Update catalog to Enterprise Manager. Use the Self Update Console to view and manage updates.
Time taken for import catalog is 17.289 seconds.</code></pre>



<h4 class="wp-block-heading" id="h-download-goldengate-plug-in">Download GoldenGate plug-in</h4>



<p class="wp-block-paragraph">When this is done, go back to the <em><strong>Self Update</strong></em> page, click on the <strong><em>Plug-In</em></strong> section. You will see the different versions of GoldenGate that are available. When I&#8217;m writing this blog, the latest version of the plug-in is <code>13.5.2.0.0</code> (the latest patch released in January 2026, <code>13.5.2.0.6</code>, will be a topic for another blog). Click on the latest version and then on <em><strong>Download</strong></em>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="339" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin_ogg_version-1024x339.png" alt="" class="wp-image-44484" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin_ogg_version-1024x339.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin_ogg_version-300x99.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin_ogg_version-768x254.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin_ogg_version-1536x508.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_plugin_ogg_version.png 1638w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The following pop-up gives you the link from which you should download the plug-in update file. In my case, it was <a href="https://updates.oracle.com/Orion/Services/download/p34651099_112000_Generic.zip?aru=24962501&amp;patch_file=p34651099_112000_Generic.zip" target="_blank" rel="noreferrer noopener">https://updates.oracle.com/Orion/Services/download/p34651099_112000_Generic.zip?aru=24962501&amp;patch_file=p34651099_112000_Generic.zip</a>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="352" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_offline_download-1024x352.png" alt="" class="wp-image-44485" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_offline_download-1024x352.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_offline_download-300x103.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_offline_download-768x264.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_offline_download-1536x528.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_self_update_offline_download.png 1680w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Once the file is downloaded, import it in the same way as before with the catalog, but this time with the <code>emcli import_update</code> action.</p>



<pre class="wp-block-code"><code>oracle@oem24:~/ &#091;oem24] emcli import_update -omslocal -file=/tmp/p34651099_112000_Generic.zip
Processing update: Plug-in - GoldenGate Plug-in now supports monitoring of Oracle GoldenGate Microservices, in addition to the Oracle GoldenGate Classic
Successfully uploaded the update to Enterprise Manager. Use the Self Update Console to manage this update.</code></pre>



<p class="wp-block-paragraph">Once this is done, go back to the <em><strong>Setup &gt; Extensibility &gt; Plug-in</strong></em> tab and expand the <strong><em>Middleware</em></strong> section. You should now see <em><strong>Oracle GoldenGate</strong></em>, and <code>13.5.2.0.0</code> as the downloaded version.</p>


<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/05/oem_ogg_plugin_downloaded-1024x393.png" alt="" class="wp-image-44486" style="width:600px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_downloaded-1024x393.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_downloaded-300x115.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_downloaded-768x294.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_downloaded.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading" id="h-deploy-the-goldengate-plug-in-on-the-management-server">Deploy the GoldenGate plug-in on the Management Server</h2>



<p class="wp-block-paragraph"><strong>Warning</strong> : Deploying the plug-in on the management server will <strong>temporarily restart</strong> OMS components and briefly <strong>interrupt monitoring</strong> operations. To deploy the plug-in, you have two options:</p>



<ul class="wp-block-list">
<li>Deploying the plug-in from the web UI.</li>



<li>Deploying the plug-in from the CLI.</li>
</ul>



<h4 class="wp-block-heading" id="h-deploying-the-plug-in-from-the-web-ui">Deploying the plug-in from the web UI</h4>



<p class="wp-block-paragraph">From the web UI, click on the <strong><em>Oracle GoldenGate</em></strong> plug-in, then on <strong><em>Deploy On</em></strong>, and deploy the plug-in on the <em><strong>Management Servers</strong></em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="928" height="540" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms.png" alt="" class="wp-image-44487" style="width:600px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms.png 928w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms-300x175.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms-768x447.png 768w" sizes="auto, (max-width: 928px) 100vw, 928px" /></figure>
</div>


<p class="wp-block-paragraph">Make sure the correct version of the plug-in is chosen (<code>13.5.2.0.0</code>), and click on <strong><em>Next</em></strong> to run the prerequisite checks.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="176" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_2-1024x176.png" alt="" class="wp-image-44488" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_2-1024x176.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_2-300x52.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_2-768x132.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_2-1536x265.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_2-2048x353.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Once the checks are successfully completed, click on <em><strong>Next</strong></em>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="184" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_prereq_2-1024x184.png" alt="" class="wp-image-44490" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_prereq_2-1024x184.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_prereq_2-300x54.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_prereq_2-768x138.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_prereq_2-1536x276.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_prereq_2-2048x368.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">You should now <strong><em>select the repository credentials</em></strong> for the OEM. You should either use new credentials (if it&#8217;s a new environment) or use existing named credentials. Click on <em><strong>Next</strong></em>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="335" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_repo_sys_true-1024x335.png" alt="" class="wp-image-44492" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_repo_sys_true-1024x335.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_repo_sys_true-300x98.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_repo_sys_true-768x251.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_repo_sys_true-1536x503.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_repo_sys_true-2048x670.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Once everything is done, click on <strong><em>Deploy</em></strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="299" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_review-1-1024x299.png" alt="" class="wp-image-44662" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_review-1-1024x299.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_review-1-300x88.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_review-1-768x225.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_review-1-1536x449.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_review-1-2048x599.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">As instructed, you can check the status of the deployment with the <code>emctl status oms -details</code> command.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="158" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_confirmation-1024x158.png" alt="" class="wp-image-44494" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_confirmation-1024x158.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_confirmation-300x46.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_confirmation-768x119.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_confirmation-1536x237.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_confirmation-2048x316.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<pre class="wp-block-code"><code>oracle@oem24:~/ &#091;oem24] emctl status oms
Oracle Enterprise Manager 24ai Release 1
Copyright (c) 1996, 2024 Oracle Corporation.  All rights reserved.
WebTier is Up
Oracle Management Server is Down

This is due to the following plug-ins being deployed on the management server or undeployed from it:
----------------------------------------
Plugin name:    : Oracle GoldenGate
Version:        : 13.5.2.0.0
ID:             : oracle.fmw.gg
----------------------------------------</code></pre>



<h4 class="wp-block-heading" id="h-deploying-the-plug-in-from-the-cli">Deploying the plug-in from the CLI</h4>



<p class="wp-block-paragraph">Alternatively, you can deploy the plug-in with the following command, using the <code>oracle.fmw.gg</code> ID for the plug-in and the latest <code>13.5.2.0.0</code> version.</p>



<pre class="wp-block-code"><code>emcli deploy_plugin_on_server -plugin="oracle.fmw.gg:13.5.2.0.0"</code></pre>



<p class="wp-block-paragraph">Once the plug-in is <strong>deployed on the Management Server</strong>, you can check again in the web UI : the latest version should be in the <code>On Management Server</code> section.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="413" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_postdeploy-1024x413.png" alt="" class="wp-image-44495" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_postdeploy-1024x413.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_postdeploy-300x121.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_postdeploy-768x310.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ms_postdeploy.png 1338w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-deploy-the-plug-in-on-the-agent">Deploy the plug-in on the agent</h2>



<p class="wp-block-paragraph">For each GoldenGate host where an OEM agent is running, deploy the plug-in. To do so, from the web UI, click on the <strong><em>Oracle GoldenGate</em></strong> plug-in, then on <em><strong>Deploy On</strong></em>, and select <em><strong>Management Agent</strong></em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="691" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag-1024x691.png" alt="" class="wp-image-44618" style="width:800px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag-1024x691.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag-300x202.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag-768x518.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag.png 1150w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">There is currently a bug with the <em><strong>Supported Target Versions</strong></em>. No matter your patch level, you will not see the latest versions of GoldenGate. Do not worry about this yet. Just make sure <code>13.5.2.0.0</code> is selected.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="890" height="804" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_versions.png" alt="" class="wp-image-44619" style="width:600px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_versions.png 890w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_versions-300x271.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_versions-768x694.png 768w" sizes="auto, (max-width: 890px) 100vw, 890px" /></figure>
</div>


<p class="wp-block-paragraph">Then, select the agent on which you want to deploy the plug-in.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="333" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_select-1-1024x333.png" alt="" class="wp-image-44621" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_select-1-1024x333.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_select-1-300x98.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_select-1-768x250.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_select-1-1536x499.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_select-1.png 1630w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Let the prerequisite checks run&#8230;</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="667" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_prereq-1024x667.png" alt="" class="wp-image-44622" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_prereq-1024x667.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_prereq-300x195.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_prereq-768x500.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_prereq-1536x1001.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_prereq.png 1630w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">And once everything is ready, click on <em><strong>Deploy</strong></em>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="669" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_review-1024x669.png" alt="" class="wp-image-44623" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_review-1024x669.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_review-300x196.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_review-768x502.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_review-1536x1003.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_review.png 1626w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">You can check that everything is running properly with the <code>emcli get_plugin_deployment_status</code> command.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="200" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_deploy-1024x200.png" alt="" class="wp-image-44624" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_deploy-1024x200.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_deploy-300x58.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_deploy-768x150.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_deploy-1536x299.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_deploy_ag_deploy.png 1632w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-configure-goldengate-monitoring-in-the-enterprise-manager">Configure GoldenGate monitoring in the Enterprise Manager</h2>



<p class="wp-block-paragraph">Once the plug-in is correctly deployed on the OMS host and on the GoldenGate host agent, you can configure the module. I will only cover the configuration for the Microservices Architecture. Go to the <strong><em>Setup &gt; Add Target &gt; Configure Auto Discovery</em></strong> tab.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="682" height="890" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_configure_auto_discovery_tab.png" alt="" class="wp-image-44630" style="width:400px" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_configure_auto_discovery_tab.png 682w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_configure_auto_discovery_tab-230x300.png 230w" sizes="auto, (max-width: 682px) 100vw, 682px" /></figure>
</div>


<p class="wp-block-paragraph">Choose the correct agent host, and click on <em><strong>Discovery Modules</strong></em>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="402" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_setup_discovery-1-1024x402.png" alt="" class="wp-image-44631" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_setup_discovery-1-1024x402.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_setup_discovery-1-300x118.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_setup_discovery-1-768x301.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_setup_discovery-1-1536x603.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_setup_discovery-1.png 1610w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Enable the <em><strong>Oracle GoldenGate Microservices</strong></em> module, click on it, and then on <em><strong>Edit Parameters</strong></em>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="430" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_discovery_modules-1-1024x430.png" alt="" class="wp-image-44632" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_discovery_modules-1-1024x430.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_discovery_modules-1-300x126.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_discovery_modules-1-768x322.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_discovery_modules-1-1536x645.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_discovery_modules-1-2048x859.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">If you deployed GoldenGate with a reverse proxy, <strong>set up the plug-in as such</strong>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="904" height="221" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_blog_setup_discovery_module_oem-1.png" alt="" class="wp-image-44633" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_blog_setup_discovery_module_oem-1.png 904w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_blog_setup_discovery_module_oem-1-300x73.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/ogg_blog_setup_discovery_module_oem-1-768x188.png 768w" sizes="auto, (max-width: 904px) 100vw, 904px" /></figure>
</div>


<p class="wp-block-paragraph">If you deployed GoldenGate with a port for each service, enter the <strong>service manager port</strong> (<code>7809</code>, by default).</p>



<p class="wp-block-paragraph"><strong>Warning</strong> : if your installation is <strong>secured with certificates</strong>, make sure to <strong>follow the instructions</strong> I gave in a blog to <a href="https://www.dbi-services.com/blog/em-90000-ssl-error-with-goldengate-targets-in-oem/" target="_blank" rel="noreferrer noopener">avoid EM-90000 errors when discovering new targets</a>.</p>



<p class="wp-block-paragraph">Once this is done, just go back to the <em><strong>Configure Auto Discovery</strong></em> section, click on the correct host, and then click on <em><strong>Discover Now</strong></em>. Then, go back to the <em><strong>Configure Auto Discovery</strong></em> section. You should now see a greater number of targets in the <em><strong>Discovered targets</strong></em> section.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="177" height="137" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_discovered_targets.png" alt="" class="wp-image-44635" /></figure>
</div>


<p class="wp-block-paragraph">If the number of targets did not increase, despite a successful discovery, check the blog linked above.</p>



<p class="wp-block-paragraph">Click on the number of targets to jump to the <em><strong>Auto Discovery Results</strong></em> section. Select the newly discovered Service Manager target, and click on <em><strong>Promote</strong></em>. Once the target is promoted, you should see the new GoldenGate targets being monitored by the Enterprise Manager !</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="813" height="159" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_targets_final.png" alt="" class="wp-image-44634" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_targets_final.png 813w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_targets_final-300x59.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/oem_ogg_plugin_targets_final-768x150.png 768w" sizes="auto, (max-width: 813px) 100vw, 813px" /></figure>
</div><p>L’article <a href="https://www.dbi-services.com/blog/install-and-configure-oem-plug-in-for-goldengate/">Install and configure OEM plug-in for 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/install-and-configure-oem-plug-in-for-goldengate/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-06-22 10:48:36 by W3 Total Cache
-->