This article explains how to install a 2 nodes Oracle 12cR1 Real Application Cluster (RAC) on Oracle Linux 7. I did this installation on Oracle Virtual Box by creating 2 virtual machines with shared storage. OS platform I used is Oracle Enterprise Linux 7 (update 1), and Oracle GI and RDBMS version is 12.1.0.2. Same installation guide should work for Redhat Linux 7 also.
There will be no difference in installation steps if there are more than 2 nodes in the RAC setup.
There will be no difference in installation steps if there are more than 2 nodes in the RAC setup.
Official document for 12c RAC installation can be found by clicking at the following link.
http://docs.oracle.com/database/121/CWLIN/toc.htm
Prerequisiteshttp://docs.oracle.com/database/121/CWLIN/toc.htm
Prepare all the nodes by installing Oracle Linux 7. Have private interconnects setup, and shared storage mounted on all the nodes. For this example, I have 3 disks (2G size each) for CRS diskgroup to store OCR and Voting disk, and 1 disk (4G) for DATA diskgroup to store the database.
Please note that you should have external redundancy for these disks, otherwise you should specify at least 3 different locations for storing voting disk, and 2 locations to store OCR .
Have 2 public IPs, 2 virtual IPs, 2 private IPs and 1 SCAN IP (from public subnet), which we will use later during the installation. For this article, node names for are as follows
Please note that you should have external redundancy for these disks, otherwise you should specify at least 3 different locations for storing voting disk, and 2 locations to store OCR .
Have 2 public IPs, 2 virtual IPs, 2 private IPs and 1 SCAN IP (from public subnet), which we will use later during the installation. For this article, node names for are as follows
Public
salman1.salman.com
salman2.salman.com
Virtual
salman1-vip.salman.com
salman2-vip.salman.com
Private
salman1-priv.salman.com
salman2.priv.salman.com
SCAN
salman-scan.salman.com
Download and unzip the software
Download 12c Grid Infrastructure and RDBMS softwares.
First release (12.1.0.1) can be downloaded from www.oracle.com, but since we are installing 12.1.0.2 here, we would need to download patch set 1769377. First 2 zip files are for database and last 2 are for Grid Infrastructure binaries.
For this article, I extracted the software under /u02/12.1.0.2/ directory.
Now we start the installation. Following are the steps to install Oracle 12c RAC on Linux.
1)
On each node, edit /etc/selinux/config and set value for SELINUX to either “permissive” or “disabled”
On each node, edit /etc/selinux/config and set value for SELINUX to either “permissive” or “disabled”
SELINUX=permissive
|
2)
On each node, configure Shared Memory File System. Add following line in /etc/fstab file for shared memory file system. Modify the value of “size” based on the amount of memory you will be using for your SGA.
On each node, configure Shared Memory File System. Add following line in /etc/fstab file for shared memory file system. Modify the value of “size” based on the amount of memory you will be using for your SGA.
tmpfs /dev/shm tmpfs rw,exec,size=8g 0 0
|
3)
On each node, disable the firewall.
On each node, disable the firewall.
[root@salman1 ~]# systemctl start firewalld.service
[root@salman1 ~]# systemctl stop firewalld.service
[root@salman1 ~]# systemctl disable firewalld.service
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
|
4)
Reboot all nodes
Reboot all nodes
5)
On each node, in /etc/host file, add the IP addresses and fully qualified names of each node of RAC, including public IPs; virtual IP; private IPs and SCAN IP.
On each node, in /etc/host file, add the IP addresses and fully qualified names of each node of RAC, including public IPs; virtual IP; private IPs and SCAN IP.
#Public
192.231.231.40 salman1.salman.com salman1
192.231.231.41 salman2.salman.com salman2
#Virtual
192.231.231.50 salman1-vip.salman.com salman1-vip
192.231.231.51 salman2-vip.salman.com salman2-vip
#Private
10.10.10.10 salman1-priv.salman.com salman1-priv
10.10.10.11 salman2-priv.salman.com salman2-priv
#SCAN
192.231.231.60 salman-scan.salman.com salman-scan
|
Make sure that Public interface and Private interfaces have the same name and they list in same order on all the nodes, in ifconfig command (my public interface name is enp0s3 and private interface name is enp0s8)
6)
Test the nodes connectivity with each other using ping command from each node to the other node(s). SCAN IP and Virtual IPs are not required to be tested at this point.
Test the nodes connectivity with each other using ping command from each node to the other node(s). SCAN IP and Virtual IPs are not required to be tested at this point.
From node salman1
[root@salman1 ~]# ping salman1 [root@salman1 ~]# ping salman1-priv [root@salman1 ~]# ping salman2 [root@salman1 ~]# ping salman2-priv
From node salman2
[root@salman2 ~]# ping salman2 [root@salman2 ~]# ping salman2-priv [root@salman2 ~]# ping salman1 [root@salman2 ~]# ping salman1-priv |
7)
We can perform automatic configuration of the node using “yum” command. If you want to do manual configuration, skip this step and go to next step.
Automatic configuration would perform following tasks
- Installation of required RPM packages
- Setup kernel parameters in /etc/sysctl.conf file
- Creation of OS groups (oinstall, dba) and OS user (oracle)
- Setting limits for installation user “oracle”
We can perform automatic configuration of the node using “yum” command. If you want to do manual configuration, skip this step and go to next step.
Automatic configuration would perform following tasks
- Installation of required RPM packages
- Setup kernel parameters in /etc/sysctl.conf file
- Creation of OS groups (oinstall, dba) and OS user (oracle)
- Setting limits for installation user “oracle”
For Oracle Linux, follow the steps mentioned in the following documents to access the online yum repository.
http://public-yum.oracle.com/
On each node, execute following command to perform all prerequisites automatically.
http://public-yum.oracle.com/
On each node, execute following command to perform all prerequisites automatically.
[root@salman1 ~]# yum install oracle-rdbms-server-12cR1-preinstall –y
|
As already mentioned, above command will install all required packages which are needed for grid infrastructure and/or RDBMS software installation. If you also plan to install a 32-bit client on this x86_64 server, you would also need to install 32-bit version of these RPM packages manually as follows.
[root@salman1 ~]# yum install glibc-2.17-36.el7.i686
[root@salman1 ~]# yum install glibc-devel-2.17-36.el7.i686
[root@salman1 ~]# yum install libaio-0.3.109-9.el7.i686
[root@salman1 ~]# yum install libaio-devel-0.3.109-9.el7.i686
[root@salman1 ~]# yum install libXi-1.7.2-1.el7.i686
[root@salman1 ~]# yum install libXtst-1.2.2-1.el7.i686
[root@salman1 ~]# yum install libgcc-4.8.2-3.el7.i686
[root@salman1 ~]# yum install libstdc++-4.8.2-3.el7.i686
[root@salman1 ~]# yum install libstdc++-devel-4.8.2-3.el7.i686
|
If you want to install form Oracle Linux installation media, use “rpm -i” command to install the packages.
Automatic configuration also sets the required kernel parameters in /etc/sysctl.conf file.
Automatic configuration also sets the required kernel parameters in /etc/sysctl.conf file.
Automatic configuration would create default OS groups i.e. oinstall and dba (with group ID 54321 and 54322 respectively), and OS user (oracle) with user ID 54321. If you plan to implement role separation by creating a “grid” user to install and manage grid infrastructure, and use “oracle” user for database software, you would need to create more OS groups and “grid” user manually, as follows (on both nodes).
Add groups
[root@salman1 ~]# groupadd -g 54323 oper
[root@salman1 ~]# groupadd -g 54325 asmdba
[root@salman1 ~]# groupadd -g 54328 asmadmin
[root@salman1 ~]# groupadd -g 54329 asmoper
Add user
[root@salman1 ~]# useradd -u 54322 -g oinstall -G dba,asmdba,asmadmin,asmoper grid
Set passwords for both users (oracle and grid)
[root@salman1 ~]# passwd oracle
[root@salman1 ~]# passwd grid
Make user oracle member of oper and asmdba groups
[root@salman1 ~]# usermod -g oinstall -G dba,oper,asmdba oracle |
Automatic configuration also sets the resource limits for the default user “oracle”, by creating oracle-rdbms-server-12cR1-preinstall.conf file under /etc/security/limits.d directory. If you have created user “grid” for grid infrastructure installation, you would also need to set these limits manually for grid user. You can create a separate .conf file under /etc/security/limits.d directory (.conf file name can be anything), or append following lines in oracle-rdbms-server-12cR1-preinstall.conf file
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
grid hard memlock 134217728
grid soft memlock 134217728
|
8)
Skip this step if you have followed Step 7 above; otherwise perform following tasks on each node.
Install following RPM packages (or latest version) from either yum repository or from Linux 7 media
Skip this step if you have followed Step 7 above; otherwise perform following tasks on each node.
Install following RPM packages (or latest version) from either yum repository or from Linux 7 media
binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64
gcc-4.8.2-3.el7.x86_64
gcc-c++-4.8.2-3.el7.x86_64
glibc-2.17-36.el7.i686
glibc-2.17-36.el7.x86_64
glibc-devel-2.17-36.el7.i686
glibc-devel-2.17-36.el7.x86_64
libaio-0.3.109-9.el7.i686
libaio-0.3.109-9.el7.x86_64
libaio-devel-0.3.109-9.el7.i686
libaio-devel-0.3.109-9.el7.x86_64
ksh
make-3.82-19.el7.x86_64
libXi-1.7.2-1.el7.i686
libXi-1.7.2-1.el7.x86_64
libXtst-1.2.2-1.el7.i686
libXtst-1.2.2-1.el7.x86_64
libgcc-4.8.2-3.el7.i686
libgcc-4.8.2-3.el7.x86_64
libstdc++-4.8.2-3.el7.i686
libstdc++-4.8.2-3.el7.x86_64
libstdc++-devel-4.8.2-3.el7.i686
libstdc++-devel-4.8.2-3.el7.x86_64
sysstat-10.1.5-1.el7.x86_64
unixODBC-2.3.1
Example (yum)
[root@salman1 ~]# yum install glibc
Example (Linux Media)
[root@salman1 ~]# rpm -i glibc
Example (Check after install)
[root@salman1 ~]# rpm -q glibc
glibc-2.17-55.el7.x86_64
|
On each node, edit /etc/sysctl.conf add following entries to set kernel parameters
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmni = 4096
kernel.shmall = 1073741824
kernel.shmmax = 4398046511104
kernel.panic_on_oops = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
net.ipv4.ip_local_port_range = 9000 65500
|
Execute following command after adding above lines
/sbin/sysctl -p |
On each nodes, create a .conf file (file name can be anything) under /etc/security/limits.d directory to set shell limits for grid and oracle users. For example, create file oracleusers.conf with following entries. Alternatively, you can also set the limits in /detc/security/limits.conf. But I would prefer to set under /etc/security/limits.d directory.
# Grid user
grid soft nofile 1024
grid hard nofile 65536
grid soft nproc 16384
grid hard nproc 16384
grid soft stack 10240
grid hard stack 32768
grid hard memlock 134217728
grid soft memlock 134217728
# Oracle user
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
|
9)
On each node, install oracleasm-support and oracleasmlib, and then configure oracleasm.
oracleasm kernel driver is built in Oracle Linux and does not need to be installed. After installing oracleasm-support and oracleasmlib packages, oracleasm driver starts working.
On each node, install oracleasm-support and oracleasmlib, and then configure oracleasm.
oracleasm kernel driver is built in Oracle Linux and does not need to be installed. After installing oracleasm-support and oracleasmlib packages, oracleasm driver starts working.
If you are using some other flavour of Linux, for example RedHat Linux, then you would need to install all 3 packages (oracleasm driver, oracleasm-support and oracleasmlib).
Install oracleasm-support from yum repository or from Linux media, then download oracleasmlib package form the following URL, and install.
http://www.oracle.com/technetwork/server-storage/linux/asmlib/ol7-2352094.html
Install oracleasm-support from yum repository or from Linux media, then download oracleasmlib package form the following URL, and install.
http://www.oracle.com/technetwork/server-storage/linux/asmlib/ol7-2352094.html
Install oracleasmlib and oracleasm-support
[root@salman1 ~]# yum install oracleasm-support
[root@salman1 ~]# rpm -i oracleasm-lib*
Configure oracleasm (highlighted in red are the inputs during configuration)
[root@salman1 ~]# /etc/init.d/oracleasm configure
Configuring the Oracle ASM library driver.
This will configure the on-boot properties of the Oracle ASM library
driver. The following questions will determine whether the driver is
loaded on boot and what permissions it will have. The current values
will be shown in brackets ('[]'). Hitting <ENTER> without typing an
answer will keep that current value. Ctrl-C will abort.
Default user to own the driver interface []: grid
Default group to own the driver interface []: asmadmin
Scan for Oracle ASM disks on boot (y/n) [y]:y
Writing Oracle ASM library driver configuration: done
Initializing the Oracle ASMLib driver: [ OK ]
Scanning the system for Oracle ASMLib disks: [ OK ]
Check Configuration
[root@salman1 ~]# /usr/sbin/oracleasm configure
ORACLEASM_UID=grid
ORACLEASM_GID=asmadmin
ORACLEASM_SCANBOOT=true
ORACLEASM_SCANORDER=""
ORACLEASM_SCANEXCLUDE=""
ORACLEASM_USE_LOGICAL_BLOCK_SIZE="false"
|
10)
On each node, add following in /etc/pam.d/login file if not present already
On each node, add following in /etc/pam.d/login file if not present already
session required /lib64/security/pam_limits.so
session required pam_limits.so |
11)
On each node, stop and disable NTP (chronyd)
During the installation, Cluster Time Synchronization Service would be installed and used instead or NTP.
On each node, stop and disable NTP (chronyd)
During the installation, Cluster Time Synchronization Service would be installed and used instead or NTP.
[root@salman1 ~]# systemctl stop chronyd
[root@salman1 ~]# systemctl disable chronyd
rm '/etc/systemd/system/multi-user.target.wants/chronyd.service' |
12)
On each node, make sure /etc/resolv.conf file contain entries similar to the following. Replace salman.com with your domain name and 192.231.231.1 with your names server IP address
On each node, make sure /etc/resolv.conf file contain entries similar to the following. Replace salman.com with your domain name and 192.231.231.1 with your names server IP address
search salman.com
nameserver 192.231.231.1
|
13)
On each nodee, install cvuqdisk RPM
This is required for cluvfy (Cluster Verification Utility) to work properly to discover shared disks, otherwise an error will be reported while running cluvfy. Log in as root and execute following steps
On each nodee, install cvuqdisk RPM
This is required for cluvfy (Cluster Verification Utility) to work properly to discover shared disks, otherwise an error will be reported while running cluvfy. Log in as root and execute following steps
Set the environment variable CVUQDISK_GRP to point to the group what will own cvuqdisk, which is oinstall group
[root@salman1 ~]# export CVUQDISK_GRP=oinstall
Install cvuqdisk which will be found under unzipd Grid Infrastructure software
[root@salman1 ~]# cd /u02/12.1.0.2/grid/rpm [root@salman1 ~]# rpm –i cvuqdisk-1.0.9-1.rpm |
14)
On each node, create directories and change ownership to respective users (grid and oracle).
On each node, create directories and change ownership to respective users (grid and oracle).
[root@salman1 ~]# mkdir -p /u01/app/12.1.0/grid
[root@salman1 ~]# mkdir -p /u01/app/grid
[root@salman1 ~]# mkdir -p /u01/app/oracle
[root@salman1 ~]# chown -R grid:oinstall /u01
[root@salman1 ~]# chown oracle:oinstall /u01/app/oracle
[root@salman1 ~]# chmod -R 775 /u01/
|
15)
From any node, partition the shared disks. As stated in the beginning, I have total 4 disks - 3 for OCR and Voting disk, and 1 for DATA diskgroup. Highlighted disks are the disks I will be using here to create partitions and then creating ASM disks using oracleasm.
From any node, partition the shared disks. As stated in the beginning, I have total 4 disks - 3 for OCR and Voting disk, and 1 for DATA diskgroup. Highlighted disks are the disks I will be using here to create partitions and then creating ASM disks using oracleasm.
[root@salman1 ~]# ls -l /dev/sd*
brw-rw----. 1 root disk 8, 0 Apr 7 11:38 /dev/sda
brw-rw----. 1 root disk 8, 1 Apr 7 11:38 /dev/sda1
brw-rw----. 1 root disk 8, 2 Apr 7 11:38 /dev/sda2
brw-rw----. 1 root disk 8, 3 Apr 7 11:38 /dev/sda3
brw-rw----. 1 root disk 8, 4 Apr 7 11:38 /dev/sda4
brw-rw----. 1 root disk 8, 5 Apr 7 11:38 /dev/sda5
brw-rw----. 1 root disk 8, 16 Apr 7 11:38 /dev/sdb
brw-rw----. 1 root disk 8, 17 Apr 7 11:38 /dev/sdb1
brw-rw----. 1 root disk 8, 32 Apr 7 11:38 /dev/sdc
brw-rw----. 1 root disk 8, 48 Apr 7 11:38 /dev/sdd
brw-rw----. 1 root disk 8, 64 Apr 7 11:38 /dev/sde
brw-rw----. 1 root disk 8, 80 Apr 7 11:38 /dev/sdf
|
Use following steps to partition each disk (/dev/sdc, /dev/sdd, /dev/sde, /dev/sdf).
[root@salman1 ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x457c3565.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-25165823, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-25165823, default 25165823):
Using default value 25165823
Partition 1 of type Linux and of size 12 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
|
For simplicity, after executing command fdisk for each disk, press following sequence keys
n, p, 1, <enter>, <enter>, w to create new partitions for each disk
After the partitioning completes, following are my partitioned disks
n, p, 1, <enter>, <enter>, w to create new partitions for each disk
After the partitioning completes, following are my partitioned disks
[root@salman1 ~]# ls -l /dev/sd*
…
…
…
brw-rw----. 1 root disk 8, 32 Apr 7 12:04 /dev/sdc
brw-rw----. 1 root disk 8, 33 Apr 7 12:04 /dev/sdc1
brw-rw----. 1 root disk 8, 48 Apr 7 12:08 /dev/sdd
brw-rw----. 1 root disk 8, 49 Apr 7 12:08 /dev/sdd1
brw-rw----. 1 root disk 8, 64 Apr 7 12:08 /dev/sde
brw-rw----. 1 root disk 8, 65 Apr 7 12:08 /dev/sde1
brw-rw----. 1 root disk 8, 80 Apr 7 12:08 /dev/sdf
brw-rw----. 1 root disk 8, 81 Apr 7 12:08 /dev/sdf1
|
16)
From any node, use oracleasm command to create ASM disks.
From any node, use oracleasm command to create ASM disks.
[root@salman1 ~]# oracleasm createdisk crs1 /dev/sdc1
Writing disk header: done
Instantiating disk: done
[root@salman1 ~]# oracleasm createdisk crs2 /dev/sdd1
Writing disk header: done
Instantiating disk: done
[root@salman1 ~]# oracleasm createdisk crs3 /dev/sde1
Writing disk header: done
Instantiating disk: done
[root@salman1 ~]# oracleasm createdisk data /dev/sdf1
Writing disk header: done
Instantiating disk: done
[root@salman1 ~]#
[root@salman1 sys]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@salman1 sys]# oracleasm listdisks
CRS1
CRS2
CRS3
DATA
|
Execute “oracleasm scandisks” and “oracleasm listdisks” command on all other nodes also and you should be able to see all the ASM disks.
From the other node(s), issue following as root
From the other node(s), issue following as root
[root@salman2 ~]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
[root@salman2 ~]# oracleasm listdisks
CRS1
CRS2
CRS3
DATA
|
17)
On each node, add IO scheduler for ASM disks. Modify highlighted disks names to match your environment.
[root@salman1 ~]# echo deadline > /sys/block/sdc/queue/scheduler
[root@salman1 ~]# echo deadline > /sys/block/sdd/queue/scheduler
[root@salman1 ~]# echo deadline > /sys/block/sde/queue/scheduler
[root@salman1 ~]# echo deadline > /sys/block/sdf/queue/scheduler
|
18)
On each node, add following in /home/<username>/.bash_profile file of both users; “grid” and “oracle”. At this point, we do no need to set other environment variables i.e. ORACLE_BASE or ORACLE_HOME.
On each node, add following in /home/<username>/.bash_profile file of both users; “grid” and “oracle”. At this point, we do no need to set other environment variables i.e. ORACLE_BASE or ORACLE_HOME.
umask 022
|
19)
Run cluvfy (Optional)
In the node where you plan to initiate the installation, open a terminal and log in as “grid” user, and you can optionally execute cluster verification utility (cluvfy). Click here to see the output of cluvfy
Run cluvfy (Optional)
In the node where you plan to initiate the installation, open a terminal and log in as “grid” user, and you can optionally execute cluster verification utility (cluvfy). Click here to see the output of cluvfy
[grid@salman1 ~]$ cd /u02/12.1.0.2/grid/
[grid@salman1 ~]$ ./runcluvfy.sh stage -pre crsinst -n salman1 -fixup -verbose
|
This will fail if user equivalence (passwordless ssh login) has not been configured from each node to other node. Passwordless login using ssh is also optional at this point, because installer will allow us to configure user equivalence during the installation wizard as you will see in a while. To learn how to configure SSH connectivity prior to the installation, click here
20)
Choose any node form where you want to initiate the installation and log in as installation user (“grid” in this example). You would choose desktop logging in to the server. If you did not install any desktop environment, use X Window System.
Choose any node form where you want to initiate the installation and log in as installation user (“grid” in this example). You would choose desktop logging in to the server. If you did not install any desktop environment, use X Window System.
21)
Start installation from the extracted software directory (/u02/12.1.0.2/grid), execute “./runInstaller” to begin the installation
22)
Start installation from the extracted software directory (/u02/12.1.0.2/grid), execute “./runInstaller” to begin the installation
22)
23)
Click Next
24)
Select “Advance Installation” and click Next
25)
Click Next
Click Next
26)
Change Cluster Name and SCAN name and SCAN Port, if needed. Make sure that SCAN Name is same as specified in /etc/host file. Uncheck “Configure GNS”. Click Next
Change Cluster Name and SCAN name and SCAN Port, if needed. Make sure that SCAN Name is same as specified in /etc/host file. Uncheck “Configure GNS”. Click Next
27)
You will see only first node (where you initiated installation) here. Click Add to open a window to provide details of the second node. You would need to add details of every node in your RAC environment by clicking Add button.
Click SSH Connectivity. If you have already done SSH configuration for passwordless login to the remote node(s), you should skip next setup.
You will see only first node (where you initiated installation) here. Click Add to open a window to provide details of the second node. You would need to add details of every node in your RAC environment by clicking Add button.
Click SSH Connectivity. If you have already done SSH configuration for passwordless login to the remote node(s), you should skip next setup.
28)
After clicking SSH Connectivity, you will see text boxes to provide username (grid) and password to setup SSH connectivity. Provide password and click on Setup button. It will take a few seconds to configure the SSH.
After clicking SSH Connectivity, you will see text boxes to provide username (grid) and password to setup SSH connectivity. Provide password and click on Setup button. It will take a few seconds to configure the SSH.
29)
Once SSH configuration completes, click OK, then click Next
Once SSH configuration completes, click OK, then click Next
30)
Select correct network interfaces for Public and Private interconnects and click Next
Select correct network interfaces for Public and Private interconnects and click Next
31)
Click Next
Click Next
32)
Provide diskgroup name. I am providing CRS as I would store OCR and Voting disk on this diskgroup. I am also selecting “External” redundancy. If your disks are not already mirrored, you should use either Normal (minimum 2 disks required) or High redundancy (minimum 3 disks required) to safeguard against disks failure. Select ASM disks to be part of this diskgroup.
Provide diskgroup name. I am providing CRS as I would store OCR and Voting disk on this diskgroup. I am also selecting “External” redundancy. If your disks are not already mirrored, you should use either Normal (minimum 2 disks required) or High redundancy (minimum 3 disks required) to safeguard against disks failure. Select ASM disks to be part of this diskgroup.
33)
Provide password for user SYS (SYSASM) and click Next
Provide password for user SYS (SYSASM) and click Next
34)
Click Next
Click Next
35)
Click Next
Click Next
36)
Click Next
Click Next
37)
If required, modify the paths based on the directories created in a previous step. Or you can go ahead with the default locations. Click Next
If required, modify the paths based on the directories created in a previous step. Or you can go ahead with the default locations. Click Next
38)
Click Next
Click Next
39)
Select this option if you want the required scripts to be executed automatically by OUI rather than prompting you to execute the scripts as “root”, during the installation.
Select this option if you want the required scripts to be executed automatically by OUI rather than prompting you to execute the scripts as “root”, during the installation.
40)
If you see fail/warning for any prerequisite check, fix it before clicking Next. In my case, I am ignoring all of them because of the following reasons.
i) I am using virtual Box with 2G RAM, so I ignored Physical Memory Warning
ii) I am not using DNS, so I ignored resolv.conf failure
iii) I am not using DNS, so I ignored DNS/NIS failure
iv) I am also ignoring /dev/shm as my /dev/shm is already set to 8G which is not recognized by the cluvfy because of a bug in cluvfy shipped with 12.1.0.2 Grid Infrastructure software. Click here for more details on cluvfy
Click Next
If you see fail/warning for any prerequisite check, fix it before clicking Next. In my case, I am ignoring all of them because of the following reasons.
i) I am using virtual Box with 2G RAM, so I ignored Physical Memory Warning
ii) I am not using DNS, so I ignored resolv.conf failure
iii) I am not using DNS, so I ignored DNS/NIS failure
iv) I am also ignoring /dev/shm as my /dev/shm is already set to 8G which is not recognized by the cluvfy because of a bug in cluvfy shipped with 12.1.0.2 Grid Infrastructure software. Click here for more details on cluvfy
Click Next
41)
Click Install button to start installation
Click Install button to start installation
42)
Installer will prompt for the permission to execute the scripts as root. Click Yes
Installer will prompt for the permission to execute the scripts as root. Click Yes
43)
Installation completed. I see one error here and that is because of cluvfy execution failure during post installation steps. Reason of cluvfy failure is same as I explained above in step 40 above, so I just clicked OK to close the box.
Installation completed. I see one error here and that is because of cluvfy execution failure during post installation steps. Reason of cluvfy failure is same as I explained above in step 40 above, so I just clicked OK to close the box.
44)
Click Yes
Click Yes
45)
Click Close, installation has successfully completed.
Click Close, installation has successfully completed.
46)
On both nodes, add following environment variables in .bash_profile file. On node2, ORACLE_SID value should be +ASM2, and so on.
On both nodes, add following environment variables in .bash_profile file. On node2, ORACLE_SID value should be +ASM2, and so on.
##grid user environment variables
ORACLE_SID=+ASM1; export ORACLE_SID
ORACLE_BASE=/u01/app/grid; export ORACLE_BASE
ORACLE_HOME=/u01/app/12.1.0/grid; export ORACLE_HOME
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib; export CLASSPATH
export TEMP=/tmp
export TMPDIR=/tmp
|
47)
Check health of CRS. All seems OK and working properly
Check health of CRS. All seems OK and working properly
[grid@salman2 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.asm
ONLINE ONLINE salman1 Started,STABLE
ONLINE ONLINE salman2 Started,STABLE
ora.net1.network
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.ons
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE salman1 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE salman1 169.254.93.149
10.1.10.10,STABLE
ora.cvu
1 ONLINE ONLINE salman1 STABLE
ora.mgmtdb
1 ONLINE ONLINE salman1 Open,STABLE
ora.oc4j
1 ONLINE ONLINE salman1 STABLE
ora.salman1.vip
1 ONLINE ONLINE salman1 STABLE
ora.salman2.vip
1 ONLINE ONLINE salman2 STABLE
ora.scan1.vip
1 ONLINE ONLINE salman1 STABLE
--------------------------------------------------------------------------------
[grid@salman2 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node salman1
[grid@salman2 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node salman1
|
48)
Installing Database software
Before we start database software installation, first we create a diskgroup DATA which will be used to store the database; we will be creating during the database software installation.
Open a terminal and log in as OS user “grid”. Now use SQLPLUS to log into the ASM instance with SYSASM privileges, and then create the diskgroup DATA
Installing Database software
Before we start database software installation, first we create a diskgroup DATA which will be used to store the database; we will be creating during the database software installation.
Open a terminal and log in as OS user “grid”. Now use SQLPLUS to log into the ASM instance with SYSASM privileges, and then create the diskgroup DATA
[grid@salman1 ~]$ sqlplus
SQL*Plus: Release 12.1.0.2.0 Production on Mon Apr 20 12:11:05 2015
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Enter user-name: sys as sysasm
Enter password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> select name, path from v$asm_disk;
NAME PATH
------------------------------ ----------------------------------------------------------------------------------
ORCL:DATA
CRS1 ORCL:CRS1
CRS2 ORCL:CRS2
CRS3 ORCL:CRS3
Compatibility for ASM and RDBMS should be specified, otherwise it would default to 10.1.0.0.0 and we will not be able to store 12c database files on it.
SQL> create diskgroup DATA external redundancy disk 'ORCL:DATA' ATTRIBUTE
'compatible.asm'='12.1.0.0.0' , 'compatible.rdbms'='12.1.0.0.0';
Diskgroup created.
If you created this diskgroup from node1, use srvctl command to start this new disk resource on all other nodes
[grid@salman1 ~]$ srvctl start diskgroup -diskgroup DATA -node salman2 |
Since I am using 2 different OS users here, from any node, log in as user “oracle” by using either XWindow or Linux desktop, and initiate installation from the directory where database software has already been extracted.
[oracle@salman1 database]$cd /u02/12.1.02/database
[oracle@salman1 database]$cd /u02/12.1.02/database
[oracle@salman1 database]$./runInstaller
Click Next
49) I want a new database to be created during the installation. Click Next.
50)
I selected Server class database. Click Next
49) I want a new database to be created during the installation. Click Next.
50)
I selected Server class database. Click Next
51)
We will be doing RAC database installation so that software is installed on all the RAC nodes. Click Next
52)
Click Next
53)
By default all nodes are selected for database software installation, click on “SSH Connectivity” button as previously done during Grid infrastructure installation and configure the SSH connectivity before moving forward. This time SSH will be configured for “oracle” user. Once configured, click Next
By default all nodes are selected for database software installation, click on “SSH Connectivity” button as previously done during Grid infrastructure installation and configure the SSH connectivity before moving forward. This time SSH will be configured for “oracle” user. Once configured, click Next
54)
Click Next
55)
Click Next
56)
Click Next
57)
Modify paths if required, click Next
58)
Select database type which you want to create, click Next
59)
Provide database name and also check the checkbox if you want it to be a container database
60)
Specify memory allocation details for the database instances, click Next
61)
Select “Oracle Automatic Storage Management” as we already have an ASM disk created to store the database.
62)
Click Next
Click Next
63)
Click Next
Click Next
64)
Select diskgroup which we created to store the database files, click Next
Select diskgroup which we created to store the database files, click Next
65)
Specify the passwords for administrator users, click Next
Specify the passwords for administrator users, click Next
66)
Click Next
Click Next
67)
On last screen, I see 4 warnings which I can ignore because of following reasons.
i) Since I am not using namesserver, I faced warning number 1 and 2, so I can ignore both
ii) Just like during Grid Infrastructure installation, OUI had an issue in recognizing actual value of my /dev/shm files system, same happened here, so I can ignore it.
iii) Limits for oracle user are already set in /etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf which can be confirmed using “ulimit –a” command, but OUI is checking /etc/security/limits.conf file for limits, so I can ignore this warning also. Click Next
i) Since I am not using namesserver, I faced warning number 1 and 2, so I can ignore both
ii) Just like during Grid Infrastructure installation, OUI had an issue in recognizing actual value of my /dev/shm files system, same happened here, so I can ignore it.
iii) Limits for oracle user are already set in /etc/security/limits.d/oracle-rdbms-server-12cR1-preinstall.conf which can be confirmed using “ulimit –a” command, but OUI is checking /etc/security/limits.conf file for limits, so I can ignore this warning also. Click Next
68)
Click Install
69)
During the installation, you will be prompted to execute the root.sh on both nodes as root. When prompted, executed on both nodes one by one, click OK to close the box so that installation could proceed further.
70)
Database Creation Assistant would initiate to create the database
71)
Click OK to close the prompt after database creation completes.
72)
Click Close.
73)
Add following environment variables setting in .bash_profile of “oracle” user, on both nodes. Modify value of ORACLE_SID for each node accordingly
ORACLE_SID=salmandb1; export ORACLE_SID
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1; export ORACLE_HOME
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=$ORACLE_HOME/bin:$PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib; export CLASSPATH
export TEMP=/tmp
export TMPDIR=/tmp
|
74)
RAC Installation completes successfully. Check the status of all resources and database instances
[grid@salman1 ~]$ crsctl stat res -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRS.dg
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.DATA.dg
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.LISTENER.lsnr
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.asm
ONLINE ONLINE salman1 Started,STABLE
ONLINE ONLINE salman2 Started,STABLE
ora.net1.network
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
ora.ons
ONLINE ONLINE salman1 STABLE
ONLINE ONLINE salman2 STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE salman1 STABLE
ora.MGMTLSNR
1 ONLINE ONLINE salman1 169.254.93.149,STABL
E
ora.cvu
1 ONLINE ONLINE salman1 STABLE
ora.mgmtdb
1 ONLINE ONLINE salman1 Open,STABLE
ora.oc4j
1 ONLINE ONLINE salman1 STABLE
ora.salman1.vip
1 ONLINE ONLINE salman1 STABLE
ora.salman2.vip
1 ONLINE ONLINE salman2 STABLE
ora.asm
ONLINE ONLINE salman1 Started,STABLE
ONLINE ONLINE salman2 Started,STABLE
ora.scan1.vip
1 ONLINE ONLINE salman1 STABLE
--------------------------------------------------------------------------------
[grid@salman1 ~]$ srvctl status database -d salmndb
Instance salmndb1 is running on node salman1
Instance salmndb2 is running on node salman2
|
Hello Salman,
ReplyDeleteCan you explain to the setup of point 5?
As on both VM(s) ORA1 and ORA2 you activated only two network adapters.
One NAT and one Host Only type.
Do you have the setup in writing for both the VM(s) ORA1 and ORA2?
Thx,
Anibal
Hi Anibal, Sorry for replying you late.
ReplyDeleteDid you see my post on how to create Virtual machines, if not, please see bellow.
http://salmandba.blogspot.sg/2015/05/creating-virtual-machine-using-oracle.html
For RAC, you can add 2 host only adapters, one for public and virtual and other for private interconnect. Above document also explains how to add the adapters to your VMs
Salma
hi Salman....i following your thread to configure RAC 12c in VM. i facing ASM related problem.
ReplyDeletebelow is the error.
ASM failed to start. Check /u02/app/grid/cfgtoollogs/asmca/asmca-150912AM015433.log for details.
2015/09/12 01:56:54 CLSRSC-184: Configuration of ASM failed
2015/09/12 01:56:54 CLSRSC-258: Failed to configure and start ASM
Died at /u02/app/12.1.0/grid_1/crs/install/crsinstall.pm line 2017.
The command '/u02/app/12.1.0/grid_1/perl/bin/perl -I/u02/app/12.1.0/grid_1/perl/lib -I/u02/app/12.1.0/grid_1/
crs/install /u02/app/12.1.0/grid_1/crs/install/rootcrs.pl -auto -lang=en_US.UTF-8' execution failed
can u pls help me to resolve this issue.
Thank you in advance
Hi Baljinder,
ReplyDeleteDid you run cluvfy before installation and was it successful?
This message is just showing that asm configuration failed, not the detail of it. Can you check installation logs for more details of error?
Hi Salman,
ReplyDeleteThank you so much for your promptly response. i really appreciate you. bro i already run cluvfy there was no issue like that.
laters i deconfig the failed Root.sh configuration and created ASM disks again and now it's working fine.
Thanks again.
Good to know that it is working for you now. Best of luck.
DeleteVery Clear , detailed and really helpful. Inspired from you . Thanks for your knowledge sharing
ReplyDeleteHello Salam,
ReplyDeleteThe steps that you describes are very clear and detailed. Good work.
Thank you a lot.
Domenico
Hi Salman,
ReplyDelete./runInstaller is not working for me on Linux 7. How can I solve this problem. The problem is with the display.
Please help.
Thanks,
Surya
Hi,
DeleteI usually install Linux desktop. But if you dont have, then install any X server ( I use xming). See bellow link for how to configure xming
https://www.uaf.edu/arsc/knowledge-base/using-xming-x-server-for-/index.xml
Hi Salman,
ReplyDeleteYes, I have the desktop Linux. I feel like I missed something while doing the install.
I used to run this command as root in Oracle Linux 6 and ./runInstaller always worked after that, but in Linux 7 its not.
#xhost + SI:localuser:oracle
I am talking about the desktop environment of Linux. If you have desktop environment installed, you need to log into the desktop with "oracle" (just like windows) user and initiate the installer. I think you would need to fix your Linux side. Installation log file may also show you any related error message.
DeleteHi Salman,
DeleteThank you. Will try that.
Hi Salman,
ReplyDeleteAppreciate your efforts for the Blog,
I have just one concern why have u selected OCR with "EXTERNAL" (3 Disk) redundancy should it not be "NORMAL" ??
Hi Goku,
DeleteIf we already have mirrored disk, we can select External Redundancy. I would edit this document and add further detail on why I am using External Redundancy here. Thanks for pointing out.
Salman
Hi Salman,
DeleteThanks for your response, I also request you to just put a note if you have come across any bugs in installation
Hi,
DeleteI did not come across any bugs during this installation.
Salman
Hi salman,
ReplyDeleteWere are we mentioning port in the process. I followed your steps and every thing went good and default port 1521 was setup. But suppose if i want to use a different port, where i need to do that?
Thanks
Hi Teja,
DeletePlease use this document for changing ports of listeners/scan listeners
http://salmandba.blogspot.sg/2016/03/changing-listener-and-scan-listener.html
Salman
Hi salman,
ReplyDeletewhat configuration did you do for Ethernet (enp0s8) looks like there is no detail on it
In this installation, enp0s8 is the name of private network interface. You need to assign private IP address to this network interface on all nodes. No other configuration is needed.
Delete