<?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 Cloud - dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/category/cloud/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/category/cloud/</link>
	<description></description>
	<lastBuildDate>Thu, 14 May 2026 21:16:05 +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 Cloud - dbi Blog</title>
	<link>https://www.dbi-services.com/blog/category/cloud/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SQLDay 2026 Workshops Overview</title>
		<link>https://www.dbi-services.com/blog/sqlday-2026-workshops-overview/</link>
					<comments>https://www.dbi-services.com/blog/sqlday-2026-workshops-overview/#respond</comments>
		
		<dc:creator><![CDATA[Amine Haloui]]></dc:creator>
		<pubDate>Thu, 14 May 2026 21:16:03 +0000</pubDate>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Development & Performance]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[sqlday]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=44349</guid>

					<description><![CDATA[<p>SQLDay 2026 offers a full-day workshop program on 11 May 2026, before the main conference scheduled for 12–13 May 2026 in Wrocław, with onsite and online participation options depending on the session. The workshops cover several areas of the modern data platform: advanced BI, AI and MLOps, SQL performance tuning, PostgreSQL adoption, and Microsoft Fabric [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/sqlday-2026-workshops-overview/">SQLDay 2026 Workshops Overview</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-full"><a href="https://sqlday.pl/en/sqlday-2026/#workshop"><img fetchpriority="high" decoding="async" width="758" height="200" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/image-18.png" alt="" class="wp-image-44350" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/image-18.png 758w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/05/image-18-300x79.png 300w" sizes="(max-width: 758px) 100vw, 758px" /></a></figure>



<p>SQLDay 2026 offers a full-day workshop program on 11 May 2026, before the main conference scheduled for 12–13 May 2026 in Wrocław, with onsite and online participation options depending on the session. The workshops cover several areas of the modern data platform: advanced BI, AI and MLOps, SQL performance tuning, PostgreSQL adoption, and Microsoft Fabric automation.</p>



<h2 class="wp-block-heading" id="h-dax-beyond-the-basics">DAX – Beyond the Basics</h2>



<p>This workshop is designed for Power BI users who already know the basics of DAX but now need to solve more complex business problems. The focus is on moving from simple reports to reusable, efficient and business-oriented DAX patterns.</p>



<p>Participants will work on practical scenarios such as advanced slicer logic, hierarchical calculations, year-to-date reporting, visual calculations, cumulative totals, ranking, and relative-period analysis. The main objective is to extend the participant’s DAX toolbox and help them write expressions that are both more powerful and better performing</p>



<h2 class="wp-block-heading">AI in Databricks: Training, Deployment and Monitoring</h2>



<p>This Polish onsite workshop covers the complete lifecycle of machine learning models in Databricks. The goal is to show how to move from data preparation to training, automation, deployment and monitoring in a production-oriented environment.</p>



<p>The workshop focuses on the practical implementation of MLOps using Databricks and MLflow. Topics include AI/ML architecture, data pipelines, feature engineering, model training, deep learning, CI/CD, orchestration, model versioning and monitoring. It is mainly targeted at engineers, data scientists and architects who are already working with machine learning or planning to start.</p>



<h2 class="wp-block-heading">Building an Intelligent Agent in One Day with Copilot Studio</h2>



<p>This Polish onsite workshop focuses on building conversational and autonomous agents with Microsoft Copilot Studio. The format is highly practical, with most of the time dedicated to hands-on exercises.</p>



<p>Participants will build agents that automate business processes, use multimodal data, generate data-driven answers and connect to enterprise data sources. The workshop also covers Dataverse grounding, flows, plugins, actions, autonomous triggers, Responsible AI, moderation and access control. It is a good fit for participants who want to understand how Copilot Studio can be used beyond simple chatbot scenarios.</p>



<h2 class="wp-block-heading">Advanced T-SQL Triage: The Art of Fixing Terrible Code</h2>



<p>This workshop is focused on real-world SQL Server troubleshooting and refactoring. The starting point is familiar to many DBAs and developers: complex stored procedures, poor query patterns, blocking data modifications, bad use of CTEs, problematic window functions, indexed views, dynamic SQL, user-defined functions and execution plans that are difficult to understand.</p>



<p>The objective is not only to identify what is slow, but also to understand why it is slow and how to rewrite it properly. This session is especially relevant for people who regularly inherit problematic T-SQL code and need a structured way to fix it without guessing.</p>



<h2 class="wp-block-heading">Adding PostgreSQL to your SQL Server Skill Set</h2>



<p>This workshop targets SQL Server professionals who need to add PostgreSQL to their technical scope. The context is clear: many organizations are adding PostgreSQL without immediately replacing SQL Server, which creates a need for people who understand both platforms.</p>



<p>The workshop compares the two database engines, explains the areas of overlap, and highlights the differences that can make PostgreSQL challenging for SQL Server users. It also covers tooling, documentation, cloud options and practical resources to support the learning path.</p>



<h2 class="wp-block-heading">Automating Your Microsoft Fabric Data Platform: From Blueprint to Reality</h2>



<p>This onsite hands-on lab focuses on automation in Microsoft Fabric. The goal is to help participants automate the full lifecycle of a Fabric data platform, from design and setup to deployment and documentation.</p>



<p>The workshop covers platform setup using code and configuration scripts, metadata-driven ingestion, semantic model foundations, CI/CD with GitHub and Azure DevOps, Fabric CLI, REST APIs and the fabric-cicd Python library. The expected outcome is a more robust, scalable and repeatable approach to building Fabric solutions, with less manual work and lower operational risk.</p>



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



<p>The SQLDay 2026 workshop program is clearly oriented toward practical implementation. Each session addresses a common challenge faced by data teams: improving analytical models, industrializing AI, fixing complex SQL code, extending SQL Server skills to PostgreSQL, or automating a modern Microsoft Fabric platform.</p>



<p>The common thread is operational efficiency. These workshops are not only about learning features; they are about applying them in real environments, with constraints such as performance, maintainability, automation, governance and production readiness.</p>



<p>Thank you. <a href="https://www.linkedin.com/in/amine-haloui-76968056/">Amine Haloui.</a></p>



<p>References :</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-sqlday wp-block-embed-sqlday"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="PtjsmWOzXi"><a href="https://sqlday.pl/en/sqlday-2026/">SQLDay 2026</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8222;SQLDay 2026&#8221; &#8212; SQLDay" src="https://sqlday.pl/en/sqlday-2026/embed/#?secret=Aw5HUIvZfS#?secret=PtjsmWOzXi" data-secret="PtjsmWOzXi" width="500" height="282" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p></p>



<p></p>



<p></p>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/sqlday-2026-workshops-overview/">SQLDay 2026 Workshops Overview</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/sqlday-2026-workshops-overview/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>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>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>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>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>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>There are actually two types of clones: thin (space efficient) or full (byte-for-byte copy of source).</p>



<p>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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>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></p>



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



<p>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>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>On <strong>macOS</strong>, just run this command:</p>



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



<p>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>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 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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>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 class="wp-block-heading" id="h-creating-your-first-vm-with-the-oci-cli">Creating your first VM with the <code>oci</code> CLI</h2>



<p>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 class="wp-block-heading" id="h-retrieve-your-compartment-ocid">Retrieve your compartment OCID</h4>



<p>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>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 class="wp-block-heading" id="h-choose-an-availability-domain">Choose an availability domain</h4>



<p>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 class="wp-block-heading" id="h-retrieve-the-subnet-ocid">Retrieve the subnet OCID</h4>



<p>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 class="wp-block-heading" id="h-select-the-desired-shape">Select the desired shape</h4>



<p>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 class="wp-block-heading" id="h-choose-a-specific-image">Choose a specific image</h4>



<p>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 --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 class="wp-block-heading" id="h-build-your-first-virtual-machine">Build your first virtual machine</h2>



<p>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>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>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>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>Deploying Azure Terraform code with Azure DevOps and a storage account as remote backend</title>
		<link>https://www.dbi-services.com/blog/deploying-azure-terraform-code-with-azure-devops-and-a-storage-account-as-remote-backend/</link>
					<comments>https://www.dbi-services.com/blog/deploying-azure-terraform-code-with-azure-devops-and-a-storage-account-as-remote-backend/#respond</comments>
		
		<dc:creator><![CDATA[Adrien Devaux]]></dc:creator>
		<pubDate>Tue, 03 Feb 2026 09:00:48 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[devops]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=42496</guid>

					<description><![CDATA[<p>Why this blog? While I was working for a customer, I was tasked to create an Azure infrastructure, using Terraform and Azure DevOps (ADO). I thought about doing it like I usually do with GitLab but it wasn&#8217;t possible with ADO as it doesn&#8217;t store the state file itself. Instead I have to use an [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/deploying-azure-terraform-code-with-azure-devops-and-a-storage-account-as-remote-backend/">Deploying Azure Terraform code with Azure DevOps and a storage account as remote backend</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-why-this-blog">Why this blog? </h2>



<p>While I was working for a customer, I was tasked to create an Azure infrastructure, using Terraform and Azure DevOps (ADO). I thought about doing it like I usually do with GitLab but it wasn&#8217;t possible with ADO as it doesn&#8217;t store the state file itself. Instead I have to use an Azure Storage Account. I configured it, blocked public network, and realized that my pipeline couldn&#8217;t push the state in the Storage Account</p>



<p>In fact, ADO isn&#8217;t supported as a &#8220;Trusted Microsoft Service&#8221; and so it can&#8217;t bypass firewall rules using that option in Storage Accounts. For this to work, I had to create a self-hosted agent that run on Azure VM Scale Set and that will be the topic of this blog. </p>



<h2 class="wp-block-heading" id="h-azure-resources-creation">Azure resources creation</h2>



<h3 class="wp-block-heading" id="h-agent-creation">Agent Creation </h3>



<p>First thing, we create a Azure VM Scale Set. I kept most parameters to their default values but it can be customized. I chose Linux as operating system as it was what I needed. One important thing is to set the &#8220;Orchestration mode&#8221; to &#8220;Uniform&#8221;, else ADO pipelines won&#8217;t work.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="467" height="221" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-13.png" alt="" class="wp-image-42519" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-13.png 467w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-13-300x142.png 300w" sizes="auto, (max-width: 467px) 100vw, 467px" /></figure>



<h3 class="wp-block-heading" id="h-storage-account">Storage account </h3>



<p>For the storage account that will store our state, any storage account should work. Just note that you also need to create a <strong>container </strong>inside of it to fill your terraform provider. Also, for network preferences we will go with &#8220;Public access&#8221; and &#8220;Enable from selected networks&#8221;. This is will allow public access only from restricted networks. I do this to avoid creating a private endpoint to connect to a fully private storage account.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="487" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-15-1024x487.png" alt="" class="wp-image-42521" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-15-1024x487.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-15-300x143.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-15-768x365.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-15.png 1352w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-entra-id-identity-for-the-pipeline">Entra ID identity for the pipeline</h3>



<p>We also need to create an Entra ID Enterprise Application that we will provide to the pipeline. This identity must have <strong>Contributor</strong> (or any look alike) role over the scope you target. Also, it must have at least <strong>Storage Blob Data Contributor</strong> on the Storage Account to be able to write in it.</p>



<h2 class="wp-block-heading" id="h-azure-devops-setup">Azure DevOps setup</h2>



<h3 class="wp-block-heading" id="h-terraform-code">Terraform code</h3>



<p>You can use any Terraform code you want, for my example I only use one which creates a Resource Group and a Virtual Network. Just note that your provider should look like this</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="483" height="322" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-16.png" alt="" class="wp-image-42522" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-16.png 483w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-16-300x200.png 300w" sizes="auto, (max-width: 483px) 100vw, 483px" /></figure>



<h3 class="wp-block-heading" id="h-pipeline-code">Pipeline code</h3>



<p>I&#8217;m used to split my pipeline in two files, the plan.yml will be given to the ADO pipeline and it will call the template to run its code. The things done in the pipeline are pretty simple. It installs Terraform on the VM Scale Set instance, then run the Terraform commands. The block of code can be reused for the &#8220;apply&#8221;.</p>



<p>Few things to note, in my plan.yml I set a Variable Group &#8220;Terraform_SPN&#8221; that I will show you just after. That&#8217;s where we will find the information about our previously created Entra Id Enterprise Application</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="697" height="441" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-19.png" alt="" class="wp-image-42525" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-19.png 697w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-19-300x190.png 300w" sizes="auto, (max-width: 697px) 100vw, 697px" /></figure>



<p>In the template.yml, what is important to note is the pool definition. Here I point just a name, which correspond to ADO Agent Pool that I created. I&#8217;ll also show this step a bit further. </p>



<pre class="wp-block-code"><code></code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="711" height="557" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-20.png" alt="" class="wp-image-42526" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-20.png 711w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-20-300x235.png 300w" sizes="auto, (max-width: 711px) 100vw, 711px" /></figure>



<p id="h-">For the pipeline creation itself, we will go to <strong>Pipeline</strong> -&gt; Create a new pipeline -&gt; Azure Repos Git</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1020" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-21-1020x1024.png" alt="" class="wp-image-42527" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-21-1020x1024.png 1020w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-21-300x300.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-21-150x150.png 150w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-21-768x771.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-21.png 1042w" sizes="auto, (max-width: 1020px) 100vw, 1020px" /></figure>



<p>Then Existing Azure Pipelines YAML file, and pick our file from our repo.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="509" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-22-1024x509.png" alt="" class="wp-image-42528" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-22-1024x509.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-22-300x149.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-22-768x382.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-22-1536x763.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-22-2048x1018.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>We will also create a <strong>Variable Group</strong>, the name doesn&#8217;t matter, just remember to put the same in your YAML code. Here you create 4 variables which are information coming from your tenant and your enterprise application. That&#8217;s gonna be used during the pipeline run to deploy your resources.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="724" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-25-1024x724.png" alt="" class="wp-image-42531" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-25-1024x724.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-25-300x212.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-25-768x543.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-25.png 1375w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading" id="h-ado-agent-pool">ADO Agent Pool</h3>



<p>In the <strong>Project Settings</strong>, look for <strong>Agent Pools</strong>. Then create a new one and fill it as follow:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="505" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-23-1024x505.png" alt="" class="wp-image-42529" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-23-1024x505.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-23-300x148.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-23-768x378.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-23-1536x757.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-23-2048x1009.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>The <strong>Authorize</strong> button will appear after you select the subscription you want, and to accept this your user must have the Owner role, as it adds rights. This will allow ADO to communicate with Azure by creating a Service Principal. Then you can fill the rest as follow:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="475" height="797" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-24.png" alt="" class="wp-image-42530" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-24.png 475w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-24-179x300.png 179w" sizes="auto, (max-width: 475px) 100vw, 475px" /></figure>



<h3 class="wp-block-heading" id="h-ado-pipeline-run">ADO pipeline run</h3>



<p>When you first run your pipeline you must authorize it to use the <strong>Variable Group</strong> and the <strong>Agent pool</strong>.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="189" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-27-1024x189.png" alt="" class="wp-image-42533" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-27-1024x189.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-27-300x55.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-27-768x141.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-27-1536x283.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-27.png 1917w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="445" height="307" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-26.png" alt="" class="wp-image-42532" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-26.png 445w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-26-300x207.png 300w" sizes="auto, (max-width: 445px) 100vw, 445px" /></figure>



<p>One this is done, everything should go smoothly and end like this.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="42" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-28-1024x42.png" alt="" class="wp-image-42534" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-28-1024x42.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-28-300x12.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-28-768x31.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-28-1536x63.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2026/01/image-28.png 1592w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>I hope that this blog was useful and could help you troubleshoot that king of problem between Azure and Azure DevOps.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/deploying-azure-terraform-code-with-azure-devops-and-a-storage-account-as-remote-backend/">Deploying Azure Terraform code with Azure DevOps and a storage account as remote backend</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/deploying-azure-terraform-code-with-azure-devops-and-a-storage-account-as-remote-backend/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Exascale storage architecture</title>
		<link>https://www.dbi-services.com/blog/exascale-storage-architecture/</link>
					<comments>https://www.dbi-services.com/blog/exascale-storage-architecture/#respond</comments>
		
		<dc:creator><![CDATA[Alain Klein]]></dc:creator>
		<pubDate>Tue, 16 Dec 2025 11:26:14 +0000</pubDate>
				<category><![CDATA[Cloud]]></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 infrastructure]]></category>
		<category><![CDATA[resource pooling]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=41712</guid>

					<description><![CDATA[<p>In the first article, we discovered Exascale from a high level overview with a focus on Exascale Infrastructure. In this new article, we will dive into the Exascale storage architecture, with details about the physical components as well as the services and processes managing this new storage management approach for Exadata. In this blog post, [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exascale-storage-architecture/">Exascale storage architecture</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-in-the-first-article-we-discovered-exascale-from-a-high-level-overview-with-a-focus-on-exascale-infrastructure-in-this-new-article-we-will-dive-into-the-exascale-storage-architecture-with-details-about-the-physical-components-as-well-as-the-services-and-processes-managing-this-new-storage-management-approach-for-exadata">In the first article, we discovered Exascale from a high level overview with a focus on Exascale Infrastructure. In this new article, we will dive into the Exascale storage architecture, with details about the physical components as well as the services and processes managing this new storage management approach for Exadata.</h2>



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



<p>In this blog post, we will explore the Exascale storage architecture and processes pertaining to Exascale. But before diving in, a quick note to avoid any confusion about Exascale: even though in the <a href="https://www.dbi-services.com/blog/exascale-infrastructure-new-flavor-of-exadata-database-service/">previous article</a>, we focused on Exascale Infrastructure and its various benefits in terms of small footprint and hyper-elasticity based on modern cloud characteristics, it is important to keep in mind that <strong>Exascale is an Exadata technology</strong> and not a cloud-only technology. You can benefit from it in non-cloud deployments as well such as on Exadata Database Machine deployed in your data centers.</p>



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



<h3 class="wp-block-heading" id="h-exascale-storage-components">Exascale storage components</h3>



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



<p>Here is the overall picture:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="540" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-1-2.jpg" alt="" class="wp-image-42075" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-1-2.jpg 960w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-1-2-300x169.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-1-2-768x432.jpg 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></figure>



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



<h4 class="wp-block-heading" id="h-exascale-cluster">Exascale cluster</h4>



<p>An Exascale Cluster is composed of Exadata storage servers to provide storage to Grid Infrastructure clusters and the databases. An Exadata storage server can belong to only one Exascale cluster.</p>



<p>Software services (included in the Exadata System Software stack) run on each Exadata cluster for managing the cluster resources made available to GI and databases, namely pool disks, storage pools, vaults, block volumes and many other.</p>



<p>With Exadata Database Service on Exascale Infrastructure, the number of Exadata storage servers included in the Exascale cluster can be quite huge, hundreds maybe even thousands storage servers, to enable cloud-scale storage resource pooling.</p>



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



<h4 class="wp-block-heading" id="h-storage-pools">Storage pools</h4>



<p>A storage pool is a collection of pool disks (see below for details about pool disks).</p>



<p>Each Exascale cluster requires at least one storage pool.</p>



<p>A storage pool can be dynamically reconfigured by changing pool disks size, allocating more pool disks or adding Exadata storage servers.</p>



<p>The pool disks found inside a storage pool must be of the same media type.</p>



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



<h4 class="wp-block-heading" id="h-pool-disks">Pool disks</h4>



<p>A pool disk is physical storage space allocated from an Exascale-specific cell disk to be integrated in a storage pool.</p>



<p>Each storage server physical disk has a LUN in the storage server OS and a cell disk is created as a container for all Exadata-related partitions within the LUN. Each partition in a cell disk is then designated as a pool disk for Exascale (or grid disk in case of ASM is used instead of Exascale).</p>



<p>A media type is associated to each pool disk based on the underlying storage device and can be one of the following :</p>



<ul class="wp-block-list">
<li>HC : points to high capacity storage using hard disk drives</li>



<li>EF : based on extreme flash storage devices</li>



<li>XT : corresponds to extended storage using hard disk drives found in <a href="https://blogs.oracle.com/exadata/exadata-x11m-extended-and-recovery-appliance-ra23-z">Exadata Storage Server X11M Extended (XT) hardware</a></li>
</ul>



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



<h4 class="wp-block-heading" id="h-vaults">Vaults</h4>



<p>Vaults are logical storage containers used for storing files and are allocated from storage pools. By default, without specific provisioning attributes, vaults can use all resources from all storage pools of an Exascale cluster.</p>



<p>Here are the two main services provided by vaults:</p>



<ol class="wp-block-list">
<li><strong>Security isolation</strong>: a security perimeter is associated with vaults based on user access controls which guarantee a strict isolation of data between users and clusters.</li>



<li><strong>Resource control</strong>: storage pool resources usage is configured at the vault level for attributes like storage space, IOPS, XRMEM and flash cache sizing.</li>
</ol>



<p>For those familiar with ASM, think of vaults as the equivalent to ASM disk groups. For example, instance parameters like ‘db_create_file_dest’ and ‘db_recovery_file_dest’ reference vaults instead of ASM disk groups by using &#8216;@vault_name&#8217; syntax.</p>



<p>Since attributes like redundancy, type of file content, type of media are positioned at the file level instead at the logical storage container, there is no need to organize vaults in the same manner as we did for disk groups. For instance, we don&#8217;t need to create a first vault for data and a second vault for recovery files as we are used to with ASM.</p>



<p>Beside database files, vaults can also store other types of files even though it is recommended to store non database files on block volumes. That&#8217;s because Exascale is optimized for storing large files such as database files whereas regular files are typically much smaller and fit more on block volumes.</p>



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



<h4 class="wp-block-heading" id="h-files">Files</h4>



<p>The main files found on Exascale storage are Database and Grid Infrastructure files. Beyond that, all objects in Exascale are represented as files of a certain type. Each file type has storage attributes defined in a template. The file storage attributes are :</p>



<ul class="wp-block-list">
<li>mediaType : HC, EF or XT</li>



<li>redundancy : currently high</li>



<li>contentType : DATA and RECO</li>
</ul>



<p>This makes a huge difference with ASM where different redundancy needs required to create different disk groups. With Exascale, it is now possible to store files with different redundancy requirements in the same storage structure (vaults). This also enables to optimize usage of the storage capacity.</p>



<p>Files are composed of extents of 8MB in size which are mirrored and stripped across all vault&#8217;s storage resources.</p>



<p>The tight integration of the database kernel with Exascale makes it possible for Exascale to automatically understand the type of file the database asks to create and thus applies the appropriate attributes defined in the file template. This prevents Exascale to store data and recovery files extents (more on extents in the next section) on the same disks and also guarantees that mirrored extents are located on different storage servers than the primary extent.</p>



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



<h4 class="wp-block-heading" id="h-file-extents">File extents</h4>



<p>Remember that in Exascale, storage management moved from the compute servers to the storage servers. Specifically, this means the building blocks of files, namely extents, are managed by the storage servers.</p>



<p>The new data structure used for extent management is a mapping table which tracks for each file extent the location of the primary and mirror copy extents in the storage servers. This mapping table is cached by each database server and instance to retrieve its file extents location. Once the database has the extent location, it can directly make an I/O call to the appropriate storage server. In case the mapping table is no more up-to-date because of database physical structure changes or storage servers addition or removal, an I/O call can be rejected, triggering a mapping table refresh allowing the I/O call to be retried.</p>



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="538" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-2-1024x538.jpg" alt="Exascale mapping table" class="wp-image-41824" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-2-1024x538.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-2-300x158.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-2-768x404.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-2-1536x807.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-2-2048x1076.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<h4 class="wp-block-heading" id="h-exascale-block-store-with-rdma-enabled-block-volumes">Exascale Block Store with RDMA-enabled block volumes</h4>



<p>Block volumes can be allocated from storage pools to store regular files on file systems like ACFS or XFS. They also enable centralization of VC VM images, thus cutting the dependency of VM images to internal compute node storage and streamlining migrations between physical database servers. Clone, snapshot and backup and restore features for block volumes can leverage all resources of the available storage servers.</p>



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



<h3 class="wp-block-heading" id="h-exascale-storage-services">Exascale storage services</h3>



<p>From a software perspective, Exascale is composed of a number of software services available in the Exadata System Software (since release 24.1). These software services run mainly on the Exadata Storage Servers but also on the Exadata Database Servers.</p>



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



<h4 class="wp-block-heading" id="h-exascale-storage-server-services">Exascale storage server services</h4>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Service</strong></td><td><strong>Description</strong></td></tr><tr><td><strong>EGS</strong> &#8211; Cluster Services</td><td>EGS (Exascale Global Services) main task is to manage the storage allocated to storage pools. In addition, EGS also controls storage cluster membership, security and identity services as well as monitoring the other Exascale services.</td></tr><tr><td><strong>ERS</strong> &#8211; Control Services</td><td>ERS (Exascale RESTful Services) provide the management endpoint for all Exascale management operations. The new Exascale command-line interface (ESCLI), used for monitoring and management functions, leverages ERS for command execution.</td></tr><tr><td><strong>EDS</strong> &#8211; Exascale Vault Manager Services</td><td>EDS (Exascale Data Services) are responsible for files and vaults metadata management and are made up of two groups of services:<br>System Vault Manager and User Vault Manager.<br><br>System Vault Manager (SYSEDS) manages Exascale vaults metadata, such as the security perimeter through ACL and vaults attributes<br><br>User Vault Manager (USREDS) manages Exascale files metadata, such as ACLs and attributes as well as clones and snapshots metadata</td></tr><tr><td><strong>BSM</strong> &#8211; Block Store Manager</td><td>BSM manages Exascale block storage metadata and controls all block store management operations like volume creation, attachment, detachment, modification or snapshot.</td></tr><tr><td><strong>BSW</strong> &#8211; Block Store Worker</td><td>These services perform the actual requests from clients and translate them to storage server I/O.</td></tr><tr><td><strong>IFD</strong> &#8211; Instant Failure Detection</td><td>IFD service watches for failures which could arise in the Exascale cluster and triggers recovery actions when needed.</td></tr><tr><td><strong>Exadata Cell Services</strong></td><td>Exadata cell services are required for Exascale to function and both services work in conjunction to provide the Exascale features.</td></tr></tbody></table></figure>



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



<h4 class="wp-block-heading" id="h-exascale-database-server-services">Exascale database server services</h4>



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



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Service</strong></td><td><strong>Description</strong></td></tr><tr><td><strong>EGS</strong> &#8211; Cluster Services</td><td>EGS instances will run on database servers when the Exadata configuration has fewer than five storage servers</td></tr><tr><td><strong>BSW</strong> &#8211; Block Store Worker</td><td>Services requests from block store clients and performs the resulting storage server I/O</td></tr><tr><td><strong>ESNP</strong> &#8211; Exascale Node Proxy</td><td>ESNP provides Exascale cluster state to GI and Database processes.</td></tr><tr><td><strong>EDV</strong> &#8211; Exascale Direct Volume</td><td>EDV service exposes Exascale block volumes to Exadata compute nodes and runs I/O requests on EDV devices.</td></tr><tr><td><strong>EGSB/EDSB</strong></td><td>Per database instance services that maintain metadata about the Exascale cluster and vaults</td></tr></tbody></table></figure>



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



<p>Below diagram depicts how the various Exascale services are dispatched on the storage and compute nodes:</p>



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="573" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-3-1024x573.jpg" alt="Exascale processes" class="wp-image-41825" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-3-1024x573.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-3-300x168.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-3-768x430.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-3-1536x860.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/12/XS-storage-arch-3-2048x1146.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



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



<p>By rearchitecting Exadata storage management with focus on space efficiency, flexibility and elasticity, Exascale can now overcome the main limitations of ASM:</p>



<ul class="wp-block-list">
<li>diskgroup resizing complexity and time-consuming rebalance operation </li>



<li>space distribution among DATA and RECO diskgroups requiring rigorous estimation of storage needs for each</li>



<li>sparse diskgroup requirement for cloning with a read-only test master or use of ACFS without smart scan</li>



<li>redundancy configuration at the diskgroup level</li>
</ul>



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



<p>The below links will provide you further details on the matter:</p>



<p><a href="https://blogs.oracle.com/exadata/exadata-exascale">Oracle Exadata Exascale blog</a></p>



<p><a href="https://blogs.oracle.com/exadata/advantages-of-exadata-exascale">Oracle Exadata Exascale advantages blog</a></p>



<p><a href="https://blogs.oracle.com/exadata/exascale-storage-fundamentals">Oracle Exadata Exascale storage fundamentals blog</a></p>



<p><a href="https://docs.oracle.com/en/engineered-systems/exadata-database-machine/exscl/exascale-components-and-concepts.html">Oracle Exascale documentation</a></p>



<p><a href="https://www.oracle.com/database/technologies/exadata/architecture/">Oracle Exadata architecture</a></p>



<p><a href="https://oracleandme.com/2025/02/11/exascale-1-3-why-asm-needed-an-heir-worthy-of-the-21st-century/">Oracle And Me blog &#8211; Why ASM Needed an Heir Worthy of the 21st&nbsp;Century</a></p>



<p><a href="https://oracleandme.com/2025/02/14/exascale-2-3-new-exascale-architecture/">Oracle And Me blog &#8211; New Exascale architecture</a></p>



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



<p>More on the exciting Exascale technology in coming posts &#8230; </p>



<div style="height:15px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://www.dbi-services.com/blog/exascale-storage-architecture/">Exascale storage architecture</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-storage-architecture/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Exascale Infrastructure : new flavor of Exadata Database Service</title>
		<link>https://www.dbi-services.com/blog/exascale-infrastructure-new-flavor-of-exadata-database-service/</link>
					<comments>https://www.dbi-services.com/blog/exascale-infrastructure-new-flavor-of-exadata-database-service/#respond</comments>
		
		<dc:creator><![CDATA[Alain Klein]]></dc:creator>
		<pubDate>Mon, 24 Nov 2025 08:30:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></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 infrastructure]]></category>
		<category><![CDATA[resource pooling]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=41555</guid>

					<description><![CDATA[<p>Oracle unveiled Exadata Database Service on Exascale Infrastructure in summer 2024. In this blog post, the first of a series dedicated to Exascale, we will dive into its architecture after a brief presentation of what Exascale is. Introduction Exadata on Exascale Infrastructure is a new deployment option for Exadata Database Service. It comes in addition [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exascale-infrastructure-new-flavor-of-exadata-database-service/">Exascale Infrastructure : new flavor of Exadata Database Service</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-oracle-unveiled-exadata-database-service-on-exascale-infrastructure-in-summer-2024-in-this-blog-post-the-first-of-a-series-dedicated-to-exascale-we-will-dive-into-its-architecture-after-a-brief-presentation-of-what-exascale-is">Oracle unveiled Exadata Database Service on Exascale Infrastructure in summer 2024. In this blog post, the first of a series dedicated to Exascale, we will dive into its architecture after a brief presentation of what Exascale is.</h2>



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



<h3 class="wp-block-heading" id="h-introduction">Introduction</h3>



<p>Exadata on Exascale Infrastructure is a new deployment option for Exadata Database Service. It comes in addition to the well known Exadata Cloud@Customer or Exadata on Dedicated Infrastructure options already available. It is based on new storage management technology decoupling database and Grid Infrastructure clusters from the Exadata underlying storage servers by integrating the database kernel directly with the Exascale storage structures.</p>



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



<h3 class="wp-block-heading" id="h-what-is-exascale-infrastructure">What is Exascale Infrastructure ?</h3>



<p>Simply put, Exascale is the next-generation of Oracle Exadata Database Services. It combines a cloud storage approach for flexibilty and hyper-elasticity with the performance of Exadata Infrastructure. It introduces a loosely-coupled shared and multitenant architecture where Database and Grid Infrastructure clusters are decoupled from the underlying Exadata storage servers which become a pool of shared storage resources available for multiple Grid Infrastructure clusters and databases.</p>



<p>Strict data isolation provides secure storage sharing while storage pooling enables flexible and dynamic provisioning combined with better storage space and processing utilization.</p>



<p>Advanced snapshot and cloning features, leveraging Redirect-On-Write technology instead of Copy-On-Write, enable space-efficient thin clones from any read/write database or pluggable database. Read-only test master are therefore a thing of the past. These features alone make Exascale a game-changer for database refreshes, CI/CD workflows and pipelines, development environments provisioning, all done with single SQL commands and much faster than before.</p>



<p>Block storage services allow the creation of arbitrary-sized block volumes for use by numerous applications. Exascale block volumes are also used to store Exadata database server virtual machines images enabling :</p>



<ul class="wp-block-list">
<li>creation of more virtual machines</li>



<li>removal of local storage dependency inside the Exadata compute nodes</li>



<li>seamless migration of virtual machines between different compute nodes</li>
</ul>



<p>Finally, the following hardware and software considerations complete this brief presentation of Exascale:</p>



<ul class="wp-block-list">
<li>runs on 2-socket Oracle Exadata system hardware with RoCE Network Fabric (X8M-2 or later)</li>



<li>Database 23ai release 23.5.0 or later is required for full-featured native Database file storage in Exascale</li>



<li>Exascale block volumes support databases using older Database software releases back to Oracle Database 19c</li>



<li>Exascale is built into Exadata System Software (since release 24.1)</li>
</ul>



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



<h3 class="wp-block-heading" id="h-architecture">Architecture</h3>



<p>The main point with Exascale architecture is cloud-scale, multi-tenant <strong>resource pooling</strong>, both for storage and compute.</p>



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



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="540" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-1.jpg" alt="" class="wp-image-41593" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-1.jpg 960w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-1-300x169.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-1-768x432.jpg 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></figure>



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



<h4 class="wp-block-heading" id="h-storage-pooling">Storage pooling</h4>



<p>Exascale is based on pooling storage servers which provide services such as Storage Pools, Vaults and Volume Management. Vaults, which can be considered an equivalent of ASM diskgroups, are directly accessed by the database kernel.</p>



<p>File and extent management is done by Exadata System Software, thus freeing the compute layer from ASM processes and memory structures for database files access and extents management (with Database 23ai or 26ai; for Database 19c, ASM is still required). With storage management moving to storage servers, resource management becomes more flexible and more memory and CPU resources are available on compute nodes to process database tasks.</p>



<p>Exascale also provides redundancy, caching, file metadata management, snapshots and clones as well as security and data integrity features.</p>



<p>Of course, since Exascale is built on top of Exadata, you benefit from features like RDMA, RoCE, Smart Flash Cache, XRMEM, Smart Scan, Storage Indexes, Columnar Caching.</p>



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



<h4 class="wp-block-heading" id="h-compute-pooling">Compute pooling</h4>



<p>On the compute side, we have database-optimized servers which run Database 23ai or newer and Grid Infrastructure Cluster management software. The physical database servers host the VM Clusters and are managed by Oracle. Unlike Exadata on Dedicated Infrastructure, there is no need to provision an infrastructure before going ahead with VM Cluster creation and configuration : in Exascale, you only deal with VM Clusters.</p>



<p>VM file systems are centrally-hosted by Oracle on RDMA-enabled block volumes in a system-vault. VM images used by the VM Clusters are no more hosted on local storage on the database servers. This enables the number of VMs running on the database servers to raise from 12 to 50.</p>



<p>Each VM Cluster accesses a Database Vault storing the database files with strict isolation from other VM Clusters database files.</p>



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



<h4 class="wp-block-heading" id="h-virtual-cloud-network">Virtual Cloud Network</h4>



<p>Client and backup connectivity is provided by Virtual Cloud Network (VCN) services.</p>



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



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="540" src="http://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-2.jpg" alt="" class="wp-image-41614" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-2.jpg 960w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-2-300x169.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/11/XS-Archi-2-768x432.jpg 768w" sizes="auto, (max-width: 960px) 100vw, 960px" /></figure>



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



<p>This loosely-coupled, shared and multitenant architecture enables far greater flexibilty than what was possible with ASM or even Exadata on Dedicated Infrastructure. Exascale&#8217;s hyper-elasticity enables to start with very small VM Clusters and then scale as the workloads increase, with Oracle managing the infrastructure automatically. You can start as small as 1 VM per cluster (up to 10), 8 eCPUs per VM (up to 200), 22GB of memory per VM, 220GB file system storage per VM and 300GB Vault storage per VM Cluster (up to 100TB). Memory is tightly coupled to eCPUs configuration with 2.75GB per eCPU and thus does not scale independently from the eCPUs number.</p>



<p>For those new to eCPU, it is a standard billing metric based on the number of cores per hour elastically allocated from a pool of compute and storage servers. eCPUs are not tied to the make, model or clock speed of the underlying processor. By contrast, an OCPU is the equivalent of one physical core with hyper-threading enabled. </p>



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



<h3 class="wp-block-heading" id="h-to-summarize">To summarize</h3>



<p>To best understand what Exascale Infrastructure is and introduces, here is the wording which best describes this new flavor of Exadata Database Service :</p>



<ul class="wp-block-list">
<li>loosely-coupling of compute and storage cloud</li>



<li>hyper-elasticity</li>



<li>shared and multi-tenant service model</li>



<li>ASM-less (for 23ai or newer)</li>



<li>Exadata performance, reliability, availability and security at any scale</li>



<li>CI/CD friendly</li>



<li>pay-per-use model</li>
</ul>



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



<p>Stay tuned for more on Exascale &#8230;</p>
<p>L’article <a href="https://www.dbi-services.com/blog/exascale-infrastructure-new-flavor-of-exadata-database-service/">Exascale Infrastructure : new flavor of Exadata Database Service</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/exascale-infrastructure-new-flavor-of-exadata-database-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server’s LinkedIn Posts catch-up!</title>
		<link>https://www.dbi-services.com/blog/sql-servers-linkedin-posts-catch-up/</link>
					<comments>https://www.dbi-services.com/blog/sql-servers-linkedin-posts-catch-up/#respond</comments>
		
		<dc:creator><![CDATA[Stéphane Haby]]></dc:creator>
		<pubDate>Thu, 30 Oct 2025 13:38:40 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Database Administration & Monitoring]]></category>
		<category><![CDATA[Database management]]></category>
		<category><![CDATA[Development & Performance]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[Technology Survey]]></category>
		<category><![CDATA[Microsoft]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=41386</guid>

					<description><![CDATA[<p>You may not have followed all my posts this summer about what we are doing with Microsoft SQL Server technology and the BI stack like Power BI and Azure Data Fabric. So, I thought I&#8217;d write a little catch-up blog post, to help you to find all LinkedIn Posts! First, a bit of humour with [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/sql-servers-linkedin-posts-catch-up/">SQL Server’s LinkedIn Posts catch-up!</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>You may not have followed all my posts this summer about what we are doing with Microsoft SQL Server technology and the BI stack like Power BI and Azure Data Fabric.</p>



<p>So, I thought I&#8217;d write a little catch-up blog post, to help you to find all LinkedIn Posts!</p>



<p>First, a bit of humour with this image of SQL Server scrolling through LinkedIn and wondering if anyone still loves it&#8230; Meanwhile, Power BI and Azure Data Fabric are stealing the show. </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="602" height="903" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/10/Picture1.png" alt="" class="wp-image-41388" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/10/Picture1.png 602w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/10/Picture1-200x300.png 200w" sizes="auto, (max-width: 602px) 100vw, 602px" /></figure>



<p>Let&#8217;s talk about SQL Server, and in particular all tests done on SQL Server 2025:  </p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_sql-server-2025-retirement-of-sql-server-activity-7343210645720317975-_eYk?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk">SSRS Deprecation – It’s time to rethink your reporting architecture</a></strong> explain you how with our Team, we can help you to go forward!</p>



<p><strong>d<a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_sqlserver2025-activity-7367160196273545221-mnBV?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk">bi services’ blog on fire for SQL Server 2025<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /></a></strong> with this Tips to find all our SQL Server blogs : just Google: <strong>site:<a href="http://dbi-services.com/blog">dbi-services.com/blog</a> SQL Server 2025</strong></p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_sqlserver2025-alwayson-activity-7335937244957982720-RnZi?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f575-1f3fb.png" alt="🕵🏻" class="wp-smiley" style="height: 1em; max-height: 1em;" />Exploring SQL Server 2025 blogs</a></strong> with tests on SQL Server 2025 new features</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_microsoft-price-increase-for-on-premises-activity-7370734793887498240-7x9z?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk">Time to review your SQLServer licenses</a></strong> with 10% price increase for SQL Server licences, we can help you to optimize your SQL Server Architecture!</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_dbi-blog-activity-7361055722178023425-RxJO?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk">SQL Server 2025: AI, Performance… and real-world Lessons</a></strong> with a lot of deep tests and new thinking about  Tuning, Performance &amp; AI</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_sql-server-security-updates-activity-7379426832149954560-Jp0P?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Your SQL Server might be exposed right now</a></strong> is a very important topic because Microsoft put in Augaust and Septembre critical patches in High importance</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_sqlserver2025-activity-7343974921234001920-UtLO?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk">SQL Server 2025 – What’s new &amp; What’s next?</a></strong> withgood feedback and ideas from SQLBits 2025  in London</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_sqlserver2025-microsoftfabric-ai-activity-7363084169750478848-WnMp?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk">It&#8217;s time to rethink your data strategy with SQL Server 2025 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f914.png" alt="🤔" class="wp-smiley" style="height: 1em; max-height: 1em;" /></a></strong>with the end of DQS, MDS and Synapse Link, it’s  the opportunity to see our expertise in Microsoft Fabic </p>



<p>And also, publications about how we can help beside SQL Server and share these experiences &amp; expertise:</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_azure-powerbi-datafabric-activity-7375849857544130560-Az-_?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Struggling with rising Azure Data Fabric &amp; Power BI costs?</a></strong> with our experience to help to optimize the cost of your Azure Platform using the BI stack</p>



<p><strong><a href="https://www.linkedin.com/posts/st%C3%A9phane-haby-4481b633_mfiles-sqlserver-activity-7359190630989713409-GFHU?utm_source=social_share_send&amp;utm_medium=member_desktop_web&amp;rcm=ACoAAAb4YfgBKm8-2tQBY5Bec74LclUAp9YYckk"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> When M-Files meets SQL Server</a></strong> with our SQL Server &amp; M-Files expertise, we are on the top to help you to configure, customize, optimize, secure  your M-File infrastructure</p>



<p>Continue to follow us in our blogs and linkedIn posts!</p>
<p>L’article <a href="https://www.dbi-services.com/blog/sql-servers-linkedin-posts-catch-up/">SQL Server’s LinkedIn Posts catch-up!</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/sql-servers-linkedin-posts-catch-up/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>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>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>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>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></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>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></p>



<p>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>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>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>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></p>



<p>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>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>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>You are now connected to the Oracle ADB instance through the <code>mongosh</code> utility.</p>



<p></p>



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



<p>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></p>



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



<p>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>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></p>



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



<p>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>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></p>



<p>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>Metadata-driven pipelines : la continuité du Master Package SSIS</title>
		<link>https://www.dbi-services.com/blog/metadata-driven-pipelines-la-continuite-du-master-package-ssis/</link>
					<comments>https://www.dbi-services.com/blog/metadata-driven-pipelines-la-continuite-du-master-package-ssis/#respond</comments>
		
		<dc:creator><![CDATA[Emmanuel Champel]]></dc:creator>
		<pubDate>Thu, 25 Sep 2025 09:54:29 +0000</pubDate>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[ETL]]></category>
		<category><![CDATA[MS Fabric]]></category>
		<category><![CDATA[Pipeline]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=40342</guid>

					<description><![CDATA[<p>Organiser des flux, c’est une question qui m’a accompagné tout au long de ma carrière. Quand j’ai commencé avec les ETL, j’ai appris “à l’ancienne” : toutes les règles de gestion codées directement dans les packages. Une approche rigide, lourde à maintenir, et qui surtout créait une dépendance forte de mes clients envers moi. Assez [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/metadata-driven-pipelines-la-continuite-du-master-package-ssis/">Metadata-driven pipelines : la continuité du Master Package SSIS</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><strong>Organiser des flux</strong>, c’est une question qui m’a accompagné tout au long de ma carrière.</p>



<p>Quand j’ai commencé avec les ETL, j’ai appris “à l’ancienne” : toutes les règles de gestion codées directement dans les packages. Une approche rigide, lourde à maintenir, et qui surtout créait une dépendance forte de mes clients envers moi.</p>



<p>Assez vite, j’ai développé une autre méthode, que j’ai fini par appliquer dès que je le pouvais :</p>



<ul class="wp-block-list">
<li>utiliser l’<strong>ETL</strong> comme orchestrateur,</li>



<li>confier le cœur du traitement au SQL,</li>



<li>et donner à mes clients plus d’autonomie, tout en simplifiant la maintenance.</li>
</ul>



<p>Dans ce blog, je vais partager cette approche et comparer deux contextes :</p>



<ul class="wp-block-list">
<li>La structure de base que j&#8217;utilise pour <strong>SSIS </strong>depuis de longues années</li>



<li>Ce même modèle ré-adapté à <strong>MS Fabric</strong> et aux nouvelles options que <strong>Pipeline</strong> offre</li>
</ul>



<h3 class="wp-block-heading" id="h-le-master-package-ssis-ma-premiere-brique-de-factorisation">Le Master Package SSIS : ma première brique de factorisation</h3>



<p>Quand j’ai commencé à travaillé avec SSIS, j’ai vite cherché à éviter de répéter les mêmes flux. Dupliquer dix fois un package juste parce qu’on change le nom d’une table, pour moi, ça n’a jamais eu de sens.</p>



<p>La solution que j’ai mise en place, c’était le <strong>Master Package</strong>, ce n&#8217;est pas une idée nouvelle, mais je l&#8217;ai adapté à ma façon de travailler. L’idée était simple :</p>



<ul class="wp-block-list">
<li>construire des packages enfants très unitaires (un fichier, une table, une logique claire),</li>



<li>centraliser l’exécution dans un Master qui lit une table de pilotage,</li>



<li>et exécuter les sous-packages selon un scénario défini en base.</li>
</ul>



<p><strong>Avantages obtenus :</strong></p>



<ul class="wp-block-list">
<li>factorisation maximale,</li>



<li>possibilité pour mes clients d’activer/désactiver un flux par simple mise à jour en table,</li>



<li>orchestration gérée sans redéploiement du projet,</li>



<li>centralisation des logs de process en un seul point.</li>
</ul>



<p>Un mécanisme de logging centralisé dans le Master Package me permettait de :</p>



<ul class="wp-block-list">
<li>tracer l’exécution de chaque sous-package,</li>



<li>uniformiser les retours d’erreurs,</li>



<li>simplifier la maintenance.</li>
</ul>



<p>Plus besoin d’ouvrir 15 packages pour comprendre où ça avait cassé : tout remontait dans la même table de suivi.</p>



<p><strong>Exemple de modèle utilisé :</strong></p>



<pre class="wp-block-code"><code>CREATE TABLE dbo.Packages
(
    PackageID    INT            IDENTITY(1,1) PRIMARY KEY,
    PackageName  VARCHAR( 100 ) NOT NULL, -- Nom du .dtsx
    Description  VARCHAR( 400 ) NULL,
    IsEnabled    BIT            NOT NULL DEFAULT (1),
    CreatedAt    DATETIME2(0)   NOT NULL DEFAULT (SYSUTCDATETIME()),
    CONSTRAINT UQ_Packages__PackageName UNIQUE (PackageName)
);
GO

/* Paramètres par défaut au niveau du package (surchargés par scénario si besoin) */
CREATE TABLE dbo.PackageParameters
(
    PackageID    INT           NOT NULL FOREIGN KEY REFERENCES dbo.Packages(PackageID),
    ParamName    VARCHAR(128)  NOT NULL,
    DefaultValue VARCHAR(4000) NOT NULL,
    CONSTRAINT PK_PackageParameters PRIMARY KEY (PackageID, ParamName)
);
GO


/* =========================================================================
   SCÉNARIOS (contextes d’exécution) &amp; ORCHESTRATION
   ========================================================================= */
CREATE TABLE dbo.Scenarios
(
    ScenarioID   INT          IDENTITY(1,1) PRIMARY KEY,
    ScenarioName VARCHAR(100) NOT NULL, -- DAILY / BACKFILL / CLIENT_X ...
    Description  VARCHAR(400) NULL,
    IsActive     BIT          NOT NULL DEFAULT (1),
    CreatedAt    DATETIME2(0) NOT NULL DEFAULT (SYSUTCDATETIME()),
    CONSTRAINT UQ_Scenarios__ScenarioName UNIQUE (ScenarioName)
);
GO

CREATE TABLE dbo.ScenarioSteps
(
    ScenarioStepID  INT IDENTITY(1,1) PRIMARY KEY,
    ScenarioID      INT NOT NULL FOREIGN KEY REFERENCES dbo.Scenarios(ScenarioID),
    PackageID       INT NOT NULL FOREIGN KEY REFERENCES dbo.Packages(PackageID),
    ExecutionOrder  INT NOT NULL,
    IsActive        BIT NOT NULL DEFAULT (1),
    RetryCount      INT NOT NULL DEFAULT (0),
    ContinueOnError BIT NOT NULL DEFAULT (0),
    TimeoutSec      INT NULL,                -- optionnel : timeouts par step
    CONSTRAINT UQ_Steps__Scenario_Order UNIQUE (ScenarioID, ExecutionOrder)
);
GO

/* Surcharges de paramètres au niveau scénario→package */
CREATE TABLE dbo.ScenarioParameters
(
    ScenarioID INT            NOT NULL FOREIGN KEY REFERENCES dbo.Scenarios(ScenarioID),
    PackageID  INT            NOT NULL FOREIGN KEY REFERENCES dbo.Packages(PackageID),
    ParamName  VARCHAR(128)   NOT NULL,
    ParamValue VARCHAR(4000)  NOT NULL,
    CONSTRAINT PK_ScenarioParameters PRIMARY KEY (ScenarioID, PackageID, ParamName)
);
GO

/* Vue des paramètres “effectifs” (Scenario override &gt; défaut package) */
CREATE VIEW dbo.vw_EffectiveParameters
AS
SELECT s.ScenarioID,
       p.PackageID,
       pp.ParamName,
       COALESCE(sp.ParamValue, pp.DefaultValue) AS EffectiveValue
  FROM dbo.Scenarios          AS s
       INNER JOIN dbo.ScenarioSteps      AS ss ON ss.ScenarioID = s.ScenarioID AND ss.IsActive = 1
       INNER JOIN dbo.Packages           AS p  ON p.PackageID   = ss.PackageID AND p.IsEnabled = 1
        LEFT JOIN dbo.PackageParameters  AS pp ON pp.PackageID  = p.PackageID
        LEFT JOIN dbo.ScenarioParameters AS sp ON sp.ScenarioID = s.ScenarioID
                                              AND sp.PackageID  = p.PackageID
                                              AND sp.ParamName  = pp.ParamName;
GO


/* =========================================================================
   LOGS CENTRALISÉS (header run + détails par step)
   ========================================================================= */
CREATE TABLE dbo.ProcessRun
(
    RunID         BIGINT       IDENTITY(1,1) PRIMARY KEY,
    ScenarioName  VARCHAR(100) NOT NULL,
    Status        VARCHAR(20)  NOT NULL, -- Started / Succeeded / Failed / PartiallyFailed
    StartTime     DATETIME2(0) NOT NULL DEFAULT (SYSUTCDATETIME()),
    EndTime       DATETIME2(0) NULL,
    DurationSec   INT          NULL,
    TriggeredBy   VARCHAR(128) NULL, -- Agent, utilisateur, API, etc.
    CorrelationID UNIQUEIDENTIFIER NOT NULL DEFAULT (NEWID())
);
GO

CREATE TABLE dbo.ProcessRunStep
(
    RunStepID      BIGINT        IDENTITY(1,1) PRIMARY KEY,
    RunID          BIGINT        NOT NULL FOREIGN KEY REFERENCES dbo.ProcessRun(RunID),
    ScenarioStepID INT           NULL,          -- facultatif : rattacher au modèle
    ScenarioName   VARCHAR(100)  NOT NULL,
    PackageName    SYSNAME       NOT NULL,
    Status         VARCHAR(20)   NOT NULL,      -- Started / Succeeded / Failed / Skipped / Retried
    StartTime      DATETIME2(0)  NOT NULL DEFAULT (SYSUTCDATETIME()),
    EndTime        DATETIME2(0)  NULL,
    DurationSec    INT           NULL,
    Retries        INT           NOT NULL DEFAULT (0),
    ErrorMessage   VARCHAR(2000) NULL
);
GO

/* Index utiles */
CREATE INDEX IX_ProcessRun__StartTime   ON dbo.ProcessRun     (StartTime DESC);
CREATE INDEX IX_ProcessRunStep__RunID   ON dbo.ProcessRunStep (RunID);
CREATE INDEX IX_Steps__Scenario_Order   ON dbo.ScenarioSteps  (ScenarioID, ExecutionOrder);
GO</code></pre>



<p><strong>Requêtes “maître” utilisées par le Master Package</strong></p>



<pre class="wp-block-code"><code>/* 1) Plan d’exécution pour un scénario donné */
DECLARE @ScenarioName VARCHAR(100) = @ScenarioNameInput;

SELECT s.ScenarioName,
       p.PackageName,
       ss.ExecutionOrder,
       ss.RetryCount,
       ss.ContinueOnError,
       ss.TimeoutSec
  FROM dbo.ScenarioSteps AS ss
       INNER JOIN dbo.Scenarios AS s ON s.ScenarioID = ss.ScenarioID
	                                AND s.IsActive  = 1
       INNER JOIN dbo.Packages  AS p ON p.PackageID = ss.PackageID
	                                AND p.IsEnabled = 1
 WHERE s.ScenarioName = @ScenarioName
   AND ss.IsActive    = 1
 ORDER BY
       ss.ExecutionOrder ASC;

/* 2) Paramètres effectifs pour (Scénario, Package) */
DECLARE @ScenarioName VARCHAR(100) = @ScenarioNameInput;
DECLARE @PackageName  SYSNAME       = @PackageNameInput;

SELECT ep.ParamName,
       ep.EffectiveValue
  FROM dbo.vw_EffectiveParameters AS ep
       INNER JOIN dbo.Scenarios AS s  ON s.ScenarioID = ep.ScenarioID
       INNER JOIN dbo.Packages  AS p  ON p.PackageID  = ep.PackageID
 WHERE s.ScenarioName = @ScenarioName
   AND p.PackageName  = @PackageName;</code></pre>



<h3 class="wp-block-heading">Explication du modèle SSIS</h3>



<p>Ce modèle repose sur un principe simple : <strong>séparer la logique technique de l’orchestration.</strong></p>



<ul class="wp-block-list">
<li><strong>Packages</strong> : liste des packages disponibles (chargement d’une table, traitement d’un fichier…).
<ul class="wp-block-list">
<li>1 package = 1 traitement.</li>



<li>Exemple : j’importe une table, puis j’exécute la procédure associée.</li>
</ul>
</li>



<li><strong>PackageParameters</strong> : paramètres par défaut au niveau package (source, cible, dates…).
<ul class="wp-block-list">
<li>Exemple : dans un traitement différentiel, je stock la dernière date de traitement et la réinjecte automatiquement lors de l’exécution.</li>
</ul>
</li>



<li><strong>Scenarios</strong> : contextes d’exécution (DAILY, BACKFILL, CLIENT_X…).
<ul class="wp-block-list">
<li>Exemple : certains clients gèrent plusieurs bases identiques. Le scénario permet de passer dynamiquement d’un client à l’autre (connexion, serveur, etc.).</li>
</ul>
</li>



<li><strong>ScenarioSteps</strong> : plan d’exécution qui relie un scénario à une suite de packages (ordre, retries, tolérance aux erreurs).
<ul class="wp-block-list">
<li>Gestion dynamique des étapes, réduction de l’effort de maintenance.</li>



<li>Au final : un simple job SQL Agent lié à cette table, simplifiant l’exploitation.</li>
</ul>
</li>



<li><strong>ScenarioParameters</strong> : surcharges de paramètres pour un scénario donné.
<ul class="wp-block-list">
<li>Exemple : un client peut demander un filtrage particulier (plage de dates, règles locales).</li>
</ul>
</li>



<li><strong>ProcessRun</strong> : entête de chaque exécution (statut global, durée, déclencheur).
<ul class="wp-block-list">
<li>Exemple : branchement Power BI pour suivi en temps réel des traitements.</li>
</ul>
</li>



<li><strong>ProcessRunStep</strong> : détail de chaque étape reliée au RunID (statut, durée, erreurs).
<ul class="wp-block-list">
<li>Exemple : visualisation simple des erreurs dans Power BI, envoi d’emails en cas de problème, rapport quotidien automatisé.</li>
</ul>
</li>
</ul>



<p><strong>Intérêt du modèle SSIS :</strong></p>



<ol class="wp-block-list">
<li>Pilotage dynamique : tout changement se fait en table, pas dans les packages.</li>



<li>Logs centralisés : un seul point de vérité pour le suivi complet.</li>



<li>Reporting intégré : mise en place rapide de dashboards ou rapports automatisés.</li>
</ol>



<h3 class="wp-block-heading">Le metadata-driven dans Fabric : la continuité naturelle</h3>



<p>Avec Microsoft Fabric, je retrouve la même philosophie que celle de SSIS : <strong>séparer la logique technique de l’orchestration.</strong></p>



<p>La différence : Fabric va beaucoup plus loin en termes de :</p>



<ul class="wp-block-list">
<li>souplesse (paramétrage),</li>



<li>scalabilité (Spark, clusters dynamiques),</li>



<li>observabilité (logs centralisés exploitables).</li>
</ul>



<p><strong>Modèle de tables Fabric — complet &amp; factorisé :</strong></p>



<pre class="wp-block-code"><code>
/* =========================================================================
   UNITÉS DE TRAVAIL (WorkUnits) = l’équivalent des packages SSIS
   ========================================================================= */
CREATE TABLE dbo.WorkUnits
(
    WorkUnitID   INT          IDENTITY(1,1) PRIMARY KEY,
    WorkUnitName VARCHAR(128) NOT NULL,   -- ex : Load_Customers, Load_Sales
    WorkType     VARCHAR(50)  NOT NULL,   -- COPY / SPARK_JOB / STORED_PROC
    Target       VARCHAR(128) NULL,       -- Lakehouse, DWH, fichier…
    IsEnabled    BIT          NOT NULL DEFAULT (1),
    CreatedAt    DATETIME2(0) NOT NULL DEFAULT (SYSUTCDATETIME()),
    CONSTRAINT UQ_WorkUnits__Name UNIQUE (WorkUnitName)
);
GO

/* Paramètres par défaut au niveau WorkUnit */
CREATE TABLE dbo.WorkUnitParameters
(
    WorkUnitID   INT           NOT NULL FOREIGN KEY REFERENCES dbo.WorkUnits(WorkUnitID),
    ParamName    VARCHAR(128)  NOT NULL,
    DefaultValue VARCHAR(4000) NOT NULL,
    CONSTRAINT PK_WorkUnitParameters PRIMARY KEY (WorkUnitID, ParamName)
);
GO


/* =========================================================================
   SCÉNARIOS (contextes d’exécution) &amp; ORCHESTRATION
   ========================================================================= */
CREATE TABLE dbo.FabricScenarios
(
    ScenarioID       INT          IDENTITY(1,1) PRIMARY KEY,
    ScenarioName     VARCHAR(100) NOT NULL,
    Description      VARCHAR(400) NULL,
    IsActive         BIT          NOT NULL DEFAULT (1),
    ConcurrencyLevel INT          NULL,                  -- tuning possible par scénario
    CreatedAt        DATETIME2(0) NOT NULL DEFAULT (SYSUTCDATETIME()),
    CONSTRAINT UQ_FabricScenarios__Name UNIQUE (ScenarioName)
);
GO

CREATE TABLE dbo.FabricScenarioSteps
(
    ScenarioStepID  INT          IDENTITY(1,1) PRIMARY KEY,
    ScenarioID      INT          NOT NULL FOREIGN KEY REFERENCES dbo.FabricScenarios(ScenarioID),
    WorkUnitID      INT          NOT NULL FOREIGN KEY REFERENCES dbo.WorkUnits(WorkUnitID),
    ExecutionOrder  INT          NOT NULL,
    IsActive        BIT          NOT NULL DEFAULT (1),
    RetryCount      INT          NOT NULL DEFAULT (0),
    ContinueOnError BIT          NOT NULL DEFAULT (0),
    ClusterSize     VARCHAR(20)  NULL,                  -- Small / Medium / Large
    SkipHeaderRows  INT          NULL,                  -- pratique pour les CSV
    Comments        VARCHAR(400) NULL,
    CONSTRAINT UQ_FabricSteps__Scenario_Order UNIQUE (ScenarioID, ExecutionOrder)
);
GO

/* Surcharges de paramètres par scénario → WorkUnit */
CREATE TABLE dbo.FabricScenarioParameters
(
    ScenarioID INT           NOT NULL FOREIGN KEY REFERENCES dbo.FabricScenarios(ScenarioID),
    WorkUnitID INT           NOT NULL FOREIGN KEY REFERENCES dbo.WorkUnits(WorkUnitID),
    ParamName  VARCHAR(128)  NOT NULL,
    ParamValue VARCHAR(4000) NOT NULL,
    CONSTRAINT PK_FabricScenarioParameters PRIMARY KEY (ScenarioID, WorkUnitID, ParamName)
);
GO

/* Vue des paramètres effectifs */
CREATE VIEW dbo.vw_FabricEffectiveParameters
AS
SELECT s.ScenarioID,
       w.WorkUnitID,
       wp.ParamName,
       COALESCE(sp.ParamValue, wp.DefaultValue) AS EffectiveValue
  FROM dbo.FabricScenarios          AS s
       INNER JOIN dbo.FabricScenarioSteps      AS ss ON ss.ScenarioID = s.ScenarioID
	                                                AND ss.IsActive = 1
       INNER JOIN dbo.WorkUnits                AS  w ON w.WorkUnitID = ss.WorkUnitID
	                                                AND w.IsEnabled = 1
        LEFT JOIN dbo.WorkUnitParameters       AS wp ON wp.WorkUnitID = w.WorkUnitID
        LEFT JOIN dbo.FabricScenarioParameters AS sp ON sp.ScenarioID = s.ScenarioID
                                                    AND sp.WorkUnitID = w.WorkUnitID
                                                    AND sp.ParamName  = wp.ParamName;
GO


/* =========================================================================
   LOGS CENTRALISÉS (entête + détails steps)
   ========================================================================= */
CREATE TABLE dbo.FabricRun
(
    RunID        BIGINT       IDENTITY(1,1) PRIMARY KEY,
    ScenarioName VARCHAR(100) NOT NULL,
    Status       VARCHAR(20)  NOT NULL, -- Started / Succeeded / Failed / Partial
    StartTime    DATETIME2(0) NOT NULL DEFAULT (SYSUTCDATETIME()),
    EndTime      DATETIME2(0) NULL,
    DurationSec  INT          NULL,
    TriggeredBy  VARCHAR(128) NULL, -- utilisateur, service, API
    ProcessID    UNIQUEIDENTIFIER NOT NULL DEFAULT (NEWID())
);
GO

CREATE TABLE dbo.FabricRunStep
(
    RunStepID      BIGINT        IDENTITY(1,1) PRIMARY KEY,
    RunID          BIGINT        NOT NULL FOREIGN KEY REFERENCES dbo.FabricRun(RunID),
    ScenarioStepID INT           NULL, -- rattachement au modèle
    ScenarioName   VARCHAR(100)  NOT NULL,
    WorkUnitName   VARCHAR(128)  NOT NULL,
    Status         VARCHAR(20)   NOT NULL, -- Started / Succeeded / Failed / Skipped
    StartTime      DATETIME2(0)  NOT NULL DEFAULT (SYSUTCDATETIME()),
    EndTime        DATETIME2(0)  NULL,
    DurationSec    INT           NULL,
    Retries        INT           NOT NULL DEFAULT (0),
    ErrorMessage   VARCHAR(2000) NULL
);
GO

CREATE INDEX IX_FabricRun__StartTime    ON dbo.FabricRun     (StartTime DESC);
CREATE INDEX IX_FabricRunStep__RunID    ON dbo.FabricRunStep (RunID);
CREATE INDEX IX_FabricSteps__Scenario_Order ON dbo.FabricScenarioSteps (ScenarioID, ExecutionOrder);
GO</code></pre>



<p><strong>Sélection des steps pour un scénario</strong></p>



<pre class="wp-block-code"><code>SELECT s.ScenarioName,
       w.WorkUnitName,
       w.WorkType,
       w.Target,
       fs.ExecutionOrder,
       fs.SkipHeaderRows,
       fs.ClusterSize
  FROM dbo.FabricScenarioSteps AS fs
       INNER JOIN dbo.FabricScenarios AS s ON s.ScenarioID = fs.ScenarioID
	                                      AND s.IsActive = 1
       INNER JOIN dbo.WorkUnits       AS w ON w.WorkUnitID = fs.WorkUnitID
	                                      AND w.IsEnabled = 1
WHERE s.ScenarioName = @ScenarioName
  AND fs.IsActive     = 1
ORDER BY
      fs.ExecutionOrder ASC;</code></pre>



<h3 class="wp-block-heading">Explication du modèle Fabric</h3>



<ul class="wp-block-list">
<li><strong>WorkUnits</strong> : équivalent des packages SSIS. Une unité = 1 tâche (COPY, Spark, procédure).</li>



<li><strong>WorkUnitParameters</strong> : paramètres par défaut (source, cible, filtres).</li>



<li><strong>FabricScenarios</strong> : contextes d’exécution (DAILY, BACKFILL, CLIENT_X, TEST…), avec parallélisme possible.</li>



<li><strong>FabricScenarioSteps</strong> : orchestration des étapes (ordre, retries, tolérance aux erreurs, taille de cluster, options).</li>



<li><strong>FabricScenarioParameters</strong> : surcharges de paramètres (filtres spécifiques à un client).</li>



<li><strong>FabricRun</strong> : entête de chaque exécution (statut global, durée, déclencheur, ProcessID).</li>



<li><strong>FabricRunStep</strong> : détail de chaque étape (statut, durée, erreurs, reliée au RunID).</li>
</ul>



<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Intérêt (similaire à SSIS, mais en mieux) :</strong></p>



<ul class="wp-block-list">
<li>pilotage dynamique (tout en table, zéro code dur),</li>



<li>logs centralisés avec ProcessID unique,</li>



<li>scalabilité (taille de cluster, parallélisme modulables),</li>



<li>observabilité (liaison native avec Power BI).</li>
</ul>



<h3 class="wp-block-heading">Comparaison SSIS vs Fabric</h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Critère</th><th>SSIS (Master Package)</th><th>Fabric (Metadata-driven)</th></tr></thead><tbody><tr><td>Unité de travail</td><td>Package enfant (.dtsx)</td><td>WorkUnit (COPY, Spark job, Stored Proc…)</td></tr><tr><td>Paramètres</td><td>PackageParameters + ScenarioParameters</td><td>WorkUnitParameters + FabricScenarioParameters</td></tr><tr><td>Orchestration</td><td>Table ScenarioSteps + boucle Foreach</td><td>Table FabricScenarioSteps + Lookup + ForEach</td></tr><tr><td>Scénarios</td><td>DAILY, BACKFILL, CLIENT_X</td><td>Idem + parallélisme et tuning possible</td></tr><tr><td>Logs centralisés</td><td>ProcessRun + ProcessRunStep</td><td>FabricRun + FabricRunStep (ProcessID unique)</td></tr><tr><td>Flexibilité</td><td>Pilotage dynamique sans redéploiement</td><td>+ Élasticité cloud</td></tr><tr><td>Observabilité</td><td>Tables SQL + reporting custom (Power BI)</td><td>Nativement intégré Power BI + monitoring</td></tr><tr><td>Scalabilité</td><td>Limitée au serveur SSIS</td><td>Élastique (clusters Spark, Fabric)</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Conclusion</h3>



<p>Que ce soit avec SSIS ou avec Fabric, mon approche reste la même : <strong>séparer la logique technique de l’orchestration et piloter les traitements par des tables.</strong></p>



<ul class="wp-block-list">
<li>Avec SSIS, le Master Package m’a permis de factoriser mes flux, centraliser mes logs et donner de l’autonomie à mes clients.</li>



<li>Avec Fabric, je pousse cette logique plus loin : WorkUnits remplacent les packages, les scénarios pilotent toujours, mais les logs deviennent encore plus exploitables, notamment via Power BI.</li>
</ul>



<p>Ce que je défends, ce n’est pas un outil en particulier, mais une <strong>philosophie</strong> :</p>



<ul class="wp-block-list">
<li>écrire une fois,</li>



<li>piloter par métadonnées,</li>



<li>donner aux équipes visibilité et autonomie.</li>
</ul>



<p>C’est cette approche qui, selon moi, fait la différence entre un projet qui devient vite un cauchemar de maintenance, et un projet qui s’adapte naturellement aux évolutions.</p>



<p></p>
<p>L’article <a href="https://www.dbi-services.com/blog/metadata-driven-pipelines-la-continuite-du-master-package-ssis/">Metadata-driven pipelines : la continuité du Master Package SSIS</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/metadata-driven-pipelines-la-continuite-du-master-package-ssis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AWS Summit Zurich 2025</title>
		<link>https://www.dbi-services.com/blog/aws-summit-zurich-2025/</link>
					<comments>https://www.dbi-services.com/blog/aws-summit-zurich-2025/#respond</comments>
		
		<dc:creator><![CDATA[Adrien Devaux]]></dc:creator>
		<pubDate>Mon, 15 Sep 2025 08:12:51 +0000</pubDate>
				<category><![CDATA[AWS]]></category>
		<category><![CDATA[Cloud]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=40279</guid>

					<description><![CDATA[<p>Last Thursday I could go to the AWS Summit Zurich 2025 edition. So it&#8217;s time to do a little recap of what I could see and what was presented during the event. Amid the infinite sessions about AI, I could also find some on other topics. I started my journey with a session on security [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/aws-summit-zurich-2025/">AWS Summit Zurich 2025</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Last Thursday I could go to the AWS Summit Zurich 2025 edition. So it&#8217;s time to do a little recap of what I could see and what was presented during the event.</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/09/Image-3-1024x768.jpg" alt="" class="wp-image-40281" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/Image-3-1024x768.jpg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/Image-3-300x225.jpg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/Image-3-768x576.jpg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/Image-3-1536x1152.jpg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/Image-3-2048x1536.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Amid the infinite sessions about AI, I could also find some on other topics. I started my journey with a session on security best practices.</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/09/image-5-1024x768.png" alt="" class="wp-image-40282" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-5-1024x768.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-5-300x225.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-5-768x576.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-5-1536x1152.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-5-2048x1536.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Then came the keynote, where I could see a demo of an automated delivery robot shaped like a dog that can climb stairs. During the keynote, it was announced that Oracle Exadata would be available in the Zurich region starting 2026. </p>



<p>Among the other sessions I attended, I can spotlight one on the IAM service, where the speakers deep-dived into how to manage the service more accurately.</p>



<p>I also attended a session addressing the Sovereignty topic where we were explained the impact of the CLOUD act and the data protection subject. </p>



<p>I also went to a network focused presentation, the speaker showed us the new features of AWS Cloud WAN and how it works as a backbone network for hybrid solutions. The biggest news was that now we can connect AWS Direct Connections directly to AWS Cloud WAN without the need of a transit gateway. </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/09/image-6-1024x768.png" alt="" class="wp-image-40283" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-6-1024x768.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-6-300x225.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-6-768x576.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-6-1536x1152.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-6-2048x1536.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>They also introduced to us VPC Lattice, a fully managed application networking service that you use to connect, secure, and monitor the services and resources for your application.</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/09/image-7-1024x768.png" alt="" class="wp-image-40284" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-7-1024x768.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-7-300x225.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-7-768x576.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-7-1536x1152.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-7-2048x1536.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Finally, I followed a session on cloud cost optimization. We were presented some dashboards that we can use to optimize our cloud costs.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="565" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-8-1024x565.png" alt="" class="wp-image-40285" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-8-1024x565.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-8-300x166.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-8-768x424.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-8-1536x848.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-8-2048x1130.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>That&#8217;s it for this year. Yet another summit where I&#8217;m able to learn new stuff. I hope I can go again next year and still learn new skills.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="561" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-9-1024x561.png" alt="" class="wp-image-40286" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-9-1024x561.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-9-300x164.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-9-768x420.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-9-1536x841.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/09/image-9.png 1907w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p>L’article <a href="https://www.dbi-services.com/blog/aws-summit-zurich-2025/">AWS Summit Zurich 2025</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/aws-summit-zurich-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: www.dbi-services.com @ 2026-05-28 16:42:45 by W3 Total Cache
-->