About a year ago, I worked on a project with some amazing teammates (Simon Pane and Karun Dutt) to collaborate on a POC to move their Oracle environment into Google Cloud. This series reflects some of the things I learned while working on this project, and provides a guide for testing Oracle in Google Cloud.
Note: that I am not a licensing expert, so before you do this, make sure you consult with your Google/Oracle Sales representative to be clear about what’s allowed and the costs involved.
Because this is a “101” series, let’s start by logging into Google Cloud. By now you should already have an account in cloud.google.com and installed the Google Cloud SDK. Because I use a Mac, I downloaded it from this location. Then, I logged into my Google Cloud account:
Renes-MacBook-Pro-2:~ rene$ gcloud auth login **********@*****.com
Because I’m using Google Free Tier, there are limitations on disk sizes, instance type, quotas, etc. These are the specifications I used:
First, create the disk to use for ASM. In this case, I used a 150GB SSD disk:
Renes-MacBook-Pro-2:~ rene$ gcloud compute disks create rene-ace-disk-asm1 \ > --project=oracle-migration \ > --type=pd-ssd \ > --size=150GB \ > --labels=item=rene-ace \ > --zone=us-central1-c Created [https://www.googleapis.com/compute/v1/projects/oracle-migration/zones/us-central1-c/disks/rene-ace-disk-asm1]. NAME ZONE SIZE_GB TYPE STATUS rene-ace-disk-asm1 us-central1-c 150 pd-ssd READY
Create a 100GB HD disk for the boot disk with Centos 7:
Renes-MacBook-Pro-2:~ rene$ gcloud compute disks create rene-ace-inst1-boot-disk \ > --project=oracle-migration \ > --type=pd-standard \ > --size=100GB \ > --zone=us-central1-c \ > --image=centos-7-v20200309 \ > --image-project=centos-cloud
After creating the ASM disk, create the VM with the boot disk that you just created:
Renes-MacBook-Pro-2:~ rene$ gcloud compute instances create rene-ace-test-inst1 \ > --project=oracle-migration \ > --zone=us-central1-c \ > --machine-type=n1-standard-8 \ > --subnet=default \ > --network-tier=PREMIUM \ > --no-restart-on-failure \ > --maintenance-policy=TERMINATE \ > --no-service-account \ > --no-scopes \ > --disk=name=rene-ace-inst1-boot-disk,device-name=rene-ace-inst1-boot-disk,mode=rw,boot=yes,auto-delete=yes \ > --tags=allow-ssh,egress-nat-gce \ > --labels=item=rene-ace
Attach the disk to use for ASM:
Renes-MacBook-Pro-2:~ rene$ gcloud compute instances attach-disk rene-ace-test-inst1 \ > --disk=rene-ace-disk-asm1 \ > --device-name=rene-ace-disk-asm1 \ > --mode=rw \ > --zone=us-central1-c Renes-MacBook-Pro-2:~ rene$ gcloud compute ssh rene-ace-test-inst1 --zone=us-central1-c
Unless otherwise mentioned, perform all steps as the root user. Now, install the 19c pre-install RPM:
[rene@rene-ace-test-inst1 ~]$ sudo su - [root@rene-ace-test-inst1 ~]# curl -o ./oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm \ > https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm [root@rene-ace-test-inst1 ~]# yum -y localinstall ./oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
You must install some additional packages and update what you have already installed:
[root@rene-ace-test-inst1 ~]# yum -y install wget java-11-openjdk gcc gcc-c++ [root@rene-ace-test-inst1 ~]# yum -y update [root@rene-ace-test-inst1 ~]# yum clean all
Make sure that there is at least 16GB of swap space:
[root@rene-ace-test-inst1 ~]# dd if=/dev/zero of=/swapfile bs=1M count=16384 [root@rene-ace-test-inst1 ~]# mkswap /swapfile [root@rene-ace-test-inst1 ~]# chmod 0600 /swapfile [root@rene-ace-test-inst1 ~]# swapon /swapfile [root@rene-ace-test-inst1 ~]# echo "/swapfile swap swap defaults 0 0" >> /etc/fstab [root@rene-ace-test-inst1 ~]# echo "transparent_hugepage=never" >> /etc/default/grub [root@rene-ace-test-inst1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Disable the firewall and change SELINUX to permissive:
[root@rene-ace-test-inst1 ~]# systemctl stop firewalld [root@rene-ace-test-inst1 ~]# systemctl disable firewalld [root@rene-ace-test-inst1 ~]# sed -i.bak '/^SELINUX=/ s/SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
Next, enable hugepages by changing the value in /etc/sysctl.conf and restarting the VM:
[root@rene-ace-test-inst1 ~]# echo "vm.nr_hugepages=4096" >> /etc/sysctl.conf [root@rene-ace-test-inst1 ~]# shutdown -r now
Create the directories for the binaries, the additional OS groups, and update the bash profile:
[root@rene-ace-test-inst1 ~]# mkdir -p /u01/app/19.0.0.0/grid [root@rene-ace-test-inst1 ~]# mkdir -p /u01/app/oracle/product/19.0.0.0/dbhome_1 [root@rene-ace-test-inst1 ~]# usermod -u 54321 -g oinstall -G dba,asmadmin,asmdba,asmoper oracle
Log in as the oracle use and download the latest OPatch using Maris Elsins getMOSpatch:
[oracle@rene-ace-test-inst1 oracle_software]$ java -jar getMOSPatch.jar patch=6880880 platform=226P regexp=.*190.* download=all
Download Oracle base software using wget from edelivery.oracle.com. Download files V982063-01.zip (ORACLE RDBMS) and V982068-01.zip (ORACLE GI). Unzip the files to the corresponding location and update the OPatch:
[oracle@rene-ace-test-inst1 oracle_software]$ unzip -q ${SWLIB}/V982063-01.zip -d ${ORACLE_HOME} [oracle@rene-ace-test-inst1 oracle_software]$ unzip -q ${SWLIB}/V982068-01.zip -d ${GRID_HOME}
As the root user, install the cvuqdisk:
[root@rene-ace-test-inst1 rpm]# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP [root@rene-ace-test-inst1 rpm]# rpm -iv cvuqdisk-*.rpm
As the oracle user, run cluvfy pre crsinst to make sure there is nothing missing so that you can successfully install OHAS and ASM. Because this is not a RAC environment, you only need to use ASM.
[oracle@rene-ace-test-inst1 grid]$ ./runcluvfy.sh stage -pre crsinst -n `hostname -s`
Modify the response file so that you can use the GI software as a CRS_SWONLY installation:
[oracle@rene-ace-test-inst1 grid]$ sed -i '/^oracle.install.option/ s~oracle.install.option=$~oracle.install.option=CRS_SWONLY~' ${SWLIB}/grid_install.rsp [oracle@rene-ace-test-inst1 grid]$ ${GRID_HOME}/gridSetup.sh -silent -responseFile ${SWLIB}/grid_install.rsp
When the software installation is complete, run orainstRoot.sh and root.sh as root user. Also, run roothas.pl to setup the HAS stack:
[root@rene-ace-test-inst1 ~]# ${GRID_HOME}/crs/install/roothas.pl [root@rene-ace-test-inst1 ~]# ${GRID_HOME}/bin/crsctl stat res -t
As the root user, prepare the disks for ASM using UDEV rules:
[root@rene-ace-test-inst1 ~]# ASM_DISK1=`/usr/lib/udev/scsi_id -g -u -d /dev/sdb` [root@rene-ace-test-inst1 ~]# 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-disk1", OWNER="oracle", GROUP="dba", MODE="0660" > EOF
Create and start the ASM Instance:
[oracle@rene-ace-test-inst1 ~]$ srvctl add asm -d '/dev/oracleasm/*' [oracle@rene-ace-test-inst1 ~]$ srvctl start asm
Create the ASM diskgroup (DATA):
CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/oracleasm/asm-disk1' ATTRIBUTE 'compatible.asm' = '19.0.0.0.0', 'compatible.rdbms' = '19.0.0.0.0';
As the oracle user, prepare the RDBMS install software response file and install the RDBMS software:
[oracle@rene-ace-test-inst1 ~]$ ${ORACLE_HOME}/runInstaller -silent -waitforcompletion -responseFile ${SWLIB}/db_install.rsp
Create the database (DBTEST):
[oracle@rene-ace-test-inst1 ~]$ dbca -silent \ > -createDatabase \ > -templateName General_Purpose.dbc \ > -sid ${ORACLE_SID} \ > -datafileDestination '+DATA' \ > -storageType ASM \ > -diskGroupName DATA
Adjust redo log settings to 128MB and adjust the database to use large pages only, minimize SGA allocations, and adjust file system IO options:
SQL> alter system set USE_LARGE_PAGES=ONLY scope=spfile; SQL> alter system set FILESYSTEMIO_OPTIONS=SETALL scope=spfile;
Stop and restart the database so that the new parameters take effect. Use crs_status.sh to verify the status of the OHAS environment:
[oracle@rene-ace-test-inst1 working]$ ${HOME}/working/crs_status.sh Name Target State Server --------------------------------------------------------------------------------------- ora.DATA.dg ONLINE ONLINE rene-ace-test-inst1 ora.LISTENER.lsnr ONLINE ONLINE rene-ace-test-inst1 ora.asm ONLINE ONLINE rene-ace-test-inst1 ora.dbtest.db ONLINE ONLINE rene-ace-test-inst1
Now that you have created the Google VM, installed OHAS, and created the Oracle DB, we're set to perform several tasks that I'll be describing in future series posts. I hope this helps expand your understanding of Google Cloud and how to install a database in it.
Note: This was originally published at rene-ace.
Ready to optimize your use of Google Cloud's AI tools?