<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Valentin ROBU</title>
    <description>The latest articles on DEV Community by Valentin ROBU (@vrobu).</description>
    <link>https://dev.to/vrobu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3112326%2F2145e2eb-6988-4f78-8b4c-b79b410ab638.jpg</url>
      <title>DEV Community: Valentin ROBU</title>
      <link>https://dev.to/vrobu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vrobu"/>
    <language>en</language>
    <item>
      <title>Run Oracle Database 19c (19.19) on Raspberry Pi 5</title>
      <dc:creator>Valentin ROBU</dc:creator>
      <pubDate>Tue, 13 May 2025 15:58:06 +0000</pubDate>
      <link>https://dev.to/vrobu/run-oracle-database-19c-1919-on-raspberry-pi-5-2768</link>
      <guid>https://dev.to/vrobu/run-oracle-database-19c-1919-on-raspberry-pi-5-2768</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Oracle Corp.&lt;/strong&gt;&lt;/em&gt; has released some time ago an installation kit of Oracle 19c (version 19.19) that supports ARM-based devices. &lt;strong&gt;This package can be successfully used to install the database on a Raspberry Pi 5.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Currently, Oracle Linux (both version 8 and 9) is not installable on the Raspberry Pi 5.&lt;/strong&gt; However, future releases of Oracle Linux are expected to address this limitation.&lt;/p&gt;

&lt;p&gt;I tried on RPI4 couple of years ago and failed to find a solution then after some long investigations I gave up once I found that it is a problem of CPU — not yet prepared for Oracle Db code.&lt;/p&gt;

&lt;p&gt;The idea of running a functional database on the Raspberry Pi has always stayed with me. Therefore, after reading on several blogs that the Raspberry Pi 5 features an improved processor, I decided it was worth attempting the setup once again. I bought an RPI5 - 16GB version, although even the smaller version (8GB) should be fine.&lt;/p&gt;

&lt;p&gt;Since Oracle Linux 8 and 9 cannot be reliably installed on ARM — failing with an error on first reboot — I opted for AlmaLinux 8.10, which is fully compatible with the Raspberry Pi 5’s CPU architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; This tutorial is intended for test environments only, as the complete stack is not officially certified. It should be treated as experimental, though it provides a solid foundation. In the future, once Oracle releases a fully compatible version of Oracle Linux (OL) for the Raspberry Pi 5, you may consider transitioning to a production setup. However, be aware that Oracle does not certify its database for use on Raspberry Pi hardware.&lt;/p&gt;

&lt;p&gt;You can check if yours RPI5 hardware is capable to run an Oracle database executing &lt;strong&gt;&lt;em&gt;lscpu&lt;/em&gt;&lt;/strong&gt; command. A complete output on my RPI5 SoC is listed below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
#############
###  RPI5 ###
#############

[root@rpi5 ~]# 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 cluster: 4
Socket(s):           -
Cluster(s):          1
NUMA node(s):        8
Vendor ID:           ARM
Model:               1
Model name:          Cortex-A76
Stepping:            r4p1
CPU max MHz:         2400.0000
CPU min MHz:         1500.0000
BogoMIPS:            108.00
L1d cache:           64K
L1i cache:           64K
L2 cache:            512K
L3 cache:            2048K
NUMA node0 CPU(s):   0-3
NUMA node1 CPU(s):   
NUMA node2 CPU(s):   
NUMA node3 CPU(s):   
NUMA node4 CPU(s):   
NUMA node5 CPU(s):   
NUMA node6 CPU(s):   
NUMA node7 CPU(s):   
Flags:               fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same command executed on an RPI4:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
#############
###  RPI4 ###
#############

root@rpi:~# lscpu
Architecture:             aarch64
  CPU op-mode(s):         32-bit, 64-bit
  Byte Order:             Little Endian
CPU(s):                   4
  On-line CPU(s) list:    0-3
Vendor ID:                ARM
  Model name:             Cortex-A72
    Model:                3
    Thread(s) per core:   1
    Core(s) per cluster:  4
    Socket(s):            -
    Cluster(s):           1
    Stepping:             r0p3
    CPU(s) scaling MHz:   40%
    CPU max MHz:          1500.0000
    CPU min MHz:          600.0000
    BogoMIPS:             108.00
    Flags:                fp asimd evtstrm crc32 cpuid
Caches (sum of all):      
  L1d:                    128 KiB (4 instances)
  L1i:                    192 KiB (4 instances)
  L2:                     1 MiB (1 instance)
NUMA:                     
  NUMA node(s):           2
  NUMA node0 CPU(s):      0-3
  NUMA node1 CPU(s):      0-3
Vulnerabilities:          
  Gather data sampling:   Not affected
  Itlb multihit:          Not affected
  L1tf:                   Not affected
  Mds:                    Not affected
  Meltdown:               Not affected
  Mmio stale data:        Not affected
  Reg file data sampling: Not affected
  Retbleed:               Not affected
  Spec rstack overflow:   Not affected
  Spec store bypass:      Vulnerable
  Spectre v1:             Mitigation; __user pointer sanitization
  Spectre v2:             Vulnerable
  Srbds:                  Not affected
  Tsx async abort:        Not affected

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; Due to architectural limitations, the ARM CPU used in earlier Raspberry Pi models (such as the Raspberry Pi 4) does not support database creation, even though the Oracle 19.19 version can still be installed as an ORACLE_HOME. Such a setup is suitable if you need an Oracle client on a Raspberry Pi 4, but database creation and listener startup will result in errors.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Prolegomena
&lt;/h2&gt;

&lt;p&gt;As already mentioned, there is no available version of Oracle Linux 8 or 9 for Raspberry Pi 5. As a consequence, I used a closely related distribution — AlmaLinux, which is derived from Red Hat.&lt;/p&gt;

&lt;p&gt;Oracle Corp. mentions within installation manuals the prerequisites required for an 19c database. Complete details are to be found here: &lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/operating-system-checklist-for-oracle-database-installation-on-linux.html" rel="noopener noreferrer"&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/operating-system-checklist-for-oracle-database-installation-on-linux.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, since we cant use yet an Oracle Linux, AlmaLinux is a viable (though not “certified”) alternative.&lt;/p&gt;

&lt;p&gt;Bear in mind that Oracle Database requires space for two kinds of “storage”:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ORACLE_HOME — approx. 6 GB of free space at minimum&lt;/li&gt;
&lt;li&gt;Database files — depends on user data to populate the database, minimum is about 4 GB.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For OS we also need space to install it along with swapfile. As Oracle DB requires (imposes in fact) a minimum swapfile of 16GB it is obvious that OS ISO cannot be burned on a 16 GB SD card. Even 32 GB is small (at limit), hence I recommend you get an 64 GB SD card at least.&lt;/p&gt;

&lt;p&gt;For my tests, I used for Oracle files (ORACLE HOME files and DB file) an external SSD connected on USB.&lt;/p&gt;

&lt;p&gt;Complete hardware list as per my testing case is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raspberry Pi 5&lt;/li&gt;
&lt;li&gt;An 256 GB SD card&lt;/li&gt;
&lt;li&gt;An 128 GB SSD device mounted and made available once OS was installed, to store Oracle related files&lt;/li&gt;
&lt;li&gt;A Raspberry Pi 5 aluminum heatsink case with dual fans (&lt;a href="https://www.waveshare.com/pi5-case-c.htm" rel="noopener noreferrer"&gt;https://www.waveshare.com/pi5-case-c.htm&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My hardware looks as below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fha0jmz5nahthpegumluy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fha0jmz5nahthpegumluy.png" alt="RPI5 fully equiped" width="800" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Download AlmaLinux 8.10 ISO for ARM
&lt;/h2&gt;

&lt;p&gt;Navigate to version 8.10 (latest available for now) version of AlmaLinux certified with RPI5: &lt;a href="https://repo.almalinux.org/rpi/images/" rel="noopener noreferrer"&gt;https://repo.almalinux.org/rpi/images/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzw45qd3sef3q6xslsl75.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzw45qd3sef3q6xslsl75.png" alt="Image description" width="722" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chose latest ISO available. I used GNOME version, aka &lt;a href="https://repo.almalinux.org/rpi/images/AlmaLinux-8-RaspberryPi-GNOME-latest.aarch64.raw.xz" rel="noopener noreferrer"&gt;https://repo.almalinux.org/rpi/images/AlmaLinux-8-RaspberryPi-GNOME-latest.aarch64.raw.xz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download it locally on your desktop/laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Burn AlmaLinux OS on a SD card
&lt;/h2&gt;

&lt;p&gt;For burning the ISO on SR card I used Raspberry Pi Imager (for macOS, isntall the version for your OS (&lt;a href="https://downloads.raspberrypi.org/imager/imager_latest.dmg" rel="noopener noreferrer"&gt;https://downloads.raspberrypi.org/imager/imager_latest.dmg&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;For Raspberry Pi Device chose RPI5, chose also storage (SD card). For operating system, select ALmaLinux ISO file downloaded previously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxermtpf5l95tgk67hrfe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxermtpf5l95tgk67hrfe.png" alt="Image description" width="720" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vxq6yijijuvwhio9cpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7vxq6yijijuvwhio9cpx.png" alt="Image description" width="730" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The main advantage of the Raspberry Pi Imager is that it allows you to customize the operating system installation right from the start&lt;/strong&gt; — including settings such as username, password, hostname, SSH keys, and more. If you’ve previously noted the MAC address of your Raspberry Pi 5, you can assign a static IP address to it through your router’s interface. In this case, you won’t even need a monitor for the initial setup of AlmaLinux on the Raspberry Pi 5.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsbv17allcbzqn7wpkgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgsbv17allcbzqn7wpkgu.png" alt="Image description" width="426" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fds547w0et655coflzbti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fds547w0et655coflzbti.png" alt="Image description" width="800" height="952"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alternatively, you can use BalenaEtcher — slightly less polished in appearance, but still fully functional (&lt;a href="https://etcher.balena.io/#download-etcher" rel="noopener noreferrer"&gt;https://etcher.balena.io/#download-etcher&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Insert the SD card into the RPI5 and wake up the beast
&lt;/h2&gt;

&lt;p&gt;It will take a while since RPI5 power on until you can connect with ssh. I usually open a ssh terminal and pinged until I got response from RPI5 (I also know IP address which wil be allocated by router).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sf4sxwtay40n7q8wqxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8sf4sxwtay40n7q8wqxf.png" alt="Image description" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once RPI5 starts to reply, connect with ssh client (tabby in my case) to RPI5 using either password or the SSH key entered while OS was burned from ISO.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59aoaz9kg4h9v99eek0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F59aoaz9kg4h9v99eek0g.png" alt="Image description" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Initial configuration
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; during this tutorial, hash (#) sign means the command is executed as root, while dollar sign ($) means a regular indicated user (oracle in most cases).&lt;/p&gt;

&lt;h2&gt;
  
  
  6.1 Enable RPI fans (if exists)
&lt;/h2&gt;

&lt;p&gt;Since I have a heatsink case with dual fans, I want to activate them since AlmaLinux does not do this automatically.&lt;/p&gt;

&lt;p&gt;Connect as your OS defined user then sudo to root. Edit (create if does not exist) file &lt;em&gt;&lt;strong&gt;/boot/config.txt&lt;/strong&gt;&lt;/em&gt; adding below content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dtparam=fan_temp0=35000
dtparam=fan_temp0_hyst=5000
dtparam=fan_temp0_speed=175
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6.2 Reboot RPI5
&lt;/h2&gt;

&lt;p&gt;Once rebooted, check if fans are spinning !&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;6.3 Set hostname
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# hostnamectl set-hostname rpi5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6.4 Adjust (if the case) hosts file
&lt;/h2&gt;

&lt;p&gt;My RPI5 &lt;strong&gt;&lt;em&gt;/etc/hosts&lt;/em&gt;&lt;/strong&gt; contains the following (automatically configured):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# The following lines are desirable for IPv4 capable hosts
127.0.0.1 192.168.5.5 rpi5
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4

# The following lines are desirable for IPv6 capable hosts
::1 192.168.5.5 rpi5
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pay attention to message in &lt;em&gt;&lt;strong&gt;/etc/hosts&lt;/strong&gt;&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to
# persist then you will need to either
# a.) make changes to the master file in
# /etc/cloud/templates/hosts.redhat.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
# /etc/cloud/cloud.cfg or cloud-config from user-data
#
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case you intend to change the file, do it as recommended!&lt;/p&gt;

&lt;h2&gt;
  
  
  6.5 Disable SELinux
&lt;/h2&gt;

&lt;p&gt;Edit &lt;strong&gt;&lt;em&gt;/etc/selinux/config&lt;/em&gt;&lt;/strong&gt; file, changing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELINUX=enforcing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELINUX=disabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6.6 Secure RPI5
&lt;/h2&gt;

&lt;p&gt;Edit ssh daemon config file adding/changind values of below parameters as indicated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# vi /etc/ssh/sshd_config

PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no
UsePAM no
UseDNS no
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Optional, you can disable ssh connections as oracle user (avoid hacking attempts is RPI5 will be visible in internet), adding to same file the lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DenyUsers oracle
AllowUsers &amp;lt;your_os_user&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart SSH daemon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6.7 Update AlmaLinux OS on RPI5
&lt;/h2&gt;

&lt;p&gt;As root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# dnf update -y
# dnf upgrade -y
# dnf group install -y "Server with GUI"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6.8 Configure TigerVNC for RPI5
&lt;/h2&gt;

&lt;p&gt;This step is optional. If you don’t need/want a GUI then you can pass over. However, if you want to perform Oracle software installation in graphical mode you either need a keyboard, a mouse and a monitor or TigerVNC (or other VNC solution).&lt;/p&gt;

&lt;p&gt;As root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# dnf install -y tigervnc-server tigervnc-server-module
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As your OS user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vncpasswd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add entries for your OS user and oracle user (will create oracle OS user a bit later):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# vi /etc/tigervnc/vncserver.users


:1=oracle
:2=&amp;lt;your_os_user&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As root, validate if vncserver for &lt;strong&gt;&lt;em&gt;your_os_user&lt;/em&gt;&lt;/strong&gt; works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl enable -now vncserver@:2
# systemctl start vncserver@:2
# systemctl status vncserver@:2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE: VNC for oracle user cannot be started yet as the user does not exist. You can enable and start it once oracle user was created.&lt;/p&gt;

&lt;h2&gt;
  
  
  6.9 Disable firewall or add rules for TigerVNC in firewall
&lt;/h2&gt;

&lt;p&gt;I chose to disable firewall completely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl stop firewalld
# systemctl disable firewalld
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6.10 Adjust sudoers
&lt;/h2&gt;

&lt;p&gt;Add oracle user in sudoers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# visudo


oracle ALL=(ALL) NOPASSWD: ALL
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. Configure oracle user (owner of database)
&lt;/h2&gt;

&lt;p&gt;First, let's configure oracle repository.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# dnf install dnf-utils -y
# wget https://yum.oracle.com/RPM-GPG-KEY-oracle-ol8 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
# gpg - import - import-options show-only /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a repository file with below content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# cd /etc/yum.repos.d/
# vi ol8.repo


[ol8_baseos_latest]
name=Oracle Linux 8 BaseOS Latest ($basearch)
baseurl=https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install new repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# dnf install oraclelinux-release-el8 -y
# dnf install oracle-database-preinstall-19c -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE: last command above creates the oracle OS user and installs the required packages plus adjusts the kernel paraemters required by oracle database.&lt;/p&gt;

&lt;p&gt;Change oracle OS user’s password and VNC password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# passwd oracle
# su - oracle
$ vncpasswd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate oracle OS user, you should get an output similar to the below one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# id oracle

[root@rpi5 yum.repos.d]# id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enable and start TigerVNC for oracle user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl enable - now vncserver@:1
# systemctl start vncserver@:1
# systemctl status vncserver@:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. Create mandatory file &lt;strong&gt;&lt;em&gt;/etc/oracle-release&lt;/em&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Create oracle-release file with below content. This step is crucial, without this file installation will fail.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# vi /etc/oracle-release


Oracle Linux Server release 8.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create directory on which will mount later additional storage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# sudo mkdir /oracle
# chown -R oracle.oinstall /oracle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. Install EPEL and additional packages
&lt;/h2&gt;

&lt;p&gt;This step is optional. However, very helpful to have option to rerun command from history very handy, using rlwrap. Install also nmon (performance monitoring) and other packages useful for troubleshooting.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# dnf install epel-release -y
# dnf install screen telnet rlwrap nmon mc -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. Create a larger swap file
&lt;/h2&gt;

&lt;p&gt;Oracle Database installation requires a swap space of at least 16 GB. In the example below, I’ll create a swap file, but a dedicated swap partition is also acceptable — as long as it is 16 GB or larger.&lt;/p&gt;

&lt;p&gt;I named this file &lt;strong&gt;&lt;em&gt;swap&lt;/em&gt;&lt;/strong&gt; (the name &lt;strong&gt;&lt;em&gt;swapfile&lt;/em&gt;&lt;/strong&gt; is already taken by default in AlmaLinux). If you want use same name like default &lt;strong&gt;&lt;em&gt;swapfile&lt;/em&gt;&lt;/strong&gt; then you execute below procedure twice and perform a reboot in between (create &lt;strong&gt;&lt;em&gt;swap&lt;/em&gt;&lt;/strong&gt; file, restart, create &lt;strong&gt;&lt;em&gt;swapfile&lt;/em&gt;&lt;/strong&gt; then restart again).&lt;/p&gt;

&lt;p&gt;Be patient, this step will take a while …&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# fallocate -l 16G /swap
# dd if=/dev/zero of=/swap bs=1G count=16
# chmod 600 /swap
# mkswap /swap
# swapon /swap
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;strong&gt;&lt;em&gt;/etc/fstab&lt;/em&gt;&lt;/strong&gt; file adding (or changing) as below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/swap none swap defaults 0 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As root, reboot RPI5 then after restart, delete the old &lt;strong&gt;&lt;em&gt;swapfile&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# reboot

...

# ls -al /swapfile
# rm -f swapfile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate new swapping settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# swapon -v

[root@rpi5 ~]# swapon -v
NAME TYPE SIZE USED PRIO
/swap file 16G 0B -2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. Add additional space to RPI5 to store Oracle database and binaries
&lt;/h2&gt;

&lt;p&gt;In my test I used an external SSD (128 GB size) which will be mounted on RPI5.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# fdisk -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output (truncated):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 250069679 250067632 119.2G 83 Linux
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Device &lt;strong&gt;&lt;em&gt;sda1&lt;/em&gt;&lt;/strong&gt; was already formatted as ext4. Adjust &lt;em&gt;&lt;strong&gt;/etc/fstab&lt;/strong&gt;&lt;/em&gt; and mount the new filesystem. First, get the UUID of the storage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ls -al /dev/disk/by-uuid/

[root@rpi5 ~]# ls -al /dev/disk/by-uuid/
total 0
drwxr-xr-x. 2 root root 100 May 9 21:26 .
drwxr-xr-x. 7 root root 140 May 9 21:26 ..
lrwxrwxrwx. 1 root root 10 May 9 21:57 7b9561e8–772d-4d2d-8024-dbb75378c3ad -&amp;gt; ../../sda1
lrwxrwxrwx. 1 root root 15 May 9 21:57 8985f0c5–9d60–440d-97a3–7c8638ae2c69 -&amp;gt; ../../mmcblk0p2
lrwxrwxrwx. 1 root root 15 May 9 21:57 89B6–0C82 -&amp;gt; ../../mmcblk0p1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit once more &lt;em&gt;&lt;strong&gt;/etc/fstab&lt;/strong&gt;&lt;/em&gt; file. At the end will look like below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UUID=8985f0c5-9d60-440d-97a3-7c8638ae2c69       /               ext4    defaults,noatime 0 0
UUID=89B6-0C82                                  /boot           vfat    defaults,noatime 0 0
/swap                                           none            swap    defaults         0 0
UUID=7b9561e8-772d-4d2d-8024-dbb75378c3ad       /oracle         ext4    defaults,noatime 0 0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put RPI in text mode (once installed VNC there’s no need to consume resource with Gnome interface).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl set-default multi-user.target
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Perform one more update of OS packages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# dnf update -y
# dnf upgrade -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  12. Reboot RPI5. Once restarted, validate the mount point for Oracle DB
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@rpi5 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G   22G  7.5G  75% /
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.9G     0  7.9G   0% /dev/shm
tmpfs           7.9G  9.2M  7.9G   1% /run
tmpfs           7.9G     0  7.9G   0% /sys/fs/cgroup
/dev/mmcblk0p1  477M  261M  217M  55% /boot
/dev/sda1       117G  8.0K  111G   1% /oracle
tmpfs           1.6G   16K  1.6G   1% /run/user/42
tmpfs           1.6G     0  1.6G   0% /run/user/0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate swap as well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# swapon -v

[root@rpi5 ~]# swapon -v
NAME  TYPE SIZE USED PRIO
/swap file  16G   0B   -2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  13. Create ORACLE_HOME directory
&lt;/h2&gt;

&lt;p&gt;As root create directories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# mkdir -p /oracle/u01/app/oracle/product/19.0.0/dbhome_1
# chown -R oracle.oinstall /oracle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  14. Prepare ORACLE_HOME installation
&lt;/h2&gt;

&lt;p&gt;Download Oracle 19c KIT for RPI.&lt;/p&gt;

&lt;p&gt;Navigate to: &lt;a href="https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html" rel="noopener noreferrer"&gt;https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html&lt;/a&gt; and download file &lt;a href="https://www.oracle.com/database/technologies/oracle19c-linux-arm64-downloads.html#license-lightbox" rel="noopener noreferrer"&gt;LINUX.ARM64_1919000_db_home.zip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy installation kit to RPI5.&lt;/p&gt;

&lt;p&gt;Once copied, validate file consistency using sha256sum. Correct value (if download and transfer was ok) as per Oracle site, is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sha256sum - 44e9fa1b5ca84781bb496fe200b9bd648438819f053b4227b74e5622d959f125
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Unzip kit (once has been copied to &lt;strong&gt;&lt;em&gt;/oracle&lt;/em&gt;&lt;/strong&gt;) specifying destination directory (-d parameter):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# su - oracle
$ cd /oracle
$ unzip -d /oracle/u01/app/oracle/product/19.0.0/dbhome_1 LINUX.ARM64_1919000_db_home.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Adjust oracle’s user .bash_profile file adding required variables&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Add below lines into oracle’s user &lt;strong&gt;&lt;em&gt;.bash_profile&lt;/em&gt;&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ORA_VERSION=19.0.0
ORACLE_BASE=/oracle/u01/app/oracle
ORACLE_HOME=${ORACLE_BASE}/product/${ORA_VERSION}/dbhome_1
ORACLE_SID=ora193c
TNS_ADMIN=${ORACLE_BASE}/product/${ORA_VERSION}/dbhome_1/network/admin
LD_LIBRARY_PATH=${ORACLE_HOME}/lib
echo "ORACLE_SID=$ORACLE_SID : RDBMS_19.3.0.0 LINUX"
db_name=$(/bin/cat \
        ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora|
        /bin/grep db_name|/bin/grep -v ^#\
        |/bin/sed 's/=/ /g'|/bin/awk -F\' '{ printf("%s",tolower( $2)); }')
alias udump='cd /oracle/u01/app/oracle/diag/rdbms/$db_name/$ORACLE_SID/trace'
alias bdump='cd /oracle/u01/app/oracle/diag/rdbms/$db_name/$ORACLE_SID/trace'
alias cdump='cd /oracle/u01/app/oracle/diag/rdbms/$db_name/$ORACLE_SID/cdump'
alias alert='tail -100f /oracle/u01/app/oracle/diag/rdbms/$db_name/$ORACLE_SID/trace/alert_$ORACLE_SID.log'

export ORACLE_HOME LD_LIBRARY_PATH ORACLE_SID TMPDIR PATH TNS_ADMIN
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:.

alias sql='rlwrap ${ORACLE_HOME}/bin/sqlplus "/ as sysdba"'
alias rmn='rlwrap ${ORACLE_HOME}/bin/rman " target /"'
alias OH='cd $ORACLE_HOME'
alias tnsalias="cat $ORACLE_HOME/network/admin/tnsnames.ora |grep WORLD|awk  '{ print \$1 }'"
cd $ORACLE_HOME
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  16. Install Software (ORACLE_HOME)
&lt;/h2&gt;

&lt;p&gt;In this tutorial I chose installation using GUI, hence connect to RPI5 using Tiger VNC client and open a terminal session.&lt;/p&gt;

&lt;p&gt;As oracle user (either reconnect or source environment in order to read the cahnged &lt;strong&gt;&lt;em&gt;.bash_profile&lt;/em&gt;&lt;/strong&gt;) and run installer script from ORACLE_HOME:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ su - oracle
$ cd $ORACLE_HOME
$ ./runInstaller
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chose a software only installation at step 1, single instance installation at step 2, Enterrpise Edition at step 3, etc.&lt;/p&gt;

&lt;p&gt;Be aware to execute as root, at final stage of installation the required scripts:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4s70ohnnr74k5jakveq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4s70ohnnr74k5jakveq.png" alt="Image description" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  17. Create the database
&lt;/h2&gt;

&lt;p&gt;As oracle user, run database configuration assistant to create the database. I named my database &lt;strong&gt;&lt;em&gt;ora193c&lt;/em&gt;&lt;/strong&gt; and set as data directory to &lt;strong&gt;&lt;em&gt;/oracle/u02/oradata&lt;/em&gt;&lt;/strong&gt;. Database will be of type CDB (container) with a pluggable database &lt;strong&gt;&lt;em&gt;pdba193&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cd $ORACLE_HOME
$ dbca
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;See below captions of screens used during database creation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4c4csc0kb0g9br2m31vu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4c4csc0kb0g9br2m31vu.png" alt="Image description" width="800" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3vc4tzph8eibyae5l9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3vc4tzph8eibyae5l9a.png" alt="Image description" width="794" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdojiht072medbpppj5p0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdojiht072medbpppj5p0.png" alt="Image description" width="798" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F794dk0zbkr5vitx667x1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F794dk0zbkr5vitx667x1.png" alt="Image description" width="796" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwgiuztpbiyjud8em47w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwgiuztpbiyjud8em47w.png" alt="Image description" width="796" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F641el6qn6t9cvw1lby9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F641el6qn6t9cvw1lby9a.png" alt="Image description" width="796" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzkcu1275ita4pqt2v9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxzkcu1275ita4pqt2v9i.png" alt="Image description" width="796" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvg3nyaja9eo5mtnkrme7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvg3nyaja9eo5mtnkrme7.png" alt="Image description" width="798" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4qqr9j0aj096k2w3yef.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4qqr9j0aj096k2w3yef.png" alt="Image description" width="796" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vsrtrg3ju1cfoedmzi9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8vsrtrg3ju1cfoedmzi9.png" alt="Image description" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqe7xpmoxwkqqbw6m202.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqe7xpmoxwkqqbw6m202.png" alt="Image description" width="798" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcua5msfxduaprt0953nt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcua5msfxduaprt0953nt.png" alt="Image description" width="796" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7iff0pkjqbrsqcnkz6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl7iff0pkjqbrsqcnkz6w.png" alt="Image description" width="794" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6djqgv8xbkozt2eqvlj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr6djqgv8xbkozt2eqvlj.png" alt="Image description" width="800" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhejuhcmerp4bhl2o1b4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhejuhcmerp4bhl2o1b4f.png" alt="Image description" width="796" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnaah82ap3c0b9u5m987.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnaah82ap3c0b9u5m987.png" alt="Image description" width="796" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F108ry3xhs15oqzdzbddl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F108ry3xhs15oqzdzbddl.png" alt="Image description" width="792" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6avzlqxidpguutvhjt4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp6avzlqxidpguutvhjt4.png" alt="Image description" width="794" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenq7axm0pho0sjwn3cmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenq7axm0pho0sjwn3cmq.png" alt="Image description" width="800" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  18. Validate installation
&lt;/h2&gt;

&lt;p&gt;Once installation is finished, check status of database and listener service.&lt;/p&gt;

&lt;p&gt;Validate listener status:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# su - oracle
$ lsnrctl status


[oracle@rpi5 dbhome_1]$ lsnrctl status
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 10-MAY-2025 22:06:58
Copyright © 1991, 2023, Oracle. All rights reserved.
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
 - - - - - - - - - - - - 
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date 10-MAY-2025 21:40:20
Uptime 0 days 0 hr. 26 min. 38 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File /oracle/u01/app/oracle/diag/tnslsnr/rpi5/listener/alert/log.xml
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.5.5)(PORT=1521)))
Services Summary…
Service "34cdbbcca80e1ba9e065000000000001" has 1 instance(s).
Instance "ora193c", status READY, has 1 handler(s) for this service…
Service "fda797ffd7307dfde053bc2a4664b2b0" has 1 instance(s).
Instance "ora193c", status READY, has 1 handler(s) for this service…
Service "ora193c" has 1 instance(s).
Instance "ora193c", status READY, has 1 handler(s) for this service…
Service "ora193cXDB" has 1 instance(s).
Instance "ora193c", status READY, has 1 handler(s) for this service…
Service "pdba193" has 1 instance(s).
Instance "ora193c", status READY, has 1 handler(s) for this service…
The command completed successfully
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate database status using sqlplus (or sql alias created within &lt;em&gt;&lt;strong&gt;.bash_profile&lt;/strong&gt;&lt;/em&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# su - oracle
$ sqlplus / as sysdba
SQL&amp;gt; select open_mode, database_role from v$database;
[oracle@rpi5 dbhome_1]$ sql
SQL*Plus: Release 19.0.0.0.0 - Production on Sun May 11 09:55:24 2025
Version 19.19.0.0.0
Copyright © 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&amp;gt; select open_mode, database_role from v$database;
OPEN_MODE DATABASE_ROLE
 - - - - - - - - - - - - - - - - - - 
READ WRITE PRIMARY
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate &lt;strong&gt;&lt;em&gt;/etc/oratab&lt;/em&gt;&lt;/strong&gt; file. If you want the database to be started automatically (along with a properly configured script) on PRI start/reboot, change last parameter to value “Y”.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cat /etc/oratab


[oracle@rpi5 dbhome_1]$ cat /etc/oratab
#
# This file is used by ORACLE utilities. It is created by root.sh
# and updated by either Database Configuration Assistant while creating
# a database or ASM Configuration Assistant while creating ASM instance.
# A colon, ':', is used as the field terminator. A new line terminates
# the entry. Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
# $ORACLE_SID:$ORACLE_HOME:&amp;lt;N|Y&amp;gt;:
#
# The first and second fields are the system identifier and home
# directory of the database respectively. The third field indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
ora193c:/oracle/u01/app/oracle/product/19.0.0/dbhome_1:N

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validate remote connection, in this case I’ll connect from my machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-mac:~ myuser$ sqlcl/bin/sql /nolog
SQLcl: Release 23.1 Production on Sun May 11 10:03:47 2025
Copyright © 1982, 2025, Oracle. All rights reserved.
SQL&amp;gt; conn system/sys@rpi5:1521/ora193c
Connected.
SQL&amp;gt; exit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All validation are done, RPI5 and ora193c database are up and running, ready to be used.&lt;/p&gt;

&lt;p&gt;Have fun !&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
