Introduction

11gR2 should be retired now, and there is normally no need to deploy a new database using this version anymore. But in the real world, you may need to do that for some reasons. 11gR2 is no more supported on Oracle Database Appliance, but this is the way you can setup a “brand new” Oracle Database 11gR2 environment on ODA. Obviously, I would only recommend doing this if there is no other options.

History

The first ODAs were designed for 11gR2, but support for this version disappeared nearly 2 years ago. There are still ODAs running 11gR2 databases, but it’s mostly old ODAs deployed several years ago. Applying the latest ODA patch on top of 11gR2 databases is not a problem, your 11gR2 databases won’t be patched although every other components will. Therefore, running the most recent 19.17 patch with 11gR2 databases is OK. But deploying a new infrastructure with X9-2 ODAs running 11gR2 databases wouldn’t make sense and is not supported. Furthermore, ODA development’s team now focus on modern features, mainly tied with Oracle 19c. Don’t expect to run these new features on old 11gR2 databases. Most of the time it won’t work correctly as Oracle doesn’t bother anymore testing on 11gR2.

2 solutions for running 11gR2 databases on ODA

If you absolutely need 11gR2, you currently have 2 solutions.

The first one is deploying an old set of binaries from an old patch, for example 19.10. It’s the easiest way to put 11gR2 on your ODA:

cd /opt/dbi/
unzip p23494997_1910000_Linux-x86-64.zip
odacli update-repository -f /opt/dbi/odacli-dcs-19.10.0.0.0-210115-DB-11.2.0.4.zip 
odacli create-dbhome -v 11.2.0.4.210119
odacli list-dbhomes 

ID                                       Name                 DB Version                               Home Location                                 Status
---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ----------
2a00d3bb-b042-4720-94a2-bef13bfaf5f5     OraDB19000_home1     19.15.0.0.220419                         /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_1 CONFIGURED
4f56e25e-e228-4cc3-b827-b15b66c67143     OraDB19000_home4     19.16.0.0.220719                         /u01/app/odaorahome/oracle/product/19.0.0.0/dbhome_4 CONFIGURED
306d949e-6a61-4d7f-83e2-b023a9c47586     OraDB11204_home2     11.2.0.4.210119                          /u01/app/odaorahome/oracle/product/11.2.0.4/dbhome_2 CREATING

The second one we will focus on is creating a new user-managed VM and manually deploy an 11gR2 DB home. I would definitely prefer this solution because I don’t want to use unsupported version on my ODA: I want to keep everything clean and supported. Creating a user-managed VM needs some work, but this VM won’t have any link to my ODA system, everything will be running on its own inside the VM.

License considerations

You should be careful when using user-managed VMs with Oracle databases inside. If you run on Standard Edition, you normally have 1 license per socket on your system, and you can use as may cores as you want. When using Enterprise Edition, you will limit the available number of cores on your ODA with odacli update-cpucore, or you will use CPU Pools for DB Systems and run all your DB Systems in these CPU Pools. Configuring a VM CPU pool (which is different from DB Systems’ CPU pool) for databases in user-managed VMs is not compliant with the Oracle licensing model. You’d better limiting the total CPU-cores of your ODA in this case. For example, if you need 6 cores for 19c DB Systems and 2 cores for your 11gR2, configure 8 cores on your ODA with odacli update-cpucore and then configure the 2 CPU pools accordingly.

Test environment

My test environment is based on a brand new ODA X9-2S deployed with 19.16 and using Standard Edition. I will use 19c DB Systems for most databases, and I will need a user-managed VM for 11gR2. The purpose of this user-managed VM is to decomission an old 11gR2 server and put all Oracle databases into the ODA. The application linked to this 11gR2 database will also be decomissioned, but later. It’s why there is no plan to migrate this database to a newer version.

Setting up the user-managed 11gR2 VM

I will need a VM CPU pool for this “old” system:

odacli create-cpupool -n cpupool4olddbs -c 2 -vm
odacli list-cpupools
Name                  Type                Configured on Cores Associated resources     Created                   Updated
--------------------  ------------------  ------------- ----- -----------------------  ------------------------  ----------
cpupool4olddbs        VM                  srv-bd3        2    NONE        2022-11-29 14:50:28 CET   2022-11-29 14:50:28 CET
cpupool4dbsystems     DB_SYSTEM_SHARED    srv-bd3        8    NONE        2022-11-29 14:49:55 CET   2022-11-29 14:49:55 CET

My VM will need filesystems, I first need to create 2 VM storages, one for DATA and one for Recovery Area:

odacli create-vmstorage -n VMsDATA -dg DATA -s 300G
odacli create-vmstorage -n VMsRECO -dg RECO -s 100G

odacli list-vmstorages
Name                  Disk group       Volume name      Volume device                   Size        Mount Point                          Created                   Updated
--------------------  ---------------  ---------------  ------------------------------  ----------  -----------------------------------  ------------------------  ------------------------
VMsRECO               RECO             VMSRECO          /dev/asm/vmsreco-115            100.00 GB   /u05/app/sharedrepo/vmsreco          2022-11-30 09:34:38 CET   2022-11-30 09:34:38 CET
VMsDATA               DATA             VMSDATA          /dev/asm/vmsdata-211            300.00 GB   /u05/app/sharedrepo/vmsdata          2022-11-30 09:34:04 CET   2022-11-30 09:34:04 CET

Now I will create vdisks in these VM storages:

odacli create-vdisk -n prlinux11-data -vms VMsDATA -s 200G
odacli create-vdisk -n prlinux11-reco -vms VMsRECO -s 70G

odacli list-vdisks

Name                  VM storage            Size        Shared      Sparse      Created                   Updated
--------------------  --------------------  ----------  ----------  ----------  ------------------------  ------------------------
prlinux11-reco         VMsRECO               70.00 GB    NO          NO          2022-11-30 09:39:51 CET   2022-11-30 09:39:51 CET
prlinux11-data         VMsDATA               200.00 GB   NO          NO          2022-11-30 09:41:06 CET   2022-11-30 09:41:06 CET

Now, let’s create the VM. I will use an Oracle Linux distribution provided as an ISO file. Creating this VM will create a boot disk on the VM storage VMsDATA, and connect the 2 vdisks previously created. I will use my ODA’s IP address to map the VNC port.

odacli create-vm -n PRLINUX11 -m 32G -src /mnt/nas/V1009690-01.iso -vd prlinux11-data,prlinux11-reco -vc 2 -cp cpupool4olddbs -vn prnetwork -vms VMsDATA -s 50G -g "vnc,listen=10.146.107.31"

odacli describe-job -i 5d94d0b1-da6c-43d0-89ca-98f6e5a89cfa

Job details
----------------------------------------------------------------
                     ID:  5d94d0b1-da6c-43d0-89ca-98f6e5a89cfa
            Description:  VM PRLINUX11 creation
                 Status:  Success
                Created:  November 30, 2022 10:05:41 AM CET
                Message:

Task Name                                Start Time                          End Time                            Status
---------------------------------------- ----------------------------------- ----------------------------------- ----------
Validate dependency resources            November 30, 2022 10:05:41 AM CET   November 30, 2022 10:05:41 AM CET   Success
Validate resource allocations            November 30, 2022 10:05:41 AM CET   November 30, 2022 10:05:41 AM CET   Success
Allocate resources                       November 30, 2022 10:05:41 AM CET   November 30, 2022 10:05:41 AM CET   Success
Provision new VM                         November 30, 2022 10:05:41 AM CET   November 30, 2022 10:05:43 AM CET   Success
Add VM to Clusterware                    November 30, 2022 10:05:43 AM CET   November 30, 2022 10:05:44 AM CET   Success
Save domain in ACFS                      November 30, 2022 10:05:44 AM CET   November 30, 2022 10:05:44 AM CET   Success
Create VM metadata                       November 30, 2022 10:05:44 AM CET   November 30, 2022 10:05:44 AM CET   Success
Persist metadata                         November 30, 2022 10:05:44 AM CET   November 30, 2022 10:05:44 AM CET   Success

odacli describe-vm -n PRLINUX11 | grep Display
             Display Port:  10.146.107.31:3

Creating a VM is fast as nothing is really created.

Now I can use a VNC client connected to 10.146.107.31:5903 and deploy a Linux distribution. I would recommend using the same OS as your ODA, meaning an Oracle Linux 7.9, but you can use an older one if needed. Linux setup on this VM is quite typical, additional settings and packages will be deployed using preinstall package provided by Oracle.

Once the Linux is deployed, let’s check the disks and configure LVM according to OFA naming:

fdisk -l /dev/vdb | grep GB
Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
fdisk -l /dev/vdc | grep GB
Disk /dev/vdc: 75.2 GB, 75161927680 bytes, 146800640 sectors

pvcreate /dev/vdb
pvcreate /dev/vdc

vgcreate vg_oradata /dev/vdb
vgcreate vg_orareco /dev/vdc

lvcreate -L 30G -n lv_u01 vg_oradata
lvcreate -L 160G -n lv_data vg_oradata
lvcreate -L 60G -n lv_reco vg_orareco

mkdir /u01
mkdir -p /u02/app/oracle/oradata
mkdir -p /u03/app/oracle

mkfs.ext4 /dev/mapper/vg_oradata-lv_u01
mkfs.ext4 /dev/mapper/vg_oradata-lv_data
mkfs.ext4 /dev/mapper/vg_orareco-lv_reco

echo "/dev/mapper/vg_oradata-lv_u01 /u01 ext4 defaults 1 2" >> /etc/fstab
echo "/dev/mapper/vg_oradata-lv_data /u02/app/oracle/oradata ext4 defaults 1 2" >> /etc/fstab
echo "/dev/mapper/vg_orareco-lv_reco /u03/app/oracle ext4 defaults 1 2" >> /etc/fstab

mount -a

df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                         16G     0   16G   0% /dev
tmpfs                            16G     0   16G   0% /dev/shm
tmpfs                            16G  8.6M   16G   1% /run
tmpfs                            16G     0   16G   0% /sys/fs/cgroup
/dev/mapper/ol-root              44G  1.4G   43G   4% /
/dev/vda1                      1014M  184M  831M  19% /boot
tmpfs                           3.2G     0  3.2G   0% /run/user/0
/dev/mapper/vg_oradata-lv_u01    30G   45M   28G   1% /u01
/dev/mapper/vg_oradata-lv_data  158G   61M  150G   1% /u02/app/oracle/oradata
/dev/mapper/vg_orareco-lv_reco   59G   53M   56G   1% /u03/app/oracle

Let’s copy the ISO file on the server for package setup. I will mount this ISO file, configure a local repository on this ISO, and install the preinstall package. Other packages will be needed for 11gR2:

mkdir /install
scp [email protected]:/mnt/nas/V1009690-01.iso /install/

 
mkdir /mnt/iso
mount -o loop /install/V1009690-01.iso /mnt/iso
rm -f /etc/yum.repos.d/*
vi /etc/yum.repos.d/local-oel7.repo
[OEL790]
name=Oracle Linux 7.9 x86_64
baseurl=file:///mnt/iso
gpgkey=file:///mnt/iso/RPM-GPG-KEY
gpgcheck=1
enabled=1

yum install oracle-database-preinstall-19c.x86_64
...

yum install compat-libstdc++-33-3.2.3-72.el7.x86_64
yum install gcc-4.8.5-44.0.3.el7.x86_64
yum install gcc-c++-4.8.5-44.0.3.el7.x86_64
yum install mlocate

Now I will do the 11gR2 setup using an image from the old system and the cloning method: I don’t want any changes regarding the binaries.

scp [email protected]:/mnt/nas/root_SRV-BD2_dbhome_11gR2.tgz /install/

chmod -R 755 /install/ 
chown -R oracle:oinstall /u01/
chown -R oracle:oinstall /u02/
chown -R oracle:oinstall /u03/

 
su - oracle
mkdir -p /u01/app/oracle/product/11.2.0.4/
mkdir -p /u01/app/oracle/network/admin
mkdir /u01/app/oracle/local
cd /u01/app/oracle/product/11.2.0.4/
tar xzf /install/root_SRV-BD2_dbhome_11gR2.tgz 
cd /u01/app/oracle/product/11.2.0.4/dbhome_1/clone/bin
/u01/app/oracle/product/11.2.0.4/dbhome_1/clone/bin/clone.pl ORACLE_BASE="/u01/app/oracle" ORACLE_HOME="/u01/app/oracle/product/11.2.0.4/dbhome_1" ORACLE_HOME_NAME=OraDB11gHome1 OSDBA_GROUP=dba OSOPER_GROUP=oper
...

exit

/u01/app/oraInventory/orainstRoot.sh
/u01/app/oracle/product/11.2.0.4/dbhome_1/root.sh

I will disable SELinux and the firewall, I don’t need them:

vi /etc/selinux/config
SELINUX=disabled
systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
systemctl stop firewalld
reboot

A relink of the binaries was needed:

su - oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1
$ORACLE_HOME/bin/relink all

Now I need to configure a default listener:

su – oracle
$ORACLE_HOME/bin/netca -silent -responsefile /u01/app/oracle/product/11.2.0.4/dbhome_1/assistants/netca/netca.rsp

Parsing command line arguments:
    Parameter "silent" = true
    Parameter "responsefile" = /u01/app/oracle/product/11.2.0.4/dbhome_1/assistants/netca/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
    Running Listener Control:
      /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/lsnrctl start LISTENER
    Listener Control complete.
    Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0

My system is now ready for “new” 11gR2 databases.

Next steps

The system is now deployed and ready to host a first database. Creating a database is done by using dbca or by restoring a database from a backup. Using a backup is definitely the best idea to keep the database as close as the source one. You may need to use db_file_name_convert to remap the old datafile structure to the new one. I would probably create a pfile from the source database, make the needed changes and start my new instance with this pfile.

Conclusion

Only consider this solution if no other one is possible. Remember that it comes without any support and without any performance guarantee. For sure, I wouldn’t recommend using this solution for a production database, and I definitely advise migrating all your old databases to 19c. Don’t forget that 11gR2 is more than 15-year old now, and you shouldn’t deploy it in 2023.