<?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>Clemens Bleile, auteur/autrice sur dbi Blog</title>
	<atom:link href="https://www.dbi-services.com/blog/author/clemens-bleile/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.dbi-services.com/blog/author/clemens-bleile/</link>
	<description></description>
	<lastBuildDate>Thu, 18 Jun 2026 13:09:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2025/05/cropped-favicon_512x512px-min-32x32.png</url>
	<title>Clemens Bleile, auteur/autrice sur dbi Blog</title>
	<link>https://www.dbi-services.com/blog/author/clemens-bleile/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Temporary tablespace and ODA 19.31.</title>
		<link>https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/</link>
					<comments>https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Thu, 11 Jun 2026 06:55:15 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[autoextend]]></category>
		<category><![CDATA[oda]]></category>
		<category><![CDATA[oracle database appliance]]></category>
		<category><![CDATA[tempfile]]></category>
		<category><![CDATA[temporary tablespace]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=45038</guid>

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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<p class="wp-block-paragraph"></p>
<p>L’article <a href="https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/">Temporary tablespace and ODA 19.31.</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/temporary-tablespace-and-oda-19-31/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle: A possible method to address a slow query if there is time pressure</title>
		<link>https://www.dbi-services.com/blog/oracle-a-possible-method-to-address-a-slow-query-if-there-is-time-pressure/</link>
					<comments>https://www.dbi-services.com/blog/oracle-a-possible-method-to-address-a-slow-query-if-there-is-time-pressure/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Tue, 29 Apr 2025 15:22:37 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[_fix_control]]></category>
		<category><![CDATA[optimizer_features_enable]]></category>
		<category><![CDATA[slow query]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38232</guid>

					<description><![CDATA[<p>Sometimes there is no time for a long analysis of a slow query and a fix (workaround) has to be provided asap. In such cases it often helps to check if a query did run faster with a previous OPTIMIZER_FEATURES_ENABLE-setting. If that is the case, then you also want to find out which optimizer bug [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-a-possible-method-to-address-a-slow-query-if-there-is-time-pressure/">Oracle: A possible method to address a slow query if there is time pressure</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Sometimes there is no time for a long analysis of a slow query and a fix (workaround) has to be provided asap. In such cases it often helps to check if a query did run faster with a previous OPTIMIZER_FEATURES_ENABLE-setting. If that is the case, then you also want to find out which optimizer bug fix caused a suboptimal plan to be generated. The following blog shows a way to find a quick workaround for a slowly performing query. However, please consider this to be a workaround and that you still should do an analysis to fix the &#8220;real&#8221; root cause.</p>



<p class="wp-block-paragraph">So, let&#8217;s consider that you have a performance issue with a query and you want to test if an optimizer bug fix caused a suboptimal plan. How can you find the optimizer bug fix which caused that plan asap? </p>



<p class="wp-block-paragraph">REMARK: I do assume that you have a script /tmp/sql.sql with the sql-query to reproduce the slowly running SQL. </p>



<p class="wp-block-paragraph">Let&#8217;s get started to find the optimizer bug-fix:</p>



<h2 class="wp-block-heading" id="h-problem-query-is-running-slow-in-19c-the-query-has-been-provided-in-the-script-tmp-sql-sql">Problem: Query is running slow in 19c. The query has been provided in the script /tmp/sql.sql</h2>



<p class="wp-block-paragraph">Currently we are on 19.26. and do have OPTIMIZER_FEATURES_ENABLE set to the default, which is 19.1.0 in 19c:</p>



<pre class="wp-block-code"><code>SQL&gt; show spparameter optimizer_features_enable

SID	 NAME			       TYPE	   VALUE
-------- ----------------------------- ----------- ----------------------------
*	 optimizer_features_enable     string</code></pre>



<p class="wp-block-paragraph">&#8211;&gt; not explicitly set in the spfile, so it&#8217;s set to default:</p>



<pre class="wp-block-code"><code>SQL&gt; show parameter optimizer_features_enable

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_features_enable            string      19.1.0

SQL&gt; show parameter fix_control
SQL&gt; </code></pre>



<p class="wp-block-paragraph">&#8211;&gt; no _fix_control-parameter set.</p>



<p class="wp-block-paragraph">According Active Session History (ASH) the query did run for days in the past (!!!):</p>



<pre class="wp-block-code"><code>SQL&gt;  select sql_exec_start, sql_plan_hash_value, (count(*)*10)/3600 active_hours, max(sample_time)-min(sample_time) duration
  2  from dba_hist_active_sess_history
  3  where sql_id='8cdydzbsh10dd'
  4  group by sql_exec_start, sql_plan_hash_value
  5  order by 1;
 
SQL_EXEC_START       SQL_PLAN_HASH_VALUE ACTIVE_HOURS DURATION
-------------------- ------------------- ------------ ----------------------------
05-APR-2025 07:36:03           126619261        80.12 +000000003 08:14:27.685
07-APR-2025 07:36:07           126619261        32.33 +000000001 08:22:43.551
08-APR-2025 16:06:00           126619261        47.68 +000000001 23:45:26.074
10-APR-2025 15:57:22           126619261        17.76 +000000000 17:47:30.125
19-APR-2025 05:32:25           126619261       178.23 +000000007 10:31:45.271
21-APR-2025 05:32:46           126619261       134.60 +000000005 14:48:49.602
23-APR-2025 05:33:08           126619261        86.01 +000000003 14:09:08.540
 
7 rows selected.</code></pre>



<p class="wp-block-paragraph">REMARK: Please consider that using ASH requires the diagnostics pack to be licensed</p>



<p class="wp-block-paragraph">1. Check if there is an Optimizer-Version-Setting, where the issue did not happen</p>



<p class="wp-block-paragraph">We can test with different OPTIMIZER_FEATURES_ENABLE (OFE) settings, on what release this query may initially became slow with. But what different OPTIMIZER_FEATURES_ENABLE settings do we have? There&#8217;s a simple method to find that out. You just provide a non-existing OFE and the error tells you what OFE-settings are available:</p>



<pre class="wp-block-code"><code>SQL&gt; alter session set optimizer_features_enable=blabla;
ERROR:
ORA-00096: invalid value BLABLA for parameter optimizer_features_enable, must
be from among 19.1.0.1, 19.1.0, 18.1.0, 12.2.0.1, 12.1.0.2, 12.1.0.1, 11.2.0.4,
11.2.0.3, 11.2.0.2, 11.2.0.1, 11.1.0.7, 11.1.0.6, 10.2.0.5, 10.2.0.4, 10.2.0.3,
10.2.0.2, 10.2.0.1, 10.1.0.5, 10.1.0.4, 10.1.0.3, 10.1.0, 9.2.0.8, 9.2.0,
9.0.1, 9.0.0, 8.1.7, 8.1.6, 8.1.5, 8.1.4, 8.1.3, 8.1.0, 8.0.7, 8.0.6, 8.0.5,
8.0.4, 8.0.3, 8.0.0</code></pre>



<p class="wp-block-paragraph">So now we can go backwards with OFE-settings to find a version where the query may have run fast:</p>



<pre class="wp-block-code"><code>alter session set OPTIMIZER_FEATURES_ENABLE='18.1.0';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='12.2.0.1';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='12.1.0.2';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='12.1.0.1';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='11.2.0.4';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='11.2.0.3';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='11.2.0.2';
@/tmp/sql.sql

--&gt; Ctrl-C after some time.

alter session set OPTIMIZER_FEATURES_ENABLE='11.2.0.1';
@/tmp/sql.sql

Elapsed: 00:00:00.36

--&gt; With 11.2.0.1 the query finished in 0.36 secs.</code></pre>



<p class="wp-block-paragraph">I.e. a change between 11.2.0.1 and 11.2.0.2 caused the optimizer to produce a suboptimal plan.</p>



<p class="wp-block-paragraph">2. Test which bug fix caused the suboptimal plan</p>



<p class="wp-block-paragraph">We can generate a script, which tests all _fix_control-settings which were introduced with OFE=11.2.0.2 to see what fix caused the query to run slow:</p>



<pre class="wp-block-code"><code>set lines 200 pages 999 trimspool on
spool /tmp/sql_fc.sql

select 'alter session set "_fix_control"='''||to_char(bugno)||':'||to_char(value)||''';'||chr(10)||
       'PROMPT '||to_char(bugno)||chr(10)||
       '@/tmp/sql.sql' 
from v$system_fix_control 
where OPTIMIZER_FEATURE_ENABLE='11.2.0.2';

...

spool off</code></pre>



<p class="wp-block-paragraph">REMARK: The CHR(10) inserts the necessary linefeeds in the script.</p>



<pre class="wp-block-code"><code>SQL&gt; !vi /tmp/sql_fc.sql
--&gt; remove all lines, which are not necessary
SQL&gt; !cat /tmp/sql_fc.sql
alter session set "_fix_control"='6913094:1';
PROMPT 6913094
@/tmp/sql.sql

alter session set "_fix_control"='6670551:1';
PROMPT 6670551
@/tmp/sql.sql

...

alter session set "_fix_control"='9407929:1';
PROMPT 9407929
@/tmp/sql.sql

alter session set "_fix_control"='10359631:1';
PROMPT 10359631
@/tmp/sql.sql

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



<p class="wp-block-paragraph">First I do set OFE to 11.2.0.1 and then run my generated script to enable the fixes one after the other until it becomes slow:</p>



<pre class="wp-block-code"><code>SQL&gt; alter session set optimizer_features_enable='11.2.0.1';
SQL&gt; @?/tmp/sql_fc.sql

Session altered.

8602840

1 row selected.


Session altered.

8725296

1 row selected.

...

Session altered.

9443476

1 row selected.


Session altered.

9195582

--&gt; after enabling fix for bugno 9195582 there is no output generated anymore, i.e. the query becomes slow.</code></pre>



<p class="wp-block-paragraph">So, we could identify the fix for bugno 9195582, which causes the optimizer to produce a suboptimal plan.</p>



<p class="wp-block-paragraph">3. Details about bug 9195582 and the implementation of a workaround</p>



<p class="wp-block-paragraph">The description field of v$system_fix_control provides more details about the bug-fix:</p>



<pre class="wp-block-code"><code>SQL&gt; select description from v$system_fix_control where bugno=9195582;

DESCRIPTION
----------------------------------------------------------------
leaf blocks as upper limit for skip scan blocks
SQL&gt; </code></pre>



<p class="wp-block-paragraph">Searching in My Oracle SUpport for the bug resulted in MOS Note</p>



<p class="wp-block-paragraph">Bug 9195582 &#8211; Skip Scan overcosted when an index column has high NDV (Doc ID 9195582.8)</p>



<p class="wp-block-paragraph">In there we have the following description:</p>



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


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
Performance Of Query/ies Affected 
</pre></div>


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


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
The estimate for skip scan blocks will now be no more than leaf blocks.
Index skip scans will be used more often than previously.

REDISCOVERY INFORMATION:
If an index skip scan is not being selected for a query due to having a
high cost and one of the skip scan index columns has NDV which is higher
than the number of leaf blocks of the index then you may be facing this
bug.

Workaround
Force the skip scan using a hint.
</pre></div>


<p class="wp-block-paragraph">Interestingly the faster plan did not have a skip scan in it, but a change in the estimation of blocks for skip scans, may of course also lead to other plans being skipped or considered.</p>



<p class="wp-block-paragraph">At this point I did a relogin to the DB and ran my query with the appropriate fix turned off to verify that the query runs fast:</p>



<pre class="wp-block-code"><code>SQL&gt; select value from v$session_fix_control where bugno=9195582;

     VALUE
----------
         1

SQL&gt; alter session set "_fix_control"='9195582:OFF';

Session altered.

SQL&gt; select value from v$session_fix_control where bugno=9195582;

     VALUE
----------
         0

SQL&gt; @/tmp/sql.sql

Elapsed: 00:00:00.36

--&gt; OK, it works around the issue.
</code></pre>



<p class="wp-block-paragraph">For that workaround to become active, we can implement a SQL patch for the query with the issue. As I did not have the query anymore in the shared pool, I had to take the query text from Automatic Workload Repository (AWR) to create the SQL Patch:</p>



<p class="wp-block-paragraph">REMARK: Again, please consider that AWR requires to diagnostics pack to be licensed.</p>



<pre class="wp-block-code"><code>set serveroutput on
declare
        v1      varchar2(128);
        v_sql   clob;
begin
        select sql_text into v_sql from dba_hist_sqltext where sql_id='8cdydzbsh10dd';
        v1 :=   dbms_sqldiag.create_sql_patch(
                        sql_text  =&gt; v_sql,
                        hint_text =&gt; q'{opt_param('_fix_control' '9195582:OFF')}',
                        name    =&gt; 'switch_off_fix_9195582'
                );
        dbms_output.put_line(v1);
end;
/
switch_off_fix_9195582

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



<p class="wp-block-paragraph">Later on you may check if the query runs fast by checking the data in the shared pool or in the AWR history:</p>



<pre class="wp-block-code"><code>select executions, (elapsed_time/executions)/1000000 avg_elapsed_secs, sql_patch from v$sql where sql_id='8cdydzbsh10dd';</code></pre>



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



<p class="wp-block-paragraph">Sometimes you have to be fast to implement a workaround for a slowly running query. One option is to check if a query did run faster with older OPTIMIZER_FEATURES_ENABLE-settings and, if that is the case, identify the bugno which caused a suboptimal plan to be produced. Always implement only the smallest change possible (just disable a bug fix instead of going back to a previous OFE-setting) and change as local to the problem as possible (i.e. add a hint or a SQL Patch to a query and, if possible, do not change a parameter on session or even system level). And finally, document your change and try to get rid of that workaround as soon as you have time to do a deeper analysis.</p>



<p class="wp-block-paragraph">The Oracle Support tool SQLTXPLAIN (see MOS Note &#8220;All About the SQLT Diagnostic Tool (Doc ID 215187.1)&#8221;) contains the XPLORE utility, which goes much deeper for a single SQL-statement and checks the plan change caused by all &#8220;_fix_control&#8221;-settings and optimizer-changes (underscore parameters) between releases and produces html-output.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-a-possible-method-to-address-a-slow-query-if-there-is-time-pressure/">Oracle: A possible method to address a slow query if there is time pressure</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/oracle-a-possible-method-to-address-a-slow-query-if-there-is-time-pressure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>odacli create-appliance failed on an ODA HA</title>
		<link>https://www.dbi-services.com/blog/odacli-create-appliance-failed-on-an-oda-ha/</link>
					<comments>https://www.dbi-services.com/blog/odacli-create-appliance-failed-on-an-oda-ha/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Thu, 24 Apr 2025 14:14:37 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[odacli create-appliance]]></category>
		<category><![CDATA[oracle database appliance]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38142</guid>

					<description><![CDATA[<p>I recently had to install an Oracle Database Appliance X11 HA and it failed when creating the appliance: It happened randomly in the past that we got this error &#8220;host key verification failed&#8221; and we just had to rerun our &#8220;odacli create-appliance&#8221; command again. However, this time restarting was not possible: Following MOS Note &#8220;ODA [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/odacli-create-appliance-failed-on-an-oda-ha/">odacli create-appliance failed on an ODA HA</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I recently had to install an Oracle Database Appliance X11 HA and it failed when creating the appliance:</p>



<pre class="wp-block-code"><code>&#091;root@oak0 ~]# odacli create-appliance -r /u01/patch/my_new_oda.json
...
&#091;root@mynewoda ~]# odacli describe-job -i 88e4b5e3-3a73-4c18-9d9f-960151abc45e

Job details                                                      
----------------------------------------------------------------
                     ID:  88e4b5e3-3a73-4c18-9d9f-960151abc45e
            Description:  Provisioning service creation
                 Status:  Failure (To view Error Correlation report, run "odacli describe-job -i 88e4b5e3-3a73-4c18-9d9f-960151abc45e --ecr" command)
                Created:  April 23, 2025 16:15:35 CEST
                Message:  DCS-10001:Internal error encountered: Failed to provision GI with RHP at the home: /u01/app/19.26.0.0/grid: DCS-10001:Internal error encountered: PRGH-1002 : Failed to copy files from /opt/oracle/rhp/RHPCheckpoints/rhptemp/grid8631129022929485455.rsp to /opt/oracle/rhp/RHPCheckpoints/wOraGrid192600
PRKC-1191 : Remote command execution setup check for node mynewoda using shell /usr/bin/ssh failed.
No ECDSA host key is known for mynewoda and you have requested strict checking.Host key verification failed...</code></pre>



<p class="wp-block-paragraph">It happened randomly in the past that we got this error &#8220;host key verification failed&#8221; and we just had to rerun our &#8220;odacli create-appliance&#8221; command again. However, this time restarting was not possible:</p>



<pre class="wp-block-code"><code>&#091;root@mynewoda ~]# odacli create-appliance -r /u01/patch/my_new_oda.json
DCS-10047:Same job is already running: Provisioning FAILED in different request.</code></pre>



<p class="wp-block-paragraph">Following MOS Note &#8220;ODA Provisioning Fails to Create Appliance w/ Error: DCS-10047:Same Job is already running : Provisioning FAILED in different request. (Doc ID 2809836.1)&#8221; I cleaned up the ODA, updated the repository with the Grid Infrastructure clone and DB clone:</p>



<p class="wp-block-paragraph">Stop the dcs agent on both nodes:</p>



<pre class="wp-block-code"><code># systemctl stop initdcsagent</code></pre>



<p class="wp-block-paragraph">Then, run cleanup.pl on ODA node 0.</p>



<pre class="wp-block-code"><code># /opt/oracle/oak/onecmd/cleanup.pl -f
...</code></pre>



<p class="wp-block-paragraph">If you get warnings that the cleanup cannot transfer the public key to node 1 or cannot setup SSH equivalence, then run the cleanup on node 1 as well.</p>



<p class="wp-block-paragraph">At the end of the cleanup-output you get those messages:</p>



<pre class="wp-block-code"><code>WARNING: After system reboot, please re-run "odacli update-repository" for GI/DB clones,
WARNING: before running "odacli create-appliance".</code></pre>



<p class="wp-block-paragraph">So, after the reboot I updated the repository with the GI and DB Clone:</p>



<pre class="wp-block-code"><code>&#091;root@oak0 patch]# /opt/oracle/dcs/bin/odacli update-repository -f /u01/patch/odacli-dcs-19.26.0.0.0-250127-GI-19.26.0.0.zip
...
&#091;root@oak0 patch]# odacli describe-job -i 674f7c66-1615-450f-be27-4e4734abca97

Job details                                                      
----------------------------------------------------------------
                     ID:  674f7c66-1615-450f-be27-4e4734abca97
            Description:  Repository Update
                 Status:  Success
                Created:  April 23, 2025 14:37:29 UTC
                Message:  /u01/patch/odacli-dcs-19.26.0.0.0-250127-GI-19.26.0.0.zip
...

&#091;root@oak0 patch]# /opt/oracle/dcs/bin/odacli update-repository -f /u01/patch/odacli-dcs-19.26.0.0.0-250127-DB-19.26.0.0.zip
...
&#091;root@oak0 patch]# odacli describe-job -i 4299b124-1c93-4d22-bac4-44a65cbaac67

Job details                                                      
----------------------------------------------------------------
                     ID:  4299b124-1c93-4d22-bac4-44a65cbaac67
            Description:  Repository Update
                 Status:  Success
                Created:  April 23, 2025 14:39:34 UTC
                Message:  /u01/patch/odacli-dcs-19.26.0.0.0-250127-DB-19.26.0.0.zip
...</code></pre>



<p class="wp-block-paragraph">Checked that the clones are available:</p>



<pre class="wp-block-code"><code>&#091;root@oak0 patch]# ls -ltrh /opt/oracle/oak/pkgrepos/orapkgs/clones
total 12G
-rwxr-xr-x 1 root root 6.0G Jan 28 03:33 grid19.250121.tar.gz
-rwxr-xr-x 1 root root   21 Jan 28 03:34 grid19.250121.tar.gz.info
-r-xr-xr-x 1 root root 5.4G Jan 28 03:42 db19.250121.tar.gz
-rw-rw-r-- 1 root root  19K Jan 28 03:42 clonemetadata.xml
-rw-rw-r-- 1 root root   21 Jan 28 03:43 db19.250121.tar.gz.info
&#091;root@oak0 patch]# </code></pre>



<p class="wp-block-paragraph">The same on node 1:</p>



<pre class="wp-block-code"><code>&#091;root@oak1 ~]# ls -ltrh /opt/oracle/oak/pkgrepos/orapkgs/clones
total 12G
-rwxr-xr-x 1 root root 6.0G Jan 28 03:33 grid19.250121.tar.gz
-rwxr-xr-x 1 root root   21 Jan 28 03:34 grid19.250121.tar.gz.info
-r-xr-xr-x 1 root root 5.4G Jan 28 03:42 db19.250121.tar.gz
-rw-rw-r-- 1 root root  19K Jan 28 03:42 clonemetadata.xml
-rw-rw-r-- 1 root root   21 Jan 28 03:43 db19.250121.tar.gz.info
&#091;root@oak1 ~]# </code></pre>



<p class="wp-block-paragraph">Before running the create-appliance again, you should first validate the storage topology on both nodes again.</p>



<pre class="wp-block-code"><code>&#091;root@oak0 ~]# odacli validate-storagetopology
INFO    : ODA Topology Verification         
INFO    : Running on Node0                  
INFO    : Check hardware type               
INFO    : Check for Environment(Bare Metal or Virtual Machine)
SUCCESS : Type of environment found : Bare Metal
INFO    : Check number of Controllers       
SUCCESS : Number of onboard OS disk found : 2
SUCCESS : Number of External SCSI controllers found : 2
INFO    : Check for Controllers correct PCIe slot address
SUCCESS : Internal RAID controller   : 
SUCCESS : External LSI SAS controller 0 : 61:00.0
SUCCESS : External LSI SAS controller 1 : e1:00.0
INFO    : Check for Controller Type in the System
SUCCESS : There are 2 SAS 38xx controller in the system
INFO    : Check if JBOD powered on          
SUCCESS : 1JBOD : Powered-on
INFO    : Check for correct number of EBODS(2 or 4)
SUCCESS : EBOD found : 2
INFO    : Check for External Controller 0   
SUCCESS : Controller connected to correct EBOD number
SUCCESS : Controller port connected to correct EBOD port
SUCCESS : Overall Cable check for controller 0
INFO    : Check for External Controller 1   
SUCCESS : Controller connected to correct EBOD number
SUCCESS : Controller port connected to correct EBOD port
SUCCESS : Overall Cable check for Controller 1
INFO    : Check for overall status of cable validation on Node0
SUCCESS : Overall Cable Validation on Node0
INFO    : Check Node Identification status  
SUCCESS : Node Identification
SUCCESS : Node name based on cable configuration found : NODE0
INFO    : The details for Storage Topology Validation can also be found in the log file=/opt/oracle/oak/diag/oak0/oak/storagetopology/StorageTopology-2025-04-23-14:42:34_70809_7141.log
&#091;root@oak0 ~]# </code></pre>



<p class="wp-block-paragraph">Validate the storage-topology on node 1 as well. Not validating the storage topology may lead to the following error when creating the appliance again:</p>



<pre class="wp-block-code"><code>OAK-10011:Failure while running storage setup on the system. Cause: Node number set on host not matching node number returned by storage topology tool. Action: Node number on host not set correctly. For default storage shelf node number needs to be set by storage topology tool itself.</code></pre>



<p class="wp-block-paragraph">Afterwards the &#8220;odacli create-appliance&#8221; should run through.</p>



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



<p class="wp-block-paragraph">If your &#8220;odacli create-appliance&#8221; fails on an ODA HA environment and you cannot restart it, then run a cleanup, update the repository with the Grid Infra- and DB-clone and validate the storage-topology before doing the create-appliance again.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/odacli-create-appliance-failed-on-an-oda-ha/">odacli create-appliance failed on an ODA HA</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/odacli-create-appliance-failed-on-an-oda-ha/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Migrating an Oracle database to another server</title>
		<link>https://www.dbi-services.com/blog/migrating-an-oracle-database-to-another-server/</link>
					<comments>https://www.dbi-services.com/blog/migrating-an-oracle-database-to-another-server/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Fri, 11 Apr 2025 15:40:52 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[new server]]></category>
		<category><![CDATA[refreshable PDB]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=38003</guid>

					<description><![CDATA[<p>There are several situations when you have to migrate your Oracle databases to a new server. This could be due to hardware lifecycle reasons for on-prem systems or you need to upgrade your Operating System (OS) from Enterprise Linux 8 to Enterprise Linux 9. In this blog I wanted to talk about my recommended methods [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/migrating-an-oracle-database-to-another-server/">Migrating an Oracle database to another server</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There are several situations when you have to migrate your Oracle databases to a new server. This could be due to hardware lifecycle reasons for on-prem systems or you need to upgrade your Operating System (OS) from Enterprise Linux 8 to Enterprise Linux 9. In this blog I wanted to talk about my recommended methods for such migrations considering ease of use and reduced downtime. I do not cover migrations to the Oracle Cloud here, because the recommended way is to use the Zero Downtime Migration tool from Oracle for that.</p>



<p class="wp-block-paragraph">For a migration to another server, we have different possibilities:</p>



<ul class="wp-block-list">
<li>Data Pump expdp/impdp</li>



<li>Logical replication with e.g. Golden Gate</li>



<li>Setup of a Standby DB with Data Guard (or third party products like dbvisit standby for Standard Edition 2 DBs) and switchover during cutover</li>



<li>Using a refreshable PDB in case the multitenant architecture is already used. During migration, stop the source PDB and do a final refresh, stop refreshing and open the target PDB read/write.</li>



<li>Relocate a PDB</li>



<li>Unplug PDB, copy PDB-related files and Plug-In the PDB</li>



<li>RMAN backup and restore. To reduce downtime this can also be combined with incremental backups restored regularly on the target until cutover, when a last incremental backup is applied to the target DB.</li>



<li>RMAN duplicate</li>



<li>Data Pump Full Transportable, where you set your source tablespaces read only, export the metadata and physically move datafiles to the target, where you can import the metadata.</li>



<li>Transportable tablespaces. This can be combined with Incremental Backups to do a cross platform migration to a different endian as described in MOS Note &#8220;V4 Reduce Transportable Tablespace Downtime using Cross Platform Incremental Backup (Doc ID 2471245.1)&#8221;</li>



<li>Detaching ASM devices from the old server and attaching them to the new server.<br>REMARK: This is kind of what happens when migrating to a new OS-version on the Oracle Database Appliance with Data Preserving Reprovisioning (DPR). See the blogs from my colleague Jérôme Duba on that: <a href="https://www.dbi-services.com/blog/author/jerome-dubar/">https://www.dbi-services.com/blog/author/jerome-dubar/</a></li>



<li>Just copy (e.g. with scp) all needed files to the new server</li>
</ul>



<p class="wp-block-paragraph">There are even more possibilities, but with above list you should find a method which fits your needs. Some of the methods above do require to be on the same Operating System and hardware architecture (no endian change), and some of them are totally independent on platform, version or endian change (like the logical migrations with data pump or Golden Gate).</p>



<p class="wp-block-paragraph">One of the best methods in my view is the possibility of <strong>refreshable PDBs</strong>, because</p>



<ul class="wp-block-list">
<li>it is very easy to do</li>



<li>provides a short downtime during cutover</li>



<li>allows a fallback as the previous PDB is still available</li>



<li>allows migrating PDBs individually at different times</li>



<li>allows migrating non-CDBs to PDBs as well. I.e. I can refresh a non-CDB to a PDB.</li>



<li>it is available since 12.2. and can also be used with Standard Edition 2 (SE2) DBs</li>



<li>allows going to a different Release Update (RU)</li>



<li>even allows going to a different major release and run the PDB upgrade afterwards on the target CDB</li>



<li>if the source PDB is on SE2 then the target PDB can also be on Enterprise Edition (EE)</li>



<li>moving Transparent Data Encrypted PDBs is almost as easy as moving non-encrypted PDBs</li>



<li>the inital copy of the PDB can be done very fast as Oracle is using a block-level-copy mechanism when cloning a PDB and parallelism is allowed as well on EE</li>



<li>we can use 3 PDBs per CDB since 19c without licensing the Multitenant Option. This provides some flexibility on which CDB to move the PDB to</li>
</ul>



<p class="wp-block-paragraph">You may check this <a href="https://database-heartbeat.com/2021/02/04/minimal-downtime-patching-using-refreshable-pdb-clones/">blog</a> with the steps to do when migrating through the refreshable PDB mechanism.</p>



<p class="wp-block-paragraph">Can we migrate a 19c database to 23ai with refreshable PDBs? Yes, we can do that as shown below:</p>



<p class="wp-block-paragraph">REMARK: The whole process described below can be done with the autoupgrade tool automatically. However, to see each step separately, I do this manually here.</p>



<p class="wp-block-paragraph">1. Preparing the source CDB, which is on 19.22.:</p>



<ol class="wp-block-list">
<li></li>
</ol>



<pre class="wp-block-code"><code>sys@CDB0&gt; select force_logging from v$database;

FORCE_LOGGING
---------------------------------------
YES

sys@CDB0&gt; create user c##refresh_pdbs identified by welcome1 container=all;

User created.

sys@CDB0&gt; grant create session, create pluggable database to c##refresh_pdbs container=all;

Grant succeeded.
</code></pre>



<p class="wp-block-paragraph">2. Create the refreshable PDB</p>



<p class="wp-block-paragraph">To have a connection between the Oracle Cloud and my on-prem 19.22.-DB I used the method described here through a ssh-tunnel:<br><a href="https://www.ludovicocaldara.net/dba/push-pdb-to-cloud/">https://www.ludovicocaldara.net/dba/push-pdb-to-cloud/</a></p>



<p class="wp-block-paragraph">On the target server:</p>



<pre class="wp-block-code"><code>&#091;oracle@db23aigi ~]$ sqlplus / as sysdba

SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Fri Apr 4 15:16:15 2025
Version 23.7.0.25.01

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


Connected to:
Oracle Database 23ai EE High Perf Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.7.0.25.01

SQL&gt; show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
SQL&gt; exit
Disconnected from Oracle Database 23ai EE High Perf Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.7.0.25.01
&#091;oracle@db23aigi ~]$ cat clone_db.sh 
SRC_PDB=$1
TGT_PDB=$2
ALIAS=$3
 
export ORACLE_HOME=/u01/app/oracle/product/23.0.0.0/dbhome_1
export ORACLE_SID=DB23AIGI
 
$ORACLE_HOME/bin/sqlplus -s / as sysdba &lt;&lt;EOF
        set timing on
        create database link prod_clone_link connect to c##refresh_pdbs
          identified by welcome1 using '$ALIAS';
        create pluggable database $2 from $1@prod_clone_link refresh mode manual;
        dbms_session.sleep(120);
        alter pluggable database $2 refresh;
        alter pluggable database $2 refresh mode none;
        exit
EOF
&#091;oracle@db23aigi ~]$ </code></pre>



<p class="wp-block-paragraph">On the source-server:</p>



<pre class="wp-block-code"><code>oracle@pm-DB-OEL8:~/Keys/dbi-OCI/dbi3oracle/DB-systems/db23aigi/ &#091;cdb0 (CDB$ROOT)] ssh -i ./ssh-key-2025-04-04.key opc@&lt;public-ip-OCI&gt; -R 1522:pm-DB-OEL8:1521 "sudo -u oracle /home/oracle/clone_db.sh PROD PROD23AI localhost:1522/PROD_PRI"

Database link created.

Elapsed: 00:00:00.01

Pluggable database created.

Elapsed: 00:06:16.42

Pluggable database altered.

Elapsed: 00:00:14.99

Pluggable database altered.

Elapsed: 00:00:00.78
oracle@pm-DB-OEL8:~/Keys/dbi-OCI/dbi3oracle/DB-systems/db23aigi/ &#091;cdb0 (CDB$ROOT)] </code></pre>



<p class="wp-block-paragraph">3. Upgrade the PDB to 23ai on the target server</p>



<pre class="wp-block-code"><code>SQL&gt; alter pluggable database PROD23AI open upgrade;

Pluggable database altered.

SQL&gt; select name, open_mode, restricted from v$pdbs where name='PROD23AI';

NAME				 OPEN_MODE  RES
-------------------------------- ---------- ---
PROD23AI			 MIGRATE    YES

SQL&gt; 

&#091;oracle@db23aigi ~]$ $ORACLE_HOME/bin/dbupgrade -c "PROD23AI" -l /tmp
....
Upgrade Summary Report Located in:
/tmp/upg_summary.log

     Time: 673s For PDB(s)

Grand Total Time: 673s 

 LOG FILES: (/tmp/catupgrd*.log)


Grand Total Upgrade Time:    &#091;0d:0h:11m:13s]
&#091;oracle@db23aigi ~]$ </code></pre>



<p class="wp-block-paragraph">REMARK: As mentioned initially I should have used autoupgrade for the whole process (or just the upgrade) here as $ORACLE_HOME/bin/dbupgrade has been desupported in 23ai, but for demonstration purposes of refreshable PDBs it is OK.</p>



<p class="wp-block-paragraph">4. Final steps after the upgrade</p>



<pre class="wp-block-code"><code>-- check the PDB_PLUG_IN_VIOLATIONS view for unresolved issues
SQL&gt; alter session set container=PROD23AI;

Session altered.

SQL&gt; select type, cause, message 
from PDB_PLUG_IN_VIOLATIONS 
where name='PROD23AI' and status != 'RESOLVED';  2    3  

TYPE		CAUSE			       MESSAGE
--------------- ------------------------------ ------------------------------------------------------------------------------------------
WARNING 	is encrypted tablespace?       Tablespace SYSTEM is not encrypted. Oracle Cloud mandates all tablespaces should be encrypted.
WARNING 	is encrypted tablespace?       Tablespace SYSAUX is not encrypted. Oracle Cloud mandates all tablespaces should be encrypted.
WARNING 	is encrypted tablespace?       Tablespace USERS is not encrypted. Oracle Cloud mandates all tablespaces should be encrypted.
WARNING 	Traditional Audit	       Traditional Audit configuration mismatch between the PDB and CDB$ROOT

SQL&gt; administer key management set key using tag 'new own key' force keystore identified by "&lt;wallet password&gt;" with backup;

keystore altered.

SQL&gt; alter tablespace users encryption online  encrypt;

Tablespace altered.

SQL&gt; alter tablespace sysaux encryption online  encrypt;

Tablespace altered.

SQL&gt; alter tablespace system encryption online  encrypt;

Tablespace altered.

SQL&gt; exec dbms_pdb.CLEAR_PLUGIN_VIOLATIONS;

PL/SQL procedure successfully completed.

SQL&gt; select type, cause, message 
from PDB_PLUG_IN_VIOLATIONS 
where name='PROD23AI' and status != 'RESOLVED';

no rows selected


-- Recompile invalid objects using the utlrp.sql script:
SQL&gt; alter session set container=PROD23AI;
 
Session altered.
 
SQL&gt; @?/rdbms/admin/utlrp.sql
 
PL/SQL procedure successfully completed.

-- Downtime ends. Check the DBA_REGISTRY_SQLPATCH view:
SQL&gt; alter session set container=PROD23AI;
 
Session altered.
 
SQL&gt; select patch_id, patch_type, status, description, action_time from dba_registry_sqlpatch order by action_time desc;

  PATCH_ID PATCH_TYPE STATUS	 DESCRIPTION						      ACTION_TIME
---------- ---------- ---------- ------------------------------------------------------------ --------------------------------
  37366180 RU	      SUCCESS	 Database Release Update : 23.7.0.25.01 (37366180) Gold Image 04-APR-25 04.00.06.975353 PM</code></pre>



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



<p class="wp-block-paragraph">If you haven&#8217;t done this yet, then I do recommend to migrate to the multitenant architecture as soon as possible. It makes several DBA tasks so much easier. Especially the migration to a new server with refreshable PDBs is very easy to do with low downtime, high flexibility and almost no impact on the source PDB during refreshes. On top of it you do not lose your source PDB during the process and may go back to it in case tests show that the target is not working correctly.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/migrating-an-oracle-database-to-another-server/">Migrating an Oracle database to another server</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/migrating-an-oracle-database-to-another-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle Database on Apple Silicon with Virtualbox 7.1</title>
		<link>https://www.dbi-services.com/blog/oracle-database-on-apple-silicon-with-virtualbox-7-1/</link>
					<comments>https://www.dbi-services.com/blog/oracle-database-on-apple-silicon-with-virtualbox-7-1/#comments</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Thu, 05 Dec 2024 18:57:09 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Apple Silicon]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Macbook]]></category>
		<category><![CDATA[virtualbox]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=36134</guid>

					<description><![CDATA[<p>I blogged in the past about running an Oracle database for testing purposes on Apple Silicon. Initially with emulated Intel code here and then (when Oracle released its 19c database software for ARM) with UTM as a wrapper for the QEMU hypervisor here. In the meantime another possibility came up since Oracle released its type [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-database-on-apple-silicon-with-virtualbox-7-1/">Oracle Database on Apple Silicon with Virtualbox 7.1</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I blogged in the past about running an Oracle database for testing purposes on Apple Silicon. Initially with emulated Intel code <a href="https://www.dbi-services.com/blog/running-intel-x86-64-vms-with-an-oracle-db-on-apple-silicon-arm/">here</a> and then (when Oracle released its 19c database software for ARM) with UTM as a wrapper for the QEMU hypervisor <a href="https://www.dbi-services.com/blog/running-an-oracle-database-19c-on-apple-silicon-apple-macbook-air-m1/">here</a>. In the meantime another possibility came up since Oracle released its type II hypervisor Virtualbox for ARM in version 7.1.</p>



<p class="wp-block-paragraph">Below the steps to setup an Oracle database from scratch on a Virtualbox VM on my MacBook Air M1.</p>



<h2 class="wp-block-heading" id="h-install-virtualbox-and-a-vm-with-oracle-enterprise-linux-8">Install Virtualbox and a VM with Oracle Enterprise Linux 8</h2>



<p class="wp-block-paragraph">First things first: Install Virtualbox. To do that go to <a href="http://www.virtualbox.org">www.virtualbox.org</a> and click on the download link:</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="256" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-22-1024x256.png" alt="" class="wp-image-36135" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-22-1024x256.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-22-300x75.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-22-768x192.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-22.png 1110w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Click on &#8220;macOS / Apple Silicon hosts&#8221;, which downloads VirtualBox-7.1.4-165100-macOSArm64.dmg (at the time when writing this Blog):</p>



<figure class="wp-block-image size-full"><img decoding="async" width="591" height="275" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-23.png" alt="" class="wp-image-36136" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-23.png 591w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-23-300x140.png 300w" sizes="(max-width: 591px) 100vw, 591px" /></figure>



<p class="wp-block-paragraph">In Finder double click the DMG to install Virtualbox. Go through the usual installation process until you see the following screen:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="608" height="433" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-25.png" alt="" class="wp-image-36138" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-25.png 608w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-25-300x214.png 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<p class="wp-block-paragraph">When starting Virtualbox the first time I set the Expert mode:</p>



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



<p class="wp-block-paragraph">But before creating a VM I downloaded Oracle Enterprise Linux 8 for ARM from <a href="https://yum.oracle.com/oracle-linux-isos.html">here</a>: </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="362" height="47" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-40.png" alt="" class="wp-image-36153" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-40.png 362w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-40-300x39.png 300w" sizes="auto, (max-width: 362px) 100vw, 362px" /></figure>



<p class="wp-block-paragraph">Then I create a new VM by clicking &#8220;New&#8221; in Virtualbox:<br></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="715" height="325" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-28.png" alt="" class="wp-image-36141" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-28.png 715w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-28-300x136.png 300w" sizes="auto, (max-width: 715px) 100vw, 715px" /></figure>



<p class="wp-block-paragraph">Provided the information requested:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="705" height="328" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-41.png" alt="" class="wp-image-36154" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-41.png 705w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-41-300x140.png 300w" sizes="auto, (max-width: 705px) 100vw, 705px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="689" height="188" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-42.png" alt="" class="wp-image-36155" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-42.png 689w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-42-300x82.png 300w" sizes="auto, (max-width: 689px) 100vw, 689px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="729" height="498" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-43.png" alt="" class="wp-image-36156" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-43.png 729w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-43-300x205.png 300w" sizes="auto, (max-width: 729px) 100vw, 729px" /></figure>



<p class="wp-block-paragraph">Then clicked &#8220;Finish&#8221;.</p>



<p class="wp-block-paragraph">Before starting the VM I enabled host caching under Settings -&gt; Storage -&gt; Controller: VirtioSCSI:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="950" height="496" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-44.png" alt="" class="wp-image-36157" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-44.png 950w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-44-300x157.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-44-768x401.png 768w" sizes="auto, (max-width: 950px) 100vw, 950px" /></figure>



<p class="wp-block-paragraph">I set the network to bridged, so that I also can reach the VM remotely for some tests (if you want to access your VM remotely, you have to adjust the firewall on your Mac):</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="934" height="519" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-45.png" alt="" class="wp-image-36158" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-45.png 934w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-45-300x167.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-45-768x427.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure>



<p class="wp-block-paragraph">Then I powered the machine on by clicking &#8220;Start&#8221;. I had to provide access to the keyboard and computer in the security settings of the Mac. The VM booted from the ISO and I could see the installation screen and choose to install Linux 8:</p>



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



<p class="wp-block-paragraph"> Then choose the language and other settings and begin the installation:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="646" height="432" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-47.png" alt="" class="wp-image-36160" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-47.png 646w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-47-300x201.png 300w" sizes="auto, (max-width: 646px) 100vw, 646px" /></figure>



<p class="wp-block-paragraph">Then reboot the system:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="412" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-48.png" alt="" class="wp-image-36161" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-48.png 642w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/12/image-48-300x193.png 300w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<h2 class="wp-block-heading" id="h-install-oracle-19c-19-25">Install Oracle 19c (19.25.)</h2>



<p class="wp-block-paragraph">After the reboot I can login to the machine through ssh as root and prepare for the Oracle installation:</p>



<pre class="wp-block-code"><code>dnf -y update 
dnf -y install oracle-database-preinstall-19c.aarch64

mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app

systemctl stop firewalld

passwd oracle

dnf -y install xterm.aarch64 tigervnc-server.aarch64</code></pre>



<p class="wp-block-paragraph">The Oracle software can be downloaded <a href="https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html">here</a>. I uploaded it to the /tmp directory on my just created VM and installed Oracle 19c:</p>



<pre class="wp-block-code"><code>su - oracle
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
cd /u01/app/oracle/product/19.0.0/dbhome_1

unzip -oq /tmp/LINUX.ARM64_1919000_db_home.zip

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_HOSTNAME=`hostname`
export ORA_INVENTORY=/u01/app/oraInventory


./runInstaller -ignorePrereq -waitforcompletion -silent             \
    -responseFile ${ORACLE_HOME}/install/response/db_install.rsp    \
    oracle.install.option=INSTALL_DB_SWONLY                         \
    ORACLE_HOSTNAME=${ORACLE_HOSTNAME}                              \
    UNIX_GROUP_NAME=oinstall                                        \
    INVENTORY_LOCATION=${ORA_INVENTORY}                             \
    SELECTED_LANGUAGES=en,en_GB                                     \
    ORACLE_HOME=${ORACLE_HOME}                                      \
    ORACLE_BASE=${ORACLE_BASE}                                      \
    oracle.install.db.InstallEdition=EE                             \
    oracle.install.db.OSDBA_GROUP=dba                               \
    oracle.install.db.OSBACKUPDBA_GROUP=backupdba                   \
    oracle.install.db.OSDGDBA_GROUP=dgdba                           \
    oracle.install.db.OSKMDBA_GROUP=kmdba                           \
    oracle.install.db.OSRACDBA_GROUP=racdba                         \
    SECURITY_UPDATES_VIA_MYORACLESUPPORT=false                      \
    DECLINE_SECURITY_UPDATES=true

su - root
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
exit</code></pre>



<p class="wp-block-paragraph">Then install the 19.25. release update, which I copied to /tmp/19.25:</p>



<pre class="wp-block-code"><code>cd $ORACLE_HOME
mv OPatch OPatch_1919
unzip -oq /tmp/19.25/p6880880_190000_Linux-ARM-64.zip 
cd /tmp/19.25
unzip -oq p36912597_190000_Linux-ARM-64.zip 
cd 36912597/
$ORACLE_HOME/OPatch/opatch apply
</code></pre>



<p class="wp-block-paragraph">Start a listener and install a DB</p>



<pre class="wp-block-code"><code>$ORACLE_HOME/bin/lsnrctl start

export ORACLE_SID=db19ee
export PDB_NAME=pdb1
export DATA_DIR=$ORACLE_BASE/oradata
mkdir -p $DATA_DIR

$ORACLE_HOME/bin/dbca -silent -createDatabase                            \
      -templateName General_Purpose.dbc                                   \
      -gdbname ${ORACLE_SID} -sid  ${ORACLE_SID} -responseFile NO_VALUE   \
      -characterSet AL32UTF8                                              \
      -sysPassword oracle_4U                                              \
      -systemPassword oracle_4U                                           \
      -createAsContainerDatabase true                                     \
      -numberOfPDBs 1                                                     \
      -pdbName ${PDB_NAME}                                                \
      -pdbAdminPassword oracle_4U                                         \
      -databaseType MULTIPURPOSE                                          \
      -memoryMgmtType auto_sga                                            \
      -totalMemory 2500                                                   \
      -storageType FS                                                     \
      -datafileDestination "${DATA_DIR}"                                  \
      -redoLogFileSize 200                                                \
      -emConfiguration NONE                                               \
      -ignorePreReqs

$ORACLE_HOME/bin/sqlplus / as sysdba &lt;&lt;EOF
alter system set db_create_file_dest='${DATA_DIR}';
alter pluggable database ${PDB_NAME} save state;
exit;
EOF</code></pre>



<p class="wp-block-paragraph">As root adjust the firewalld:</p>



<pre class="wp-block-code"><code># systemctl start firewalld
# cd /etc/firewalld/services
# vi oranetwork.xml
# cat oranetwork.xml
&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;service&gt;
&lt;short&gt;oranetwork&lt;/short&gt;
&lt;description&gt;Oracle Network communication&lt;/description&gt; &lt;port protocol="tcp" port="1521"/&gt;
&lt;/service&gt;
# firewall-cmd --permanent --add-service=oranetwork
# firewall-cmd --reload 
# firewall-cmd --list-all
...
  services: cockpit dhcpv6-client oranetwork ssh
...</code></pre>



<p class="wp-block-paragraph">Finally I can connect to my 19.25.-DB:</p>



<pre class="wp-block-code"><code>&#091;oracle@db19c-arm ~]$ . oraenv
ORACLE_SID = &#091;db19ee] ? db19ee
The Oracle base remains unchanged with value /u01/app/oracle
&#091;oracle@db19c-arm ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Dec 5 19:35:34 2024
Version 19.25.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.25.0.0.0

SQL&gt; show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
SQL&gt; 
</code></pre>



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



<p class="wp-block-paragraph">Consultants and DBAs who are used to run Oracle Database test environments on Virtualbox, can do this now on Apple Silicon as well. The steps to setup and run an Oracle DB on ARM are the same as on x86-64. Please consider that there are still some limitations on ARM. E.g. 19c is not supported on Oracle Enterprise Linux 9 (OEL9) on ARM.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-database-on-apple-silicon-with-virtualbox-7-1/">Oracle Database on Apple Silicon with Virtualbox 7.1</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/oracle-database-on-apple-silicon-with-virtualbox-7-1/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>What is the fastest method to connect to an Oracle database?</title>
		<link>https://www.dbi-services.com/blog/what-is-the-fastest-method-to-connect-to-an-oracle-database/</link>
					<comments>https://www.dbi-services.com/blog/what-is-the-fastest-method-to-connect-to-an-oracle-database/#comments</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Tue, 23 Jan 2024 20:25:42 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[connect time]]></category>
		<category><![CDATA[dedicated]]></category>
		<category><![CDATA[dedicated server]]></category>
		<category><![CDATA[pooled]]></category>
		<category><![CDATA[pooled server]]></category>
		<category><![CDATA[shared server]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=30413</guid>

					<description><![CDATA[<p>There are still applications around, which do connect to the database, do some stuff and then disconnect again. I.e. for each and every operation a logon to the database is necessary. This produces unnecessary overhead and is expressed in a high percentage of DB time taken by &#8220;connection management call elapsed time&#8221; in the Oracle [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/what-is-the-fastest-method-to-connect-to-an-oracle-database/">What is the fastest method to connect to an Oracle database?</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There are still applications around, which do connect to the database, do some stuff and then disconnect again. I.e. for each and every operation a logon to the database is necessary. This produces unnecessary overhead and is expressed in a high percentage of DB time taken by &#8220;connection management call elapsed time&#8221; in the Oracle time model. In case the application cannot be changed and a lot of connections are happening per second, then the question is on what is the fastest method to connect to an Oracle database?</p>



<p class="wp-block-paragraph">I do want to compare 3 different methods on how connects to the DB are handled and see what is the fastest in terms of connect-time:</p>



<ol class="wp-block-list">
<li>Dedicated Server</li>



<li>Shared Server</li>



<li>Database Resident Connection Pooling (DRCP)</li>
</ol>



<p class="wp-block-paragraph">For the test I used the following configuration:</p>



<ul class="wp-block-list">
<li>Container database cdb0, version 19.19. with pluggable database pdb0 running in a VM on Proxmox.</li>



<li>Client with version 19.16. running on a VM on Proxmox (different physical server than the DB).</li>
</ul>



<p class="wp-block-paragraph">REMARK: I do not use technologies, which may increase logon-time (like logon-triggers or logon-auditing) during the tests performed.</p>



<h2 class="wp-block-heading" id="h-preparation">Preparation</h2>



<h3 class="wp-block-heading" id="h-setup-shared-server">Setup shared server</h3>



<p class="wp-block-paragraph">For shared server I created a service pdb0_shared in my PDB pdb0:</p>



<pre class="wp-block-code"><code>alter session set container=pdb0;
exec dbms_service.create_service('pdb0_shared','pdb0_shared');
exec dbms_service.start_service('pdb0_shared');</code></pre>



<p class="wp-block-paragraph">Then I setup 10 shared server processes and 4 dispatchers. This has to be done in the root container:</p>



<pre class="wp-block-code"><code>connect / as sysdba
ALTER SYSTEM SET shared_servers= 10 SCOPE = BOTH ;
ALTER SYSTEM SET max_shared_servers = 100 SCOPE = BOTH;
ALTER SYSTEM SET dispatchers ='(INDEX=1)(PROTOCOL=TCP)(dispatchers=4)(SERVICE=pdb0_shared)' SCOPE = BOTH;</code></pre>



<p class="wp-block-paragraph">REMARK: The INDEX=1 means that I do not change the existing dispatcher-setting (e.g. for XDB).</p>



<p class="wp-block-paragraph">Verify the setup:</p>



<pre class="wp-block-code"><code>$ lsnrctl services listener1
...
Service "pdb0_shared" has 1 instance(s).
  Instance "cdb0", status READY, has 4 handler(s) for this service...
    Handler(s):
      "D004" established:0 refused:0 current:0 max:1022 state:ready
         DISPATCHER &lt;machine: pm-DB-OEL8, pid: 57522&gt;
         (ADDRESS=(PROTOCOL=tcp)(HOST=pm-DB-OEL8)(PORT=32407))
      "D003" established:0 refused:0 current:0 max:1022 state:ready
         DISPATCHER &lt;machine: pm-DB-OEL8, pid: 57520&gt;
         (ADDRESS=(PROTOCOL=tcp)(HOST=pm-DB-OEL8)(PORT=17299))
      "D002" established:0 refused:0 current:0 max:1022 state:ready
         DISPATCHER &lt;machine: pm-DB-OEL8, pid: 57518&gt;
         (ADDRESS=(PROTOCOL=tcp)(HOST=pm-DB-OEL8)(PORT=19185))
      "D001" established:0 refused:0 current:0 max:1022 state:ready
         DISPATCHER &lt;machine: pm-DB-OEL8, pid: 57516&gt;
         (ADDRESS=(PROTOCOL=tcp)(HOST=pm-DB-OEL8)(PORT=15569))
The command completed successfully

$ sqlplus cbleile@pm-DB-OEL8:1531/pdb0_shared:shared

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 18 19:29:34 2024
Version 19.16.0.0.0

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

Enter password: 
Last Successful login time: Thu Jan 18 2024 19:17:55 +01:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

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



<p class="wp-block-paragraph">REMARK: Please consider the &#8220;:shared&#8221; in the Easy Connect string. Using a service, which has no shared service connect handler results in an error when connecting:</p>



<pre class="wp-block-code"><code>$ sqlplus cbleile@pm-DB-OEL8:1531/pdb0:shared

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Jan 18 19:30:40 2024
Version 19.16.0.0.0

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

Enter password: 
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server</code></pre>



<h3 class="wp-block-heading" id="h-setup-pooled-connections-through-the-drcp">Setup pooled connections through the DRCP</h3>



<p class="wp-block-paragraph">This is simple with a single command in the root container:</p>



<pre class="wp-block-code"><code>sys@CDB0&gt; EXEC DBMS_CONNECTION_POOL.start_pool;

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



<p class="wp-block-paragraph">For details see<br><a href="https://oracle-base.com/articles/11g/database-resident-connection-pool-11gr1" target="_blank" rel="noreferrer noopener">https://oracle-base.com/articles/11g/database-resident-connection-pool-11gr1</a><a href="https://oracle-base.com/articles/23c/database-resident-connection-pool-enhancements-23c" target="_blank" rel="noreferrer noopener"><br>https://oracle-base.com/articles/23c/database-resident-connection-pool-enhancements-23c</a></p>



<h2 class="wp-block-heading" id="h-testing">Testing</h2>



<p class="wp-block-paragraph">I created 3 test scripts for dedicated, shared and pooled connections:</p>



<pre class="wp-block-code"><code>$ cat loop_connect_speed_pdb0_dedicated.sh
#!/bin/bash
# Purpose: Connect to a DB using a dedicated server connect and immediately 
#          disconnet then. Do this n times (parameter 1).
# History: 18.01.2024 CBL: Created
#############################################################################

if &#091; $# -ne 2 ]
then
   echo "Usage: $0 &lt;number of connections&gt; &lt;listener port&gt;"
   exit 1
fi

NUMBER_OF_CONNECTS=$1
LISTENER_PORT=$2

for (( c=1; c&lt;=$NUMBER_OF_CONNECTS; c++ ))
do
   echo exit | sqlplus -S cbleile/&lt;password&gt;@pm-DB-OEL8:${LISTENER_PORT}/pdb0:dedicated
done


$ cat loop_connect_speed_pdb0_shared.sh
#!/bin/bash
# Purpose: Connect to a DB using a shared server connect and immediately 
#          disconnet then. Do this n times (parameter 1).
# History: 18.01.2024 CBL: Created
#############################################################################

if &#091; $# -ne 2 ]
then
   echo "Usage: $0 &lt;number of connections&gt; &lt;listener port&gt;"
   exit 1
fi

NUMBER_OF_CONNECTS=$1
LISTENER_PORT=$2

for (( c=1; c&lt;=$NUMBER_OF_CONNECTS; c++ ))
do
   echo exit | sqlplus -S cbleile/&lt;password&gt;@pm-DB-OEL8:${LISTENER_PORT}/pdb0_shared:shared
done


$ cat loop_connect_speed_pdb0_pooled.sh
#!/bin/bash
# Purpose: Connect to a DB using a pooled server connect and immediately 
#          disconnet then. Do this n times (parameter 1).
# History: 18.01.2024 CBL: Created
#############################################################################

if &#091; $# -ne 2 ]
then
   echo "Usage: $0 &lt;number of connections&gt; &lt;listener port&gt;"
   exit 1
fi

NUMBER_OF_CONNECTS=$1
LISTENER_PORT=$2

for (( c=1; c&lt;=$NUMBER_OF_CONNECTS; c++ ))
do
   echo exit | sqlplus -S cbleile/&lt;password&gt;@pm-DB-OEL8:${LISTENER_PORT}/pdb0:pooled
done
</code></pre>



<p class="wp-block-paragraph">The scripts do 400 connects to the DB (one after the other in the loop) through the listener listening on port 1531. The results for 400 connects to the DB are as follows:</p>



<pre class="wp-block-code"><code>$ time ./loop_connect_speed_pdb0_dedicated.sh 400 1531

real	0m24.489s
user	0m7.418s
sys	0m3.132s</code></pre>



<p class="wp-block-paragraph">I.e. in average 61ms per connect/disconnect using a dedicated server.</p>



<pre class="wp-block-code"><code> time ./loop_connect_speed_pdb0_shared.sh 400 1531

real	0m17.399s
user	0m7.460s
sys	0m3.038s</code></pre>



<p class="wp-block-paragraph">I.e. in average 44ms per connect/disconnect using a shared server.</p>



<pre class="wp-block-code"><code>$ time ./loop_connect_speed_pdb0_pooled.sh 400 1531

real	0m18.235s
user	0m7.413s
sys	0m3.099s</code></pre>



<p class="wp-block-paragraph">I.e. in average 46ms per connect/disconnect using a pooled server.</p>



<p class="wp-block-paragraph">I repeated the test several times and results are consistent. I.e. <strong>shared server connections are the fastest followed closely by pooled connections and dedicated server connections are obviously the slowest</strong>.</p>



<p class="wp-block-paragraph">REMARK: Please consider that also the disconnect time is part of the measured time.</p>



<p class="wp-block-paragraph">In above tests I connected 400 times serially, i.e. one after the other. What happens when connects happen concurrently? How does it scale?</p>



<h2 class="wp-block-heading" id="h-concurrent-connects">Concurrent connects</h2>



<p class="wp-block-paragraph">I developed a second script, which starts e.g. 400 connections 2 or more times in parallel. I.e. with parallel 2 means I did 400 connections in two sessions, i.e. 800 connections in total using the following script:</p>



<pre class="wp-block-code"><code>oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] cat run_loop_pdb0_dedicated.sh
#!/bin/bash
# Purpose: Connect to a DB using a dedicated server connect and immediately 
#          disconnet then. Do this n times (parameter 1) and do this n times in parallel (parameter 2).
# History: 18.01.2024 CBL: Created
#############################################################################

if &#091; $# -ne 3 ]
then
   echo "Usage: $0 &lt;number of connections&gt; &lt;number of parallel starts&gt; &lt;number of listeners&gt;"
   exit 1
fi

NUMBER_OF_CONNECTS=$1
NUMBER_OF_PARALLEL_STARTS=$2
NUMBER_OF_LISTENERS=$3

for (( c=1; c&lt;=$NUMBER_OF_PARALLEL_STARTS; c++ ))
do
   let "port_nr = $(($c % $NUMBER_OF_LISTENERS)) + 1"
#   echo $port_nr
   ./loop_connect_speed_pdb0_dedicated.sh $NUMBER_OF_CONNECTS 153${port_nr} &amp;
done

# jobs

wait
</code></pre>



<p class="wp-block-paragraph">The scripts for shared and pooled connects look accordingly.</p>



<p class="wp-block-paragraph">Here the results to connect 1 &#8211; 6 times in parallel 400 connections (all going over 1 listener) via dedicated server:</p>



<pre class="wp-block-code"><code>oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_dedicated.sh 400 1 1

real	0m24.265s
user	0m7.485s
sys	0m3.099s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_dedicated.sh 400 2 1

real	0m24.569s
user	0m14.677s
sys	0m6.273s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_dedicated.sh 400 3 1

real	0m26.511s
user	0m21.708s
sys	0m9.807s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_dedicated.sh 400 4 1

real	0m29.579s
user	0m28.625s
sys	0m13.461s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_dedicated.sh 400 5 1

real	0m33.383s
user	0m35.570s
sys	0m16.990s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_dedicated.sh 400 6 1

real	0m37.954s
user	0m42.894s
sys	0m20.418s</code></pre>



<p class="wp-block-paragraph">So obviously something is slowing us down the higher concurrent logins get.</p>



<p class="wp-block-paragraph">Results for shared server connects:</p>



<pre class="wp-block-code"><code>oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_shared.sh 400 1 1

real	0m17.319s
user	0m7.531s
sys	0m3.028s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_shared.sh 400 2 1

real	0m17.301s
user	0m14.338s
sys	0m6.468s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_shared.sh 400 3 1

real	0m21.004s
user	0m21.426s
sys	0m9.922s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_shared.sh 400 4 1

real	0m25.325s
user	0m28.712s
sys	0m13.222s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_shared.sh 400 5 1

real	0m29.989s
user	0m35.659s
sys	0m16.876s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_shared.sh 400 6 1

real	0m35.180s
user	0m42.738s
sys	0m20.573s</code></pre>



<p class="wp-block-paragraph">I.e. also a slow down and with higher concurrency the times get closer to dedicated connections. Finally pooled connections:</p>



<pre class="wp-block-code"><code>oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_pooled.sh 400 1 1

real	0m17.977s
user	0m7.355s
sys	0m3.192s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_pooled.sh 400 2 1

real	0m18.000s
user	0m14.439s
sys	0m6.428s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_pooled.sh 400 3 1

real	0m21.257s
user	0m21.505s
sys	0m9.970s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_pooled.sh 400 4 1

real	0m25.417s
user	0m28.549s
sys	0m13.497s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_pooled.sh 400 5 1

real	0m30.227s
user	0m35.761s
sys	0m16.912s
oracle@19c-dg2:/home/oracle/ &#091;rdbms1916] time ./run_loop_pdb0_pooled.sh 400 6 1

real	0m35.146s
user	0m42.688s
sys	0m20.551s</code></pre>



<p class="wp-block-paragraph">Here a graph showing the result:</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/2024/01/Screenshot-2024-01-23-at-21.13.33-1024x487.png" alt="" class="wp-image-30415" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/01/Screenshot-2024-01-23-at-21.13.33-1024x487.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/01/Screenshot-2024-01-23-at-21.13.33-300x143.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/01/Screenshot-2024-01-23-at-21.13.33-768x366.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/01/Screenshot-2024-01-23-at-21.13.33-1536x731.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2024/01/Screenshot-2024-01-23-at-21.13.33-2048x975.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<p class="wp-block-paragraph">If it gets to connect time to an Oracle database then shared and pooled server connects are faster than dedicated server. However, changing from dedicated server connections to e.g. shared server connects is only a workaround. The base problem should be addressed: The application should be designed to use a connection pool and re-use connections without doing login/logout for every action or, in case of classical client server, keep the connection open. <strong>Please consider that connecting and disconnecting to/from the DB may take a considerable time in your application. </strong>The reason why connects do not scale that well when connecting concurrently will be addressed in a future blog.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/what-is-the-fastest-method-to-connect-to-an-oracle-database/">What is the fastest method to connect to an Oracle database?</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/what-is-the-fastest-method-to-connect-to-an-oracle-database/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle Database Appliance (ODA): Some listeners do not start anymore when booting</title>
		<link>https://www.dbi-services.com/blog/oracle-database-appliance-oda-some-listeners-do-not-start-anymore-when-booting/</link>
					<comments>https://www.dbi-services.com/blog/oracle-database-appliance-oda-some-listeners-do-not-start-anymore-when-booting/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Fri, 27 Oct 2023 12:08:26 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[/u01/app/odaorahome]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[crsctl]]></category>
		<category><![CDATA[crsctl modify]]></category>
		<category><![CDATA[oda]]></category>
		<category><![CDATA[sid_list_listener]]></category>
		<category><![CDATA[srvctl start listener]]></category>
		<category><![CDATA[TNS-01201]]></category>
		<category><![CDATA[TNS-1201]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=28918</guid>

					<description><![CDATA[<p>A colleague of mine had the issue some time ago and I recently experienced the same behaviour at a customer&#8217;s ODA: A couple of Listeners did not start when booting. Starting them as user grid with worked without any problem though. So what is the issue? Analysis Looking at the listeners which do not start [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-database-appliance-oda-some-listeners-do-not-start-anymore-when-booting/">Oracle Database Appliance (ODA): Some listeners do not start anymore when booting</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>A colleague of mine had the issue some time ago and I recently experienced the same behaviour at a customer&#8217;s ODA: A couple of Listeners did not start when booting. Starting them as user grid with</p>


<pre class="wp-block-code"><code>srvctl start listener -listener &lt;listener-name&gt;</code></pre>



<p class="wp-block-paragraph">worked without any problem though. So what is the issue?</p>



<h2 class="wp-block-heading" id="h-analysis">Analysis</h2>



<p class="wp-block-paragraph">Looking at the listeners which do not start in the listener.ora it becomes obvious that all listeners, which had an SID_LIST_&lt;listener-name&gt; did not start when booting. </p>



<p class="wp-block-paragraph">My first step was to check crs:</p>



<pre class="wp-block-code"><code>&#091;root@mysrv ~]# . oraenv
ORACLE_SID = &#091;root] ? +ASM1
ORACLE_HOME = &#091;/home/oracle] ? /u01/app/19.20.0.0/grid
The Oracle base has been set to /u01/app/grid
&#091;root@mysrv ~]# crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online</code></pre>



<p class="wp-block-paragraph">That looks good. </p>



<p class="wp-block-paragraph">For testing purposes it&#8217;s of course easier to stop crs and restart it instead of rebooting the server:</p>



<pre class="wp-block-code"><code>&#091;root@mysrv ~]# crsctl stop crs -f
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'mysrv'
CRS-2673: Attempting to stop 'ora.crsd' on 'mysrv'
CRS-2790: Starting shutdown of Cluster Ready Services-managed resources on server 'mysrv'
...
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'mysrv' has completed
CRS-4133: Oracle High Availability Services has been stopped.
&#091;root@mysrv ~]# crsctl start crs
CRS-4123: Oracle High Availability Services has been started.
&#091;root@mysrv ~]# </code></pre>



<p class="wp-block-paragraph">The listeners could be shutdown without any issue, but they did not come up when starting crs. In the alert.log I did see this:</p>



<pre class="wp-block-code"><code>&#091;root@mysrv app]# view /u01/app/grid/diag/crs/mysrv/crs/trace/alert.log
....
2023-10-24 17:04:57.042 &#091;CRSD(90854)]CRS-2807: Resource 'ora.LISTENER1.lsnr' failed to start automatically.
2023-10-24 17:04:57.044 &#091;CRSD(90854)]CRS-2807: Resource 'ora.LISTENER2.lsnr' failed to start automatically.
...</code></pre>



<p class="wp-block-paragraph">To find the reason why the cluster registry services of grid infrastructure did not start those specific listeners LISTENER1 and LISTENER2, I searched in the oraagent trace-files for SID_LIST_LISTENER1:</p>



<pre class="wp-block-code"><code>&#091;root@mysrv app]# pwd
/u01/app
&#091;root@mysrv app]# grep -il sid_list_listener1 ./grid/diag/crs/mysrv/crs/trace/crsd_oraagent_*.trc
...
./grid/diag/crs/mysrv/crs/trace/crsd_oraagent_grid.trc
...
&#091;root@mysrv app]# view ./grid/diag/crs/mysrv/crs/trace/crsd_oraagent_grid.trc
...
2023-10-24 20:46:58.914 :CLSDYNAM:1738524416: &#091;ora.LISTENER1.lsnr]{1:60057:2} &#091;start] ConfigFile::parse mmap name:sid_list_listener1 nameWithCase:SID_LIST_LISTENER1 value: comment:
2023-10-24 20:46:58.915 :CLSDYNAM:1700701952: &#091;ora.LISTENER1.lsnr]{1:60057:2} &#091;start] LsnrAgent::Lsnrctl::start lsnrctl start complete lsnrname:LISTENER1 output:
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 24-OCT-2023 20:46:58

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

Starting /u01/app/19.20.0.0/grid/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /u01/app/19.20.0.0/grid/network/admin/grid/listener.ora
Log messages written to /u01/app/grid/diag/tnslsnr/mysrv/listener1/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER1)))
TNS-01201: Listener cannot find executable /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_10/bin/oracle for SID INST9

Listener failed to start. See the error message(s) above...</code></pre>



<p class="wp-block-paragraph">So the listener could not find the oracle executable in the ORACLE_HOME provided in the SID_LIST_LISTENER1. The executable is of course required to start a connection through a statistic listener entry. When I saw that, it became clear why the listeners did not start: Since ODA 19.11. the ORACLE_HOMEs are located on the ACFS-Filesystem</p>



<pre class="wp-block-code"><code>/u01/app/odaorahome</code></pre>



<p class="wp-block-paragraph">REMARK: For more details about that change see an <a href="https://www.dbi-services.com/blog/oda-19-11-oracle_homes-on-acfs/">earlier Blog</a>.</p>



<p class="wp-block-paragraph">The issue was that that filesystem has not been mounted yet when the listener is being started by the oraagent. So I needed to add a startup dependency to the listeners to wait until the ACFS-Filesystem has been mounted. </p>



<p class="wp-block-paragraph">REMARK: Starting the listener with srvctl manually worked, because in the meantime the ACFS-filesystem was mounted.</p>



<h2 class="wp-block-heading" id="h-solution-and-verification-of-the-solution">Solution and verification of the solution</h2>



<p class="wp-block-paragraph">What is the current start dependency?</p>



<pre class="wp-block-code"><code>&#091;grid@mysrv grid]$ crsctl status resource ora.LISTENER1.lsnr -f | grep START_DEPENDENCIES=
START_DEPENDENCIES=hard(type:ora.cluster_vip_net1.type) pullup(type:ora.cluster_vip_net1.type)
&#091;grid@mysrv grid]$</code></pre>



<p class="wp-block-paragraph">How to modify the start dependency? Oracle provides the command crsctl modify, but it allows modifications only with the &#8220;-unsupported&#8221; option set. We opened a SR with Oracle and they confirmed that we can use that option. The resource we are depending on is &#8220;ora.data.orahome_sh.acfs&#8221;. So the needed adjustment is:</p>



<pre class="wp-block-code"><code>&#091;grid@mysrv grid]$ crsctl modify resource ora.LISTENER1.lsnr -attr "START_DEPENDENCIES='hard(type:ora.cluster_vip_net1.type,ora.data.orahome_sh.acfs) pullup(type:ora.cluster_vip_net1.type)'" -unsupported
&#091;grid@mysrv grid]$ </code></pre>



<p class="wp-block-paragraph">I tested it (crsctl stop crs -f and crsctl start crs) and it worked, the listener came up as expected. Afterwards I changed all required listeners accordingly and rebooted the server. All listeners came up during the boot process.</p>



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



<p class="wp-block-paragraph">Introducing <a href="https://www.dbi-services.com/blog/oda-19-11-oracle_homes-on-acfs/">ORACLE_HOMEs on ACFS in 19.11.</a> was a very welcome improvement, because it took away the space pressure we usually had on ODAs on the /u01-filesystem with many ORACLE_HOMEs. Such new features however, may have side effects, which are not obvious initially. Doing a proper analysis usually yields to a solution or a workaround. If you have to implement the solution/workaround then it&#8217;s a good practice to double check with Oracle Support that your solution is supported by Oracle &#8211; especially on the ODA.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/oracle-database-appliance-oda-some-listeners-do-not-start-anymore-when-booting/">Oracle Database Appliance (ODA): Some listeners do not start anymore when booting</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.dbi-services.com/blog/oracle-database-appliance-oda-some-listeners-do-not-start-anymore-when-booting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Running an Oracle Database 19c on Apple Silicon (Apple Macbook Air M1)</title>
		<link>https://www.dbi-services.com/blog/running-an-oracle-database-19c-on-apple-silicon-apple-macbook-air-m1/</link>
					<comments>https://www.dbi-services.com/blog/running-an-oracle-database-19c-on-apple-silicon-apple-macbook-air-m1/#comments</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Thu, 17 Aug 2023 13:41:08 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Apple Silicon]]></category>
		<category><![CDATA[m1]]></category>
		<category><![CDATA[m2]]></category>
		<category><![CDATA[UTM]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=27327</guid>

					<description><![CDATA[<p>By end of June 2023 Oracle announced the availability of Oracle 19c for the Arm-architecture (aarch64). Consultants and DBAs, who do use a Mac Laptop with Apple Silicon (M1 or M2), have waited quite a long time to run an Oracle database in a Sandbox environment on their Apple machine. The database software Oracle 19c [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/running-an-oracle-database-19c-on-apple-silicon-apple-macbook-air-m1/">Running an Oracle Database 19c on Apple Silicon (Apple Macbook Air M1)</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">By end of June 2023 Oracle <a href="https://blogs.oracle.com/database/post/announcing-oracle-database-19c-support-for-arm">announced</a> the availability of Oracle 19c for the Arm-architecture (aarch64). Consultants and DBAs, who do use a Mac Laptop with Apple Silicon (M1 or M2), have waited quite a long time to run an Oracle database in a Sandbox environment on their Apple machine.</p>



<p class="wp-block-paragraph">The database software Oracle 19c is not certified on MacOS. To run it on a Mac you have to install a Linux for Arm in a virtual machine and then install Oracle 19c in there as well. Virtualization software available on Apple Silicon are</p>



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



<li>VMWare Fusion</li>



<li>Virtualbox (was available as Beta software, but while writing this blog is no longer available for download)</li>



<li>UTM as a wrapper for QEMU</li>
</ul>



<p class="wp-block-paragraph">I&#8217;ve been running Virtualbox on Intel for a long time, but the beta software was available only as 32-Bit for Apple M1. Due to the fact that Parallels and VMWare have to be licensed or need an account to download software, I tested UTM as a virtualization platform. Below the steps I used to</p>



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



<li>create a virtual machine and install Oracle Enterprise Linux 8 for Arm</li>



<li>install Oracle Database 19c for Arm</li>



<li>create an Oracle Database</li>
</ul>



<p class="wp-block-paragraph"><strong>1. Install UTM</strong></p>



<p class="wp-block-paragraph">You may install UTM from the App Store, which costs a couple of Dollars/Euros/Swiss Franks or you download it from <a href="https://mac.getutm.app/">here</a>.<br>The software from the App Store and the download from the mentioned website is identical. The only difference is that you donate some money for the project when you download and install the software from the App Store.</p>



<p class="wp-block-paragraph">The installation is a typical Mac-installation. Just download from the App Store and install it or double click on the downloaded UTM.dmg and follow the instructions.</p>



<p class="wp-block-paragraph"><strong>2. Create a VM in UTM and install Oracle Enterprise Linux 8 for Arm</strong></p>



<p class="wp-block-paragraph">Click on the +-sign to create a new VM:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-24.png" alt="" class="wp-image-27328" style="width:136px;height:137px" width="136" height="137" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-24.png 294w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-24-150x150.png 150w" sizes="auto, (max-width: 136px) 100vw, 136px" /></figure>



<p class="wp-block-paragraph">Click on Virtualize:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-25.png" alt="" class="wp-image-27329" style="width:382px;height:68px" width="382" height="68" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-25.png 820w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-25-300x53.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-25-768x137.png 768w" sizes="auto, (max-width: 382px) 100vw, 382px" /></figure>



<p class="wp-block-paragraph">Click on Linux:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-26.png" alt="" class="wp-image-27330" style="width:371px;height:52px" width="371" height="52" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-26.png 828w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-26-300x42.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-26-768x108.png 768w" sizes="auto, (max-width: 371px) 100vw, 371px" /></figure>



<p class="wp-block-paragraph">Click on Browse&#8230; in the section &#8220;Boot ISO image&#8221;:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-27.png" alt="" class="wp-image-27331" style="width:379px;height:66px" width="379" height="66" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-27.png 872w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-27-300x52.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-27-768x134.png 768w" sizes="auto, (max-width: 379px) 100vw, 379px" /></figure>



<p class="wp-block-paragraph">Select the downloaded ISO-image you downloaded from <a href="https://yum.oracle.com/oracle-linux-isos.html">here</a>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="32" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-29-1024x32.png" alt="" class="wp-image-27333" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-29-1024x32.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-29-300x9.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-29-768x24.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-29-1536x48.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-29.png 1846w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Click on &#8220;Continue&#8221;:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-30.png" alt="" class="wp-image-27334" style="width:528px;height:598px" width="528" height="598" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-30.png 900w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-30-265x300.png 265w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-30-768x870.png 768w" sizes="auto, (max-width: 528px) 100vw, 528px" /></figure>



<p class="wp-block-paragraph">Select the amount of memory you want to provide to the VM and leave the rest on its defaults. Then press &#8220;Continue&#8221;:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="389" height="439" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-31.png" alt="" class="wp-image-27335" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-31.png 389w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-31-266x300.png 266w" sizes="auto, (max-width: 389px) 100vw, 389px" /></figure>



<p class="wp-block-paragraph">REMARK: If you leave &#8220;CPU Cores&#8221; on Default then UTM will create a VM with 4 cores. This is half the number of cores available on my M1 which also seems to be related to the fact that an M1 has 4 performance and 4 efficiency cores. </p>



<p class="wp-block-paragraph">Specify the size of the virtual disk attached to the VM:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="386" height="437" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-32.png" alt="" class="wp-image-27336" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-32.png 386w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-32-265x300.png 265w" sizes="auto, (max-width: 386px) 100vw, 386px" /></figure>



<p class="wp-block-paragraph">I do not use a shared directory:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="386" height="438" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-33.png" alt="" class="wp-image-27337" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-33.png 386w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-33-264x300.png 264w" sizes="auto, (max-width: 386px) 100vw, 386px" /></figure>



<p class="wp-block-paragraph">Check your settings (you may give it another name than &#8220;Linux&#8221;) and click &#8220;Save&#8221;:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-34.png" alt="" class="wp-image-27338" style="width:457px;height:514px" width="457" height="514" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-34.png 902w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-34-267x300.png 267w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-34-768x863.png 768w" sizes="auto, (max-width: 457px) 100vw, 457px" /></figure>



<p class="wp-block-paragraph">Your VM is now ready for booting the first time:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="807" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-35-1024x807.png" alt="" class="wp-image-27339" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-35-1024x807.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-35-300x236.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-35-768x605.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-35-1536x1210.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-35.png 1878w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">I changed the name to &#8220;Oracle DB on Arm&#8221; by clicking the &#8220;Edit selected VM&#8221;:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-39.png" alt="" class="wp-image-27343" style="width:173px;height:91px" width="173" height="91" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-39.png 324w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-39-300x157.png 300w" sizes="auto, (max-width: 173px) 100vw, 173px" /></figure>



<p class="wp-block-paragraph">And renamed it to &#8220;Oracle DB on Arm&#8221;:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-40.png" alt="" class="wp-image-27344" style="width:244px;height:46px" width="244" height="46" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-40.png 446w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-40-300x57.png 300w" sizes="auto, (max-width: 244px) 100vw, 244px" /></figure>



<p class="wp-block-paragraph">Click &#8220;Save&#8221; and then the &#8220;Play&#8221;-Button:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-36.png" alt="" class="wp-image-27340" style="width:93px;height:113px" width="93" height="113" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-36.png 282w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-36-246x300.png 246w" sizes="auto, (max-width: 93px) 100vw, 93px" /></figure>



<p class="wp-block-paragraph">Select to install OEL8:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="239" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-37-1024x239.png" alt="" class="wp-image-27341" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-37-1024x239.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-37-300x70.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-37-768x179.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-37-1536x359.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-37.png 1850w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Chose your Language:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="906" height="667" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-41.png" alt="" class="wp-image-27345" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-41.png 906w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-41-300x221.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-41-768x565.png 768w" sizes="auto, (max-width: 906px) 100vw, 906px" /></figure>



<p class="wp-block-paragraph">Setup Keyboard and the usual other settings:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="708" height="437" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-42.png" alt="" class="wp-image-27346" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-42.png 708w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-42-300x185.png 300w" sizes="auto, (max-width: 708px) 100vw, 708px" /></figure>



<p class="wp-block-paragraph">After adjusting everything to my needs (I do use the minimal install) it looked as follows:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="662" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-43-1024x662.png" alt="" class="wp-image-27347" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-43-1024x662.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-43-300x194.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-43-768x496.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-43-1536x992.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-43-2048x1323.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">So I clicked on &#8220;Begin Installation&#8221; and could check the progress:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="675" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-44-1024x675.png" alt="" class="wp-image-27348" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-44-1024x675.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-44-300x198.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-44-768x506.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-44.png 1103w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Finally I can reboot:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="642" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-45-1024x642.png" alt="" class="wp-image-27349" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-45-1024x642.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-45-300x188.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-45-768x481.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-45-1536x963.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-45-2048x1284.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">When the machine is down I clicked on the Power-Off-Button to adjust not to use the ISO-Image after reboot. I.e. moved the USB-drive down in the Boot-order:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="818" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-47-1024x818.png" alt="" class="wp-image-27351" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-47-1024x818.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-47-300x240.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-47-768x613.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-47-1536x1227.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-47.png 1878w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">After clicking on &#8220;Save&#8221; I also adjusted the Network to have a Bridged Network. After that I powered the VM on:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="212" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-48-1024x212.png" alt="" class="wp-image-27352" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-48-1024x212.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-48-300x62.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-48-768x159.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-48-1536x318.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-48.png 1758w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">A couple of secs later the machine is up:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="518" height="222" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-49.png" alt="" class="wp-image-27353" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-49.png 518w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-49-300x129.png 300w" sizes="auto, (max-width: 518px) 100vw, 518px" /></figure>



<p class="wp-block-paragraph">The machine is reachable through ssh then and I can use my Terminal to continue with the installation.</p>



<p class="wp-block-paragraph"><strong>3. Install Oracle Database software 19c for Arm</strong></p>



<p class="wp-block-paragraph">Login as root and do the required steps (steps are mainly taken from <a href="https://www.database-blog.at/2023/06/28/oracle-19c-fuer-linux-arm-ist-da/">here</a>):</p>



<pre class="wp-block-code"><code>dnf -y update 
dnf -y install oracle-database-preinstall-19c.aarch64

mkdir -p /u01/app/oracle
chown -R oracle:oinstall /u01/app

systemctl stop firewalld

passwd oracle

dnf -y install xterm.aarch64 tigervnc-server.aarch64</code></pre>



<p class="wp-block-paragraph">The Oracle software can be downloaded <a href="https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html">here</a>. I uploaded it to the /tmp directory on my just created VM. Just by coincidence I saw that the 19.19.-version available for Arm is smaller than the 19.3.-version for x86-64:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="68" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-50-1024x68.png" alt="" class="wp-image-27354" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-50-1024x68.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-50-300x20.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-50-768x51.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-50-1536x103.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-50-2048x137.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Install the Oracle software:</p>



<pre class="wp-block-code"><code>su - oracle
mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1
cd /u01/app/oracle/product/19.0.0/dbhome_1

unzip -oq /tmp/LINUX.ARM64_1919000_db_home.zip

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_HOSTNAME=`hostname`
export ORA_INVENTORY=/u01/app/oraInventory


./runInstaller -ignorePrereq -waitforcompletion -silent             \
    -responseFile ${ORACLE_HOME}/install/response/db_install.rsp    \
    oracle.install.option=INSTALL_DB_SWONLY                         \
    ORACLE_HOSTNAME=${ORACLE_HOSTNAME}                              \
    UNIX_GROUP_NAME=oinstall                                        \
    INVENTORY_LOCATION=${ORA_INVENTORY}                             \
    SELECTED_LANGUAGES=en,en_GB                                     \
    ORACLE_HOME=${ORACLE_HOME}                                      \
    ORACLE_BASE=${ORACLE_BASE}                                      \
    oracle.install.db.InstallEdition=EE                             \
    oracle.install.db.OSDBA_GROUP=dba                               \
    oracle.install.db.OSBACKUPDBA_GROUP=backupdba                   \
    oracle.install.db.OSDGDBA_GROUP=dgdba                           \
    oracle.install.db.OSKMDBA_GROUP=kmdba                           \
    oracle.install.db.OSRACDBA_GROUP=racdba                         \
    SECURITY_UPDATES_VIA_MYORACLESUPPORT=false                      \
    DECLINE_SECURITY_UPDATES=true

su - root
/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
exit
</code></pre>



<p class="wp-block-paragraph"><strong>4. Create a DB</strong></p>



<p class="wp-block-paragraph">Start a listener and create an Oracle DB:</p>



<pre class="wp-block-code"><code>$ORACLE_HOME/bin/lsnrctl start

export ORACLE_SID=db19ee
export PDB_NAME=pdb1
export DATA_DIR=$ORACLE_BASE/oradata
mkdir -p $DATA_DIR

$ORACLE_HOME/bin/dbca -silent -createDatabase                            \
      -templateName General_Purpose.dbc                                   \
      -gdbname ${ORACLE_SID} -sid  ${ORACLE_SID} -responseFile NO_VALUE   \
      -characterSet AL32UTF8                                              \
      -sysPassword oracle_4U                                              \
      -systemPassword oracle_4U                                           \
      -createAsContainerDatabase true                                     \
      -numberOfPDBs 1                                                     \
      -pdbName ${PDB_NAME}                                                \
      -pdbAdminPassword oracle_4U                                         \
      -databaseType MULTIPURPOSE                                          \
      -memoryMgmtType auto_sga                                            \
      -totalMemory 2500                                                   \
      -storageType FS                                                     \
      -datafileDestination "${DATA_DIR}"                                  \
      -redoLogFileSize 200                                                \
      -emConfiguration NONE                                               \
      -ignorePreReqs

$ORACLE_HOME/bin/sqlplus / as sysdba &lt;&lt;EOF
alter system set db_create_file_dest='${DATA_DIR}';
alter pluggable database ${PDB_NAME} save state;
exit;
EOF</code></pre>



<p class="wp-block-paragraph">As root adjust the firewalld:</p>



<pre class="wp-block-code"><code># systemctl start firewalld
# cd /etc/firewalld/services
# vi oranetwork.xml
# cat oranetwork.xml
&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;service&gt;
&lt;short&gt;oranetwork&lt;/short&gt;
&lt;description&gt;Oracle Network communication&lt;/description&gt; &lt;port protocol="tcp" port="1521"/&gt;
&lt;/service&gt;
# firewall-cmd --permanent --add-service=oranetwork
# firewall-cmd --reload 
# firewall-cmd --list-all
...
  services: cockpit dhcpv6-client oranetwork ssh
...
</code></pre>



<p class="wp-block-paragraph">Finally I can connect to my 19.19.-DB:</p>



<pre class="wp-block-code"><code>&#091;oracle@oracleonarm ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Aug 17 13:31:16 2023
Version 19.19.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0

SQL&gt; show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDB1 			  READ WRITE NO
SQL&gt;     
</code></pre>



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



<p class="wp-block-paragraph">The DB on my Apple Macbook Air M1 runs really fast. The M1 has 8 cores, 4 performance cores and 4 efficiency cores. By using the default concerning number of cores in UTM, it uses 4 cores in the VM and tests showed that performance cores were active:</p>



<pre class="wp-block-code"><code># lscpu
Architecture:        aarch64
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
NUMA node(s):        1
Vendor ID:           0x00
BIOS Vendor ID:      QEMU
Model:               0
BIOS Model name:     virt-8.0
Stepping:            0x0
BogoMIPS:            48.00
L1d cache:           unknown size
L1i cache:           unknown size
L2 cache:            unknown size
NUMA node0 CPU(s):   0-3
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp flagm2 frint
</code></pre>



<p class="wp-block-paragraph">I tested the number of logical IOs a single process can do on my VM with SLOB. The method I used is described <a href="https://bdrouvot.wordpress.com/2014/04/10/slob-logical-io-testing-check-if-your-benchmark-delivers-the-maximum/">here</a>. On my M1 running Oracle inside UTM I could do quite impressive 1,242,790.7 LIOs with a single process per second. The table size I did LIOs on was 2GB.</p>



<h3 class="wp-block-heading" id="h-dbi-services-dmk-database-management-kit">dbi services DMK (Database Management Kit)</h3>



<p class="wp-block-paragraph">Our <a href="https://www.dbi-services.com/products/dmk-management-kit/">DMK</a> 2.0.0 could be installed with only a minor issue: The provided rlwrap-executable did of course not work, because the deployed one is for x86-64. I <a href="https://github.com/hanslub42/rlwrap">downloaded</a> the source code and quickly compiled it on my VM and could use DMK without issues then:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="815" height="1024" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-51-815x1024.png" alt="" class="wp-image-27357" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-51-815x1024.png 815w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-51-239x300.png 239w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-51-768x965.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/08/image-51.png 1031w" sizes="auto, (max-width: 815px) 100vw, 815px" /></figure>
<p>L’article <a href="https://www.dbi-services.com/blog/running-an-oracle-database-19c-on-apple-silicon-apple-macbook-air-m1/">Running an Oracle Database 19c on Apple Silicon (Apple Macbook Air M1)</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/running-an-oracle-database-19c-on-apple-silicon-apple-macbook-air-m1/feed/</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
			</item>
		<item>
		<title>Building a transportable Oracle Sandbox environment for an Apple Silicon Laptop (MacBook with M1- or M2-processor)</title>
		<link>https://www.dbi-services.com/blog/building-a-transportable-oracle-sandbox-environment-for-an-apple-silicon-laptop-macbook-with-m1-or-m2-processor/</link>
					<comments>https://www.dbi-services.com/blog/building-a-transportable-oracle-sandbox-environment-for-an-apple-silicon-laptop-macbook-with-m1-or-m2-processor/#respond</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Mon, 26 Jun 2023 11:27:48 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Apple Silicon]]></category>
		<category><![CDATA[ARM]]></category>
		<category><![CDATA[Macbook]]></category>
		<category><![CDATA[macbook pro]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[Sandbox]]></category>
		<category><![CDATA[test environment]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=26293</guid>

					<description><![CDATA[<p>Since Apple released their Apple Silicon Laptops based on the ARM processor architecture, it became difficult for Consultants with such a device to run their Oracle Sandbox environment, because the main Oracle products are running on the Intel architecture. Hence a virtual machine on an Apple Silicon MacBook cannot be used for e.g. an Oracle [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/building-a-transportable-oracle-sandbox-environment-for-an-apple-silicon-laptop-macbook-with-m1-or-m2-processor/">Building a transportable Oracle Sandbox environment for an Apple Silicon Laptop (MacBook with M1- or M2-processor)</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Since Apple released their Apple Silicon Laptops based on the ARM processor architecture, it became difficult for Consultants with such a device to run their Oracle Sandbox environment, because the main Oracle products are running on the Intel architecture. Hence a virtual machine on an Apple Silicon MacBook cannot be used for e.g. an Oracle Database Sandbox environment. You may use emulators like described <a href="https://www.dbi-services.com/blog/running-intel-x86-64-vms-with-an-oracle-db-on-apple-silicon-arm/">here</a>, but they are so slow, that they are not usable for daily tests.</p>



<p class="wp-block-paragraph">So what can you do? You may run your test environment on the Cloud, but that produses additional costs and is not so easy to setup (except if you use <a href="https://www.dbi-services.com/products/yak/">YaK</a> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" />).</p>



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



<p class="wp-block-paragraph">I want to explain another alternative here: Running your Oracle Sandbox on a separate AMD-based Mini PC. I used AMD instead of Intel, because it’s more affordable with a 4-Core processor. To manage several environments on my external Mini PC I’m using Proxmox (Open Source Type I hypervisor/virtualisation software) to virtualise my Sandbox environments. Here are my components:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="724" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/My-Hardware.png" alt="" class="wp-image-26294" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/My-Hardware.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/My-Hardware-300x225.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/My-Hardware-768x577.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">I.e. on the right I have my Apple MacBook Air 10,1 with 8GB of RAM and the M1 processor. On the left my external machine, which has the following specifications: Mini PC, AMD Ryzen 7 3750H Desktop PC (Quad-Core), 16GB DDR4 RAM 512GB. The Mini PC was purchased for 300.- Euros. It is small and light: 12&#215;4.5&#215;14.5 cm, 476g. Below the Mini PC an USB stick with a Proxmox ISO image on it.</p>



<p class="wp-block-paragraph">To be able to use the Sandbox when connected to a network, the 2 machines should be connected through network cable with private IP addresses. In case the Mac has network access through WLAN it should act as a Gateway for the Mini PC.</p>



<p class="wp-block-paragraph">Before switching on the Mini PC I configured the Mac to act as an Internet Gateway. First of all I gave my Mac a fix internal IP on the network adapter used:</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Private-IP.png" alt="" class="wp-image-26295" width="840" height="744" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Private-IP.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Private-IP-300x266.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Private-IP-768x680.png 768w" sizes="auto, (max-width: 840px) 100vw, 840px" /></figure>



<p class="wp-block-paragraph">Then I setup Internet Sharing on my Mac, i.e. the Mac acts as a gateway, In the System Settings I searched for “internet sharing”:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="810" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-1.png" alt="" class="wp-image-26296" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-1.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-1-300x252.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-1-768x645.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Clicking on the little “I” next to enabling Internet Sharing I get this to setup what interface I provide internet sharing with:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="838" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-2.png" alt="" class="wp-image-26297" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-2.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-2-300x261.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-2-768x668.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">After confirming that and enabling Internet Sharing the following message appears:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="846" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-3.png" alt="" class="wp-image-26298" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-3.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-3-300x263.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-3-768x674.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">That’s OK, because I’m using my own private network to the Mini PC only. So I clicked Start:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="808" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-4.png" alt="" class="wp-image-26299" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-4.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-4-300x251.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Internet-Sharing-4-768x644.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">At this point I can start setting up Proxmox on my Mini PC. I installed it with DHCP enabled, so that it gets an IP address from my Mac automatically.</p>



<p class="wp-block-paragraph">The hypervisor gets an IP-address 192.168.2.2 and I can connect to it with the browser:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="364" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Proxmox1.png" alt="" class="wp-image-26301" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Proxmox1.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Proxmox1-300x113.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Proxmox1-768x290.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Now I can install e.g. an Oracle 23cFree for developers in a VM as described <a href="https://www.dbi-services.com/blog/installing-oracle-23c-free-developer-release-on-proxmox/">here</a>.</p>



<p class="wp-block-paragraph">Finally I have my portable Oracle Sandbox running and accessible from my Apple SIlicon Laptop:</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/2023/06/Finally-1024x768.jpeg" alt="" class="wp-image-26310" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Finally-1024x768.jpeg 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Finally-300x225.jpeg 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Finally-768x576.jpeg 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Finally-1536x1152.jpeg 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Finally.jpeg 2016w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



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



<p class="wp-block-paragraph">In the past I used Virtualbox and Vagrant to run my Oracle-Sandbox-environments directly on my Intel MacBook Pro 2019. If I want to remain on a Mac on Apple SIlicon then I need to adjust my Sandbox environment. Using an external AMD (or Intel) based Mini PC is affordable today. With Proxmox as a Type 1 hypervisor I can handle the VMs easily. The only efforts I have is to migrate my Virtualbox-VMs managed in Vagrant to Proxmox.</p>



<p class="wp-block-paragraph">REMARK 1: If you can afford to spend more money for your Mini PC then you may check the latest Intel NUC 13 Pro, which is a high-performance device. See e.g. the Youtube-video <a href="https://youtu.be/C9x0vW4qCYw">here</a>.</p>



<p class="wp-block-paragraph">REMARK 2: If you want to remain on Virtualbox and Vagrant then just install Linux or Windows on your Mini PC, but this requires maintaining the OS as well. Maintaining Proxmox requires much less efforts.</p>



<h1 class="wp-block-heading" id="h-update-29th-of-june-2023-oracle-is-now-also-available-on-the-arm-platforms-see-here">UPDATE 29th of June 2023: Oracle is now also available on the ARM platforms! See <a href="https://blogs.oracle.com/database/post/announcing-oracle-database-19c-support-for-arm">here</a></h1>
<p>L’article <a href="https://www.dbi-services.com/blog/building-a-transportable-oracle-sandbox-environment-for-an-apple-silicon-laptop-macbook-with-m1-or-m2-processor/">Building a transportable Oracle Sandbox environment for an Apple Silicon Laptop (MacBook with M1- or M2-processor)</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/building-a-transportable-oracle-sandbox-environment-for-an-apple-silicon-laptop-macbook-with-m1-or-m2-processor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Installing Oracle 23c Free developer release on Proxmox</title>
		<link>https://www.dbi-services.com/blog/installing-oracle-23c-free-developer-release-on-proxmox/</link>
					<comments>https://www.dbi-services.com/blog/installing-oracle-23c-free-developer-release-on-proxmox/#comments</comments>
		
		<dc:creator><![CDATA[Clemens Bleile]]></dc:creator>
		<pubDate>Mon, 05 Jun 2023 11:14:00 +0000</pubDate>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[23c]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[proxmox]]></category>
		<category><![CDATA[qm importdisk]]></category>
		<category><![CDATA[VM]]></category>
		<guid isPermaLink="false">https://www.dbi-services.com/blog/?p=25589</guid>

					<description><![CDATA[<p>Oracle provides an OVA (Open Virtual Appliance) file to install the 23c Free Developer Release on Virtualbox. An OVA file contains metadata and file elements in the Open Virtual Format (OVF) to package and distribute one or more virtual machines. The OVA-file provided by Oracle can also be used to import the Oracle 23c Free [&#8230;]</p>
<p>L’article <a href="https://www.dbi-services.com/blog/installing-oracle-23c-free-developer-release-on-proxmox/">Installing Oracle 23c Free developer release on Proxmox</a> est apparu en premier sur <a href="https://www.dbi-services.com/blog">dbi Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Oracle provides an OVA (Open Virtual Appliance) file to install the 23c Free Developer Release on Virtualbox. An OVA file contains metadata and file elements in the Open Virtual Format (OVF) to package and distribute one or more virtual machines. The OVA-file provided by Oracle can also be used to import the Oracle 23c Free VM to Proxmox. Here are steps on how to do that:</p>



<p class="wp-block-paragraph">First download the OVA-file from <a href="https://www.oracle.com/database/free/download/">here</a>:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="224" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Screenshot-2023-06-05-at-11.15.06-1024x224.png" alt="" class="wp-image-25591" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Screenshot-2023-06-05-at-11.15.06-1024x224.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Screenshot-2023-06-05-at-11.15.06-300x66.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Screenshot-2023-06-05-at-11.15.06-768x168.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/Screenshot-2023-06-05-at-11.15.06.png 1369w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The next step is to create a VM in Proxmox without disks and without CD (ISO) attached to it:</p>



<p class="wp-block-paragraph">First provide a name:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="686" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-4.png" alt="" class="wp-image-25592" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-4.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-4-300x213.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-4-768x547.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Then provide the OS-details and select to not use any CD/DVD media.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="690" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-6.png" alt="" class="wp-image-25596" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-6.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-6-300x215.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-6-768x550.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">At the System settings you may leave everything on default:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="676" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-7.png" alt="" class="wp-image-25597" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-7.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-7-300x210.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-7-768x539.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Delete the disk, which is pre-selected by clicking on the waste-baskett at the left side:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="692" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-8.png" alt="" class="wp-image-25598" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-8.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-8-300x215.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-8-768x551.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">So that it looks as follows:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="688" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-9.png" alt="" class="wp-image-25599" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-9.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-9-300x214.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-9-768x548.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Provide the number of CPUs you want to use on your VM. In my case I do use 2 cores. I usually set the <em>Type</em> to &#8220;host&#8221; to provide all features my host-CPU provides to the VM:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="682" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-10.png" alt="" class="wp-image-25600" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-10.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-10-300x212.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-10-768x543.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Set the amount of RAM you want to provide to your VM:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="682" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-11.png" alt="" class="wp-image-25601" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-11.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-11-300x212.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-11-768x543.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">In the last step define your network settings. I left everything on default on my setup:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="680" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-12.png" alt="" class="wp-image-25602" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-12.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-12-300x212.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-12-768x542.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">Finally check the confirmation page and make sure to NOT select the &#8220;Start after created&#8221; box. Then click on Finish:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="682" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-13.png" alt="" class="wp-image-25603" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-13.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-13-300x212.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-13-768x543.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">After a couple of seconds the VM is visible on your Proxmox GUI:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="964" height="508" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-14.png" alt="" class="wp-image-25604" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-14.png 964w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-14-300x158.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-14-768x405.png 768w" sizes="auto, (max-width: 964px) 100vw, 964px" /></figure>



<p class="wp-block-paragraph">To import the OVA-file downloaded, follow the steps below:</p>



<p class="wp-block-paragraph">scp the OVA-file to the hypervisor in e.g. the /tmp-directory (my Proxmox hypervisor has IP 192.168.2.2):</p>



<pre class="wp-block-code"><code>$ scp Oracle_Database_23c_Free_Developer_Appliance.ova root@192.168.2.2:/tmp</code></pre>



<p class="wp-block-paragraph">Login to the hypervisor and untar the OVA-file:</p>



<pre class="wp-block-code"><code>root@pve-sandbox:~# cd /tmp
root@pve-sandbox:/tmp# ls -ltr *.ova
-rw-r--r-- 1 root root 6996211200 Jun  2 20:50 Oracle_Database_23c_Free_Developer_Appliance.ova
root@pve-sandbox:/tmp# tar xvf Oracle_Database_23c_Free_Developer_Appliance.ova
Oracle DB Developer VM.ovf
Oracle DB Developer VM-disk001.vmdk
Oracle DB Developer VM-disk002.vmdk
root@pve-sandbox:/tmp# </code></pre>



<p class="wp-block-paragraph">List the VMs you have. In my case I only have the one with VM ID 100 I just created:</p>



<pre class="wp-block-code"><code>root@pve-sandbox:/tmp# qm list
      VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID       
       100 Ora23cFREE           stopped    8192               0.00 0         
root@pve-sandbox:/tmp# </code></pre>



<p class="wp-block-paragraph">Check the storage on my system:</p>



<pre class="wp-block-code"><code>root@pve-sandbox:/tmp# pvesm status
Name             Type     Status           Total            Used       Available        %
local             dir     active        98497780        17173872        76274360   17.44%
local-lvm     lvmthin     active       366276608               0       366276608    0.00%
root@pve-sandbox:/tmp# </code></pre>



<p class="wp-block-paragraph">I.e. I have storage local-lvm, which I can use to import the disks to.</p>



<p class="wp-block-paragraph">Import the 2 disks to my VM with VM ID 100, storage <em>local-lvm</em>. Due to blanks in the file-name, please consider the single quotes around the vmdk-file:</p>



<pre class="wp-block-code"><code>root@pve-sandbox:/tmp# qm importdisk 100 'Oracle DB Developer VM-disk001.vmdk' local-lvm -format qcow2
importing disk 'Oracle DB Developer VM-disk001.vmdk' to VM 100 ...
  Logical volume "vm-100-disk-0" created.
transferred 0.0 B of 29.3 GiB (0.00%)
transferred 300.0 MiB of 29.3 GiB (1.00%)
transferred 600.0 MiB of 29.3 GiB (2.00%)
transferred 900.0 MiB of 29.3 GiB (3.00%)
transferred 1.2 GiB of 29.3 GiB (4.00%)
...
transferred 29.0 GiB of 29.3 GiB (99.07%)
transferred 29.3 GiB of 29.3 GiB (100.00%)
transferred 29.3 GiB of 29.3 GiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-100-disk-0'
root@pve-sandbox:/tmp# 

root@pve-sandbox:/tmp# qm importdisk 100 'Oracle DB Developer VM-disk002.vmdk' local-lvm -format qcow2
importing disk 'Oracle DB Developer VM-disk002.vmdk' to VM 100 ...
  Logical volume "vm-100-disk-1" created.
transferred 0.0 B of 29.3 GiB (0.00%)
transferred 300.0 MiB of 29.3 GiB (1.00%)
transferred 600.0 MiB of 29.3 GiB (2.00%)
transferred 900.0 MiB of 29.3 GiB (3.00%)
transferred 1.2 GiB of 29.3 GiB (4.00%)
...
transferred 29.0 GiB of 29.3 GiB (99.04%)
transferred 29.3 GiB of 29.3 GiB (100.00%)
transferred 29.3 GiB of 29.3 GiB (100.00%)
Successfully imported disk as 'unused1:local-lvm:vm-100-disk-1'
root@pve-sandbox:/tmp# 
root@pve-sandbox:/tmp# pvesm list local-lvm
Volid                   Format  Type             Size VMID
local-lvm:vm-100-disk-0 raw     images    31457280000 100
local-lvm:vm-100-disk-1 raw     images    31457280000 100
root@pve-sandbox:/tmp# </code></pre>



<p class="wp-block-paragraph">Add the disks as scsci-disks to the VM in the Proxmox GUI by going the the VM hardware and double click on the &#8220;Unused disk 0&#8221;:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="958" height="495" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-15.png" alt="" class="wp-image-25608" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-15.png 958w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-15-300x155.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-15-768x397.png 768w" sizes="auto, (max-width: 958px) 100vw, 958px" /></figure>



<p class="wp-block-paragraph">Click on Add:</p>



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



<p class="wp-block-paragraph">Do the same for Unused disk 1:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="974" height="508" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-17.png" alt="" class="wp-image-25611" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-17.png 974w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-17-300x156.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-17-768x401.png 768w" sizes="auto, (max-width: 974px) 100vw, 974px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="602" height="218" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-18.png" alt="" class="wp-image-25612" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-18.png 602w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-18-300x109.png 300w" sizes="auto, (max-width: 602px) 100vw, 602px" /></figure>



<p class="wp-block-paragraph">Afterwards the disks are listed as normal scsci-harddisks:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="962" height="492" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-19.png" alt="" class="wp-image-25613" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-19.png 962w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-19-300x153.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-19-768x393.png 768w" sizes="auto, (max-width: 962px) 100vw, 962px" /></figure>



<p class="wp-block-paragraph">The last step is to adjust the boot order. Go to the VM options, double click on &#8220;boot order&#8221; and drag and drop the first disk to the top and enable it:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1007" height="618" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-20.png" alt="" class="wp-image-25614" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-20.png 1007w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-20-300x184.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-20-768x471.png 768w" sizes="auto, (max-width: 1007px) 100vw, 1007px" /></figure>



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



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="644" height="275" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-21.png" alt="" class="wp-image-25615" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-21.png 644w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-21-300x128.png 300w" sizes="auto, (max-width: 644px) 100vw, 644px" /></figure>



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



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="645" height="273" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-23.png" alt="" class="wp-image-25617" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-23.png 645w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-23-300x127.png 300w" sizes="auto, (max-width: 645px) 100vw, 645px" /></figure>



<p class="wp-block-paragraph">The VM options then look as follows:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="998" height="627" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-24.png" alt="" class="wp-image-25618" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-24.png 998w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-24-300x188.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-24-768x483.png 768w" sizes="auto, (max-width: 998px) 100vw, 998px" /></figure>



<p class="wp-block-paragraph">Then start the VM the first time. After booting the console shows:</p>



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



<p class="wp-block-paragraph">I opened a terminal in the console and had an IP address assigned automatically:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="516" src="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-26-1024x516.png" alt="" class="wp-image-25621" srcset="https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-26-1024x516.png 1024w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-26-300x151.png 300w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-26-768x387.png 768w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-26-1536x774.png 1536w, https://www.dbi-services.com/blog/wp-content/uploads/sites/2/2023/06/image-26-2048x1032.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">So I could login as oracle (password oracle) via ssh:</p>



<pre class="wp-block-code"><code>$ ssh oracle@192.168.122.1
Are you sure you want to continue connecting (yes/no/&#091;fingerprint])? yes
Warning: Permanently added '192.168.122.1' (ED25519) to the list of known hosts.
oracle@192.168.122.1's password: 
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Mon Jun  5 10:18:36 2023
&#091;oracle@localhost ~]$ </code></pre>



<p class="wp-block-paragraph">And connect to my DB after unsetting the TWO_TASK:</p>



<pre class="wp-block-code"><code>&#091;oracle@localhost ~]$ ps -ef | grep pmon | grep -v grep 
oracle      1900       1  0 10:18 ?        00:00:00 db_pmon_FREE
&#091;oracle@localhost ~]$ echo $ORACLE_SID

&#091;oracle@localhost ~]$ . oraenv
ORACLE_SID = &#091;oracle] ? FREE
The Oracle base has been set to /opt/oracle
&#091;oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Mon Jun 5 10:26:24 2023
Version 23.2.0.0.0

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

ERROR:
ORA-01017: invalid credential or not authorized; logon denied


Enter user-name: ^C
&#091;oracle@localhost ~]$ echo $TWO_TASK
FREEPDB1
&#091;oracle@localhost ~]$ unset TWO_TASK
&#091;oracle@localhost ~]$ sqlplus / as sysdba

SQL*Plus: Release 23.0.0.0.0 - Developer-Release on Mon Jun 5 10:26:43 2023
Version 23.2.0.0.0

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


Connected to:
Oracle Database 23c Free, Release 23.0.0.0.0 - Developer-Release
Version 23.2.0.0.0

SQL&gt; show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 FREEPDB1                       READ WRITE NO
SQL&gt; </code></pre>



<p class="wp-block-paragraph"><strong>Summary:</strong> Setting up an Oracle 23c Free Developer DB on Proxmox is fast and easy in a couple of steps.</p>
<p>L’article <a href="https://www.dbi-services.com/blog/installing-oracle-23c-free-developer-release-on-proxmox/">Installing Oracle 23c Free developer release on Proxmox</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/installing-oracle-23c-free-developer-release-on-proxmox/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: www.dbi-services.com @ 2026-06-19 15:58:58 by W3 Total Cache
-->