In the directory, where the VM will be stored, I have created the config directory and inside the configuration file:
[nisco@pracovna ol7_19c_restart]$ mkdir config [nisco@pracovna ol7_19c_restart]$ cat vagrant_config.yaml node: box: oraclebase/oracle-7 non_rotational: 'on' mem_size: 8192 cpus: 4 public_ip: 192.168.56.10
As can be seen, I will use the oracle-7 from the oraclebase, with 8GB of memory, 4 CPUs and the IP address 192.168.56.10
In the Vagrantfile, we will load the yaml file and set the variables needed for the VM
[nisco@pracovna ol7_19c_restart]$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
require 'yaml'
#load the yaml file
params = YAML.load_file 'config/vagrant_config.yaml'
#basic configuration
var_box_name = params['node']['box']
var_non_rotational = params['node']['non_rotational']
var_vm_name = params['node']['vm_name']
var_mem_size = params['node']['mem_size']
var_cpus = params['node']['cpus']
var_public_ip = params['node']['public_ip']
Vagrant.configure("2") do |config|
config.vm.box = var_box_name
config.vm.provider "virtualbox" do |vb|
vb.memory = var_mem_size
vb.cpus = var_cpus
vb.name = var_vm_name
vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', '0', '--nonrotational', var_non_rotational]
# Add a new public network.
config.vm.network "private_network", ip: var_public_ip
config.vm.boot_timeout = 5000
end
end
Let’s start the VM:
[nisco@pracovna ol7_19c_restart]$ vagrant destroy -f
==> default: Forcing shutdown of VM...
==> default: Destroying VM and associated drives...
[nisco@pracovna ol7_19c_restart]$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'oraclebase/oracle-7'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'oraclebase/oracle-7' version '2023.07.20' is up to date...
==> default: Setting the name of the VM: ol7_19c_restart_default_1696853717069_40847
==> default: Fixed port collision for 22 => 2222. Now on port 2201.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
default: Adapter 2: hostonly
default: Adapter 3: hostonly
default: Adapter 4: hostonly
default: Adapter 5: hostonly
default: Adapter 6: hostonly
==> default: Forwarding ports...
default: 22 (guest) => 2201 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2201
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
default: /vagrant => /misc/vagrant/ol7_19c_restart
So for now, we have the basic linux. Now, lets extend the configuration for 2 additional disks, that will be for the GRID and oracle home. We will add this to the config file:
u01_disk: ./ol7_19_ocm_u01.vdi u02_disk: ./ol7_19_ocm_u02.vdi
And this to the Vagrantfile:
unless File.exists?(var_u01_disk) vb.customize ['createhd', '--filename', var_u01_disk, '--size', 60 * 1024] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', var_u01_disk, '--nonrotational', var_non_rotational] unless File.exists?(var_u02_disk) vb.customize ['createhd', '--filename', var_u02_disk, '--size', 60 * 1024] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', var_u02_disk, '--nonrotational', var_non_rotational]
After redeploying of the VM, we can see the disks:
[vagrant@localhost ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 60G 0 disk sdc 8:32 0 60G 0 disk sda 8:0 0 64G 0 disk ├─sda2 8:2 0 4G 0 part [SWAP] ├─sda3 8:3 0 59G 0 part / └─sda1 8:1 0 1G 0 part /boot
Now, lets add the disks for the GRID and database and their respective size to the config file:
asm_crs_disk1: /misc/vagrant/ol7_19c_restart/asm_crs_disk1.vdi asm_crs_disk2: /misc/vagrant/ol7_19c_restart/asm_crs_disk2.vdi asm_crs_disk3: /misc/vagrant/ol7_19c_restart/asm_crs_disk3.vdi asm_crs_disk_size: 3 asm_reco_disk: /misc/vagrant/ol7_19c_restart/asm_reco_disk1.vdi asm_reco_disk_size: 50 asm_data_disk: /misc/vagrant/ol7_19c_restart/asm_data_disk1.vdi asm_data_disk_size: 100
And to the Vagrantfile:
var_asm_crs_disk1 = params['node']['asm_crs_disk1'] var_asm_crs_disk2 = params['node']['asm_crs_disk2'] var_asm_crs_disk3 = params['node']['asm_crs_disk3'] var_asm_crs_disk_size = params['node']['asm_crs_disk_size'] var_asm_reco_disk = params['node']['asm_reco_disk'] var_asm_reco_disk_size = params['node']['asm_reco_disk_size'] var_asm_data_disk = params['node']['asm_data_disk'] var_asm_data_disk_size = params['node']['asm_data_disk_size'] unless File.exist?(var_asm_crs_disk1) vb.customize ['createhd', '--filename', var_asm_crs_disk1, '--size', var_asm_crs_disk_size * 1024, '--format', 'VDI', '--variant', 'Fixed'] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 3, '--device', 0, '--type', 'hdd', '--medium', var_asm_crs_disk1, '--mtype', 'shareable', '--nonrotational', var_non_rotational] unless File.exist?(var_asm_crs_disk2) vb.customize ['createhd', '--filename', var_asm_crs_disk2, '--size', var_asm_crs_disk_size * 1024, '--format', 'VDI', '--variant', 'Fixed'] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 4, '--device', 0, '--type', 'hdd', '--medium', var_asm_crs_disk2, '--mtype', 'shareable', '--nonrotational', var_non_rotational] unless File.exist?(var_asm_crs_disk3) vb.customize ['createhd', '--filename', var_asm_crs_disk3, '--size', var_asm_crs_disk_size * 1024, '--format', 'VDI', '--variant', 'Fixed'] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 5, '--device', 0, '--type', 'hdd', '--medium', var_asm_crs_disk3, '--mtype', 'shareable', '--nonrotational', var_non_rotational] unless File.exist?(var_asm_reco_disk) vb.customize ['createhd', '--filename', var_asm_reco_disk, '--size', var_asm_reco_disk_size * 1024, '--format', 'VDI', '--variant', 'Fixed'] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 6, '--device', 0, '--type', 'hdd', '--medium', var_asm_reco_disk, '--mtype', 'shareable', '--nonrotational', var_non_rotational] unless File.exist?(var_asm_data_disk) vb.customize ['createhd', '--filename', var_asm_data_disk, '--size', var_asm_data_disk_size * 1024, '--format', 'VDI', '--variant', 'Fixed'] end vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 7, '--device', 0, '--type', 'hdd', '--medium', var_asm_data_disk, '--mtype', 'shareable', '--nonrotational', var_non_rotational]
These are the disks after the reload:
[vagrant@localhost ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdf 8:80 0 3G 0 disk sdd 8:48 0 3G 0 disk sdb 8:16 0 60G 0 disk sdg 8:96 0 50G 0 disk sde 8:64 0 3G 0 disk sdc 8:32 0 60G 0 disk sda 8:0 0 64G 0 disk ├─sda2 8:2 0 4G 0 part [SWAP] ├─sda3 8:3 0 59G 0 part / └─sda1 8:1 0 1G 0 part /boot sdh 8:112 0 100G 0 disk
We will modify the Vagrantfile, so we can mount local disk to the VM. We will use them for running our scripts, that will prepare the OS for the installation and install oracle grid and db.
config.vm.synced_folder "config","/vagrant_config" config.vm.synced_folder "scripts","/vagrant_scripts" config.vm.synced_folder "software","/vagrant_software"
We also need to create the directories where our Vagrantfile is located:
[nisco@pracovna ol7_19c_restart]$ pwd /misc/vagrant/ol7_19c_restart [nisco@pracovna ol7_19c_restart]$ mkdir config scripts software
Now, we can aapend at the end of the Vagrantfile block, where our scripts will be started.
config.vm.provision "shell", inline: <<-SHELL
sh /vagrant_scripts/setup.sh
SHELL
So now, when we are able to run a script, we can prepare the server for the oracle installation. We will create root_setup.sh script, that will run all other scripts.
First, we will create script prepare_u01_u02_disks.sh, that will prepare the u01 and u02 disks:
function prepare_disk {
MOUNT_POINT=$1
DISK_DEVICE=$2
echo "******************************************************************************"
echo "Prepare ${MOUNT_POINT} disk." `date`
echo "******************************************************************************"
# Create new partition for the whole disk.
echo -e "n\np\n1\n\n\nw" | fdisk ${DISK_DEVICE}
# Add file system.
mkfs.xfs -f ${DISK_DEVICE}1
# Mount it.
UUID=`blkid -o export ${DISK_DEVICE}1 | grep UUID | grep -v PARTUUID`
mkdir ${MOUNT_POINT}
echo "${UUID} ${MOUNT_POINT} xfs defaults 1 2" >> /etc/fstab
mount ${MOUNT_POINT}
}
prepare_disk /u01 /dev/sdb
prepare_disk /u02 /dev/sdc
That script will create new partitions, modify the fstab file and mount the filesystems.
Next we will create script install_os_packages.sh, that will install OS packages:
echo "******************************************************************************" echo "Prepare yum repos and install base packages." `date` echo "******************************************************************************" echo "nameserver 8.8.8.8" >> /etc/resolv.conf yum install -y zip unzip yum install -y oracle-epel-release-el8 yum install -y sshpass yum install -y oracle-database-preinstall-19c echo "******************************************************************************" echo "Add extra OS packages." `date` echo "******************************************************************************" yum install -y bc yum install -y binutils yum install -y compat-libcap1 yum install -y compat-libstdc++-33 yum install -y dtrace-modules yum install -y dtrace-modules-headers yum install -y dtrace-modules-provider-headers yum install -y dtrace-utils yum install -y elfutils-libelf yum install -y elfutils-libelf-devel yum install -y fontconfig-devel yum install -y glibc yum install -y glibc-devel yum install -y ksh yum install -y libaio yum install -y libaio-devel yum install -y libdtrace-ctf-devel yum install -y libXrender yum install -y libXrender-devel yum install -y libX11 yum install -y libXau yum install -y libXi yum install -y libXtst yum install -y libgcc yum install -y librdmacm-devel yum install -y libstdc++ yum install -y libstdc++-devel yum install -y libxcb yum install -y make yum install -y net-tools # Clusterware yum install -y nfs-utils # ACFS yum install -y python # ACFS yum install -y python-configshell # ACFS yum install -y python-rtslib # ACFS yum install -y python-six # ACFS yum install -y targetcli # ACFS yum install -y smartmontools yum install -y sysstat yum install -y unixODBC echo "******************************************************************************" echo "Turn off local firewall." `date` echo "******************************************************************************" systemctl stop firewalld systemctl disable firewalld echo "******************************************************************************" echo "Disable SELinux." `date` echo "******************************************************************************" sed -i -e "s|SELINUX=enforcing|SELINUX=disabled|g" /etc/selinux/config setenforce permissive
Next, lets create script create_grid_user.sh for creating the GRID user:
echo "###########################################" echo "Create grid user." `date` echo "###########################################" groupadd -g 54331 asmadmin groupadd -g 54332 asmdba groupadd -g 54333 asmoper useradd -m -g oinstall -G asmadmin,asmdba,asmoper -d /home/grid -s "/bin/bash" grid usermod -a -G asmdba oracle
For the next script, we have to prepare an env.sh script, with several variables exported there. For the start, its enough to set passwords for grid,oracle and root users. Plus the directory, we need create for the oracle installation zips.
export ROOT_PASSWORD=xxx
export ORACLE_PASSWORD=xxx
export GRID_PASSWORD=xxx
export SOFTWARE_DIR=/u02/software
We will call this script at the start of the root_setup.sh script:
. /vagrant_config/env.sh
Will add this to the root_setup.sh:
echo "******************************************************************************"
echo "Set root,oracle and grid password and change ownership of /u01 and /u02." `date`
echo "******************************************************************************"
echo -e "${ROOT_PASSWORD}\n${ROOT_PASSWORD}" | passwd
echo -e "${ORACLE_PASSWORD}\n${ORACLE_PASSWORD}" | passwd oracle
echo -e "${GRID_PASSWORD}\n${GRID_PASSWORD}" | passwd grid
mkdir -p ${SOFTWARE_DIR}
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u02
chmod -R 775 /u01
chmod -R 775 /u02
For the next script, we will need to add new variables in the env.sh script:
export DOMAIN_NAME=localdomain
export NODE1_HOSTNAME=ol7-19-restart
export NODE1_FQ_HOSTNAME=${NODE1_HOSTNAME}.${DOMAIN_NAME}
export NODE1_PUBLIC_IP=192.168.56.10
The host_configuration.sh script for modifying the /etc/hosts and hostname:
[nisco@pracovna scripts]$ cat host_configuration.sh
echo "####################################################"
echo "Change the local host file" `date`
echo "####################################################"
cat >> /etc/hosts <<EOF
# Public
${NODE1_PUBLIC_IP} ${NODE1_FQ_HOSTNAME} ${NODE1_HOSTNAME}
EOF
echo "******************************************************************************"
echo "Set Hostname." `date`
echo "******************************************************************************"
hostnamectl set-hostname ${NODE1_HOSTNAME}
Next, we will configure the chrony daemon with the configure_chrony.sh script:
echo "******************************************************************************" echo "Enable chronyd service." `date` echo "******************************************************************************" systemctl enable chronyd systemctl restart chronyd chronyc -a 'burst 4/4' chronyc -a makestep
Next, we will configure the shared disks with the configure_asm_disks.sh scripts:
echo "******************************************************************************"
echo "Configure shared disks." `date`
echo "******************************************************************************"
echo "******************************************************************************"
echo "Partition disks." `date`
echo "******************************************************************************"
if [ ! -e /dev/sdd1 ]; then
echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdd
fi
if [ ! -e /dev/sde1 ]; then
echo -e "n\np\n1\n\n\nw" | fdisk /dev/sde
fi
if [ ! -e /dev/sdf1 ]; then
echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdf
fi
if [ ! -e /dev/sdg1 ]; then
echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdg
fi
if [ ! -e /dev/sdh1 ]; then
echo -e "n\np\n1\n\n\nw" | fdisk /dev/sdh
fi
ls /dev/sd*
echo "******************************************************************************"
echo "Configure udev." `date`
echo "******************************************************************************"
cat > /etc/scsi_id.config <<EOF
options=-g
EOF
ASM_DISK1=`/usr/lib/udev/scsi_id -g -u -d /dev/sdd`
ASM_DISK2=`/usr/lib/udev/scsi_id -g -u -d /dev/sde`
ASM_DISK3=`/usr/lib/udev/scsi_id -g -u -d /dev/sdf`
ASM_DISK4=`/usr/lib/udev/scsi_id -g -u -d /dev/sdg`
ASM_DISK5=`/usr/lib/udev/scsi_id -g -u -d /dev/sdh`
cat > /etc/udev/rules.d/99-oracle-asmdevices.rules <<EOF
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$parent", RESULT=="${ASM_DISK1}", SYMLINK+="oracleasm/asm-crs-disk1", OWNER="grid", GROUP="asmdba", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$parent", RESULT=="${ASM_DISK2}", SYMLINK+="oracleasm/asm-crs-disk2", OWNER="grid", GROUP="asmdba", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$parent", RESULT=="${ASM_DISK3}", SYMLINK+="oracleasm/asm-crs-disk3", OWNER="grid", GROUP="asmdba", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$parent", RESULT=="${ASM_DISK4}", SYMLINK+="oracleasm/asm-data-disk1", OWNER="grid", GROUP="asmdba", MODE="0660"
KERNEL=="sd?1", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$parent", RESULT=="${ASM_DISK5}", SYMLINK+="oracleasm/asm-reco-disk1", OWNER="grid", GROUP="asmdba", MODE="0660"
EOF
echo "******************************************************************************"
echo "Reload UDEV Rules." `date`
echo "******************************************************************************"
ls -al /dev/sd*1
/sbin/partx -u /dev/sdd1
/sbin/partx -u /dev/sde1
/sbin/partx -u /dev/sdf1
/sbin/partx -u /dev/sdg1
/sbin/partx -u /dev/sdh1
/sbin/udevadm control --reload-rules
sleep 30
/sbin/partx -u /dev/sdd1
/sbin/partx -u /dev/sde1
/sbin/partx -u /dev/sdf1
/sbin/partx -u /dev/sdg1
/sbin/partx -u /dev/sdh1
sleep 20
ls -al /dev/oracleasm/*
Now, we will configure the oracle user environment. For that, we need to add another variables in the env.sh
export ORACLE_BASE=/u01/app/oracle export ORA_INVENTORY=/u01/app/oraInventory export DB_HOME_EXT=product/19.0.0/dbhome_1 export ORACLE_HOME=$ORACLE_BASE/$DB_HOME_EXT export ORACLE_UNQNAME=MNCDB export PDB_NAME=MNPDB export NODE1_ORACLE_SID=MNCDB
And the setup_oracle_user.sh script for the user:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Create environment scripts." `date`
echo "******************************************************************************"
mkdir -p /home/oracle/scripts
cat > /home/oracle/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=${NODE1_HOSTNAME}
export ORACLE_UNQNAME=${ORACLE_UNQNAME}
export ORACLE_BASE=${ORACLE_BASE}
export ORA_INVENTORY=${ORA_INVENTORY}
export DB_HOME=\$ORACLE_BASE/${DB_HOME_EXT}
export ORACLE_HOME=\$DB_HOME
export ORACLE_SID=${NODE1_ORACLE_SID}
export ORACLE_TERM=xterm
export TERM=xterm
export BASE_PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$BASE_PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
alias db_env='. /home/oracle/scripts/db_env'
EOF
cat >> /home/oracle/.bash_profile <<EOF
. /home/oracle/scripts/setEnv.sh
EOF
echo "******************************************************************************"
echo "Create directories." `date`
echo "******************************************************************************"
. /home/oracle/scripts/setEnv.sh
mkdir -p ${DB_HOME}
For the grid user, we need to put these variables in the env.sh
export GRID_HOME=/u01/app/19.0.0/grid export GRID_BASE=/u01/app/19.0.0/gridbase export NODE1_ASM_SID=+ASM
And the setup_grid_user.sh for the grid user:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Create GRID environment scripts." `date`
echo "******************************************************************************"
mkdir -p /home/grid/scripts
cat > /home/grid/scripts/setEnv.sh <<EOF
# Oracle Settings
export TMP=/tmp
export TMPDIR=\$TMP
export ORACLE_HOSTNAME=${NODE1_HOSTNAME}
export ORACLE_UNQNAME=${ORACLE_UNQNAME}
export ORACLE_BASE=${ORACLE_BASE}
export ORA_INVENTORY=${ORA_INVENTORY}
export GRID_HOME=${GRID_HOME}
export GRID_BASE=${GRID_BASE}
export ORACLE_SID=${NODE1_ASM_SID}
export ORACLE_TERM=xterm
export BASE_PATH=/usr/sbin:\$PATH
export PATH=\$ORACLE_HOME/bin:\$BASE_PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
alias grid_env='. /home/grid/scripts/grid_env'
EOF
cat > /home/grid/scripts/grid_env <<EOF
export BASE_PATH=/usr/sbin:$PATH
export GRID_HOME=/u01/app/19.0.0/grid
export ORACLE_SID=+ASM
export ORACLE_HOME=\$GRID_HOME
export PATH=\$BASE_PATH:\$ORACLE_HOME/bin
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
EOF
cat >> /home/grid/.bash_profile <<EOF
. /home/grid/scripts/grid_env
EOF
Now, we will create script, that will unzip the grid software. For that, we need new variables in the env.sh
export GRID_SOFTWARE=LINUX.X64_193000_grid_home.zip
# For the grid/db RU 19.18
export OPATCH_FILE=p6880880_190000_Linux-x86-64.zip
export PATCH_FILE=p34762026_190000_Linux-x86-64.zip
export PATCH_TOP=${SOFTWARE_DIR}/34762026
And the unzip_grid_soft.sh for unzipping the software:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Create directories." `date`
echo "******************************************************************************"
mkdir -p ${GRID_HOME}
mkdir -p ${GRID_BASE}
echo "******************************************************************************"
echo "Unzip grid software." `date`
echo "******************************************************************************"
cd ${GRID_HOME}
unzip -oq /vagrant_software/${GRID_SOFTWARE}
unzip -oq /vagrant_software/${OPATCH_FILE}
cd ${SOFTWARE_DIR}
unzip -oq /vagrant_software/${PATCH_FILE}
Next, we will add this to root_setup.sh script, to install the cvuqdisk package:
echo "******************************************************************************"
echo "Install cvuqdisk package." `date`
echo "******************************************************************************"
yum install -y ${GRID_HOME}/cv/rpm/cvuqdisk-1.0.10-1.rpm
For the GRID installation, we need following variables in the env.sh script:
export ORA_LANGUAGES=en,en_GB export SYS_PASSWORD=xxxx
And the install_grid_software.sh script for the installation:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Do grid software-only installation." `date`
echo "******************************************************************************"
${GRID_HOME}/gridSetup.sh -ignorePrereq -waitforcompletion -silent \
-applyRU ${PATCH_TOP} \
-responseFile ${GRID_HOME}/install/response/gridsetup.rsp \
INVENTORY_LOCATION=${ORA_INVENTORY} \
SELECTED_LANGUAGES=${ORA_LANGUAGES} \
ORACLE_BASE=${GRID_BASE} \
oracle.install.option=HA_CONFIG \
oracle.install.asm.OSDBA=asmdba \
oracle.install.asm.OSASM=asmdba \
oracle.install.crs.config.autoConfigureClusterNodeVIP=false \
oracle.install.asm.storageOption=ASM \
oracle.install.asm.diskGroup.name=CRS \
oracle.install.asm.diskGroup.redundancy=NORMAL \
oracle.install.asm.diskGroup.disksWithFailureGroupNames=/dev/oracleasm/asm-crs-disk1,CRSFG1,/dev/oracleasm/asm-c
rs-disk2,CRSFG2,/dev/oracleasm/asm-crs-disk3,CRSFG3 \
oracle.install.asm.diskGroup.disks=/dev/oracleasm/asm-crs-disk1,/dev/oracleasm/asm-crs-disk2,/dev/oracleasm/asm-
crs-disk3 \
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/* \
oracle.install.asm.monitorPassword=${SYS_PASSWORD} \
oracle.install.asm.SYSASMPassword=${SYS_PASSWORD} \
oracle.install.asm.configureAFD=false \
oracle.install.asm.monitorPassword=${SYS_PASSWORD} \
oracle.install.crs.configureRHPS=false \
oracle.install.crs.config.ignoreDownNodes=false \
oracle.install.config.managementOption=NONE \
oracle.install.config.omsPort=0 \
oracle.install.crs.rootconfig.executeRootScript=false
Next, we add the orainstRoot.sh and root.sh scripts:
echo "******************************************************************************"
echo "Run grid root scripts." `date`
echo "******************************************************************************"
#sh ${ORA_INVENTORY}/orainstRoot.sh
#sh ${GRID_HOME}/root.sh
Next, we will run the executeConfigTools part of the configuration. Script grid_software_config.sh
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Do grid configuration." `date`
echo "******************************************************************************"
${GRID_HOME}/gridSetup.sh -silent -executeConfigTools \
-responseFile ${GRID_HOME}/install/response/gridsetup.rsp \
INVENTORY_LOCATION=${ORA_INVENTORY} \
SELECTED_LANGUAGES=${ORA_LANGUAGES} \
ORACLE_BASE=${GRID_BASE} \
oracle.install.option=HA_CONFIG \
oracle.install.asm.OSDBA=asmdba \
oracle.install.asm.OSASM=asmdba \
oracle.install.crs.config.autoConfigureClusterNodeVIP=false \
oracle.install.asm.storageOption=ASM \
oracle.install.asm.diskGroup.name=CRS \
oracle.install.asm.diskGroup.redundancy=NORMAL \
oracle.install.asm.diskGroup.disksWithFailureGroupNames=/dev/oracleasm/asm-crs-disk1,CRSFG1,/dev/oracleasm/asm-crs-disk2,CRSFG2,/dev/oracleasm/asm-crs-disk3,CRSFG3 \
oracle.install.asm.diskGroup.disks=/dev/oracleasm/asm-crs-disk1,/dev/oracleasm/asm-crs-disk2,/dev/oracleasm/asm-crs-disk3 \
oracle.install.asm.diskGroup.diskDiscoveryString=/dev/oracleasm/* \
oracle.install.asm.monitorPassword=${SYS_PASSWORD} \
oracle.install.asm.SYSASMPassword=${SYS_PASSWORD} \
oracle.install.asm.configureAFD=false \
oracle.install.asm.monitorPassword=${SYS_PASSWORD} \
oracle.install.crs.configureRHPS=false \
oracle.install.crs.config.ignoreDownNodes=false \
oracle.install.config.managementOption=NONE \
oracle.install.config.omsPort=0 \
oracle.install.crs.rootconfig.executeRootScript=false
Next, we will create the RECO and DATA diskgroups with grid_create_data_reco.sh script:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Create additional diskgroups." `date`
echo "******************************************************************************"
. /home/grid/scripts/grid_env
sqlplus / as sysasm <<EOF
CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/dev/oracleasm/asm-data-disk1'
ATTRIBUTE 'compatible.asm'='19.0','compatible.rdbms'='19.0';
CREATE DISKGROUP reco EXTERNAL REDUNDANCY DISK '/dev/oracleasm/asm-reco-disk1'
ATTRIBUTE 'compatible.asm'='19.0','compatible.rdbms'='19.0';
SET LINESIZE 100
COLUMN name FORMAT A30
SELECT name, compatibility FROM v\$asm_diskgroup ORDER BY name;
EXIT;
EOF
echo "******************************************************************************"
echo "Check cluster configuration." `date`
echo "******************************************************************************"
${GRID_HOME}/bin/crsctl stat res -t
Now its time to install the oracle DB software. For that, we need this variable in the env.sh script:
export DB_SOFTWARE=LINUX.X64_193000_db_home.zip
Next, we need to change the owner of the oraInventory:
echo "*******************************************************************************"
echo "Change the owner of the oraInventory" `date`
echo "*******************************************************************************"
chown -R oracle:oinstall ${ORA_INVENTORY}
Add the grid user to the dba group:
echo "*******************************************************************************" echo "Add grid user to the dba group" `date` echo "*******************************************************************************" usermod -a -G dba grid
And finaly the oracle_db_soft_install.sh for the software installation:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Unzip database software." `date`
echo "******************************************************************************"
cd ${ORACLE_HOME}
unzip -oq /vagrant_software/${DB_SOFTWARE}
unzip -oq /vagrant_software/${OPATCH_FILE}
echo "******************************************************************************"
echo "Do database software-only installation." `date`
echo "******************************************************************************"
${ORACLE_HOME}/runInstaller -ignorePrereq -waitforcompletion -silent \
-applyRU ${PATCH_TOP} \
-responseFile ${ORACLE_HOME}/install/response/db_install.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
ORACLE_HOSTNAME=${ORACLE_HOSTNAME} \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=${ORA_INVENTORY} \
SELECTED_LANGUAGES=${ORA_LANGUAGES} \
ORACLE_HOME=${ORACLE_HOME} \
ORACLE_BASE=${ORACLE_BASE} \
oracle.install.db.InstallEdition=EE \
oracle.install.db.OSDBA_GROUP=dba \
oracle.install.db.OSBACKUPDBA_GROUP=dba \
oracle.install.db.OSDGDBA_GROUP=dba \
oracle.install.db.OSKMDBA_GROUP=dba \
oracle.install.db.OSRACDBA_GROUP=dba \
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
DECLINE_SECURITY_UPDATES=true
Next, we need to start the root.sh script. We will add following block to the root_setup.sh script:
echo "*******************************************************************************"
echo "Run oracle root scripts." `date`
echo "*******************************************************************************"
${ORACLE_HOME}/root.sh
For the database creation, we need to add tis variable to the env.sh script:
export PDB_PASSWORD=xxxx
Next, create the DB with oracle_create_db.sh script:
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Create database." `date`
echo "******************************************************************************"
dbca -silent -createDatabase \
-templateName General_Purpose.dbc \
-gdbname ${ORACLE_UNQNAME} -responseFile NO_VALUE \
-characterSet AL32UTF8 \
-sysPassword ${SYS_PASSWORD} \
-systemPassword ${SYS_PASSWORD} \
-createAsContainerDatabase true \
-numberOfPDBs 1 \
-pdbName ${PDB_NAME} \
-pdbAdminPassword ${PDB_PASSWORD} \
-databaseType MULTIPURPOSE \
-automaticMemoryManagement false \
-totalMemory 4096 \
-redoLogFileSize 100 \
-emConfiguration NONE \
-ignorePreReqs \
-storageType ASM \
-diskGroupName +DATA \
-recoveryGroupName +RECO \
-useOMF true \
-asmsnmpPassword ${SYS_PASSWORD}
Some post DB creation tasks (post_db_create_tasks.sh):
. /vagrant_config/env.sh
echo "******************************************************************************"
echo "Save state of PDB to enable auto-start." `date`
echo "******************************************************************************"
sqlplus / as sysdba <<EOF
ALTER PLUGGABLE DATABASE ${PDB_NAME} SAVE STATE;
EXIT;
EOF
echo "******************************************************************************"
echo "Output from srvctl config database -d ${ORACLE_UNQNAME}" `date`
echo "******************************************************************************"
srvctl config database -d ${ORACLE_UNQNAME}
Modify the bash environment for oracle user, add aliases (oracle_post_install_env.sh):
cat >> /home/oracle/.bash_profile << EOF
ohvers ()
{
echo -n \$ORACLE_HOME | sed -n 's/.*\/\([[:digit:].]\+\)\/.*/\1/p'
}
export PS1=\$'\\\n# [ \$LOGNAME@\h:\$PWD [\\\t] [\`ohvers\` SID:\${ORACLE_SID:-"no sid"}] ]\\\n# '
EOF
cat >> /home/oracle/.bashrc << EOF
pdb()
{
export ORACLE_PDB_SID="\$1"
sql / as sysdba
unset ORACLE_PDB_SID
}
alias oh='cd \$ORACLE_HOME'
alias pm='ps -aef|grep pmon|grep -v grep'
sdba='sql / as sysdba'
alias talert='adrci exec="set editor vi;set home diag/rdbms/\`"echo" \$ORACLE_SID\`/\$ORACLE_SID;show alert -tail -f"'
alias valert='adrci exec="set editor vi;set home diag/rdbms/\`"echo" \$ORACLE_SID\`/\$ORACLE_SID;show alert "'
alias 1sys='sql / as sysdba'
EOF
And last thing, the better oraenv script (better_oraenv.sh)
cat > /usr/local/bin/sid << EOF
#! /bin/sh
# skript pro nastaveni ORACLE_SID
N=
C=
E=
if echo "\\c" | grep c >/dev/null 2>&1; then
N='-n'
E='-e'
else
C='\\c'
fi
if [ -f /etc/oratab ] ; then
ORATAB=/etc/oratab
elif [ -f /var/opt/oracle/oratab ] ; then
ORATAB=/var/opt/oracle/oratab
fi
sidchange () {
while :
do
grep -v '^[ ]*\$' \$ORATAB | awk -F: '!/^#/ {printf("%s\\t%s\\n",\$1,\$4) }' |
awk '{printf("\\t%d) %s\\n", NR,\$0)}'
echo \$N "
Current instance: \${ORACLE_SID:-""}
Choice Number: \$C"
read X
if [ "\$X"a = "a" ]
then ORACLE_SID=\$SID_OLD;
break;
else
ORACLE_SID=\`grep -v '^[ ]*\$' \$ORATAB | awk -F: '!/^#/ {print \$1}' |
awk 'NR == '\$X' {print \$0}' \`
if [ "\$ORACLE_SID"a = "a" ]
then echo "\\n!!! Error: entered value is not valid number, try again\\n"
else
break;
fi
fi
done
ORAENV_ASK=NO
. oraenv
unset ORAENV_ASK
echo \$E "\\n New instance: \$ORACLE_SID"
}
SID_OLD=\${ORACLE_SID:-""}
case \`basename [\$0]\` in
sid) echo " Current instance: \$ORACLE_SID"
;;
*) if [ \${1:-"x"} = "x" ] ;then
sidchange
else
#Check of sid
ORACLE_SID=\`grep -v '^[ ]*\$' \$ORATAB | awk -F: '!/^#/ {print \$1}' |
awk '\$1~/^'\$1'\$/ {print \$0}' \`
if [ "\$ORACLE_SID"a = "a" ]
then ORACLE_SID=\$SID_OLD;
fi
shift
ORAENV_ASK=NO
. oraenv
unset ORAENV_ASK
echo \$E "\\n New instance: \$ORACLE_SID"
fi
;;
esac
EOF
Here the whole root_setup.sh script:
. /vagrant/config/env.sh
echo "##############################################################################################################"
echo " Prepare disks for grid and orale installation"
echo "##############################################################################################################"
sh /vagrant_scripts/prepare_u01_u02_disks.sh
sh /vagrant_scripts/install_os_packages.sh
sh /vagrant_scripts/create_grid_user.sh
echo "******************************************************************************"
echo "Set root,oracle and grid password and change ownership of /u01 and /u02." `date`
echo "******************************************************************************"
echo -e "${ROOT_PASSWORD}\n${ROOT_PASSWORD}" | passwd
echo -e "${ORACLE_PASSWORD}\n${ORACLE_PASSWORD}" | passwd oracle
echo -e "${GRID_PASSWORD}\n${GRID_PASSWORD}" | passwd grid
mkdir -p ${SOFTWARE_DIR}
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u02
chmod -R 775 /u01
chmod -R 775 /u02
usermod -aG vagrant oracle
usermod -aG vagrant grid
sh /vagrant_scripts/host_configuration.sh
sh /vagrant_scripts/configure_chrony.sh
sh /vagrant_scripts/configure_asm_disks.sh
su - oracle -c 'sh /vagrant_scripts/setup_oracle_user.sh'
su - grid -c 'sh /vagrant_scripts/setup_grid_user.sh'
su - grid -c 'sh /vagrant_scripts/unzip_grid_soft.sh'
echo "******************************************************************************"
echo "Install cvuqdisk package." `date`
echo "******************************************************************************"
yum install -y ${GRID_HOME}/cv/rpm/cvuqdisk-1.0.10-1.rpm
su - grid -c 'sh /vagrant_scripts/install_grid_software.sh'
echo "******************************************************************************"
echo "Run grid root scripts." `date`
echo "******************************************************************************"
sh ${ORA_INVENTORY}/orainstRoot.sh
sh ${GRID_HOME}/root.sh
su - grid -c 'sh /vagrant_scripts/grid_software_config.sh'
su - grid -c 'sh /vagrant/scripts/grid_create_data_reco.sh'
echo "*******************************************************************************"
echo "Change the owner of the oraInventory" `date`
echo "*******************************************************************************"
chown -R oracle:oinstall ${ORA_INVENTORY}
echo "*******************************************************************************"
echo "Add grid user to the dba group" `date`
echo "*******************************************************************************"
usermod -a -G dba grid
#su - oracle -c 'sh /vagrant_scripts/oracle_db_soft_install.sh'
echo "*******************************************************************************"
echo "Run oracle root scripts." `date`
echo "*******************************************************************************"
${ORACLE_HOME}/root.sh
su - oracle -c 'sh /vagrant_scripts/oracle_create_db.sh'
su - oracle -c 'sh /vagrant_scripts/post_db_create_tasks.sh'
su - oracle -c 'sh /vagrant_scripts/oracle_post_install_env.sh'
sh /vagrant_scripts/better_oraenv.sh
And the whole env.sh script:
export DOMAIN_NAME=localdomain
export NODE1_HOSTNAME=ol7-19-restart
export NODE1_FQ_HOSTNAME=${NODE1_HOSTNAME}.${DOMAIN_NAME}
export NODE1_PUBLIC_IP=192.168.56.10
export ROOT_PASSWORD=xxx
export ORACLE_PASSWORD=xxx
export GRID_PASSWORD=xxx
export ORACLE_BASE=/u02/app/oracle
export ORA_INVENTORY=/u01/app/oraInventory
export DB_HOME_EXT=product/19.0.0/dbhome_1
export ORACLE_HOME=$ORACLE_BASE/$DB_HOME_EXT
export ORACLE_UNQNAME=MNCDB
export PDB_NAME=MNPDB
export NODE1_ORACLE_SID=MNCDB
export ORACLE_TERM=xterm
export TERM=xterm
export SOFTWARE_DIR=/u02/software
export GRID_HOME=/u01/app/19.0.0/grid
export GRID_BASE=/u01/app/gridbase
export NODE1_ASM_SID=+ASM
export GRID_SOFTWARE=LINUX.X64_193000_grid_home.zip
# 19.18
export OPATCH_FILE=p6880880_190000_Linux-x86-64.zip
export PATCH_FILE=p34762026_190000_Linux-x86-64.zip
export PATCH_TOP=${SOFTWARE_DIR}/34762026
export ORA_LANGUAGES=en,en_GB
export SYS_PASSWORD=xxx
export DB_SOFTWARE=LINUX.X64_193000_db_home.zip
export PDB_PASSWORD=xxx
