Skip to main content

Configuration

Configuration of the OS and Database environment

Install and configure oraenv

Download the files from github repository.

sudo -s     # root
cd /usr/local/src

wget ......

Configure the oraenv files

su - oracle    # oracle
cp /usr/local/src/oraenv.sh /home/oracle/
cp /usr/local/src/oraenv_sample.conf /home/oracle/oraenv.conf
cp /usr/local/src/oratools.sh /opt/oracle/admin/scripts/

chmod 750 /opt/oracle/admin/scripts/oratools.sh
chmod 640 /home/oracle/oraenv.sh /home/oracle/oraenv.conf
oraenv configuration file
/home/oracle/oraenv.conf
cat > /home/oracle/oraenv.conf <<EOF
[XE]
DB_UNIQUE_NAME=xe
ORACLE_HOSTNAME=RockyLinux8
ORACLE_BASE=/opt/oracle
ORACLE_DATADIR=/opt/oracle/oradata/XE
ORACLE_ARCHIVE=/opt/oracle/archive/XE
ORACLE_BACKUP=/opt/oracle/backup/XE
NLS_DATE_FORMAT=DD.MM.YYYY:HH24:MI:SS
NLS_LANG=AMERICAN_AMERICA.UTF8
ADR_PURGE_AGE=4320
RMAN_RETENTION=2
RMAN_ARCHIVELOG_BACKUPS=
RMAN_PARALLELISM=2
RMAN_COMPRESSED=COMPRESSED
TARGET_CONNECT_STR=/
TARGET_CATALOG_STR=
STANDBY_CONNECT_STR=
EOF

Configure /home/oracle/.icats_profile

icats configuration file
/home/oracle/.icats_profile
cat > /home/oracle/.icats_profile <<EOF
export ORDS_HOME="/opt/oracle/ords"
export ORDS_LOGS="\${ORDS_HOME}/logs"
export ORDS_CONFIG="\${ORDS_HOME}/conf"
export JAVA_HOME="\${ORDS_HOME}/jdk-21.0.5+11-jre"
export ICATS_HOME="/opt/icats"
export APEX_HOME="/opt/oracle/apex"
export APEX_IMAGES="\${APEX_HOME}/images"

export PATH="\${PATH}:\${ORDS_HOME}/ords-24.4.0.345.1601/bin:\${JAVA_HOME}/bin"

alias cd.icats.home='cd \${ICATS_HOME}'
alias cd.apex.home='cd \${APEX_HOME}'
alias cd.apex.images='cd \${APEX_IMAGES}'
alias cd.ords.home='cd \${ORDS_HOME}'
alias cd.ords.logs='cd \${ORDS_LOGS}'
alias cd.ords.config='cd \${ORDS_CONFIG}'
alias tail.ords.log='tail -200f \${ORDS_LOGS}'
EOF

Configure /home/oracle/.bash_profile

/home/oracle/.bash_profile
echo ". /home/oracle/.icats_profile" >>/home/oracle/.bash_profile
echo ". /home/oracle/oraenv.sh XE; ShowEnv" >>/home/oracle/.bash_profile

# login again as user oracle
exit
su - oracle

Create missing Oracle folder

Executing alias createfolder.

$ createfolder

- --------------------------------------------------
- Create folder for XE
- --------------------------------------------------
- /opt/oracle/oradata/XE created
- /opt/oracle/admin/XE/adump created
- /opt/oracle/admin/pfile
- /opt/oracle/product/21c/dbhomeXE created
- /opt/oracle/archive/XE created
- /opt/oracle/backup/XE created
- /opt/oracle/admin/XE/clone created
- /opt/oracle/admin/XE/scripts created
- /opt/oracle/admin/XE/log created
- /opt/oracle/admin/scripts created

Database configuration

Set run_user and run_group in externaljob.ora

This is needed to run Oracle Schedulerjobs with external commands.

ls -l /opt/oracle/product/21c/dbhomeXE/rdbms/admin/externaljob.ora
-rw-r----- 1 root oinstall 1555 23. Jan 18:30 /opt/oracle/product/21c/dbhomeXE/rdbms/admin/externaljob.ora

vim /opt/oracle/product/21c/dbhomeXE/rdbms/admin/externaljob.ora

run_user = oracle
run_group = oinstall

SQL*Net configuration

cd /opt/oracle/product/21c/dbhomeXE/network/admin
ln -s /opt/oracle/homes/OraDBHome21cXE/network/admin/listener.ora
ln -s /opt/oracle/homes/OraDBHome21cXE/network/admin/sqlnet.ora
ln -s /opt/oracle/homes/OraDBHome21cXE/network/admin/tnsnames.ora
tnsnames.ora configuration file
/opt/oracle/homes/OraDBHome21cXE/network/admin/tnsnames.ora
cat > /opt/oracle/homes/OraDBHome21cXE/network/admin/tnsnames.ora <<EOF
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOSTNAME>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)

# iCATs PROD environment
PDBICATS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOSTNAME>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDBICATS)
)
)

# iCATs TEST environment
PDBICATSTST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOSTNAME>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDBICATSTST)
)
)

# iCATs DEV environment
PDBICATSDEV =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <HOSTNAME>)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDBICATSDEV)
)
)
EOF

Database parameter configuration /opt/oracle/dbs/spfileXE.ora

$ sq
SQL>
-- Remove pga_aggregate_target and sga_target from spfile
alter system reset pga_aggregate_target scope=spfile;
alter system reset sga_target scope=spfile;

-- Add memory_target to spfile
alter system set memory_target=2048M scope=spfile;

alter system set audit_trail = 'none' scope=spfile;
alter system set local_listener = 'XE';
alter system set open_cursors = 600;
alter system set processes = 600 scope=spfile;

alter profile default limit password_life_time unlimited;

-- Configure spfile in case of enabled Online Backup
alter system set log_archive_dest_1='LOCATION=/opt/oracle/archive/XE' scope=spfile;
alter system set log_archive_format='XE_%t_%s_%r.arc' scope=spfile ;

-- restart database instance
shutdown immediate
startup mount;

-- alter database archivelog; -- In case of you want to enable Online Backup
alter database open;

Delete default pluggable database XEPDB1

$ sq
SQL>
alter pluggable database XEPDB1 close IMMEDIATE;
drop pluggable database XEPDB1 INCLUDING datafiles;
exit

rmdir /opt/oracle/oradata/XE/XEPDB1

Create a new iCATs database

Info

Example names for PDB's

PDBICATS (PDB=Pluggable database, iCATs, PROD environment
PDBICATSDEV (PDB=Pluggable database, iCATs, DEV=Development environment
PDBICATSTST (PDB=Pluggable database, iCATs, TST=Test environment


$ sq -- sqlplus / as sysdba
SQL>
create pluggable database "PDBICATSTST"
admin user "PDBADMIN"
identified by "xxxxxx"
file_name_convert = ('/opt/oracle/oradata/XE/pdbseed/','/opt/oracle/oradata/XE/PDBICATSTST/');

alter pluggable database PDBICATSTST open;
alter pluggable database PDBICATSTST save state;

alter session set container=PDBICATSTST;

alter profile default limit password_life_time unlimited;

exit

Check the status of the databases

$ lcdb

Available Container(s)
======================

CON_ID CDB_NAME SAVED_STATE OPEN_MODE RESTRICTED OPEN_TIME
------ ------------------------------ --------------- ---------- ---------- -------------------
3 PDBICATSTST OPEN READ WRITE NO 2025.01.13 12:44:46
1 CDB$ROOT READ WRITE NO 2025.01.13 10:51:13
2 PDB$SEED READ ONLY NO 2025.01.13 10:51:13

Creating a Systemd Service for the Oracle XE database

Info

If you prefer to stop and start the database manually after the OS has been started you can use the following commands.

-- logon as user oracle
su - oracle

-- Start the database
oratools.sh -s XE -c dbstartup -o

-- Stop the database
oratools.sh -s XE -c dbshutdown -o

Otherwise you can implementing the Systemd service as followed.

/etc/systemd/system/oracle.service
cat > /etc/systemd/system/oracle.service <<EOF
[Unit]
Description=Oracle database service
After=network.target

[Service]
User=oracle
Group=oinstall

ExecStart=/opt/oracle/admin/scripts/oratools.sh -s XE -c dbstartup -o
ExecStop=/opt/oracle/admin/scripts/oratools.sh -s XE -c dbshutdown -o
RemainAfterExit=yes

TimeoutStopSec=300
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
EOF

Set permission and enable the Systemd service

chmod 644 /etc/systemd/system/oracle.service

systemctl daemon-reload

systemctl enable oracle
systemctl status oracle
systemctl start oracle