Oracle Sean

View Original

Oracle 19c rpm Install on OCI Free Compute Instance

Oracle introduced rpm installation of database software with version 18c. It’s a fast, easy way to install an Oracle home and even configuring a database. These instructions describe the method for the rpm install on Oracle on Oracle Linux or Red Hat Enterprise. Substitute 19c for 18c in each of the commands to get a 19c installation.

A neat part is the ability to create a starter database with a single command as the root user:

/etc/init.d/oracledb_ORCLDB-19c configure

I needed a quick database for an upcoming presentation and decided to install it on a compute instance on my free OCI tier. The rpm installation ran fine but I encountered problems with database creation:

# /etc/init.d/oracledb_ORCLCDB-19c configure 
Configuring Oracle Database ORCLCDB. 
[WARNING] [DBT-11205] Specified shared pool size does not meet the recommended minimum size requirement. This might cause database creation to fail.
   ACTION: Specify at least (529 MB) for shared pool size. 
Prepare for db operation 
8% complete 
Copying database files 
31% complete 
Creating and starting Oracle instance 
32% complete 
36% complete 
[WARNING] ORA-04031: unable to allocate 1048848 bytes of shared memory ("shared pool","unknown object","PDB Dynamic He","alls-ktimcem")  

[WARNING] ORA-04031: unable to allocate 1048848 bytes of shared memory ("shared pool","unknown object","PDB Dynamic He","alls-ktimcem")  

40% complete 
43% complete 
[WARNING] ORA-65020: pluggable database PDB$SEED already closed  

[WARNING] ORA-00900: invalid SQL statement  

[WARNING] ORA-00604: error occurred at recursive SQL level 1 ORA-01219: database or pluggable database not open: queries allowed on fixed tables or views only  

[WARNING] ORA-65020: pluggable database PDB$SEED already closed  

[WARNING] ORA-00900: invalid SQL statement  

46% complete 
100% complete 
[FATAL] Error while executing "/opt/oracle/product/19c/dbhome_1/ord/im/admin/ordlib.sql". Refer to "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ordlib0.log" for more details. Error in Process: /opt/oracle/product/19c/dbhome_1/perl/bin/perl 
31% complete 
8% complete 
0% complete 
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.  Database configuration failed. 

That’s not good and certainly not the quick and easy solution I was hoping for.

Digging through the logs, I discovered these entries:

[main] [ 2020-01-11 21:19:59.109 GMT ] [OsUtilsBase.getTotalPhysicalMemory:416]  Total Physical Memory in MB: 968
INFO: Jan 11, 2020 9:19:59 PM oracle.assistants.common.base.util.InitParamCollectionUtil getInitParam
INFO: Could not find the init param (memory_target) from init params.

INFO: Jan 11, 2020 9:19:59 PM oracle.assistants.common.base.util.InitParamCollectionUtil getInitParam
INFO: Could not find the init param (memory_target) from init params. So creating one.

INFO: Jan 11, 2020 9:19:59 PM oracle.assistants.common.base.util.InitParamCollectionUtil getInitParam
INFO: Could not find the init param (memory_target) from init params.

INFO: Jan 11, 2020 9:19:59 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemorySettings
INFO: Memory percentage is specified:40

INFO: Jan 11, 2020 9:19:59 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemorySettings
INFO: total memory calculated is:387 MB

Oracle is calculating the value of memory_target based on 40% of the system’s physical memory. So where is this 40% value coming from?

It’s in $ORACLE_HOME/assistants/dbca/templates/General_Purpose.dbc:

     <MiscParams>
         <databaseType>MULTIPURPOSE</databaseType>
         <maxUserConn>20</maxUserConn>
         <percentageMemTOSGA>40</percentageMemTOSGA>
         <customSGA>false</customSGA>
         <dataVaultEnabled>false</dataVaultEnabled>
         <archiveLogMode>false</archiveLogMode>
         <initParamFileName>/pfile/init.ora</initParamFileName>
      </MiscParams>

I changed 40 to 75 and database creation ran as expected.

A side note: the initial database creation uses AMM:

INFO: Jan 11, 2020 9:45:38 PM oracle.assistants.common.base.util.InitParamCollectionUtil getInitParam
INFO: Could not find the init param (memory_target) from init params.

INFO: Jan 11, 2020 9:45:38 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemorySettings
INFO: Memory percentage is specified:75

INFO: Jan 11, 2020 9:45:38 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemorySettings
INFO: total memory calculated is:726 MB

Database creation then switches to ASMM:

INFO: Jan 11, 2020 9:45:38 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemorySettings
INFO: automaticMemoryMgmtFeasible is false. So defaulting memoryMgmtType to ASMM

INFO: Jan 11, 2020 9:45:38 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemoryParamsValues
INFO: Total memory used to calculate memory values:726 MB
<snip>
INFO: Jan 11, 2020 9:45:38 PM oracle.assistants.dbca.action.ConfigurationParamsAction updateMemoryParamsValues
INFO: sga_target value:544 MB pga_aggreegate_target value:182 MB

This is confirmed from the database post-creation:

SQL> show parameter target

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
archive_lag_target		     integer	 0
db_big_table_cache_percent_target    string	 0
db_flashback_retention_target	     integer	 1440
fast_start_io_target		     integer	 0
fast_start_mttr_target		     integer	 0
memory_max_target		     big integer 0
memory_target			     big integer 0
parallel_servers_target 	     integer	 40
pga_aggregate_target		     big integer 182M
sga_target			     big integer 544M
target_pdbs			     integer	 1
SQL> 

And there you have it. Oracle 19c running on OCI free compute!