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.
Thecoolgambler
27.09.2024So are we saying it's technically possible to run db 11g on ODA. I have someone who absolutely can't upgrade their db 11.2.0.1.0 and forms 6i, and they want to order ODA X10