<?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 OCI - dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/category/cloud/oci/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/category/cloud/oci/</link>
	<description></description>
	<lastBuildDate>Sat, 13 Jun 2026 12:33:06 +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 OCI - dbi Blog</title>
	<link>https://www.dbi-services.com/blog/category/cloud/oci/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Exascale new clone and snapshot capabilities</title>
		<link>https://www.dbi-services.com/blog/exascale-new-clone-and-snapshot-capabilities/</link>
					<comments>https://www.dbi-services.com/blog/exascale-new-clone-and-snapshot-capabilities/#respond</comments>
		
		<dc:creator><![CDATA[Alain Klein]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 13:03:59 +0000</pubDate>
				<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[oracle exadata database service]]></category>
		<category><![CDATA[oracle exascale]]></category>
		<category><![CDATA[oracle exascale architecture]]></category>
		<category><![CDATA[oracle exascale clone]]></category>
		<category><![CDATA[oracle exascale infrastructure]]></category>
		<category><![CDATA[oracle exascale snapshot]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44113</guid>

					<description><![CDATA[<p>One of the most game changing capabilities of Exascale are the new clone and snapshot features compared to previous options available with ASM / ACFS. And since the business requirements for clones or snapshots to be made available rapidly and conveniently are rising, Exascale comes in rescue for IT operations to quickly provide storage efficient [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exascale-new-clone-and-snapshot-capabilities/">Exascale new clone and snapshot capabilities</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-one-of-the-most-game-changing-capabilities-of-exascale-are-the-new-clone-and-snapshot-features-compared-to-previous-options-available-with-asm-acfs-and-since-the-business-requirements-for-clones-or-snapshots-to-be-made-available-rapidly-and-conveniently-are-rising-exascale-comes-in-rescue-for-it-operations-to-quickly-provide-storage-efficient-copies-of-production-databases-even-the-most-big-ones">One of the most game changing capabilities of Exascale are the new clone and snapshot features compared to previous options available with ASM / ACFS. And since the business requirements for clones or snapshots to be made available rapidly and conveniently are rising, Exascale comes in rescue for IT operations to quickly provide storage efficient copies of production databases, even the most big ones.</h2>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">The business requirements to be able to get hands on clones of production databases are nowadays countless:</p>



<ul class="wp-block-list">
<li>developer agility (needing separate and isolated databases),</li>



<li>production-like shared environment providing same model and code but with a smaller footprint,</li>



<li>test databases for software update testing,</li>



<li>data sharing,</li>



<li>point-in-time reporting, what-if scenario modeling or data audit.</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">For environments with big databases (tens of terabytes and more), Exascale is very well suited to do the job, with the following main features and advantages:</p>



<ul class="wp-block-list">
<li>source database flexibility: you can now clone read-write and read-only 23/26ai databases, at the PDB and CDB level</li>



<li>no upstream dependencies: unlike ASM, Exascale no longer requires a test-master read-only copy</li>



<li>storage reclamation is automatically performed by Exascale for extents no longer referenced by a file</li>



<li>redirect-on-write techniques enable quick clone creation and maintenance with unprecedented space efficiency</li>



<li>and last but not least, clone/snapshot is independent of source, which can be dropped without impacting clone</li>
</ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">Before going through the details on how to make clones and snapshots, let&#8217;s remind what clones and snapshots are.</p>



<h3 class="wp-block-heading" id="h-snapshot">Snapshot</h3>



<p class="wp-block-paragraph">A snapshot is a read-only point-in-time copy of a file. Possible sources for snapshot creation are regular files, clones or another snapshot.</p>



<h3 class="wp-block-heading" id="h-clone">Clone</h3>



<p class="wp-block-paragraph">A clone is a read-write point-in-time copy of a file, possibly created from a regular file, another clone or a snapshot.</p>



<p class="wp-block-paragraph">There are actually two types of clones: thin (space efficient) or full (byte-for-byte copy of source).</p>



<p class="wp-block-paragraph">Cloning implicitly creates snapshots.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="h-how-do-we-create-clones-or-snapshots-of-pdbs">How do we create clones or snapshots of PDBs ?</h3>



<p class="wp-block-paragraph">This is where database kernel and Exascale integration really shines: physical storage operations are encapsulated in single SQL commands, thus there is no need to learn new tricky commands and clauses to leverage Exascale cloning and snapshoting capabilities. You use SQL commands you are already familiar with:</p>



<pre class="wp-block-code"><code>CREATE|ALTER PLUGGABLE DATABASE
</code></pre>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="h-creating-pdb-snapshots">Creating PDB snapshots</h3>



<p class="wp-block-paragraph">To create a read-only point-in-time reference to a PDB, use:</p>



<pre class="wp-block-code"><code>ALTER PLUGGABLE DATABASE pdb_name SNAPSHOT pdb_snapshot_name;
</code></pre>



<p class="wp-block-paragraph">Remember that snapshots are inconsistent by default (which precisely makes quick creation possible); so cloning a snapshot triggers recovery based on redo data before the new clone can be opened read-write. Thus, required redo data has to be retained or restored from backup.</p>



<p class="wp-block-paragraph">The DBA_PDB_SNAPSHOTS dictionary view is available to display snapshots information.</p>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="h-creating-pdb-thin-clones">Creating PDB thin clones</h3>



<p class="wp-block-paragraph">A PDB thin clone is a space-efficient clone of an existing PDB. You need to use the SNAPSHOT COPY clause like in the following syntax:</p>



<pre class="wp-block-code"><code>CREATE PLUGGABLE DATABASE pdb_name FROM source_pdb_name SNAPSHOT COPY;</code></pre>



<h4 class="wp-block-heading" id="h-thin-cloning-a-pdb">Thin cloning a PDB</h4>



<pre class="wp-block-code"><code>CREATE PLUGGABLE DATABASE thin_clone_pdb_name FROM source_pdb_name SNAPSHOT COPY;
ALTER PLUGGABLE DATABASE thin_clone_pdb_name OPEN INSTANCES=ALL;
</code></pre>



<h4 class="wp-block-heading" id="h-thin-cloning-a-pdb-snapshot">Thin cloning a PDB snapshot</h4>



<pre class="wp-block-code"><code>CREATE PLUGGABLE DATABASE thin_clone_pdb_name FROM source_pdb_name USING SNAPSHOT pdb_snapshot_name SNAPSHOT COPY;
ALTER PLUGGABLE DATABASE thin_clone_pdb_name OPEN INSTANCES=ALL;
</code></pre>



<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="h-creating-pdb-full-clones">Creating PDB full clones</h3>



<p class="wp-block-paragraph">As already mentioned, a full clone is a byte-for-byte copy of an existing PDB and therefore takes the same storage space than source PDB. The command to be used is a simple:</p>



<pre class="wp-block-code"><code>CREATE PLUGGABLE DATABASE … FROM …</code></pre>



<p class="wp-block-paragraph">The missing SNAPSHOT COPY clause directs the database to create a complete block-for-block copy of the PDB.</p>



<pre class="wp-block-code"><code>CREATE PLUGGABLE DATABASE full_clone_pdb_name FROM source_pdb_name;
ALTER PLUGGABLE DATABASE full_clone_pdb_name OPEN INSTANCES=ALL;
</code></pre>



<p class="wp-block-paragraph">Existing snapshots or thin clones can also be referenced as a source in the preceding commands.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="h-what-about-cloning-an-entire-container-database">What about cloning an entire container database ?</h3>



<p class="wp-block-paragraph">Space-efficient clones of an entire container database are possible thanks to the powerful gDBClone utility written by Ruggero Citton, to whom we owe other great utilities ODABR (consistent and incremental backup and restore for Oracle Database Appliance nodes), KVMBR (backup and restore of KVM domains) or more recently DSCM &amp; DSCMREST (deployment of Oracle database containers with efficient storage snapshots).</p>



<p class="wp-block-paragraph">The gDBClone utility enables:</p>



<ul class="wp-block-list">
<li>End-to-end thin and full cloning of a CDB with all its PDB</li>



<li>File clone operations</li>



<li>RMAN calls to make cloned files consistent</li>



<li>Instance related files (such as password, spfile or TDE wallet files) creation</li>



<li>GI registration</li>
</ul>



<p class="wp-block-paragraph">Here are some simple examples to respectively thin clone and full clone an entire CDB:</p>



<pre class="wp-block-code"><code>gDBClone.bin snap –sdbname source_db_name –tdbname target_db_name
</code></pre>



<pre class="wp-block-code"><code>gDBClone.bin clone –sdbname source_db_name –tdbname target_db_name
</code></pre>



<p class="wp-block-paragraph">More on this powerful tool in <a href="https://docs.oracle.com/en/engineered-systems/exadata-database-machine/exscl/cloning-container-database.html" id="https://docs.oracle.com/en/engineered-systems/exadata-database-machine/exscl/cloning-container-database.html" target="_blank" rel="noreferrer noopener">Exascale documentation</a> and Oracle Support <a href="https://support.oracle.com/ic/builder/rt/customer_portal/live/webApps/customer-portal/?anchorId=&amp;kmContentId=2099214&amp;page=sptemplate&amp;sptemplate=km-article" id="https://support.oracle.com/ic/builder/rt/customer_portal/live/webApps/customer-portal/?anchorId=&amp;kmContentId=2099214&amp;page=sptemplate&amp;sptemplate=km-article" target="_blank" rel="noreferrer noopener">KB145187</a> article.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="h-performance">Performance</h3>



<p class="wp-block-paragraph">Thin cloning a 2.4 TB PDB takes less than 12 seconds while opening the new thin clone on a two instances cluster database takes another 11 seconds, for a total elapsed time of the entire operation under 30 seconds !!!</p>



<p class="wp-block-paragraph">Additional details can be found in this <a href="https://alexblyth.net/2025/09/16/ultra-fast-pdb-thin-clones-on-exadata-exascale/" id="https://alexblyth.net/2025/09/16/ultra-fast-pdb-thin-clones-on-exadata-exascale/" target="_blank" rel="noreferrer noopener">Alex Blyth blog post</a>.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



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



<p class="wp-block-paragraph">By leveraging state-of-the-art redirect-on-write technologies, Exascale is a leap forward and game changing technology when it comes to clone and snapshot features and capabilities. It is CI/CD friendly and the ideal tool to address the business requirements for test and qualification environments by letting DBAs provide very quickly space efficient copies of production or standby databases or PDBs.</p>



<p class="wp-block-paragraph">Give it a try to be definitely convinced.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://www.dbi-services.com/blog/exascale-new-clone-and-snapshot-capabilities/">Exascale new clone and snapshot capabilities</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/exascale-new-clone-and-snapshot-capabilities/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Creating an Oracle Cloud Infrastructure VM Using the CLI</title>
		<link>https://www.dbi-services.com/blog/creating-an-oci-vm-with-the-command-line/</link>
					<comments>https://www.dbi-services.com/blog/creating-an-oci-vm-with-the-command-line/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 07:31:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[compute]]></category>
		<category><![CDATA[create]]></category>
		<category><![CDATA[creation]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[shape]]></category>
		<category><![CDATA[VM]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=43101</guid>

					<description><![CDATA[<p>Oracle Cloud Infrastructure (OCI) provides an easy-to-use command line interface named oci, with which you can do a lot of administrative tasks. Let&#8217;s see in this blog how to create virtual machines in OCI with this. Setting up oci-cli If you are already connected to your OCI tenancy with the command line, you can skip [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/creating-an-oci-vm-with-the-command-line/">Creating an Oracle Cloud Infrastructure VM Using the CLI</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">Oracle Cloud Infrastructure (OCI) provides an easy-to-use command line interface named <code>oci</code>, with which you can do a lot of administrative tasks. Let&#8217;s see in this blog how to create virtual machines in OCI with this.</p>



<p class="wp-block-paragraph"></p>



<h2 id="h-setting-up-oci-cli" class="wp-block-heading">Setting up <code>oci-cli</code></h2>



<p class="wp-block-paragraph">If you are already connected to your OCI tenancy with the command line, you can skip this part. Otherwise, let&#8217;s begin.</p>



<p class="wp-block-paragraph">The first step is to install and configure the <code>oci-cli</code> utility. The full list of installation steps is available in the <a href="https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm" target="_blank" rel="noreferrer noopener">documentation</a> and depends on the platform from which you want to administer OCI.</p>



<p class="wp-block-paragraph">On <strong>macOS</strong>, just run this command:</p>



<pre class="wp-block-code"><code>brew install oci-cli</code></pre>



<p class="wp-block-paragraph">Some <strong>Linux</strong> distributions (like OEL 7 or 8) come with the utility already installed. Otherwise, you can run the following command. </p>



<pre class="wp-block-code"><code>bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"</code></pre>



<p class="wp-block-paragraph">Once this is installed, you need the connection information from your OCI account. You can finish the setup either by running the <code>oci setup config</code> command, which will ask for all the information needed, or by doing the following if you are not sure about the information required.</p>



<ul class="wp-block-list">
<li>Log in the OCI interface, and go in your <em><strong>Profile &gt; User settings</strong></em></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="600" height="656" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_1-1.png" alt="" class="wp-image-43114" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_1-1.png 600w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_1-1-274x300.png 274w" sizes="(max-width: 600px) 100vw, 600px" /></figure>
</div>


<ul class="wp-block-list">
<li>In the <strong><em>User settings</em></strong> tab, click on <em><strong>Tokens and keys</strong></em>, and <em><strong>Add API key</strong></em></li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="342" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_2-1024x342.png" alt="" class="wp-image-43115" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_2-1024x342.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_2-300x100.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_2-768x256.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_2-1536x513.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_2.png 1738w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>Here, you have the option to <strong>generate a new key pair</strong> or to <strong>register an existing public key</strong>. Make sure to <strong>save the private key</strong> if you generate a new pair.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="334" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_3-1024x334.png" alt="" class="wp-image-43116" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_3-1024x334.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_3-300x98.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_3-768x251.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_3-1536x501.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/oci_setup_3-2048x669.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>After clicking on <strong><em>Add key</em></strong>, OCI will provide a configuration file that you can use.</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="396" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/Screenshot-2026-02-23-at-17.53.09-1024x396.png" alt="" class="wp-image-43125" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/Screenshot-2026-02-23-at-17.53.09-1024x396.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/Screenshot-2026-02-23-at-17.53.09-300x116.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/Screenshot-2026-02-23-at-17.53.09-768x297.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/Screenshot-2026-02-23-at-17.53.09-1536x595.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/03/Screenshot-2026-02-23-at-17.53.09.png 1638w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<ul class="wp-block-list">
<li>Edit this configuration file with the location of your private key and place it at <code>~/.oci/config</code></li>
</ul>



<pre class="wp-block-code"><code>&gt; cat ~/.oci/config
&#091;DEFAULT]
user=&lt;user_ocid&gt;
fingerprint=&lt;fingerprint&gt;
tenancy=&lt;tenancy_ocid&gt;
region=&lt;your_region&gt;
key_file=/path/to/private_key.pem</code></pre>



<p class="wp-block-paragraph">And that&#8217;s it ! To test the connection, run the <code>oci iam region list</code> command. It should return a JSON document containing all the available regions.</p>



<pre class="wp-block-code"><code>&gt; oci iam region list
{
  "data": &#091;
    {
      "key": "AMS",
      "name": "eu-amsterdam-1"
    },
    ...
    {
      "key": "ZRH",
      "name": "eu-zurich-1"
    }
  ]
}</code></pre>



<h2 id="h-creating-your-first-vm-with-the-oci-cli" class="wp-block-heading">Creating your first VM with the <code>oci</code> CLI</h2>



<p class="wp-block-paragraph">An OCI virtual machine is always created within a specific set of <strong>cloud components</strong>, for which you will have to retrieve the <strong>OCIDs</strong>.</p>



<ul class="wp-block-list">
<li><strong>Compartment</strong>: it can be the root compartment or any other compartment, but the user defined in the <code>.oci/config</code> file should have access to it</li>



<li><strong>Availability domain</strong>: depending on your OCI setup, you will have access to specific availability domains. We&#8217;ll see how to retrieve the correct one.</li>



<li><strong>Subnet</strong>: public subnet in which the VM will be available.</li>



<li><strong>Shape</strong>: shape of the VM.</li>



<li><strong>Image</strong>: the OS image used to create the VM.</li>
</ul>



<h4 id="h-retrieve-your-compartment-ocid" class="wp-block-heading">Retrieve your compartment OCID</h4>



<p class="wp-block-paragraph">For the compartment, you can retrieve the list of all compartments with the following command:</p>



<pre class="wp-block-code"><code>&gt; oci iam compartment list --all
{
  "data": &#091;
    {
      "compartment-id": "compartment_ocid",
      "defined-tags": {
        "Oracle-Tags": {
          "CreatedBy": "...",
          "CreatedOn": "..."
        }
      },
      "id": "compartment_ocid",
      "inactive-status": null,
      "is-accessible": null,
      "lifecycle-state": "ACTIVE",
      "name": "compartment_name",
      "time-created": "..."
    },
    ...
}</code></pre>



<p class="wp-block-paragraph">If you know the name of the compartment you want to retrieve, you can get the OCID with this command. Just replace the <code>compartment_name</code>.</p>



<pre class="wp-block-code"><code>&gt; oci iam compartment list --compartment-id-in-subtree true --all --query "data&#091;?name=='compartment_name'].id" --raw-output
&#091;
  "ocid.compartment..."
]</code></pre>



<h4 id="h-choose-an-availability-domain" class="wp-block-heading">Choose an availability domain</h4>



<p class="wp-block-paragraph">If you don&#8217;t know it already, you can easily retrieve the availability domains available with the compartment OCID.</p>



<pre class="wp-block-code"><code>&gt; oci iam availability-domain list --compartment-id ocid1.compartment.oc1... --query 'data&#091;].name' --raw-output
&#091;
  "AlWD:EU-ZURICH-1-AD-1"
]</code></pre>



<h4 id="h-retrieve-the-subnet-ocid" class="wp-block-heading">Retrieve the subnet OCID</h4>



<p class="wp-block-paragraph">In a basic configuration, you should use the OCID of the only public subnet available. Let&#8217;s display the subnet names and OCID to help you choose the correct one.</p>



<pre class="wp-block-code"><code>&gt; oci network subnet list --compartment-id ocid1.compartment.oc1... --query "data&#091;].{name:\"display-name\", ocid:id}" --output table
+--------------------+---------------------+
| name               | ocid                |
+--------------------+---------------------+
| private subnet-vcn | ocid1.subnet.oc1... |
| public subnet-vcn  | ocid1.subnet.oc1... |
+--------------------+---------------------+</code></pre>



<h4 id="h-select-the-desired-shape" class="wp-block-heading">Select the desired shape</h4>



<p class="wp-block-paragraph">You can list the available shapes with the <code>oci compute shape list</code> command. Because it contains a lot of useless information for us, we will filter it. Below is a display of all available shapes and whether they are resizable. Indeed, some shapes cannot be resized and come with specific CPU/memory settings.</p>



<pre class="wp-block-code"><code>&gt; oci compute shape list --compartment-id ocid1.compartment.oc1... --query  "data&#091;].{name:shape,resizable:\"is-flexible\"}" --output table
+------------------------+-----------+
| name                   | resizable |
+------------------------+-----------+
| BM.Standard.E5.192     | False     |
| BM.Standard.A1.160     | False     |
| BM.Standard3.64        | False     |
| BM.Standard2.52        | False     |
| BM.Optimized3.36       | False     |
| BM.Standard.E4.128     | False     |
| BM.Standard.E3.128     | False     |
| BM.Standard.E2.64      | False     |
| BM.DenseIO2.52         | False     |
| VM.Optimized3.Flex     | True      |
| VM.Standard.E4.Flex    | True      |
| VM.Standard.E3.Flex    | True      |
| VM.Standard.A1.Flex    | True      |
| VM.Standard2.1         | False     |
| VM.Standard2.2         | False     |
| VM.Standard2.4         | False     |
| VM.Standard2.8         | False     |
| VM.Standard2.16        | False     |
| VM.Standard2.24        | False     |
| VM.Standard.E2.1       | False     |
| VM.Standard.E2.2       | False     |
| VM.Standard.E2.4       | False     |
| VM.Standard.E2.8       | False     |
| VM.Standard.E2.1.Micro | False     |
| VM.Standard3.Flex      | True      |
| VM.DenseIO2.8          | False     |
| VM.DenseIO2.16         | False     |
| VM.DenseIO2.24         | False     |
| VM.Standard.E5.Flex    | True      |
+------------------------+-----------+</code></pre>



<h4 id="h-choose-a-specific-image" class="wp-block-heading">Choose a specific image</h4>



<p class="wp-block-paragraph">Use the <code>oci compute image list</code> command to retrieve the available images inside your compartment. You might already have a name shape in mind, so just find the one you are interested in.</p>



<pre class="wp-block-code"><code>&gt; oci compute image list --compartment-id ocid1.compartment.oc1... --query "data&#091;].{name:\"display-name\",ocid:id}" --all --output table
+----------------------------------+--------------------+
| name                             | ocid               |
+----------------------------------+--------------------+
| Windows-Server-2025-...          | ocid1.image.oc1... |
| Oracle-Linux-9.7-2026.01.29-0    | ocid1.image.oc1... |
| Oracle-Linux-8.10-2026.01.29-0   | ocid1.image.oc1... |
| CentOS-8-Stream-2024.04.25-0     | ocid1.image.oc1... |
| custom_image                     | ocid1.image.oc1... |
+----------------------------------+--------------------+</code></pre>



<h2 id="h-build-your-first-virtual-machine" class="wp-block-heading">Build your first virtual machine</h2>



<p class="wp-block-paragraph">You now have all the necessary information to create your own VM from the CLI ! Combine it together with the following flags, and you&#8217;re good to go:</p>



<ul class="wp-block-list">
<li><code>--display-name</code>: Name of the virtual machine</li>



<li><code>--assign-public-ip</code>: Whether to assign a public IP.</li>



<li><code>--metadata</code>: Useful to add an ssh key to the default user.</li>



<li><code>--shape-config</code>: If the shape you selected can be customized, you can select its attributes here, like <code>ocpus</code> or <code>memoryInGBs</code>.</li>
</ul>



<p class="wp-block-paragraph">At the end, we have the following command:</p>



<pre class="wp-block-code"><code>oci compute instance launch \
    --compartment-id ocid1.compartment.oc1... \
    --availability-domain "EiFV:EU-ZURICH-1-AD-1" \
    --shape "VM.Standard.E5.Flex" \
    --shape-config '{"ocpus":1,"memoryInGBs":4}' \
    --subnet-id ocid1.subnet.oc1... \
    --image-id ocid1.image.oc1... \
    --display-name "vm_dbi" \
    --assign-public-ip true \
    --metadata '{"ssh_authorized_keys": "ssh-rsa ssh_key_content== user@host"}'</code></pre>



<p class="wp-block-paragraph">Of course, there are other options that you could use:</p>



<ul class="wp-block-list">
<li><code>--wait-for-state</code>: useful if you want to wait for the VM to be <code>RUNNING</code> before ending the command. It is very useful in combination with the <code>--query 'data.id'</code> option, which will give you the OCID of the newly created VM, that you can then use to retrieve its IP, among other things.</li>



<li><code>--user-data-file</code>: this is especially useful if you want to add a custom <code>cloud-init.yaml</code> file for the VM setup.</li>



<li><code>--boot-volume-size-in-gbs</code>: size of the boot volume, in GB.</li>
</ul>



<p class="wp-block-paragraph">With this, you have everything you need for a basic VM creation in OCI.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/creating-an-oci-vm-with-the-command-line/">Creating an Oracle Cloud Infrastructure VM Using the CLI</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/creating-an-oci-vm-with-the-command-line/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Using Oracle API for MongoDB on OCI</title>
		<link>https://www.dbi-services.com/blog/using-oracle-api-for-mongodb-on-oci/</link>
					<comments>https://www.dbi-services.com/blog/using-oracle-api-for-mongodb-on-oci/#respond</comments>
		
		<dc:creator><![CDATA[Julien Delattre]]></dc:creator>
		<pubDate>Wed, 15 Oct 2025 06:00:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Autonomous Database]]></category>
		<category><![CDATA[Document]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[mongoservererror]]></category>
		<category><![CDATA[query]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38488</guid>

					<description><![CDATA[<p>If you&#8217;ve ever had to deal with MongoDB after years (or even decades) of working with SQL, you&#8217;ve probably realized that querying JSON documents can sometimes be painful, to say the least. In response to this, Oracle (and others) use a not-so-native adaptation of SQL to query JSON documents. And if you&#8217;ve ever had to [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/using-oracle-api-for-mongodb-on-oci/">Using Oracle API for MongoDB on OCI</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&#8217;ve ever had to deal with <strong>MongoDB</strong> after years (or even decades) of working with <strong>SQL</strong>, you&#8217;ve probably realized that querying JSON documents can sometimes be painful, to say the least.</p>



<p class="wp-block-paragraph">In response to this, <strong>Oracle</strong> (and others) use a not-so-native adaptation of SQL to query JSON documents. And if you&#8217;ve ever had to deal with these SQL-based JSON queries, you may have found yourself thinking (in hindsight) that querying JSON documents with <strong>MQL (MongoDB Query Language)</strong> wasn&#8217;t <em>that</em> painful after all. And rightly so : JSON documents are very different from relational tables, and there is <strong>no easy way to continue using SQL without learning </strong>some new syntax.</p>



<p class="wp-block-paragraph">Oracle likely came to the same conclusion, and offers an <strong>API dedicated to MongoDB</strong> natives. The idea is simple : to ease the work of developers and database administrators when deciding to migrate from MongoDB to Oracle (and the other way around ?&#8230;)</p>



<p class="wp-block-paragraph">On <strong>Oracle Cloud Infrastructure (OCI)</strong>, this means being able to connect to <strong>Autonomous Databases (ADB)</strong>. As a reminder, you have two of them included in the <strong>Always Free Tier</strong> of OCI, so you can play around with this feature for free before deciding to migrate to the cloud.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-setting-up-the-oracle-mongodb-api-on-oci">Setting up the Oracle MongoDB API on OCI</h2>



<p class="wp-block-paragraph">When creating an Autonomous Database, you can decide on multiple workloads types, including a <strong>JSON workload</strong>. However, the MongoDB API does not strictly require the JSON workload type to work.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="903" height="173" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/image-7.png" alt="" class="wp-image-38493" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/image-7.png 903w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/image-7-300x57.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/image-7-768x147.png 768w" sizes="auto, (max-width: 903px) 100vw, 903px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">However, the <strong>network access setting</strong> of your Autonomous Database <strong>must be non-default</strong> with one of the following options enabled :</p>



<ul class="wp-block-list">
<li><em>Secure access from allowed IPs and VCNs only</em></li>



<li><em>Private endpoint access only</em></li>
</ul>



<p class="wp-block-paragraph">For instance, when using the <strong><em>Secure access from allowed IPs and VCNs only</em></strong> option, you can add any IP address to the <strong>Access Control List (ACL)</strong>, including your own.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="876" height="496" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_network_access_full.png" alt="" class="wp-image-38517" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_network_access_full.png 876w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_network_access_full-300x170.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_network_access_full-768x435.png 768w" sizes="auto, (max-width: 876px) 100vw, 876px" /><figcaption class="wp-element-caption"><em><strong>Warning</strong> : If your IP address changes, you will have to update the ACL !</em></figcaption></figure>



<p class="wp-block-paragraph">After creating the ADB (Autonomous Database), you can check in the <em><strong>Tool configuration</strong></em> tab the MongoDB API is enabled (it should be, by default).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="830" height="182" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_tool_configuration_tab.png" alt="" class="wp-image-38514" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_tool_configuration_tab.png 830w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_tool_configuration_tab-300x66.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_tool_configuration_tab-768x168.png 768w" sizes="auto, (max-width: 830px) 100vw, 830px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="557" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_mongo_db_api_enabled-1-1024x557.png" alt="" class="wp-image-38516" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_mongo_db_api_enabled-1-1024x557.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_mongo_db_api_enabled-1-300x163.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_mongo_db_api_enabled-1-768x418.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_mongo_db_api_enabled-1.png 1152w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Then you can go in <em><strong>Database actions</strong></em> &gt; <em><strong>Database Users</strong></em> to either create a user or modify an existing one, with the following privileges : <code>CREATE SESSION</code>, <code>CREATE RESOURCE</code> (default), and the <code>SODA_APP</code> role. After creation, you should <strong>enable REST</strong> as shown below. This will allow the API to work on that particular schema.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="146" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_enable_REST-1024x146.png" alt="" class="wp-image-38513" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_enable_REST-1024x146.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_enable_REST-300x43.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_enable_REST-768x109.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_enable_REST.png 1249w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Back on the <em><strong>Tool configuration</strong></em> tab of your ADB instance, you&#8217;ll find the <strong>Public access URL</strong>. Copy it, this will be your <strong>connection string</strong> when using the API.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="788" height="141" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_connection_string.png" alt="" class="wp-image-38512" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_connection_string.png 788w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_connection_string-300x54.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/20250915_oracle_api_mongodb_01_connection_string-768x137.png 768w" sizes="auto, (max-width: 788px) 100vw, 788px" /></figure>



<h4 class="wp-block-heading" id="h-connection-string-example">Connection String Example</h4>



<p class="wp-block-paragraph">For this to work, you have to replace the user and password in the connection string. For instance, if your user is called <code>USER_DB</code>, and your password is <code>userpwd</code>, then you would use this connection string (without the brackets). Make sure to escape any special character in the password when doing so (see <a href="https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/mongo-using-oracle-database-api-mongodb.html#GUID-44088366-81BF-4090-A5CF-09E56BB2ACAB">documentation</a>).</p>



<pre class="wp-block-code"><code>mongodb://<strong>user_db:userpwd</strong>@A49E7CHE9B320E6-PCCVX8PAE2NZPVBQ.adb.eu-zurich-1.oraclecloudapps.com:27017/<strong>user_db</strong>?authMechanism=PLAIN&amp;authSource=$external&amp;ssl=true&amp;retryWrites=false&amp;loadBalanced=true'</code></pre>



<p class="wp-block-paragraph">Use this connection string with <code>mongosh</code> or any tool provided by MongoDB. With <code>mongosh</code>, you would connect with this command :</p>



<pre class="wp-block-code"><code>mongosh 'mongodb://user_db:userpwd@A49E7CHE9B320E6-PCCVX8PAE2NZPVBQ.adb.eu-zurich-1.oraclecloudapps.com:27017/adb_admin?authMechanism=PLAIN&amp;authSource=$external&amp;ssl=true&amp;retryWrites=false&amp;loadBalanced=true'</code></pre>



<p class="wp-block-paragraph">You are now connected to the Oracle ADB instance through the <code>mongosh</code> utility.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-viewing-oracle-tables-with-the-api">Viewing Oracle tables with the API</h2>



<p class="wp-block-paragraph">If you connect to an existing schema with tables, you will notice that running <code>show collections</code> (or <code>show tables</code>) doesn&#8217;t return anything. In Oracle 19c, only collections/tables created through the API appear in this list. Standard tables create with a <code>CREATE TABLE</code> SQL statement won&#8217;t be displayed.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-included-and-excluded-features-in-the-api">Included and excluded features in the API</h2>



<p class="wp-block-paragraph">Once connected, you can query the different databases (schemas, in Oracle terms) of your instance. However, unlike in MongoDB, <strong>you can&#8217;t administer the instance</strong> through <code>mongosh</code>.</p>



<p class="wp-block-paragraph">You can look at the <a href="https://docs.oracle.com/en/database/oracle/mongodb-api/mgapi/support-mongodb-apis-operations-and-data-types-reference.html#GUID-B3751279-CA07-4809-BB84-78F09A76CAD9">documentation</a> to check the features included in the API, but here is an extract of the most notable changes :</p>



<ul class="wp-block-list">
<li>All the most basic <strong>aggregated pipelines</strong> are available in the API, but more complex ones like <code>$currentOp</code> or <code>$merge</code> are not yet supported.</li>



<li>Other aggregation operators, like <code>$bucket</code>, <code>$documents</code> or <code>$sample</code> are only available <strong>starting with Oracle 23ai</strong>.</li>



<li><code>db.dropDatabase()</code> doesn&#8217;t drop the Oracle schema. In fact, it doesn&#8217;t even deletes everything in the schema. It only deletes all <em>real</em> collections inside of it. So if you have a traditional table that is not a considered as a collection (not shown in <code>show collections</code>), it will not be deleted by this command.</li>
</ul>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-troubleshooting-mongoservererror-database-connection-unavailable">Troubleshooting <code>MongoServerError: Database connection unavailable</code></h2>



<p class="wp-block-paragraph">You might encounter the following error :</p>



<pre class="wp-block-code"><code>MongoServerError: Database connection unavailable.&nbsp;Ensure that the user exists and the schema is enabled for use with Oracle REST Data Services. A schema can be enabled by calling the PL/SQL procedure ORDS.ENABLE_SCHEMA</code></pre>



<p class="wp-block-paragraph">If you see this message, you can either follow the procedure or remember to enable REST directly on the OCI <strong><em>Database Actions</em></strong> panel, as shown above.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">In short, <strong>Oracle&#8217;s MongoDB API</strong> provides an interesting bridge between the relational and document worlds. Even though some MongoDB features are supported yet, the API offers a straightforward way to connect MongoDB and Oracle Autonomous Database. It makes it <strong>ideal for testing, for migration or even for hybrid setups</strong>. For developers used to MQL, it can significantly ease the transition to Oracle&#8217;s ecosystem.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/using-oracle-api-for-mongodb-on-oci/">Using Oracle API for MongoDB on OCI</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/using-oracle-api-for-mongodb-on-oci/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Creating&#038;Refreshing a refreshable PDB (from a Standby Database)</title>
		<link>https://www.dbi-services.com/blog/creatingrefreshing-a-refreshable-pdb-from-a-standby-database/</link>
					<comments>https://www.dbi-services.com/blog/creatingrefreshing-a-refreshable-pdb-from-a-standby-database/#respond</comments>
		
		<dc:creator><![CDATA[Jérôme Witt]]></dc:creator>
		<pubDate>Mon, 18 Aug 2025 19:07:57 +0000</pubDate>
				<category><![CDATA[ExaCC]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Data Guard]]></category>
		<category><![CDATA[multitenant]]></category>
		<category><![CDATA[PDB]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=40084</guid>

					<description><![CDATA[<p>I&#8217;m used to work with refreshable clones in several Oracle multitenant environments. However, due to the amount of Archived Redo Log generated we never really tried to offload the the &#8220;refresh&#8221; process on the Active Data Guard Standby database. Let&#8217;s quickly check what is required to achieve this together. What is required to create a [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/creatingrefreshing-a-refreshable-pdb-from-a-standby-database/">Creating&amp;Refreshing a refreshable PDB (from a Standby Database)</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&#8217;m used to work with refreshable clones in several Oracle multitenant environments. However, due to the amount of Archived Redo Log generated we never really tried to offload the the &#8220;refresh&#8221; process on the Active Data Guard Standby database.</p>



<p class="wp-block-paragraph">Let&#8217;s quickly check what is required to achieve this together.</p>



<h2 class="wp-block-heading" id="h-what-is-required-to-create-a-refreshable">What is required to create a refreshable  ?</h2>



<p class="wp-block-paragraph">Well, to create a remote (refreshable) clone you need at least a database link (whatever you are cloning from a single instance, Oracle RAC and/or Oracle Data Guard standby database). ideally, created though an isolated database user with appropriate CREATE SESSION and CREATE PLUGGABLE DATABASE system privileges.</p>



<p class="wp-block-paragraph">To be more precise until Oracle RDBMS 19.27 a PUBLIC database link was even required because of</p>



<pre class="wp-block-verse">Bug 34723488&nbsp;&nbsp;PDB REFRESH USING A NON-PUBLIC DB LINK FAILING WITH ERROR "ORA-04054"<br></pre>



<p class="wp-block-paragraph">Before you, ask &#8230; Yes, the database link is required even if you clone locally within the same container (formerly called a loopback database link) but this is not the subject for today&#8217;s post 🙂</p>



<h2 class="wp-block-heading" id="h-how-to-provision-a-refreshable-clone-from-standby">How to provision a (refreshable) clone  from standby?</h2>



<p class="wp-block-paragraph">This post does not replace the Oracle manuals! But tries to summarize some challenges we faced over the past years with this Oracle features. <br>Please refer to <a href="https://www.dbi-services.com/blog/managing-refreshable-clone-pluggable-databases-with-oracle-21c/">https://www.dbi-services.com/blog/managing-refreshable-clone-pluggable-databases-with-oracle-21c/</a> for for conceptual details about the refreshable clone feature.<br><br>Provisioning (or refreshing) a refreshable clone from a single-instance, RAC works out-of-the-box as long as you run it from primary database. However, when started on a standby it fails:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
CREATE PLUGGABLE DATABASE PDB_TMR_001P FROM PDB_APP_001P@&quot;CDB999_19e1298295ca4e68460d28d0cc00304a@CDB999_SITE2&quot;
KEYSTORE IDENTIFIED BY &quot;…#secret#...&quot; INCLUDING SHARED KEY
PARALLEL 8
SERVICE_NAME_CONVERT=(&#039;PDB_APP_001P&#039;,&#039;PDB_TMR_001P&#039;)
REFRESH MODE MANUAL
STANDBYS=NONE&quot;
 
PY-4011: the database or network closed the connection
ORA-00600: internal error code, arguments: &#x5B;kcffo_init_df_hdr:badfuzzysrcfile], &#x5B;262], &#x5B;6010], &#x5B;], &#x5B;], &#x5B;], &#x5B;], &#x5B;], &#x5B;], &#x5B;], &#x5B;], &#x5B;]
</pre></div>


<p class="wp-block-paragraph"><br>According, to Oracle support we are trying to clone while an &#8220;hot backup&#8221; is running as explained by following article:</p>



<pre class="wp-block-verse">ORA-00600 [kcffo_init_df_hdr:badfuzzysrcfile] On Create Pluggable Database (Doc ID 2878586.1)</pre>



<p class="wp-block-paragraph">As we are cloning from an Oracle Data Guard Active standby, with ongoing recovery process all our database files are &#8220;FUZZY&#8221; except PDB$SEED as of it&#8217;s &#8220;immutable&#8221; state which correlates with the ORA-00600 first argument.</p>



<p class="wp-block-paragraph">This can be verified through Oracle data dictionary dynamic performance view V$DATAFILE_HEADER:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
SQL&gt; SELECT database_role, open_mode FROM v$database;

DATABASE_ROLE		             OPEN_MODE
------------------------------ ------------------------------
PHYSICAL STANDBY	             READ ONLY WITH APPLY

SQL&gt; SELECT con_id, fuzzy, checkpoint_change# FROM v$datafile_header;


    CON_ID FUZZY      CHECKPOINT_CHANGE#
---------- ---------- ------------------
         1 YES                   39212441
         1 YES                   39212441
         1 YES                   39212441
         1 YES                   39212441
         2 NO                    1683111
         2 NO                    1683111
         2 NO                    1683111
         3 YES                   39212441
         3 YES                   39212441
         3 YES                   39212441
         3 YES                   39212441
         3 YES                   39212441
         3 YES                   39212441

</pre></div>


<p class="wp-block-paragraph"><br>So. let&#8217;s try to cancel the recovery process using Data Groker command &#8220;SET STATE&#8221; </p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
EDIT DATABASE &#039;CDB999_SITE2&quot; SET STATE=&#039;APPLY-OFF&#039;
</pre></div>


<p class="wp-block-paragraph">Cancelling recovery process, leaves the database files in a consistent state  </p>



<p class="wp-block-paragraph"></p>



<pre class="wp-block-code"><code>2025-08-18T09:20:46.148023+00:00
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL
2025-08-18T09:20:46.149836+00:00
PR00 (PID:90495): MRP0: Background Media Recovery cancelled with status 16037
2025-08-18T09:20:46.149938+00:00
Errors in file /u01/app/oracle/diag/rdbms/cdb999_site/CDB999/trace/CDB999_pr00_90495.trc:
ORA-16037: user requested cancel of managed recovery operation
PR00 (PID:90495): Managed Standby Recovery not using Real Time Apply
Recovery interrupted!
Recovered data files to a consistent state at change 39213769
Stopping change tracking
2025-08-18T09:20:46.290601+00:00
Errors in file /u01/app/oracle/diag/rdbms/cdb999_site/CDB999/trace/CDB999_pr00_90495.trc:
ORA-16037: user requested cancel of managed recovery operation
2025-08-18T09:20:47.406889+00:00
Background Media Recovery process shutdown (CDB999)
2025-08-18T09:20:48.151897+00:00
Managed Standby Recovery Canceled (CDB999)
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL</code></pre>



<p class="wp-block-paragraph">From now on, the database files are consistent as visible in V$DATAFILE_HEADER</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
SQL&amp;gt; SELECT con_id, fuzzy, checkpoint_change# FROM v$datafile_header;

    CON_ID FUZZY      CHECKPOINT_CHANGE#
---------- ---------- ------------------
         1 NO                   39213769
         1 NO                   39213769
         1 NO                   39213769
         1 NO                   39213769
         2 NO                    1683111
         2 NO                    1683111
         2 NO                    1683111
         3 NO                   39213769
         3 NO                   39213769
         3 NO                   39213769
         3 NO                   39213769
         3 NO                   39213769
         3 NO                   39213769
</pre></div>


<p class="wp-block-paragraph">As per the attached evidences the database datafiles are consitent as of Oracle System Change Number 39213769 (alert*log &#8220;Recovered data files to a consistent state at change 39213769&#8221;) which matches (V$DATAFILE_HEADER.CHECKPOINT_CHANGE#)</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">From now on, any cloning tentative to provision a fresh clone from Oracle Data Guard Active standby database works. However, it requires comprehensive measures to disable and re-active recovery process.</p>



<p class="wp-block-paragraph">As alternative; Daniel Overby Hansen proposes to convert the standby database to a snapshot standby. but this may not work to start a refresh at later stage (not tested).</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-databases-are-fun wp-block-embed-databases-are-fun"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="QuxaG0QJeg"><a href="https://dohdatabase.com/2025/04/17/using-refreshable-clone-pdbs-from-a-standby-database/">Using Refreshable Clone PDBs from a Standby&nbsp;Database</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Using Refreshable Clone PDBs from a Standby&nbsp;Database&#8221; &#8212; Databases Are Fun" src="https://dohdatabase.com/2025/04/17/using-refreshable-clone-pdbs-from-a-standby-database/embed/#?secret=Gq8XM12svM#?secret=QuxaG0QJeg" data-secret="QuxaG0QJeg" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-how-to-refresh-the-refreshable-clone">How to refresh the refreshable clone ? </h2>



<p class="wp-block-paragraph">Well, same story as for provision a clone from standby, except that the error message is a bit more silly</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
ALTER PLUGGABLE DATABASE RCLON_TMR_002I REFRESH

ORA-65345: cannot refresh pluggable database
</pre></div>


<p class="wp-block-paragraph">Alert*log snipped records recovery attempt but not &#8220;real error&#8221; message to identify the root cause:</p>



<pre class="wp-block-code"><code>Pluggable database PDB_TMR_001P closed
2025-08-18T10:01:20.246104+00:00
Applying media recovery for pdb-4099 from SCN 39285930 to SCN 39286036
Remote log information: count-1
thr-1,seq-294,logfile-+RECO/CDB999_SITE2/ARCHIVELOG/2025_08_18/thread_1_seq_294.396.1209463231,los-39285484,nxs-39285931,maxblks-9107
PDB_TMR_001P(18):Media Recovery Start
2025-08-18T10:01:20.249993+00:00
PDB_TMR_001P(18):Serial Media Recovery started
PDB_TMR_001P(18):max_pdb is 27
2025-08-18T10:01:20.341597+00:00
PDB_TMR_001P(18):Media Recovery Log +RECO/CDB999_SITE2/ARCHIVELOG/2025_08_18/thread_1_seq_294.396.1209463231
2025-08-18T10:01:20.638622+00:00</code></pre>



<p class="wp-block-paragraph">Actually, it took me a while to understand that the requested recovery SCN 39286036 (line &#8220;Applying media recovery for pdb-4099 from SCN 39285930 to SCN&#8221; ) was not available on standby database.<br>Indeed, Oracle expects to get this transaction &#8220;already&#8221; on the standby archived redo log.</p>



<p class="wp-block-paragraph">This can be easily reproduced on a LAB by querying V$ARCHIVED_LOG on the as follows:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
SELECT sequence#, first_change#, next_change# 
  FROM v$archived_log 
WHERE &amp;scn BETWEEN first_change# AND next_change#
     AND standby_dest=&#039;NO&#039;;
</pre></div>


<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">So, we can&#8217;t start an &#8220;ALTER PLUGGABLE DATABSE &lt;PDB_NAME&gt; REFRESH&#8221; from Oracle Active Data Guard standby database as of Oracle database piggy backing feature and lazzy checkpoints :=). <br>Indeed, Oracle has no feature to force a log switch on primary while being connected to standby site.<br><br><span style="text-decoration: underline">Workarround</span>: Force log switch on Oracle Active Data Guard primary database:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
ALTER SYSTEM ARCHIVE LOG CURRENT

</pre></div>


<h2 class="wp-block-heading" id="h-wrap-up">Wrap-up</h2>



<p class="wp-block-paragraph">Well, after all Oracle documented the behavior 🙂 IMHO, this issue deserved more than 3 lines in a Oracle support article:</p>



<pre class="wp-block-verse">Force log switch to Avoid ORA-65345 When Refreshing PDB Sourced From Active Data Guard Standby (Doc ID 2765472.1)</pre>



<p class="wp-block-paragraph">Oracle is working on an enhancement request to &#8220;fix&#8221; that</p>



<pre class="wp-block-verse">"32709955 - NEED TO REFRESH THE REFRESHABLE PDB FROM THE PHYSICAL STANDBY"</pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Last one but not least, the current functionality with aforementioned workaround appplied is only viable as long as you do not require the &#8220;auto-refresh&#8221; feature. Indeed, who wants to disable Oracle Data Guard broker LogApply/recovery process, force a log switch on primary database and manage to get the monitoring in-line ?  </p>
<p>L’article <a href="https://www.dbi-services.com/blog/creatingrefreshing-a-refreshable-pdb-from-a-standby-database/">Creating&amp;Refreshing a refreshable PDB (from a Standby Database)</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/creatingrefreshing-a-refreshable-pdb-from-a-standby-database/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExaCC/CS: modify database parameters in batch mode using dbaascli</title>
		<link>https://www.dbi-services.com/blog/exacc-cs-modify-database-parameters-in-batch-mode-using-dbaascli/</link>
					<comments>https://www.dbi-services.com/blog/exacc-cs-modify-database-parameters-in-batch-mode-using-dbaascli/#respond</comments>
		
		<dc:creator><![CDATA[Jérôme Witt]]></dc:creator>
		<pubDate>Tue, 03 Jun 2025 20:41:36 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[ExaCC]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[dbaascli]]></category>
		<category><![CDATA[exacc]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=39018</guid>

					<description><![CDATA[<p>This post briefly describes how to use a JSON responseFIle to modify (container) database parameters on Oracle Cloud ExaCC/ExaCS service. What are our options with dbaascli? Well, we can simply go ahead and apply single changes one by one. What a lucky test, we just set a single hidden parameter without any database restart. But [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exacc-cs-modify-database-parameters-in-batch-mode-using-dbaascli/">ExaCC/CS: modify database parameters in batch mode using dbaascli</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">This post briefly describes how to use a JSON responseFIle to modify (container) database parameters on Oracle Cloud ExaCC/ExaCS service.</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-what-are-our-options-with-dbaascli">What are our options with dbaascli? </h2>



<p class="wp-block-paragraph">Well, we can simply go ahead and apply single changes one by one.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
time sudo dbaascli database modifyParameters --dbname CDBZ001T  --setParameters _fix_control=&quot;23473108:off&quot;

DBAAS CLI version 25.1.2.0.0

Executing command database modifyParameters --dbname CDBZ001T --setParameters _fix_control=23473108:off&lt;br&gt;&lt;br&gt;Job id: c5f5e1ba-39b6-4ab1-a5fa-c7f1211c037a
Session log: /var/opt/oracle/log/CDBZ001T/database/modifyParameters/dbaastools_2025-06-03_09-15-44-PM_220508.log

Loading PILOT...
Session ID of the current execution is: 18947&lt;br&gt;&lt;br&gt;Log file location: /var/opt/oracle/log/CDBZ001T/database/modifyParameters/pilot_2025-06-03_09-15-48-PM_220935
-----------------
Running Plugin_Initialize job
Completed Plugin_Initialize job
-----------------
Running Validate_Parameters job
Completed Validate_Parameters job
-----------------
Running Apply_Dynamic_Parameters_Changes job
Completed Apply_Dynamic_Parameters_Changes job
-----------------
Running Apply_Static_Parameters_Changes job
Completed Apply_Static_Parameters_Changes job

dbaascli execution completed

real    0m20.481s
user    0m0.007s
sys     0m0.008s
</pre></div>


<p class="wp-block-paragraph"><br>What a lucky test, we just set a single hidden parameter without any database restart. But hold on, more then 20 seconds to run a simple ALTER SYSTEM that&#8217;s okay but not pretty fast. A database restart was even unnecessary for this testcase.<br></p>



<p class="wp-block-paragraph">Well, the best is always to check the Oracle documentation first. Especially, the section about <a href="https://docs.oracle.com/en-us/iaas/exadatacloud/doc/ecs-using-dbaascli.html#GUID-68FAA07E-588E-45C8-9144-5C413EA0B555">&#8220;dbaascli database modifyParameters&#8221;</a></p>



<pre class="wp-block-code"><code>dbaascli database modifyParameters --dbname &lt;value&gt; --setParameters &lt;values&gt;| --resetParameters &lt;values&gt; | <strong>--responseFile</strong>
&#091;--backupPrepared]
&#091;--instance]
&#091;--allowBounce]

<strong>--responseFile</strong> specifies the absolute location of the response JSON file to modify the database parameters 

</code></pre>



<p class="wp-block-paragraph">We Oracle DBA folk do certainly understand what is meant when there is a mention about a responseFile 🙂 </p>



<h2 class="wp-block-heading" id="h-where-is-the-reponsefile-option-gone">Where is the &#8211;reponseFile option gone? </h2>



<p class="wp-block-paragraph">Well, at the time of writing this article we are using the latest Oracle CloudToolings version available (RPM: dbaastools_exa-1.0-25.1.2.0.0_250505.1725.x86_64) but the option isn&#8217;t referenced in the command-line synoposis</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# dbaascli database modifyParameters --help
DBAAS CLI version 25.1.2.0.0
Executing command database modifyParameters --help
    database modifyParameters - modifies or resets initialization parameters for a given Oracle database.

      Usage: dbaascli database modifyParameters --dbname &lt;value&gt;
        {
            --setParameters &lt;value&gt; &#x5B;--instance &lt;value&gt;] &#x5B;--backupPrepared] &#x5B;--allowBounce]
            | --resetParameters &lt;value&gt; &#x5B;--instance &lt;value&gt;] &#x5B;--backupPrepared] &#x5B;--allowBounce]
        }
        &#x5B;--waitForCompletion &lt;value&gt;]

      Where:
        --dbname - Oracle database name.
        --setParameters | --resetParameters
        --setParameters - comma separated list of parameters to be modified with new values. For blank values use &#039;&#039;. E.g. parameter1=valueA,parameter2=&#039;&#039;,etc.
            &#x5B;--instance - name of the instance on which the parameters will be processed. If not specified, the operation will be performed at the database level.]
            &#x5B;--backupPrepared - flag to acknowledge that a proper database backup is in place prior to modifying critical or sensitive parameters.]
            &#x5B;--allowBounce - flag to grant permission to bounce the database in order to reflect the changes on applicable static parameters.]
        --resetParameters - comma separated list of parameters to be reset to their corresponding default values. E.g. parameter1,parameter2,etc.
            &#x5B;--instance - name of the instance on which the parameters will be processed. If not specified, the operation will be performed at the database level.]
            &#x5B;--backupPrepared - flag to acknowledge that a proper database backup is in place prior to modifying critical or sensitive parameters.]
            &#x5B;--allowBounce - flag to grant permission to bounce the database in order to reflect the changes on applicable static parameters.]
        &#x5B;--waitForCompletion - specifies false to run the operation in background. Valid values : true|false.]

</pre></div>


<h2 class="wp-block-heading" id="h-how-to-use-the-json-file">How to use the JSON file?</h2>



<p class="wp-block-paragraph">Well, here due to the inaccurate information and misleading Synopsis we had to strike back with Oracle support. Indeed, How shall the JSON being formatted ? Which combination are required to &#8220;&#8211;setParameters&#8221; or &#8220;&#8211;resetParameters&#8221; a parameter.</p>



<p class="wp-block-paragraph">Finally, after some internal research the Oracle support came back (after a while) with the expected JSON format</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
{
&quot;setParameters&quot;:&quot;param1=value,param2=value,param3=value&quot;
}
</pre></div>


<p class="wp-block-paragraph">Sounds pretty logic if you omit all information from Oracle documenation and &#8220;dbaascli database modifyParameters&#8221; command synopsis.</p>



<h2 class="wp-block-heading" id="h-dbaascli-option-allowbounce">dbaascli option &#8220;&#8211;allowBounce&#8221;</h2>



<p class="wp-block-paragraph">Changing sequentially static database parameters and restarting the  the container database may drastically increase the configuration of (container) database depending on the amount of parameters to modify.<br><br>As such, the combination between the dbaascli &#8220;&#8211;responseFile&#8221; and &#8211;allowBounce&#8221; is an excellent comprise to apply them all at once (batch processing).</p>



<p class="wp-block-paragraph">And indeed, Oracle executes in background an &#8220;ALTER SYSTEM &#8230; SCOPE=SPFILE&#8221; for all static parameters which requires are database restart. Of course, the restart occurs only once.</p>



<h2 class="wp-block-heading" id="h-are-we-obligated-to-use-dbaascli">Are we obligated to use dbaascli ? </h2>



<p class="wp-block-paragraph">Luckily not, but they are a lot of automation running in background. For instance, if you do not the by yourself the Oracle System Global Area (aka. SGA) anytime you reshape the VMcluster memory, the Oracle SGA will be implicitly reshaped too. </p>



<p class="wp-block-paragraph">You can check all of them by using following command</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
# sudo dbaascli database getDetails --dbname CDBZ001T

&lt;snipped truncated for readability&gt;
  &quot;dbName&quot; : &quot;CDBZ001T&quot;,
  &quot;dbUniqueName&quot; : &quot;CDBZ001T_SITE2&quot;,
  &quot;dbDomain&quot; : &quot;jewlab.ch&quot;,
  &quot;dbId&quot; : 3776747013,
  &quot;cpuCount&quot; : 12,
  &quot;sgaTarget&quot; : &quot;8192MB&quot;,
  &quot;pgaAggregateTarget&quot; : &quot;5000MB&quot;,
  &quot;dbSize&quot; : &quot;7141GB&quot;,

&lt;snipped truncated for readability&gt;
</pre></div>


<p class="wp-block-paragraph">Knowing, this you may think about some basic configuration-as-code techniques to manage database parameters.</p>



<h2 class="wp-block-heading" id="h-wrap-up-amp-caveats">Wrap-up &amp; Caveats</h2>



<p class="wp-block-paragraph">Using JSON  to manage database parameters is quite cool as it can be the starting to point for any kind of configuration as code and even enable documentation-as-code techniques. </p>



<p class="wp-block-paragraph">Imagine maintaining all your database parameters over a simple YAML file.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: yaml; title: ; notranslate">
  - name: &quot;db_files&quot;
    value: &quot;8192&quot;
    bounce_db: true
    description: &quot;Oracle Bug 33888381 - ORA-1152 after Flashback Pluggable Database (Doc ID 33888381.8)&quot;
</pre></div>


<p class="wp-block-paragraph">As usual, we have always exceptions with Oracle 😉 </p>



<ul class="wp-block-list">
<li>dbaascli expect a list of comma separated parameters. <br><br><code>--setParameters</code> specifies a comma-delimited list of parameters to modify with new values. For example: <code>parameter1=valueA</code>,<code>parameter2=valueB</code>, and so on. For blank values use parameter1=valueA,parameter2=&#8221;,etc.<br><br>As such,  you can&#8217;t apply with dbaascli parameter with multiple values such as hidden parameter &#8220;_fix_control&#8221;, but this applies to parameters like event, db_file_name_convert, aso &#8230;<br></li>



<li> dbaascli can&#8217;t apply multiple times the same modification at least for parameter db_domain it fails (all the other we tested ran fine)<br><br>Running Validate_Parameters job<br>Execution of Validate_Parameters failed<br>[FATAL] [DBAAS-70154] The modification of the following parameter is not allowed: db_domain.<br>   ACTION: Verify the requested parameter and try again.<br>*** Executing jobs which need to be run always&#8230; ***<br><br></li>
</ul>



<p class="wp-block-paragraph">Enjoy!</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/exacc-cs-modify-database-parameters-in-batch-mode-using-dbaascli/">ExaCC/CS: modify database parameters in batch mode using dbaascli</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/exacc-cs-modify-database-parameters-in-batch-mode-using-dbaascli/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Optimize materialization of Exadata PDB sparse clones</title>
		<link>https://www.dbi-services.com/blog/optimize-materialization-of-exadata-pdb-sparse-clones/</link>
					<comments>https://www.dbi-services.com/blog/optimize-materialization-of-exadata-pdb-sparse-clones/#respond</comments>
		
		<dc:creator><![CDATA[Jérôme Witt]]></dc:creator>
		<pubDate>Mon, 26 May 2025 20:25:59 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Database management]]></category>
		<category><![CDATA[ExaCC]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[cx_oracle]]></category>
		<category><![CDATA[exa@cc]]></category>
		<category><![CDATA[multitenant]]></category>
		<category><![CDATA[PDB]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38959</guid>

					<description><![CDATA[<p>Well, this blog is unfortunately reserved to DBA folk running Oracle engineered systems #Exadata, #ExaCC, #ExaCS and Oracle Multitenant database (aka. CDB) architecture. One of our #ExaCC customer has a strong DevOps focused business and heavily relies on Exadata sparse clones to quickly provision &#8220;lightweight&#8221; database clones for their development teams. As part of the [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/optimize-materialization-of-exadata-pdb-sparse-clones/">Optimize materialization of Exadata PDB sparse clones</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">Well, this blog is unfortunately reserved to DBA folk running Oracle engineered systems #Exadata, #ExaCC, #ExaCS and Oracle Multitenant database (aka. CDB) architecture.<br><br>One of our #ExaCC customer has a strong DevOps focused business and heavily relies on Exadata sparse clones to quickly provision &#8220;lightweight&#8221; database clones for their development teams. <br><br>As part of the move of an mission critical application to #ExaCC we enhanced our spare PDB materialization scripts.<br></p>



<h2 class="wp-block-heading" id="h-what-s-wrong-with-the-materialization">What&#8217;s wrong with the Materialization?</h2>



<p class="wp-block-paragraph">At a first look, nothing! it&#8217;s a straightforward command as easy as creating a PDB using &#8220;CREATE PLUGGABLE DATABASE .. FROM &#8230;&#8221;. Except that it takes time&#8230;<br><br>below some &#8220;fun facts&#8221;:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>PDB size</td><td>8TB (about 2500 datafiles)</td></tr><tr><td>Provisioning of a sparse clone runtime<br>(locally &#8211; same CDB // DOP = 8)</td><td>15mins</td></tr><tr><td>Provisioning of a full clone runtime<br>(locally &#8211; same CDB // DOP = 8)</td><td>&gt;3.5 hours</td></tr><tr><td>Materialization of sparse clone runtime<br>(DB_CREATE_FILE_DEST = &lt;sparse diskgroup&gt;)</td><td>&gt;20hours</td></tr><tr><td>Materialization of sparse clone runtime<br>(DB_CREATE_FILE_DEST = &lt;data diskgroup&gt;)</td><td>&gt; 6hours</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Indeed, we have set a &#8220;fixed&#8221; degree of parallelism to &#8220;constraint&#8221; the resources (CPU, IO) used by all kind of cloning activities.<br> <br>Nevertheless, the &#8220;ALTER PLUGGABLE DATABASE MATERIALIZE&#8221; is at least 5 times slower compared to the creation of a full PDB clone when copying all database block onto SPARSE diskgroup.<br></p>



<h2 class="wp-block-heading" id="h-why-does-it-take-so-much-time">Why does it take so much time?</h2>



<p class="wp-block-paragraph">A simple check in the database alert*log provides some insights:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
2025-05-25T09:02:46.980450+02:00

Moving datafile +SPRC4/AVQD001T_SITE1/35F11D075E0FB991E0631A1FA10A6291/DATAFILE/data_000014750.2483.1202028085 (2967) to +DATAC4
</pre></div>


<p class="wp-block-paragraph">Indeed, we get flooded by &#8220;ALTER DATABASE MOVE DATAFILE&#8221;  commands.  A quick session tracing activity confirmed that Oracle performs sequentially online database move operations. Last one but not least, this operations runs all database server (VMcluster node).</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
*** 2025-05-22T21:22:52.961911+02:00 (CDB$ROOT(1))

Moving datafile +SPRC4/AVQD001T_SITE1/360EA26B7CE6F135E0631A1FA10A00C8/DATAFILE/data_000011575.2664.1202154873 (6656) to +DATAC4

kcffo_mv_prepare: the secondary file +DATAC4/AVQD001T_SITE1/360EA26B7CE6F135E0631A1FA10A00C8/DATAFILE/data_000011575.2015.1202162415 is created with size 216

kcffo_mv_domove: Blocks copied for file +DATAC4/AVQD001T_SITE1/360EA26B7CE6F135E0631A1FA10A00C8/DATAFILE/data_000011575.2015.1202162415 size 216

Move operation committed for file +DATAC4/AVQD001T_SITE1/360EA26B7CE6F135E0631A1FA10A00C8/DATAFILE/data_000011575.2015.1202162415

</pre></div>


<h2 class="wp-block-heading" id="h-are-we-able-to-monitor-the-materialize-process">Are we able to monitor the &#8220;materialize&#8221; process ?</h2>



<p class="wp-block-paragraph">Yes, of course as usual operations which last for more than 6 seconds we can query GV$SESSION_LONGOPS:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
&gt; SELECT sid, serial#, opname, sofar, totalwork,
                 ROUND(sofar/totalwork*100,2) PCT_COMPLETE
     FROM   V$SESSION_LONGOPS
   WHERE TOTALWORK != 0
        AND    SOFAR != TOTALWORK
 ORDER BY 1

      SID   SERIAL# OPNAME                                               SOFAR     TOTALWORK   PCT_COMPLETE
------- ---------- ---------------------------- ----------------- ----------------- -----------------
   2228      30474  Online data file move                  4796186624       8615100416                    55.67

1 row selected.
</pre></div>


<h2 class="wp-block-heading" id="h-can-we-parallelize-alter-pluggable-database-process">Can we parallelize &#8220;ALTER PLUGGABLE DATABASE&#8221; process?</h2>



<p class="wp-block-paragraph">Actually, IMHO Oracle shall provide through any kind of &#8220;magic&#8221; parameters. Unfortunately, researches on <a href="https://oradiff.oracle.com">https://oradiff.oracle.com</a> as of Oracle 19.27 were unfruitful.</p>



<p class="wp-block-paragraph">Luckily, we did all scripting with #python using #cx_oracle driver and such quickly develop the necessary function to iterate over all pluggable database datafiles using parallel task execution with <a href="https://docs.python.org/3/library/concurrent.futures.html">conurrent.futures</a> module.<br></p>



<p class="wp-block-paragraph">The optimized process using 8 database sessions, all moving database files in parallel was worth;  The runtime for materializing the sparse clone is equal (or even less) to the time required to create a full PDB clone.</p>



<h2 class="wp-block-heading" id="h-wrap-up">Wrap-up</h2>



<p class="wp-block-paragraph">For those, who already are confident with Exadata sparse clone (&amp; Exadata sparse ASM diskgroup) you might have spotted the we moved the database into the DATA diskgroup. This can be achieved by setting DB_CREATE_FILE_DEST parameter at pluggable database level before starting to materialize the datafiles. So, Materializing the PDB sparse cloning into DATA diskgroup is only 2 times slower compared to copying all blocks to SPARSE diskgroup.</p>



<p class="wp-block-paragraph"><br>Oracle Exadata Exascale &amp; Oracle 23ai will definitively bring more flexibility to Exadata PDB sparse clones, at least the known limitations for Oracle19c will be from the past as communicated by Oracle.<br>However, the whole materialization remains uncovered so far.<br><br>At the time of writing this post the Oracle &#8220;Cloud&#8221; support team has been informed.<br><br>Last one but not least, from time to time we need to cleanup some leftovers from ASM sparse diskgroup (subject to another Oracle Service request).</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
2025-05-25T09:02:35.623108+02:00
WARNING: Cannot delete old file +SPRC4/AVQD001T_SITE1/35F11D075E0FB991E0631A1FA10A6291/DATAFILE/data_000014770.1000.1202028085 left after datafile move
2025-05-25T09:02:35.623248+02:00
Errors in file /u02/app/oracle/diag/rdbms/avqd001t_site1/AVQD001T1/trace/AVQD001T1_ora_203496.trc:

ORA-15028: Oracle Automatic Storage Management (Oracle ASM) file &#039;+SPRC4/AVQD001T_SITE1/35F11D075E0FB991E0631A1FA10A6291/DATAFILE/data_000014770.1000.1202028085&#039; not dropped; currently being accessed
</pre></div>


<p class="wp-block-paragraph">Keep you posted!</p>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/optimize-materialization-of-exadata-pdb-sparse-clones/">Optimize materialization of Exadata PDB sparse clones</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/optimize-materialization-of-exadata-pdb-sparse-clones/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>YaK Core – The Holy Grail for Deploying Ansible Code Everywhere</title>
		<link>https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/</link>
					<comments>https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/#respond</comments>
		
		<dc:creator><![CDATA[Hervé Schweitzer]]></dc:creator>
		<pubDate>Tue, 29 Apr 2025 13:52:46 +0000</pubDate>
				<category><![CDATA[Ansible]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[Azure]]></category>
		<category><![CDATA[Database management]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[YaK]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38158</guid>

					<description><![CDATA[<p>YaK core Multi-Platform open source Automation Tool simplifies the deployment of Ansible playbooks through a clean UI and API. It offers an intuitive interface where users can upload playbooks, configure parameters, and deploy them seamlessly across various platforms, and all managed through a centralized inventory stored in a PostgreSQL database. With YaK Core, developers can [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/">YaK Core – The Holy Grail for Deploying Ansible Code Everywhere</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="510" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-1024x510.png" alt="" class="wp-image-38228" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-1024x510.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-300x149.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1-768x383.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/yak-core-open-source-multi-platform-1.png 1134w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="has-medium-font-size wp-block-paragraph"><strong>YaK core Multi-Platform open source Automation Tool </strong>simplifies the deployment of Ansible playbooks through a clean UI and API. It offers an intuitive interface where users can upload playbooks, configure parameters, and deploy them seamlessly across various platforms, and all managed through a centralized inventory stored in a PostgreSQL database. With YaK Core, developers can focus on writing application code without worrying about infrastructure setup or management.</p>



<p class="has-medium-font-size wp-block-paragraph"><strong>YaK</strong> consists of two parts: <strong>YaK Core</strong>, which is open source, and <strong>YaK Components</strong>, which can be installed on top. These <strong>YaK Components </strong>are platform-agnostic service packages (e.g., PostgreSQL, Oracle DB, MongoDB, Kubernetes, etc.), written in Ansible by experts. They provide essential operational features such as backup, patching, upgrades, and high availability. If you&#8217;d like to learn more about the available YaK components, feel free to <a href="https://yak4all.io/contact">contact us!</a></p>



<p class="has-medium-font-size wp-block-paragraph">But that’s not all. <strong>YaK Core </strong>also lets you create your own <strong>YaK Components</strong> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" />. Once created, your component becomes immediately available for deployment across all platforms supported by YaK Core.</p>



<p class="has-medium-font-size wp-block-paragraph">In this blog, I’ll show you how easy it is to create your own <strong>YaK Component</strong> using Ansible, upload it to <strong>YaK Core</strong>, and deploy it across any supported platform.</p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-yak-demo-platform-provisioning">YaK Demo platform provisioning</h2>



<p class="wp-block-paragraph">To get started with YaK Core Multi-Platform open source solution, visit <a class="" href="https://yak4all.io">https://</a><a href="https://yak4all.io" target="_blank" rel="noreferrer noopener">yak4all</a><a class="" href="https://yak4all.io">.io</a> and provision your own YaK demo environment (take 5 minutes to be ready).</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-yak wp-block-embed-yak"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="iT6gmuzgX5"><a href="https://yak4all.io/demo/">Demo</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;Demo&#8221; &#8212; YaK" src="https://yak4all.io/demo/embed/#?secret=rhIPnL8eSE#?secret=iT6gmuzgX5" data-secret="iT6gmuzgX5" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-build-your-yak-component">Build your YaK Component</h2>



<p class="has-medium-font-size wp-block-paragraph">To build a YaK Component, you need to declare at least the following three files </p>



<p class="has-text-align-left wp-block-paragraph"><strong>     1. playbooks/create_linux_users.yml<br>     2. manifest.yml<br>     3. yak_variables_specifications/basic_variables_specifications.yml</strong></p>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-c7ffa4e866b5c2f8365c6699e09153cd" id="h-1-the-ansible-playbook" style="color:#006fb5">1. The Ansible Playbook </h3>



<p class="has-medium-font-size wp-block-paragraph"><strong>playbooks/create_linux_users.yml</strong><br>This file is simply your Ansible playbook, nothing more. The only requirement is that the code uses variables, which will be exposed in the UI for configuration. The example playbook below will create a user and optionally grant them sudo privileges.</p>



<pre class="wp-block-code"><code>---
- name: Create Linux users
  hosts: linux_hosts
  become: true
  gather_facts: true

  tasks:
    - debug:
        var: user

    - name: Create users
      ansible.builtin.user:
        name: "{{ item.username }}"
        create_home: "{{ item.create_home | default(true) }}"
        state: present
      loop: "{{ user }}"

    - name: Add users to sudoers
      community.general.sudoers:
        name: "yak-sudoer-{{ item.username }}"
        user: "{{ item.username }}"
        commands: ALL
        state: present
      loop: "{{ user }}"
      when: item.is_sudoer
        
  post_tasks:
    - name: Update component state
      delegate_to: localhost
      yak.core.yak_component_state_update:
        component_state_name: 'deployed'
...</code></pre>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-9766ac0c91f53fa89ea1455a27f3848d" id="h-2-manifest-file" style="color:#006fb5">2. Manifest file</h3>



<p class="has-medium-font-size wp-block-paragraph"><strong>manifest.yml</strong><br>This file contains the basic information about your component and specifies which playbooks can be executed.</p>



<pre class="wp-block-code"><code>name: linux_users

version:
  major: 1
  minor: 0
  patch: 0

sub_component_types:
  - display_label: Linux users
    name: create_linux_users
    features:
      - display_label: Create Linux users
        name: create_linux_users
        playbook_name: playbooks/create_linux_users.yml

    inventory_maps:
      - group_name: linux_hosts
        group_nicename: Linux hosts
        group_description: Host on which the users will be created
        group_min_hosts: 1
        group_max_hosts: 100
        type: host
        os_type: Linux</code></pre>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-4433a9419864971a558f59cbb6ad037e" id="h-3-variable-specification-file" style="color:#006fb5">3. Variable specification file</h3>



<p class="has-medium-font-size wp-block-paragraph"><strong>yak_variables_specifications/basic_variables_specifications.yml</strong><br>Now you can define and provide all the specifications for the variables you want to make configurable, with all the required settings <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<pre class="wp-block-code"><code>- variableName: user
  niceName: Users to create
  dataType: array
  children:
    - variableName: username
      niceName: Username
      dataType: string
      mandatory: true
      defaultValue: yak
      isOneOffSetting: false
      usage: Name of the user to create

    - variableName: create_home
      niceName: Create Home directory
      dataType: boolean
      mandatory: true
      defaultValue: true
      isOneOffSetting: false
      usage: Tick the box if you want to create a Home directory for the user (/home/&lt;username&gt;)

    - variableName: is_sudoer
      niceName: Grant sudo privileges
      dataType: boolean
      mandatory: true
      defaultValue: true
      isOneOffSetting: false
      usage: Tick the box if you want to grant "ALL" privileges escalation to the user</code></pre>



<p class="has-medium-font-size wp-block-paragraph">That&#8217;s it! You now have all the necessary files for your first YaK Component. Next, create a ZIP package and upload it to your deployed YaK Demo environment.</p>



<p class="has-medium-font-size wp-block-paragraph">To make things easier, I&#8217;ve created a ZIP file that you can upload directly. : <a href="https://www.swisstransfer.com/d/6db7e854-c74a-4616-be89-bc4375059161">create_linux_user.zip</a> </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1016" height="566" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48.png" alt="" class="wp-image-38208" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48.png 1016w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48-300x167.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.10.48-768x428.png 768w" sizes="auto, (max-width: 1016px) 100vw, 1016px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-setup-a-server">Setup a Server</h2>



<p class="has-medium-font-size wp-block-paragraph">For this task, simply follow the documentation below up to Step 4: <em>Deploy your server</em> <a href="https://dbi-services.gitbook.io/yak-user-doc/introduction/yak-demo">https://dbi-services.gitbook.io/yak-user-doc/introduction/yak-demo</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-declare-and-deploy-your-component">Declare and deploy your Component </h2>



<p class="has-medium-font-size wp-block-paragraph">You’re now ready to declare and deploy your component!</p>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-aec523cc5c9123a8748ed34598dfbbd4" id="h-1-declare" style="color:#006fb5">1. Declare </h3>



<p class="has-medium-font-size wp-block-paragraph"><strong>YaK UI -&gt; Components -&gt; Declare -&gt; Component_type : linux_users -&gt; Save</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="994" height="872" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47.png" alt="" class="wp-image-38209" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47.png 994w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47-300x263.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.21.47-768x674.png 768w" sizes="auto, (max-width: 994px) 100vw, 994px" /></figure>



<h3 class="wp-block-heading has-text-color has-link-color wp-elements-a421b9f745833b9dda3d46b9d7e21629" id="h-2-deploy" style="color:#006fb5">2 Deploy </h3>



<p class="has-medium-font-size wp-block-paragraph"><strong>YaK UI -&gt; Components -&gt; Select LinuxUser -&gt; Action -&gt; Create Linux User -&gt; Confirm</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="990" height="326" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48.png" alt="" class="wp-image-38212" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48.png 990w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48-300x99.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/04/Screenshot-2025-04-28-at-15.23.48-768x253.png 768w" sizes="auto, (max-width: 990px) 100vw, 990px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity" />



<h2 class="wp-block-heading has-text-align-center" id="h-conclusion">Conclusion</h2>



<p class="has-medium-font-size wp-block-paragraph">This component can now be deployed on any cloud platform or integrated on On-Premises environment using the YaK UI, and can also be deployed in parallel on up to 100 servers, as specified in your Manifest file.</p>



<p class="has-medium-font-size wp-block-paragraph">With this solution, you can provide your colleagues with an intuitive and efficient way to work with Ansible playbooks, enhancing their overall experience <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p>



<p class="has-medium-font-size wp-block-paragraph">For more Information about YaK see the blogs available here : <a href="https://www.dbi-services.com/blog/yak">https://www.dbi-services.com/blog/yak</a></p>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/">YaK Core – The Holy Grail for Deploying Ansible Code Everywhere</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/yak-core-the-holy-grail-for-deploying-ansible-code-everywhere/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>What is the most secure way to call an external job from an Oracle (pluggable) database?</title>
		<link>https://www.dbi-services.com/blog/what-is-the-most-secure-way-to-call-an-external-job-from-an-oracle-pluggable-database/</link>
					<comments>https://www.dbi-services.com/blog/what-is-the-most-secure-way-to-call-an-external-job-from-an-oracle-pluggable-database/#respond</comments>
		
		<dc:creator><![CDATA[Jérôme Witt]]></dc:creator>
		<pubDate>Sat, 15 Mar 2025 10:52:34 +0000</pubDate>
				<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[dbms_scheduler]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[multitenant]]></category>
		<category><![CDATA[reverse_engineering]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=37700</guid>

					<description><![CDATA[<p>I recently asked myself this question after having been confronted with a quite challenging situation, which will be been dissected in this post. Indeed, most of the DBA are aware about several mechanism offered by the Oracle database engine to call external programs.However, we rarely have the opportunity to get deep understanding of all of [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/what-is-the-most-secure-way-to-call-an-external-job-from-an-oracle-pluggable-database/">What is the most secure way to call an external job from an Oracle (pluggable) database?</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 asked myself this question after having been confronted with a quite challenging situation, which will be been dissected in this post. Indeed, most of the DBA are aware about several mechanism offered by the Oracle database engine to call external programs.<br>However, we rarely have the opportunity to get deep understanding of all of them due to the broad skills required.</p>



<p class="wp-block-paragraph">A couple of days ago, we have been asked a by an IT architect to have a look at some SHELL scripts &amp; C programs executed on a database server by database processes; It all began with &#8220;strange&#8221; UNIX file permissions such as:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
&#x5B;oracle@svl-oat ~]$ ls -l /opt/oracle_scripts/run_prog.sh
-rwxr-sr-x 1 oracle oinstall 68 Mar 12 19:28 /opt/oracle_scripts/run_prog.sh
</pre></div>


<p class="wp-block-paragraph">Interesting isn&#8217;t it ? SETUID &amp; SETGID have been set on the scripts to probably gain elevated privileges ? But, for which purpose? </p>



<h2 class="wp-block-heading" id="h-which-methods-do-we-have-to-start-external-jobs-from-oracle-pluggable-database">Which methods do we have to start external jobs from Oracle (pluggable) database?</h2>



<p class="wp-block-paragraph">Before moving into all the beloved technical details and reverse engineering. Let&#8217;s quickly summarize all options Oracle RBDMS offers.</p>



<h3 class="wp-block-heading" id="h-dbms-scheduler-jobs">DBMS_SCHEDULER jobs</h3>



<p class="wp-block-paragraph">According to the DBMS_SCHEDULER sub-program CREATE_JOB. Oracle supports several types for calling external programs:</p>



<figure class="wp-block-table"><table><thead><tr><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>STORED_PROCEDURE</td><td>Calling external C/C++ subprogram or Java Stored procedure</td></tr><tr><td>EXECUTABLE</td><td>Calling anything that can be executed from the command line of the operating system</td></tr><tr><td>EXTERNAL_SCRIPT</td><td>Calling an external script that uses the command shell of the computer running the job</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Please refer to the <a href="https://docs.oracle.com/en/database/oracle/oracle-database/23/arpls/DBMS_SCHEDULER.html#GUID-7E744D62-13F6-40E9-91F0-1569E6C38BBC">DBMS_SCHEDULER</a> package for details.</p>



<h2 class="wp-block-heading" id="h-java-stored-procedure">Java Stored procedure</h2>



<p class="wp-block-paragraph">Indeed, Oracle RBDMS can spawn a dedicated server process on the database server using Java stored procedure and call a SHELL script.</p>



<p class="wp-block-paragraph"><br>The following Java program source code has been merged from two different code base:</p>



<ul class="wp-block-list">
<li>https://oracle-base.com/articles/8i/shell-commands-from-plsql</li>



<li>https://innerlife.io/oracle-db-cmd-java</li>
</ul>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: java; title: ; notranslate">
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED &quot;JavaExecHostCmd&quot; AS
import java.io.*;
public
class JavaExecHostCmd {
 public
  static String executeCommand(String command) {
    String buff = null;
    String output = &quot;&quot;;
    try {
      String&#x5B;] finalCommand;
      finalCommand = new String&#x5B;3];
      finalCommand&#x5B;0] = &quot;/bin/bash&quot;;
      // finalCommand&#x5B;0] = &quot;&quot;;
      finalCommand&#x5B;1] = &quot;-c&quot;;
      finalCommand&#x5B;2] = command;

      // Execute the command...
      final Process pr = Runtime.getRuntime().exec(finalCommand);

      // Capture output from STDOUT...
      BufferedReader br_in = null;
      try {
        br_in = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        output = output + &quot;STDOUT: &quot; + &quot;\n&quot;;
        while ((buff = br_in.readLine()) != null) {
          // System.out.println(&quot;stdout: &quot; + buff);
          output = output + buff + &quot;\n&quot;;
          try {
            Thread.sleep(100);
          } catch (Exception e) {
          }
        }
        br_in.close();
      } catch (IOException ioe) {
        // System.out.println(&quot;Error printing process output.&quot;);
        output = output + &quot;Error printing process output.&quot; + &quot;\n&quot;;
        // ioe.printStackTrace();
      } finally {
        try {
          br_in.close();
        } catch (Exception ex) {
        }
      }

      // Capture output from STDERR...
      BufferedReader br_err = null;
      try {
        br_err = new BufferedReader(new InputStreamReader(pr.getErrorStream()));
        output = output + &quot;\n&quot; + &quot;STDERR: &quot; + &quot;\n&quot;;
        while ((buff = br_err.readLine()) != null) {
          // System.out.println(&quot;stderr: &quot; + buff);
          output = output + buff + &quot;\n&quot;;
          try {
            Thread.sleep(100);
          } catch (Exception e) {
          }
        }
        br_err.close();
        return output;
      } catch (IOException ioe) {
        // System.out.println(&quot;Error printing execution errors.&quot;);
        output = output + &quot;Error printing execution errors.&quot; + &quot;\n&quot;;
        // ioe.printStackTrace();
      } finally {
        try {
          br_err.close();
        } catch (Exception ex) {
        }
      }
    } catch (Exception ex) {
      output = output + ex.getLocalizedMessage() + &quot;\n&quot;;
    }
    return output;
  }
};
/
</pre></div>


<p class="wp-block-paragraph">Basically, the program executes a &#8220;/bin/bash -c &lt;Command&gt;&#8221; and returns its result.</p>



<p class="wp-block-paragraph">To interface the Java program a simple PL/SQL function is required:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
CREATE OR REPLACE FUNCTION run_shell_cmd_with_java (p_command  IN  VARCHAR2) 
   RETURN  VARCHAR2 
   AS LANGUAGE JAVA 
   NAME &#039;JavaExecHostCmd.executeCommand (java.lang.String) return String&#039;;
/
</pre></div>


<p class="wp-block-paragraph">Finally, we need to grant access to the Oracle OJVM for desired database schema:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
DECLARE
   l_schema VARCHAR2(30) := &#039;JEW&#039;; -- Adjust as required.
BEGIN
   DBMS_JAVA.grant_permission(l_schema, &#039;java.io.FilePermission&#039;, &#039;&lt;&lt;ALL FILES&gt;&gt;&#039;, &#039;read ,write, execute, delete&#039;);
   DBMS_JAVA.grant_permission(l_schema, &#039;SYS:java.lang.RuntimePermission&#039;, &#039;writeFileDescriptor&#039;, &#039;&#039;);
   DBMS_JAVA.grant_permission(l_schema, &#039;SYS:java.lang.RuntimePermission&#039;, &#039;readFileDescriptor&#039;, &#039;&#039;);
END;
/
</pre></div>


<p class="wp-block-paragraph"><strong>Safe Harbor statement:</strong> Please ensure you do not blindly apply the same java.io.FilePermission which basically allows to run anything on the database server 🙂</p>



<h2 class="wp-block-heading" id="h-external-c-c-programs-aka-extproc">External C/C++ programs aka &#8220;extproc&#8221;</h2>



<p class="wp-block-paragraph">That&#8217;s probably one of the least known option but as old as the Oracle JVM both introduced in 1999 with Oracle 8i.</p>



<p class="wp-block-paragraph">The following source code was mostly generated with the support of a LLM but slightly adapted to mimic the behavior as the Java program:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: cpp; title: ; notranslate">
cat &lt;&lt;EOF_&gt; /opt/oracle_scripts/c_extproc.c
// Source: ChatGPT
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;  // Include the string.h header to use strcpy and strlen

#define MAX_BUFFER 1024

// Function to execute a Linux command and return the output
char* execute_command(const char *command) {
    FILE *fp;
    char *output = (char*)malloc(MAX_BUFFER * sizeof(char));  // Allocate memory for the output
    if (output == NULL) {
        perror(&quot;malloc failed&quot;);
        return NULL;
    }

    fp = popen(command, &quot;r&quot;);  // Open a pipe to the command
    if (fp == NULL) {
        perror(&quot;popen failed&quot;);
        free(output);
        return NULL;
    }

    // Buffer to accumulate the command output
    char buffer&#x5B;MAX_BUFFER];
    size_t output_size = 0;

    // Read the output line by line and accumulate it in &#039;output&#039;
    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        size_t len = strlen(buffer);

        // Reallocate memory if necessary
        if (output_size + len &gt;= MAX_BUFFER) {
            output = realloc(output, output_size + len + 1);  // Add space for the new content
            if (output == NULL) {
                perror(&quot;realloc failed&quot;);
                fclose(fp);
                return NULL;
            }
        }

        // Append the line to the output
        strcpy(output + output_size, buffer);
        output_size += len;
    }

    fclose(fp);
    return output;
}
EOF_
</pre></div>


<p class="wp-block-paragraph">Compile the source using GNU compiler and finally resolve the library dependencies (combine links):</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
gcc -fPIC -c /opt/oracle_scripts/c_extproc.c -o /opt/oracle_scripts/c_extproc.o
ld -shared -o /opt/oracle_scripts/c_extproc.so /opt/oracle_scripts/c_extproc.o
</pre></div>


<p class="wp-block-paragraph">In our case, the program does not contain any &#8220;call to the function &#8211; aka. main progtam&#8221;, as such it&#8217;s just a library.</p>



<p class="wp-block-paragraph">In the same way as we interfaced the Java program, we need to bind the external library with a PL/SQL function:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
CREATE OR REPLACE LIBRARY shell_c_lib is &#039;/opt/oracle_scripts/c_extproc.so&#039;;
/
CREATE OR REPLACE FUNCTION run_shell_cmd_with_c (command IN VARCHAR2)  
 RETURN  VARCHAR2  
 AS  EXTERNAL
 NAME &quot;execute_command&quot;  
 LIBRARY  shell_c_lib  
 LANGUAGE C  
 PARAMETERS (command string, RETURN string);  
/
</pre></div>


<p class="wp-block-paragraph">Hold on a second, for Java we had to allow the Oracle JVM to access the file sytem to execute an Operating System command. Is anything required for external C/C++ programs ?</p>



<p class="wp-block-paragraph">Yes, usually ISVs recommend to configure EXTPROC_DLLS parameter within the Oracle Listener. However, in our Oracle Cloud LAB we used an unsafe shortcut which consists to whitelist any library present on the database server filesystem by editing following Oracle Home configuration file:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
&#x5B;oracle@svl-ora-t ~]$ grep &#039;^SET EXTPROC_DLLS=ANY&#039; ${ORACLE_HOME}/hs/admin/extproc.ora
SET EXTPROC_DLLS=ANY
</pre></div>


<p class="wp-block-paragraph"><strong>Safe Harbor statement:</strong> Please ensure you do not blindly follow this post for your own safety 😉</p>



<h2 class="wp-block-heading" id="h-host-command-from-pl-sql">HOST command from PL/SQL</h2>



<p class="wp-block-paragraph">Uh? Does it exists? LLM training on the job! Of course, not 😉</p>



<h2 class="wp-block-heading" id="h-dbms-scheduler">DBMS_SCHEDULER </h2>



<p class="wp-block-paragraph">The Oracle scheduler support several job types when working with external programs:</p>



<h3 class="wp-block-heading" id="h-executable-and-external-script">EXECUTABLE and EXTERNAL_SCRIPT</h3>



<p class="wp-block-paragraph">Create credentials for jobs from type EXTERNAL_SCRIPT (aka. existing local Operating System user credentials):</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
BEGIN
  DBMS_CREDENTIAL.CREATE_CREDENTIAL(
    credential_name =&gt; &#039;test_creds&#039;,
    username        =&gt; &#039;test&#039;,
    password        =&gt; &#039;test&#039;);
END;
/
</pre></div>


<p class="wp-block-paragraph">Once, created if needed the credentials can be applied at pluggable database level only though init. parameter PDB_OS_CREDENTIAL.</p>



<p class="wp-block-paragraph">Create the scheduler jobs:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
     job_name=&gt;&#039;EXEC_SHELL_CMD_AS_EXECUTABLE&#039;,
     job_type=&gt;&#039;EXECUTABLE&#039;,
     job_action=&gt;&#039;/opt/oracle_scripts/run_prog.sh&#039;,
     enabled=&gt;TRUE,
     auto_drop=&gt;FALSE,
     repeat_interval =&gt; &#039;freq=secondly;bysecond=5;&#039;
     );

	-- EXTERNAL_SCRIPT requires credentials ! 
	-- Please Refer to DBMS_SCHEDULER package documentation for details
  DBMS_SCHEDULER.CREATE_JOB(
     job_name=&gt;&#039;EXEC_SHELL_CMD_AS_EXTERNAL_SCRIPT&#039;,
     job_type=&gt;&#039;EXTERNAL_SCRIPT&#039;,
     job_action=&gt;&#039;/opt/oracle_scripts/run_prog.sh&#039;,
     credential_name=&gt;&#039;test_creds&#039;,
     enabled=&gt;TRUE,
     auto_drop=&gt;FALSE,
     repeat_interval =&gt; &#039;freq=secondly;bysecond=15;&#039;
     );   
END;
/
</pre></div>


<p class="wp-block-paragraph"><strong>Nota Bene: </strong>DBMS_SCHEDULER job_type EXECUTABLE do not capture STDOUT as long as no credentials are applied (created with DBMS_CREDENTIALS)! at least this was the case on my Oracle 19c Release Update 23 database</p>



<h3 class="wp-block-heading" id="h-stored-procedure-and-plsql-block-java-and-external-c-program">STORED_PROCEDURE and PLSQL_BLOCK (Java and External C program)</h3>



<p class="wp-block-paragraph">Functions are not supported by the Oracle Scheduler. Thus, we created a simple instrumentation table:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
DROP TABLE debug;
CREATE TABLE debug 
   (EXECUTED_DATE TIMESTAMP default SYSTIMESTAMP, 
    use_case VARCHAR2(20), 
    output VARCHAR2(1024)
   );
</pre></div>


<p class="wp-block-paragraph">And finally, created on top of the functions for the e Java and C program stored procedures:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
CREATE OR REPLACE  PROCEDURE runproc_shell_cmd_with_c  AS
   l_output VARCHAR2(100); 
BEGIN  
   l_output := run_shell_cmd_with_c(&#039;/usr/bin/whoami&#039;); 
   INSERT INTO debug(use_case, output) VALUES(&#039;c_program&#039;, l_output);
 END;
 /

CREATE OR REPLACE  PROCEDURE runproc_shell_cmd_with_java  AS
   l_output VARCHAR2(100); 
BEGIN  
   l_output := run_shell_cmd_with_java(&#039;/usr/bin/whoami&#039;); 
   INSERT INTO debug(use_case, output) VALUES(&#039;java_program&#039;, l_output);
 END;
 /
</pre></div>


<p class="wp-block-paragraph">Create the scheduler jobs:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
-- Once executed as STORED_PROCEDURE
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
     job_name=&gt;&#039;EXEC_SHELL_CMD_USING_C_STOREDPROC&#039;,
     job_type=&gt;&#039;STORED_PROCEDURE&#039;,
     job_action=&gt;&#039;runproc_shell_cmd_with_c&#039;,
     enabled=&gt;TRUE,
     auto_drop=&gt;FALSE,
     repeat_interval =&gt; &#039;freq=secondly;bysecond=5;&#039;
     );
    
  DBMS_SCHEDULER.CREATE_JOB(
     job_name=&gt;&#039;EXEC_SHELL_CMD_USING_JAVA_STOREDPROC&#039;,
     job_type=&gt;&#039;STORED_PROCEDURE&#039;,
     job_action=&gt;&#039;runproc_shell_cmd_with_java&#039;,
     enabled=&gt;TRUE,
     auto_drop=&gt;FALSE,
     repeat_interval =&gt; &#039;freq=secondly;bysecond=5;&#039;
     );
END;
/

-- Once executed as anonymous PL/SQL block
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
     job_name=&gt;&#039;EXEC_SHELL_CMD_USING_C_PLSQLBLOCK&#039;,
     job_type=&gt;&#039;PLSQL_BLOCK&#039;,
     job_action=&gt;&#039;runproc_shell_cmd_with_c;&#039;,
     enabled=&gt;TRUE,
     auto_drop=&gt;FALSE,
     repeat_interval =&gt; &#039;freq=secondly;bysecond=5;&#039;
     );
    
  DBMS_SCHEDULER.CREATE_JOB(
     job_name=&gt;&#039;EXEC_SHELL_CMD_USING_JAVA_PLSQLBLOCK&#039;,
     job_type=&gt;&#039;PLSQL_BLOCK&#039;,
     job_action=&gt;&#039;runproc_shell_cmd_with_java;&#039;,
     enabled=&gt;TRUE,
     auto_drop=&gt;FALSE,
     repeat_interval =&gt; &#039;freq=secondly;bysecond=15;&#039;
     );
END;
/
</pre></div>


<h2 class="wp-block-heading" id="h-test-cases">Test cases</h2>



<p class="wp-block-paragraph">So any guess about old Unix command that prints the effective user id ? whoami?</p>



<figure class="wp-block-table is-style-stripes has-medium-font-size"><table class="has-fixed-layout"><thead><tr><th>Execution method</th><th>Type of database connection</th><th>whoami ?</th></tr></thead><tbody><tr><td>SELECT <br>   run_shell_cmd_with_java(’/usr/bin/whoami’) AS stdout <br>FROM DUAL;</td><td>Connected to PDB over SQL*NET</td><td>grid</td></tr><tr><td></td><td>Connected to PDB over BEQUEATH protocol</td><td>oracle</td></tr><tr><td>SELECT <br>   run_shell_cmd_with_c(’/usr/bin/whoami’) AS stdout <br>FROM DUAL;</td><td>Connected to PDB over SQL*NET</td><td>grid</td></tr><tr><td></td><td>Connected to PDB over BEQUEATH protocol</td><td>oracle</td></tr><tr><td>exec DBMS_SCHEDULER.RUN_JOB(‘EXEC_SHELL_CMD_AS_EXECUTABLE’);</td><td>Database job executed manually</td><td>nobody</td></tr><tr><td></td><td>Database job scheduled</td><td>nobody</td></tr><tr><td>exec DBMS_SCHEDULER.RUN_JOB(‘EXEC_SHELL_CMD_AS_EXTERNAL_SCRIPT’);</td><td>Database job executed manually</td><td>test</td></tr><tr><td></td><td><br>Database job scheduled</td><td>test</td></tr><tr><td>exec DBMS_SCHEDULER.RUN_JOB(‘EXEC_SHELL_CMD_USING_C_STOREDPROC’);</td><td>Database job executed manually</td><td>grid</td></tr><tr><td></td><td>Database job scheduled</td><td>oracle</td></tr><tr><td>exec DBMS_SCHEDULER.RUN_JOB(‘EXEC_SHELL_CMD_USING_JAVA_STOREDPROC’);</td><td>Database job executed manually</td><td>grid</td></tr><tr><td></td><td>Database job scheduled</td><td>oracle</td></tr><tr><td>exec DBMS_SCHEDULER.RUN_JOB(‘EXEC_SHELL_CMD_USING_C_PLSQLBLOCK’);</td><td>Database job executed manually</td><td>grid</td></tr><tr><td></td><td><br>Database job scheduled</td><td>oracle</td></tr><tr><td>exec DBMS_SCHEDULER.RUN_JOB(‘EXEC_SHELL_CMD_USING_JAVA_PLSQLBLOCK’);</td><td>Database job executed manually</td><td>grid</td></tr><tr><td></td><td>Database job scheduled</td><td>oracle</td></tr></tbody></table></figure>



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



<ul class="wp-block-list">
<li>With Oracle Grid Infrastructure the entire Single Client Access Name (SCAN) listeners belong to Operating System User grid</li>



<li>BEQUEATH Protocol is local Operating System authentication method only based on the traditional OSDBA, OSOPER. etc .. O.S group mapping</li>



<li>Oracle Scheduler job coordination CJQn processes and workers Jnn processes are spawned when database starts.</li>
</ul>



<h2 class="wp-block-heading" id="h-additional-background-information">Additional background information</h2>



<h3 class="wp-block-heading" id="h-oracle-cloud-database-home-specificity">Oracle Cloud database home specificity</h3>



<p class="wp-block-paragraph">On our LAB we had to tweak the Oracle Home as documented per Oracle support note, for some reason on OCI the external job feature is not working by default and according to the note it’s a feature 🙂</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>DBMS_SCHEDULER Job (External Job) Failed With ORA-27300, ORA-27301, ORA-27302: failure occurred at: sjsec 6d [OCI DBCS] (Doc ID 2647889.1)</td></tr></tbody></table></figure>



<h2 class="wp-block-heading" id="h-dbms-scheduler-job-type-executable">DBMS_SCHEDULER job type EXECUTABLE</h2>



<p class="wp-block-paragraph">By default any job is executed under the Unix pseudo user “nobody” which is a low-privileged Unix namespace and as such considered as secure. Oracle allows to tweak the behavior by adapting ${ORACLE_HOME}/rdbms/admin/externaljob.ora:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
&#x5B;oracle@svl-ora-t ~]$ grep &#039;^run_&#039; ${ORACLE_HOME}/rdbms/admin/externaljob.ora
run_user = nobody
run_group = nobody
</pre></div>


<h3 class="wp-block-heading" id="h-dbms-scheduler-amp-linux-pam-pluggable-authentication-modules-kernel-module">DBMS_SCHEDULER &amp; Linux PAM (Pluggable Authentication Modules) kernel module</h3>



<p class="wp-block-paragraph">Oracle Scheduler switch the user in background like you would run an “su” command. If this is not possible because of security reasons. the Job wont’ be executed at all</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
&#x5B;oracle@svl-ora-t ~]$ su - test
Password:
su: Permission denied
</pre></div>


<p class="wp-block-paragraph">Some hardened system on which we worked did not allow to “escape” from oracle O.S user and as such all Oracle Scheduler jobs failed due to the PAM config preventing switching to another user unless member of wheel O.S group:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
# Uncomment the following line to require a user to be in the &quot;wheel&quot; group.
auth           required        pam_wheel.so use_uid
</pre></div>


<p class="wp-block-paragraph">Oracle Support note which is still valid nowadays despite Oracle Linux 6 reference:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Dbms_scheduler Job Executes Shell Script Failed With Error: ORA-27369: job of type EXECUTABLE failed with exit code: 7 !@#–!@#7#@!–#@! (Doc ID 2312329.1)</td></tr></tbody></table></figure>



<h3 class="wp-block-heading" id="h-isolate-oracle-jvm-runtime-execution-to-least-privileged-o-s-user">Isolate Oracle JVM runtime execution to least privileged O.S user</h3>



<p class="wp-block-paragraph">Oracle delivers Oracle JVM isolation feature using a DBMS_JAVA sub-program to bind execution of program to a specific Operating System user. This setting requires to be conneted as SYS:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
SQL&gt; show user 

&quot;SYS&quot;

SQL&gt; alter session set container=APP_001I;

Session altered.

SQL&gt; exec dbms_java.set_runtime_exec_credentials(dbuser=&gt;&#039;JEW&#039;, osuser=&gt;&#039;test&#039;, ospass =&gt;&#039;test&#039;);

PL/SQL procedure successfully completed.
</pre></div>


<p class="wp-block-paragraph">From now on, all sub-subsequent execution will be started under the Operating System user &#8220;test&#8221;. Unfortunately, all executions fail with following error message</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
Cannot run program &quot;/bin/bash&quot;: cannot execute /u01/app/oracle/product/19.0.0.0/dbhome_1/bin/jssu
</pre></div>


<p class="wp-block-paragraph">Unfortunately, we were not able to fix this issue which has been well described in following post:<br><a href="https://mvelikikh.blogspot.com/2020/04/secure-use-of-runtimeexec-functionality.html">https://mvelikikh.blogspot.com/2020/04/secure-use-of-runtimeexec-functionality.html</a></p>



<p class="wp-block-paragraph">Unbinding the OJVM runtime environment requires as well SYS:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: sql; title: ; notranslate">
SQL&gt; alter session set container=APP_001I;

Session altered.

SQL&gt; exec dbms_java.set_runtime_exec_credentials(dbuser=&gt;&#039;JEW&#039;, osuser=&gt;null, ospass =&gt; null);

PL/SQL procedure successfully completed.
</pre></div>


<h2 class="wp-block-heading" id="h-summary">Summary</h2>



<p class="wp-block-paragraph">Well, there is no blueprint to deduct from this post which method suits the best for extermal programs, but at least it provides an overview and reproducible test cases to understand under which circumstances some files may or may not need special file system flags.</p>



<p class="wp-block-paragraph">Indeed, the dissected use cases for several scripts / C programs were amended with SETUID, GID flag to mitigate some past issues nobody remember leaving the system an undesired state, hackers could potentially take advantage of.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/what-is-the-most-secure-way-to-call-an-external-job-from-an-oracle-pluggable-database/">What is the most secure way to call an external job from an Oracle (pluggable) database?</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/what-is-the-most-secure-way-to-call-an-external-job-from-an-oracle-pluggable-database/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle Technology Roundtable for Digital Natives &#8211; Let&#8217;s have a look at AI, Cloud and HeatWave</title>
		<link>https://www.dbi-services.com/blog/oracle-technology-roundtable-for-digital-natives-lets-have-a-look-at-ai-cloud-and-heatwave/</link>
					<comments>https://www.dbi-services.com/blog/oracle-technology-roundtable-for-digital-natives-lets-have-a-look-at-ai-cloud-and-heatwave/#respond</comments>
		
		<dc:creator><![CDATA[Elisa Usai]]></dc:creator>
		<pubDate>Fri, 07 Mar 2025 08:16:19 +0000</pubDate>
				<category><![CDATA[Big Data]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Cloud Native]]></category>
		<category><![CDATA[Development & Performance]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[ETL]]></category>
		<category><![CDATA[genai]]></category>
		<category><![CDATA[HeatWave]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[lakehouse]]></category>
		<category><![CDATA[machinelearning]]></category>
		<category><![CDATA[ML]]></category>
		<category><![CDATA[objectstorage]]></category>
		<category><![CDATA[objectstore]]></category>
		<category><![CDATA[OLAP]]></category>
		<category><![CDATA[OLTP]]></category>
		<category><![CDATA[Performances]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[vectors]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=37514</guid>

					<description><![CDATA[<p>Yesterday I participated to the Oracle Technology Roundtable for Digital Natives in Zurich. It was a good opportunity to learn more about AI, Cloud and HeatWave with the focus on very trendy features of this product: generative AI, machine learning, vector processing, analytics and transaction processing across data in Data Lake and MySQL databases. It [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-technology-roundtable-for-digital-natives-lets-have-a-look-at-ai-cloud-and-heatwave/">Oracle Technology Roundtable for Digital Natives &#8211; Let&#8217;s have a look at AI, Cloud and HeatWave</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"></p>



<p class="wp-block-paragraph">Yesterday I participated to the Oracle Technology Roundtable for Digital Natives in Zurich.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="994" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_095332-1024x994.jpg" alt="" class="wp-image-37541" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_095332-1024x994.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_095332-300x291.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_095332-768x745.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_095332-1536x1491.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_095332-2048x1988.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">It was a good opportunity to learn more about AI, Cloud and <a href="https://www.oracle.com/heatwave/">HeatWave</a> with the focus on very trendy features of this product: generative AI, machine learning, vector processing, analytics and transaction processing across data in Data Lake and <a href="https://www.mysql.com/">MySQL</a> databases.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" data-id="37578" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-1024x1024.jpg" alt="" class="wp-image-37578" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-1024x1024.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-300x300.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-150x150.jpg 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-768x768.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-1536x1536.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153441-2048x2048.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p class="wp-block-paragraph">It was also great to share moments with the Oracle and MySQL teams and meet customers which gave feedback and tips about their solutions already in place in this area.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="1024" data-id="37579" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-1024x1024.jpg" alt="" class="wp-image-37579" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-1024x1024.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-300x300.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-150x150.jpg 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-768x768.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-1536x1536.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250307_153347-2048x2048.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p class="wp-block-paragraph">I’ll try to summarize below some key take-away of each session.</p>



<p class="wp-block-paragraph"><strong>Unlocking Innovation: How Oracle AI is Shaping the Future of Business</strong> (by <a href="https://www.linkedin.com/in/jwirtgen/">Jürgen Wirtgen</a>)</p>



<p class="wp-block-paragraph">AI is not a new topic. But how do we use it today and where are we in the process, early or advanced?</p>



<p class="wp-block-paragraph">To answer this question, you can have a look to the stages of adoption:</p>



<ol class="wp-block-list">
<li>Consume (AI embedded in your applications) -&gt; SaaS applications</li>



<li>Extend (models via Data Retrieval, RAG) -&gt; AI services</li>



<li>Fine tune -&gt; Data</li>



<li>Build models from scratch -&gt; Infrastructure</li>
</ol>



<p class="wp-block-paragraph"><em>AI is not AI.</em> The best AI starts with the best data, securely managed. Which can be translated back into a simple equation: Best Data + Best Technology = Best AI.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_100552-1024x768.jpg" alt="" class="wp-image-37542" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_100552-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_100552-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_100552-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_100552-1536x1152.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_100552-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Innovations in HeatWave &amp; MySQL &#8211; The Present and the Future</strong> (by <a href="https://www.linkedin.com/in/cagribalkesen/">Cagri Balkesen</a>)</p>



<p class="wp-block-paragraph"><a href="https://www.oracle.com/heatwave/">HeatWave</a> is an in-memory query processing accelerator for data in <a href="https://www.mysql.com/">MySQL</a> transactional RDBMS or data in Object Store in different format.</p>



<p class="wp-block-paragraph">Normally you need to put in place and maintain ETL processes to produce data that can be used effectively by analytics. This brings several drawbacks:</p>



<ul class="wp-block-list">
<li>Complexity</li>



<li>You have to maintain different systems, on which you’ll have security issues to handle and costs to assume.</li>
</ul>



<p class="wp-block-paragraph">Using HeatWave, you don’t need that anymore, because it’s a single platform which allows you to manage together all your OLTP, OLAP, Machine Learning and GenAI workloads.</p>



<p class="wp-block-paragraph">Which are the advantages of using HeatWave?</p>



<ul class="wp-block-list">
<li>You current SQL syntax doesn’t need to change</li>



<li>Changes to data are automatically propagated to HeatWave</li>



<li>Best performances for your queries</li>



<li>Efficient processing for Data Lake</li>



<li>Best platform for MySQL workloads</li>



<li>Built-in GenAI &amp; Vector Store</li>



<li>Available in multi cloud (natively on OCI, it can run inside AWS, you can setup a private interconnection for Microsoft Azure, and there are works in progress for Google Cloud).</li>
</ul>



<p class="wp-block-paragraph">HeatWave is based on a massively parallel architecture which uses partitioning of data: each CPU core within a node processes the partitioned data in parallel.</p>



<p class="wp-block-paragraph">Driven by Machine Learning algorithms, <a href="https://www.oracle.com/heatwave/features/#autopilot">HeatWave Autopilot</a> offers several features such as:</p>



<ul class="wp-block-list">
<li>Improvements in terms of performance and scalability</li>



<li>Provisioning, data loading, query execution and fault management automation, to reduce human errors.</li>
</ul>



<p class="wp-block-paragraph">Finally, according to Oracle, with HeatWave you will have best performances and lowest costs rather than competitors: Snowflake, Amazon Redshift, Google BigQuery and Databricks.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_104101-1024x768.jpg" alt="" class="wp-image-37543" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_104101-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_104101-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_104101-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_104101-1536x1152.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_104101-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Building Next-Gen Applications with Generative AI &amp; Vector Store</strong> (by <a href="https://www.linkedin.com/in/adihochmann/">Adi Hochmann</a>)</p>



<p class="wp-block-paragraph">As we said, <a href="https://www.oracle.com/heatwave/">Oracle HeatWave</a> allows you to manage together all your OLTP, OLAP, Machine Learning and GenAI workloads.</p>



<p class="wp-block-paragraph">Steps to build a <a href="https://www.oracle.com/heatwave/genai/">GenAI</a> application are the following ones:</p>



<ol class="wp-block-list">
<li>Create a vector store</li>



<li>Use vector store with LLMs</li>
</ol>



<p class="wp-block-paragraph">And this is performed using the following routines:</p>



<p class="wp-block-paragraph"><code>call sys.HEATWAVE_LOAD (…);</code></p>



<p class="wp-block-paragraph"><code>call sys.ML_RAG(@query,@output,@options);</code></p>



<p class="wp-block-paragraph">But how to train data for Machine Learning? The process and tasks done by a data analyst could be complex and this is replaced here by the <a href="https://www.oracle.com/heatwave/automl/">AutoML</a>:</p>



<p class="wp-block-paragraph"><code>CALL sys.ML_TRAIN(‘data_source’, ‘model_type’, JSON_OBJECT(‘task’, ‘classification’), @result_model);</code></p>



<p class="wp-block-paragraph">This is useful for some use-cases such as classification, anomalies detection, recommendations, predictive maintenance, …</p>



<p class="wp-block-paragraph">Additional tip: Adi used <a href="https://dev.mysql.com/doc/mysql-shell-gui/en/">MySQL Shell for VS Code</a> to run his demo. This extension enables interactive editing and execution of SQL for MySQL databases and MySQL Database Service. It integrates the MySQL shell directly into VS Code development workflows and it’s pretty nice!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_110803-1024x768.jpg" alt="" class="wp-image-37544" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_110803-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_110803-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_110803-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_110803-1536x1152.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_110803-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Oracle Cloud for Digital Natives: Supporting Innovation and Growth</strong> (by <a href="https://www.linkedin.com/in/claire-binder-0a3543/">Claire Binder</a>)</p>



<p class="wp-block-paragraph">Which are the 5 reasons why Digital Natives picked <a href="https://www.oracle.com/ch-fr/cloud/">OCI</a>?</p>



<ol class="wp-block-list">
<li>Developer-First openness and flexibility, to speed acquisition</li>



<li>Advanced Data &amp; AI Services, to achieve innovation and agility</li>



<li>Technical and global reach, to achieve scalability</li>



<li>Security, compliance and resilience, to control risks</li>



<li>Cost efficiency and TCO, to achieve optimized spending.</li>
</ol>



<p class="wp-block-paragraph">Linked to the point 4, there are several services in OCI to avoid data breaches in terms of prevention, monitoring, mitigation, protection, encryption and access. &nbsp;</p>



<p class="wp-block-paragraph">To select a Cloud provider, the recommendation would be to choose a solution which allows you to run converged open SQL databases, instead of single-use proprietary databases.</p>



<p class="wp-block-paragraph">And finally, Oracle brings AI to your data with his new <a href="https://www.oracle.com/database/23ai/">23ai</a> release and some of its features, such as Property Graphs and AI Vector Search.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_124252-1024x768.jpg" alt="" class="wp-image-37545" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_124252-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_124252-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_124252-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_124252-1536x1152.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_124252-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Analytics at the speed of thoughts with HeatWave Lakehouse</strong> (by <a href="https://www.linkedin.com/in/kunalnitin/">Nitin Kunal</a>)</p>



<p class="wp-block-paragraph">What is a Data Lake? It’s a cost efficient, scalable, online storage of data as file (for instance, Object Store). Data are not structured and non-transactional and can be sourced from Big Data frameworks.</p>



<p class="wp-block-paragraph">Again, you could have 4 different platforms to maintain:</p>



<ul class="wp-block-list">
<li>&nbsp;Your RDBMS</li>



<li>A DWH system for analytics processing</li>



<li>A Data Lake</li>



<li>A ML &amp; Gen-AI system.</li>
</ul>



<p class="wp-block-paragraph">Instead of that, your can merge everything in only one platform: <a href="https://www.oracle.com/heatwave/">HeatWave</a>. And you can query near real time data with <a href="https://www.oracle.com/heatwave/lakehouse/">HeatWave Lakehouse</a> because new data is available in seconds: that&#8217;s great!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_130126-1024x768.jpg" alt="" class="wp-image-37546" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_130126-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_130126-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_130126-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_130126-1536x1152.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/03/20250306_130126-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Conclusion</strong></p>



<ol class="wp-block-list">
<li>If you have mixed workloads, if you start to work with AI and if you want to improve your performances, it is really worth taking a look at <a href="https://www.oracle.com/heatwave/">Oracle HeatWave</a>. You can try it <a href="https://www.oracle.com/heatwave/free/?source=:ow:o:p:nav:092321MySQLHero&amp;intcmp=:ow:o:p:nav:092321MySQLHero">here</a> for free.</li>



<li>We all know that AI is the future. These next years, we&#8217;ll be more and more challenged on GenAI, ML, vector processing and so on. With all this innovation, we must not lose sight of topics that remain crucial (and perhaps become even more important) such as security, reliability, availability, and best practices. With <a href="https://www.dbi-services.com/">dbi services</a> and <a href="https://www.sequotech.com/">Sequotech</a> we can for sure help you with this transition.</li>
</ol>



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-technology-roundtable-for-digital-natives-lets-have-a-look-at-ai-cloud-and-heatwave/">Oracle Technology Roundtable for Digital Natives &#8211; Let&#8217;s have a look at AI, Cloud and HeatWave</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-technology-roundtable-for-digital-natives-lets-have-a-look-at-ai-cloud-and-heatwave/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ExaCC OCI integration with OEM 13.5 Cloud Control installed On-premises.</title>
		<link>https://www.dbi-services.com/blog/exacc-oci-integration-with-oem-13-5-cloud-control-installed-on-premises/</link>
					<comments>https://www.dbi-services.com/blog/exacc-oci-integration-with-oem-13-5-cloud-control-installed-on-premises/#comments</comments>
		
		<dc:creator><![CDATA[Tomek Sikorski]]></dc:creator>
		<pubDate>Tue, 08 Oct 2024 08:54:46 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Database Administration & Monitoring]]></category>
		<category><![CDATA[Hardware & Storage]]></category>
		<category><![CDATA[OCI]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Enterprise Manager 13c]]></category>
		<category><![CDATA[exacc]]></category>
		<category><![CDATA[exadata]]></category>
		<category><![CDATA[exadata cloud at customer]]></category>
		<category><![CDATA[Exadata Cloud@Customer]]></category>
		<category><![CDATA[OEM]]></category>
		<category><![CDATA[Oracle Enterprise Manager]]></category>
		<category><![CDATA[Plugin]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=35013</guid>

					<description><![CDATA[<p>Introduction I wrote this article to show how you can integrate Legacy OEM with your Cloud environment in this case Oracle ExaCC.To have overall view on your Exadata X9M Cloud Infrastructure, statistics related to CPU/Memory/ASM Storage usage. Your on premise monitoring OEM can read data from Oracle cloud using OCI libraries and present them in [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exacc-oci-integration-with-oem-13-5-cloud-control-installed-on-premises/">ExaCC OCI integration with OEM 13.5 Cloud Control installed On-premises.</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">I wrote this article to show how you can integrate Legacy OEM with your Cloud environment in this case Oracle ExaCC.To have overall view on your Exadata X9M Cloud Infrastructure, statistics related to CPU/Memory/ASM Storage usage. Your on premise monitoring OEM can read data from Oracle cloud using OCI libraries and present them in combination with your standard DB/VMs target monitoring, this give you powerful tool for overall view on your Enterprise environment.</p>



<p class="wp-block-paragraph">Since version OEM release update 13.5.0.23 of OMS / Agents. There is few new interesting Dashboards and panels related to OCI Exadata Infrastructure, also RU23&nbsp;introduces the Oracle Enterprise Manager Cloud Control Exadata Management Pack and Zero Data Loss Recovery Appliance (ZDLRA) Management Pack, some Dashboards, panels view below:</p>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1.png"><img loading="lazy" decoding="async" width="1024" height="597" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1-1024x597.png" alt="" class="wp-image-35140" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1-1024x597.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1-300x175.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1-768x447.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1-1536x895.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM4-1-2048x1193.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6.png"><img loading="lazy" decoding="async" width="1024" height="609" data-id="35032" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6-1024x609.png" alt="" class="wp-image-35032" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6-1024x609.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6-300x178.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6-768x457.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6-1536x914.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem6-2048x1218.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5.png"><img loading="lazy" decoding="async" width="1024" height="625" data-id="35029" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5-1024x625.png" alt="" class="wp-image-35029" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5-1024x625.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5-300x183.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5-768x468.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5-1536x937.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem5-2048x1249.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3.png"><img loading="lazy" decoding="async" width="1024" height="657" data-id="35028" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3-1024x657.png" alt="" class="wp-image-35028" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3-1024x657.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3-300x192.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3-768x493.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3-1536x985.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/OEM3-2048x1314.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="575" data-id="35149" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-36-1024x575.png" alt="" class="wp-image-35149" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-36-1024x575.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-36-300x168.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-36-768x431.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-36-1536x862.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-36-2048x1149.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123.png"><img loading="lazy" decoding="async" width="1024" height="445" data-id="35031" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123-1024x445.png" alt="" class="wp-image-35031" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123-1024x445.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123-300x130.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123-768x334.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123-1536x668.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/Screenshot_2024-10-04_at_11_07_00123123-2048x891.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>



<p class="wp-block-paragraph">Biggest advantage of this integration is that you will have wider view to your cloud environment, Concept of ExaCC is that you see and have access to VMs and databases, hardware of Exadata Dbservers and Cellservers are normally managed by Oracle.</p>



<p class="wp-block-paragraph">Adding this OCI integration to OEM give you viasability of physical cell servers and their statistics.</p>



<p class="wp-block-paragraph">Now lets move on how this can be configured</p>



<h2 class="wp-block-heading" id="h-prerequisites">Prerequisites:</h2>



<ol class="wp-block-list">
<li>OEM OMS/Agents update to minimum 13.5.0.23 (AUG 07/2024), why? since this version there is OCI integration enhancements and new dashboards,management packs for ExaCC. I described this in another post link here: <strong><em> <a href="https://www.dbi-services.com/blog/oem-cloud-control-release-update-to-13-5-0-23/"> https://www.dbi-services.com/blog/oem-cloud-control-release-update-to-13-5-0-23</a></em></strong></li>



<li>Get your Exacli user/password to cellservers from your environment , in procedure I will describe how to do it</li>



<li>Have OCI client/libraries installed on one of Agents host.</li>



<li>Have access to OCI directly or over HTTPS proxy from Agent host.</li>
</ol>



<h2 class="wp-block-heading" id="h-step-by-step-procedure">Step by Step Procedure:</h2>



<h2 class="wp-block-heading" id="h-get-exacli-username-and-password-to-your-exacc-cellservers-this-step-is-optional-but-recommend-to-have-more-statistics-from-cell-servers">Get Exacli username and password to your ExaCC cellservers(this step is optional but recommend to have more statistics from cell servers. </h2>



<p class="wp-block-paragraph">Login to one of yours Virtual Exadata vm server and check username and password for StorageCells.</p>



<p class="wp-block-paragraph">username usually have format: cloud_user_&lt;crs_cluster_name&gt;</p>



<p class="wp-block-paragraph">to get clustername and password  ,login as grid user end execute:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
&#x5B;grid@s***n1 ~]$ crsctl get cluster name; 
CRS-6724: Current cluster name is &#039;zh1234clua1&#039; 

#so in this case username will be cloud_user_zh1234clua1

#now get Exadata initial password
&#x5B;opc@s***n1 ~]$ sudo su - 
&#x5B;root@s***n1 ~]# /opt/exacloud/get_cs_data.py 
*** WARNING : deprecated key derivation used. 
Using -iter or -pbkdf2 would be better. 
ExaCli initial password is: 
 **************************** 


#Collect the storage server IP address from 
/etc/oracle/cell/network-config/cellip.ora on the VM Guest. 

#Test Connection to one of cell IP addresses 
#using exacli provide username and password gathered above 
exacli -l cloud_user_zh1234clua1 -c 100.100.0.13 -e list physicaldisk 
Password: **************************** 

#in output you should receive disk list from Storage cell , if not then means that your username or passwords are incorrect.

Save credentials for later.

</pre></div>


<h2 class="wp-block-heading" id="h-create-new-named-credentials-in-oem">Create new named credentials in OEM:</h2>



<p class="wp-block-paragraph">Go to Setup &gt; Security &gt; Named Credentials and create new with user and passwords saved above:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="979" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem_cred-1024x979.png" alt="" class="wp-image-35038" style="width:459px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem_cred-1024x979.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem_cred-300x287.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem_cred-768x734.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/oem_cred.png 1278w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Now we have connection between OEM and storage Cellservers.</p>



<h2 class="wp-block-heading" id="h-create-user-group-policy-for-monitoring-and-assign-proper-policy-s-in-oci">Create user/group/policy for monitoring and assign proper policy&#8217;s in OCI.</h2>



<p class="wp-block-paragraph">Login to OCI and create new user,group and policys</p>



<p class="wp-block-paragraph">Go to Identity &gt; Domains &gt; Groups and create new (use name which apply to your naming convention</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="686" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-2-1024x686.png" alt="" class="wp-image-35041" style="width:624px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-2-1024x686.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-2-300x201.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-2-768x515.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-2-1536x1029.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-2-2048x1372.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Create New user and attache to Group created earler:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="658" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-3-1024x658.png" alt="" class="wp-image-35042" style="width:607px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-3-1024x658.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-3-300x193.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-3-768x493.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-3-1536x987.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-3-2048x1316.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Create API keys:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="335" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-4-1024x335.png" alt="" class="wp-image-35043" style="width:552px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-4-1024x335.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-4-300x98.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-4-768x251.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-4-1536x502.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-4-2048x669.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Copy OCI configuration config file and save ssh key.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="815" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-5-1024x815.png" alt="" class="wp-image-35044" style="width:605px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-5-1024x815.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-5-300x239.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-5-768x611.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-5.png 1430w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Create new policy with 2 Statements (privileges to be able to read your compartment objects) like below:</p>



<p class="wp-block-paragraph">Go to Identity &amp; Security &gt; Policies</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="634" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-1-1024x634.png" alt="" class="wp-image-35040" style="width:608px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-1-1024x634.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-1-300x186.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-1-768x476.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-1-1536x952.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-1-2048x1269.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading" id="h-download-and-install-oci-client-on-your-server">Download and install OCI Client on your server.</h2>



<p class="wp-block-paragraph">In our case, we installing OCI on OMS server and use EM Agent deployed to this machine. To use OCI API to connect and gather data from Oracle Cloud about our infrastructure using HTTPS_PROXY server.</p>



<p class="wp-block-paragraph">To install OCI please follow official documentation, there are different options of installation and OS versions: <a href="https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__oraclelinux8">https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/cliinstall.htm#InstallingCLI__oraclelinux8</a></p>



<p class="wp-block-paragraph">In our case we installing OCI Cli as oracle user on Oracle Linux 8</p>



<p class="wp-block-paragraph">First we set http/s proxy :</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
oracle@agent1:~/ export HTTPS_PROXY=http://proxy.proxy.com:3038 
oracle@agent1:~/ export HTTP_PROXY=http://proxy.proxy.com:3038 

</pre></div>


<p class="wp-block-paragraph">Download newest OCI libraries :</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
oracle@agent1:~/# mkdir -p /u01/app/oracle/oci/
oracle@agent1:~/# cd  /u01/app/oracle/oci/
oracle@agent1:/u01/app/oracle/oci/# bash -c &quot;$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)&quot; 

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                                 Dload  Upload   Total   Spent    Left  Speed 
100 16926  100 16926    0     0   199k      0 --:--:-- --:--:-- --:--:--  199k 
    ****************************************************************************** 
    You have started the OCI CLI Installer in interactive mode. If you do not wish 
    to run this in interactive mode, please include the --accept-all-defaults option. 
    If you have the script locally and would like to know more about 
    input options for this script, then you can run: 
    ./install.sh -h 
    If you would like to know more about input options for this script, refer to: 
    https://github.com/oracle/oci-cli/blob/master/scripts/install/README.rst 
    ****************************************************************************** 
Downloading Oracle Cloud Infrastructure CLI install script from https://raw.githubusercontent.com/oracle/oci-cli/v3.2.1/scripts/install/install.py to /tmp/oci_cli_install_tmp_VwnM. 
######################################################################################################################################################################### 100.0% 
Running install script. 
python3 /tmp/oci_cli_install_tmp_VwnM 
-- Verifying Python version. 
-- Python version 3.6.8 okay. 
===&gt; In what directory would you like to place the install? (leave blank to use &#039;/home/oracle/lib/oracle-cli&#039;): 
-- Creating directory &#039;/home/oracle/lib/oracle-cli&#039;. 
-- We will install at &#039;/home/oracle/lib/oracle-cli&#039;. 
===&gt; In what directory would you like to place the &#039;oci&#039; executable? (leave blank to use &#039;/home/oracle/bin&#039;): 
-- Creating directory &#039;/home/oracle/bin&#039;. 
-- The executable will be in &#039;/home/oracle/bin&#039;. 
===&gt; In what directory would you like to place the OCI scripts? (leave blank to use &#039;/home/oracle/bin/oci-cli-scripts&#039;): 
-- Creating directory &#039;/home/oracle/bin/oci-cli-scripts&#039;. 
-- The scripts will be in &#039;/home/oracle/bin/oci-cli-scripts&#039;. 
===&gt; Currently supported optional packages are: &#x5B;&#039;db (will install cx_Oracle)&#039;] 
What optional CLI packages would you like to be installed (comma separated names; press enter if you don&#039;t need any optional packages)?: 
-- The optional packages installed will be &#039;&#039;. 
-- Trying to use python3 venv. 
-- Executing: &#x5B;&#039;/usr/bin/python3&#039;, &#039;-m&#039;, &#039;venv&#039;, &#039;/home/oracle/lib/oracle-cli&#039;] 
-- Executing: &#x5B;&#039;/home/oracle/lib/oracle-cli/bin/pip&#039;, &#039;install&#039;, &#039;--upgrade&#039;, &#039;pip&#039;] 
Collecting pip 
  Downloading https://files.pythonhosted.org/packages/a4/6d/6463d49a933f547439d6b5b98b46af8742cc03ae83543e4d7688c2420f8b/pip-21.3.1-py3-none-any.whl (1.7MB) 
    100% |████████████████████████████████| 1.7MB 847kB/s 
Installing collected packages: pip 
  Found existing installation: pip 9.0.3 
    Uninstalling pip-9.0.3: 
      Successfully uninstalled pip-9.0.3 
Successfully installed pip-21.3.1 
You are using pip version 21.3.1, however version 24.2 is available. 
You should consider upgrading via the &#039;pip install --upgrade pip&#039; command. 
-- Executing: &#x5B;&#039;/home/oracle/lib/oracle-cli/bin/pip&#039;, &#039;install&#039;, &#039;--cache-dir&#039;, &#039;/tmp/tmpk9na7c02&#039;, &#039;wheel&#039;, &#039;--upgrade&#039;] 
Collecting wheel 
  Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB) 
Installing collected packages: wheel 
Successfully installed wheel-0.37.1 
-- Executing: &#x5B;&#039;/home/oracle/lib/oracle-cli/bin/pip&#039;, &#039;install&#039;, &#039;--cache-dir&#039;, &#039;/tmp/tmpk9na7c02&#039;, &#039;oci_cli&#039;, &#039;--upgrade&#039;] 
Collecting oci_cli 
  Downloading oci_cli-3.48.0-py3-none-any.whl (50.7 MB) 
     |████████████████████████████████| 50.7 MB 2.6 MB/s 
Collecting jmespath==0.10.0 
  Downloading jmespath-0.10.0-py2.py3-none-any.whl (24 kB) 
Collecting prompt-toolkit==3.0.29 
  Downloading prompt_toolkit-3.0.29-py3-none-any.whl (381 kB) 
     |████████████████████████████████| 381 kB 51.8 MB/s 
Collecting arrow&gt;=1.0.0 
  Donloading arrow-1.2.3-py3-none-any.whl (66 kB) 
     |████████████████████████████████| 66 kB 14.0 MB/s 
Collecting PyYAML&lt;=6.0.1,&gt;=5.4 
  Downloading PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (677 kB) 
     |████████████████████████████████| 677 kB 47.5 MB/s 
Collecting oci==2.134.0 
  Downloading oci-2.134.0-py3-none-any.whl (27.9 MB) 
     |████████████████████████████████| 27.9 MB 96.5 MB/s 
Collecting terminaltables==3.1.10 
  Downloading terminaltables-3.1.10-py2.py3-none-any.whl (15 kB) 
Collecting certifi 
  Downloading certifi-2024.8.30-py3-none-any.whl (167 kB) 
     |████████████████████████████████| 167 kB 106.3 MB/s 
Collecting cryptography&lt;43.0.0,&gt;=3.2.1 
  Downloading cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl (3.7 MB) 
     |████████████████████████████████| 3.7 MB 25.3 MB/s 
Collecting six&gt;=1.15.0 
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB) 
Collecting pyOpenSSL&lt;25.0.0,&gt;=17.5.0 
  Downloading pyOpenSSL-23.2.0-py3-none-any.whl (59 kB) 
     |████████████████████████████████| 59 kB 18.3 MB/s 
Collecting python-dateutil&lt;3.0.0,&gt;=2.5.3 
  Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB) 
     |████████████████████████████████| 229 kB 61.2 MB/s 
Collecting pytz&gt;=2016.10 
  Downloading pytz-2024.2-py2.py3-none-any.whl (508 kB) 
     |████████████████████████████████| 508 kB 99.2 MB/s 
Collecting click==8.0.4 
  Downloading click-8.0.4-py3-none-any.whl (97 kB) 
     |████████████████████████████████| 97 kB 19.2 MB/s 
Collecting importlib-metadata 
  Downloading importlib_metadata-4.8.3-py3-none-any.whl (17 kB) 
Collecting circuitbreaker&lt;2.0.0,&gt;=1.3.1 
  Downloading circuitbreaker-1.4.0.tar.gz (9.7 kB) 
  Preparing metadata (setup.py) ... done 
Collecting wcwidth 
  Downloading wcwidth-0.2.13-py2.py3-none-any.whl (34 kB) 
Collecting typing-extensions 
  Downloading typing_extensions-4.1.1-py3-none-any.whl (26 kB) 
Collecting cffi&gt;=1.12 
  Downloading cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (402 kB) 
     |████████████████████████████████| 402 kB 30.7 MB/s 
Collecting pycparser 
  Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB) 
     |████████████████████████████████| 118 kB 89.7 MB/s 
Collecting zipp&gt;=0.5 
  Downloading zipp-3.6.0-py3-none-any.whl (5.3 kB) 
Building wheels for collected packages: circuitbreaker 
  Building wheel for circuitbreaker (setup.py) ... done 
  Created wheel for circuitbreaker: filename=circuitbreaker-1.4.0-py3-none-any.whl size=7506 sha256=cd24462c8ab8bb71fba04fa996852c0cff6c93749f3a2c74591f3a1cbfa756ec 
  Stored in directory: /tmp/tmpk9na7c02/wheels/46/17/98/db2eb826e4a98da672cffe66ec16838182cde0cf19ad2c0c70 
Successfully built circuitbreaker 
Installing collected packages: pycparser, cffi, zipp, typing-extensions, six, cryptography, wcwidth, pytz, python-dateutil, pyOpenSSL, importlib-metadata, circuitbreaker, certifi, terminaltables, PyYAML, prompt-toolkit, oci, jmespath, click, arrow, oci-cli 
Successfully installed PyYAML-6.0.1 arrow-1.2.3 certifi-2024.8.30 cffi-1.15.1 circuitbreaker-1.4.0 click-8.0.4 cryptography-40.0.2 importlib-metadata-4.8.3 jmespath-0.10.0 oci-2.134.0 oci-cli-3.48.0 prompt-toolkit-3.0.29 pyOpenSSL-23.2.0 pycparser-2.21 python-dateutil-2.9.0.post0 pytz-2024.2 six-1.16.0 terminaltables-3.1.10 typing-extensions-4.1.1 wcwidth-0.2.13 zipp-3.6.0 

===&gt; Modify profile to update your $PATH and enable shell/tab completion now? (Y/n): n 

-- If you change your mind, add &#039;source /home/oracle/lib/oracle-cli/lib/python3.6/site-packages/oci_cli/bin/oci_autocomplete.sh&#039; to your rc file and restart your shell to enable tab completion. 

-- You can run the CLI with &#039;/home/oracle/bin/oci&#039;. 

-- Installation successful. 

-- Run the CLI with /home/oracle/bin/oci --help 

</pre></div>


<p class="wp-block-paragraph">Configure credenials to OCI user and copy API private key to host:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
oracle@agent1:~/# vi .oci/config 
&#x5B;DEFAULT] 
user=ocid1.user.ooracle@agent1:~/#
fingerprint=.*********************************
tenancy=ocid1.tenancy..*********************************
region=eu-zurich-1 
key_file=/home/oracle/.oci/oem_ro.pem 

 
#Create private key you can copy or create by copy/past with vi
oracle@agent1:~/# vi /home/oracle/.oci/oem_ro.pem 
 -----BEGIN PRIVATE KEY----- 
*** 
*** 
*** 
*** 
*** 
-----END PRIVATE KEY----- 

# Test your connection and gather some info for example compartment list
oracle@agent1:~/#  oci iam compartment list
{ 
  &quot;data&quot;: &#x5B; 
    { 
      &quot;compartment-id&quot;: &quot;ocid1.tenancy.oc1..*********************************&quot;, 
      &quot;defined-tags&quot;: { 
        &quot;Oracle-Tags&quot;: { 
          &quot;CreatedBy&quot;: &quot;*********************************@*********************************.com&quot;, 
          &quot;CreatedOn&quot;: &quot;2023-06-15T15:28:03.408Z&quot; 
        } 
      }, 
      &quot;description&quot;: &quot;Exadata Cloud@Customer database service&quot;, 
      &quot;freeform-tags&quot;: {}, 
      &quot;id&quot;: &quot;ocid1.compartment.o*********************************&quot;, 
      &quot;inactive-status&quot;: null, 
      &quot;is-accessible&quot;: null, 
      &quot;lifecycle-state&quot;: &quot;ACTIVE&quot;, 
      &quot;name&quot;: &quot;ExaCC*********************************&quot;, 
      &quot;time-created&quot;: &quot;2023-06-15T15:28:03.545000+00:00&quot; 
    } 
  ] 
} 
</pre></div>


<p class="wp-block-paragraph">Set https proxy for your OEM agent (which later will be used to communicate with OCI)</p>



<p class="wp-block-paragraph">edit <code>emd.properties</code> and add on the end 2 extra parameters. </p>



<p class="wp-block-paragraph"><code>oci_http_proxy_host=</code></p>



<p class="wp-block-paragraph"><code>oci_http_proxy_port=</code></p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: bash; title: ; notranslate">
#Configure proxy on your agent installation folder: 

oracle@agent1:~/#  vi/u01/app/oracle/agent/agent_inst/sysman/config/emd.properties
oci_http_proxy_host=proxy.proxy.com 
oci_http_proxy_port=3038 

#Restart Agent
oracle@agent1:~/# emctl stop agent 
Oracle Enterprise Manager Cloud Control 13c Release 5 
Copyright (c) 1996, 2021 Oracle Corporation.  All rights reserved. 
Stopping agent ... stopped. 

oracle@agent1:~/#  &#x5B;emagent1350] emctl start agent 
Oracle Enterprise Manager Cloud Control 13c Release 5 
Copyright (c) 1996, 2021 Oracle Corporation.  All rights reserved. 
Starting agent ........... started. 
</pre></div>


<h2 class="wp-block-heading" id="h-configure-named-credentials-in-oem-for-oci">Configure named credentials in OEM for OCI :</h2>



<p class="wp-block-paragraph">Go to Setup &gt; Security &gt; Named Credentials Click Create tab and create credentials using keys and OCI tenants keys copied from config or credentials:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="981" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-8-981x1024.png" alt="" class="wp-image-35064" style="width:497px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-8-981x1024.png 981w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-8-287x300.png 287w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-8-768x802.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-8-1471x1536.png 1471w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-8.png 1586w" sizes="auto, (max-width: 981px) 100vw, 981px" /></figure>



<p class="wp-block-paragraph">next you can test it choice agent on which we installed oci and configure proxy. </p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="826" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-6-1024x826.png" alt="" class="wp-image-35062" style="width:402px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-6-1024x826.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-6-300x242.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-6-768x619.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-6.png 1064w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="554" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-7-1024x554.png" alt="" class="wp-image-35063" style="width:310px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-7-1024x554.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-7-300x162.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-7-768x415.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-7.png 1294w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading" id="h-deploy-exadata-plugins-on-agents">Deploy Exadata plugins on Agents:</h2>



<p class="wp-block-paragraph">Go to Setup &gt; Extensibility &gt; Plug-ins</p>



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



<p class="wp-block-paragraph">Engineered Systems &gt; Oracle Exadata<br></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="638" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-10-1024x638.png" alt="" class="wp-image-35066" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-10-1024x638.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-10-300x187.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-10-768x478.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-10-1536x956.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-10-2048x1275.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Click Deploy on and choice targets you wanna deploy it:</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="728" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-12-1024x728.png" alt="" class="wp-image-35068" style="width:511px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-12-1024x728.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-12-300x213.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-12-768x546.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-12-1536x1092.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-12.png 1638w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Follow logs to check if deployment successful :</p>



<h2 class="wp-block-heading" id="h-discovering-exacc-targets">Discovering ExaCC targets</h2>



<p class="wp-block-paragraph">Now we have all prerequisites configured and tested so we can discover our ExaCC :</p>



<p class="wp-block-paragraph">Go to &gt; Setup &gt; Add Target &gt; Add Target Manually &gt; Add Using Guided Process</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="825" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-13-1024x825.png" alt="" class="wp-image-35069" style="width:522px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-13-1024x825.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-13-300x242.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-13-768x619.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-13.png 1308w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="706" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-14-1024x706.png" alt="" class="wp-image-35070" style="width:504px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-14-1024x706.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-14-300x207.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-14-768x529.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-14.png 1294w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="711" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-15-1024x711.png" alt="" class="wp-image-35071" style="width:626px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-15-1024x711.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-15-300x208.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-15-768x533.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-15.png 1336w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="623" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-16-1024x623.png" alt="" class="wp-image-35072" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-16-1024x623.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-16-300x182.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-16-768x467.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-16.png 1322w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Choice target ExaCC infrastructure you wanna add to OEM , you can Also specify ExaCLI credentials to monitor Cellservers and ASMs (optional) We gather this credentials earlier in this tutorial.</p>



<p class="wp-block-paragraph">Now you can Click next and Promote , and watch status of Target Promotions.</p>



<p class="wp-block-paragraph">Please also turn on management packs for ExaCC</p>



<p class="wp-block-paragraph">Go to Setup &gt; Management Pack &gt; Management Pack Access &gt;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="374" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-27-1024x374.png" alt="" class="wp-image-35113" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-27-1024x374.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-27-300x110.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-27-768x281.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-27-1536x561.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-27-2048x748.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">After Promotion finish you should have new entry in Target tab:<br></p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="528" height="716" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-17.png" alt="" class="wp-image-35073" style="width:226px;height:auto" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-17.png 528w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-17-221x300.png 221w" sizes="auto, (max-width: 528px) 100vw, 528px" /></figure>



<p class="wp-block-paragraph">and Few minutes later you should also see your Oracle Cloud ExaCC infrastructure with all VMs and Databases. </p>



<p class="wp-block-paragraph"><br></p>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18.png"><img loading="lazy" decoding="async" width="1024" height="631" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18-1024x631.png" alt="" class="wp-image-35074" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18-1024x631.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18-300x185.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18-768x473.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18-1536x946.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-18-2048x1261.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">You can go to each Exadata Cluster and see more details, also to ASM Grid Infrastructure:</p>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19.png"><img loading="lazy" decoding="async" width="1024" height="726" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19-1024x726.png" alt="" class="wp-image-35075" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19-1024x726.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19-300x213.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19-768x544.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19-1536x1089.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-19-2048x1452.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Cell Statistics:</p>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20.png"><img loading="lazy" decoding="async" width="1024" height="603" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20-1024x603.png" alt="" class="wp-image-35076" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20-1024x603.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20-300x177.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20-768x452.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20-1536x905.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-20-2048x1206.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Please wait for some metrics and statistics some of them need up to 24h to be gathered.</p>



<p class="wp-block-paragraph">One more interesting functionality of this integration is that there are new Dashboards</p>



<p class="wp-block-paragraph">For Example Exadata Fleet Aggregated Capacity , Configuration , etc. </p>



<figure class="wp-block-image size-large"><a href="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23.png"><img loading="lazy" decoding="async" width="1024" height="753" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23-1024x753.png" alt="" class="wp-image-35086" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23-1024x753.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23-300x220.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23-768x564.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23-1536x1129.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/10/image-23-2048x1505.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">They can help you with overall look and capacity planning for future, you can see your total storage, memory current usage and historical values so you can predict growing trend in future.</p>



<p class="wp-block-paragraph">I hope you enjoy this tutorial and already plan your ExaCC integration 😉</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exacc-oci-integration-with-oem-13-5-cloud-control-installed-on-premises/">ExaCC OCI integration with OEM 13.5 Cloud Control installed On-premises.</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/exacc-oci-integration-with-oem-13-5-cloud-control-installed-on-premises/feed/</wfw:commentRss>
			<slash:comments>2</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-16 08:22:47 by W3 Total Cache
-->