Warning before proceeding make sure you have at least 6Gb or more ram otherwise your
installation will not work.
Virtual Machine 1 configuration
Guest OS - RHEL 5.4
Name - rac1
Public I/P eth0 - 192.168.1.100
Interconnect I/P eth1 - 192.168.2.100
memory - 2GB
Disk space - 30GB
Location - C:\11gRAC\rac1\
Virtual Machine 2 configuration
Guest OS - RHEL 5.4
Name - rac2
Public I/P eth0 - 192.168.1.200
Interconnect I/P eth1 - 192.168.2.200
memory - 2GB
Disk space - 30GB
Location - C:\11gRAC\rac2\
Shared Storage configuration
Voting Disk + OCR
"C:\11gRAC\shared\Disk1" size 2GB
"C:\11gRAC\shared\Disk2" size 2GB
"C:\11gRAC\shared\Disk3" size 2GB
Database Storage
"C:\11gRAC\shared\Disk4" size 12GB
"C:\11gRAC\shared\Disk5" size 12GB
Flash Recovery Area
"C:\11gRAC\shared\Disk6" size 12GB
"C:\11gRAC\shared\Disk7" size 12GB
Create two virtual machines in vmware.
Sample configuration for first machine.
Screen name Configuration
select appropriate configuration ->select (custom)
virtual machine hardware compatibilty ->6.5-7x
Guest operating system installation ->I will install the operating system later
select a guest operating system ->linux -> Red Hat Enterprise Linux 5
Name the virtual machine name ->rac1 location -> C:\11gRAC\rac1\
Processor Configuration Number of processors ->1 Number of cores per processor ->1
Memory ->2048
Network type ->Use briged networking
I/O controller types ->defaults
select a disk ->create a new virtual disk
disk type ->SCSI
maximum disk size ->30GB
Disk file ->C:\11gRAC\rac1\rac1.vmdk
click on customize hardware -> remove floppy
remove sound card
Cd/DvD - Use ISO if you have image or use physical drive.
Add network card ->click on add ->Network Adapter->Bridged-> finish
click (close) then click (finish)
Linux installation steps
click on power on
Boot screen hit enter
Test Cd skip
Welcome click(next)
Language next
keyboard next
installation number skip entering installation number
Warning would you like to intialize this drive, erasing ALL DATA - yes
Disk Partition create custom layout
Partitions
/boot ext3 100
swap 4096
/ ext3 25000
click(next)
Grub configuration click(next)
network configuration
eth0
untick enable ipv6 configuration
in IPv4 select manual configuration
192.168.1.100 255.255.255.0
click(ok)
eth1
untick enable ipv6 configuration
in IPv4 select manual configuration
192.168.2.100 255.255.255.0
click(ok)
Hostname - rac1.example.com
Gateway 192.168.1.1
Map - choose your country and city
untick system clock uses UTC
password for root
Package selection customize now
packages to install
Desktop Environment
Gnome
Applications
Editors
Graphical internet
Text-based Internet
Development
Develoment libraries
Development Tools
Legacy Software development
Servers
Server Configuration Tools
Base system
administration Tools
base
java
legacy software support
system tools
X window system
About to install - click(next)
Post installation
welcome - next
firewall - disabled
selinux - disabled
kdump - next
date and time - next
create user - next
sound card - next
additional CDs - next
reboot system - ok
Rpms to be installed
binutils-2.17.50.0.6
compat-libstdc++33*
elfutils-libelf*
elfutils-libelf-devel*
elfutils-libelf-devel-static*
gcc-4*
gcc-c++*
glibc-2*
glibc-common*
glibc-devel*
glibc-headers*
kernel-headers-2*
ksh*
libaio*
libaio-devel*
libgcc*
libgomp*
libstdc++*
libstdc++-devel*
make*
pdksh*
sysstat*
unixODBC*
unixODBC-devel
Configure DNS on NODE 1
yum install -y *bind* caching-nameserver
[root@rac1 ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:0C:29:C7:15:90
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fec7:1590/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1787 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:142477 (139.1 KiB) TX bytes:8809 (8.6 KiB)
Interrupt:67 Base address:0x2424
[root@rac1 ~]# cd /var/named/chroot/etc/
[root@rac1 etc]# cp named.caching-nameserver.conf named.conf
Sample named.conf file
[root@rac1 etc]# vi named.conf
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver package to configure the
// ISC BIND named(8) DNS server as a caching only nameserver
// (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
options {
listen-on port 53 { 192.168.1.100; };
# listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// Those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;
allow-query { any; };
allow-query-cache { any; };
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients { any; };
match-destinations { 192.168.1.100; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
[root@rac1 etc]# vi named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
zone "." IN {
type hint;
file "named.ca";
};
zone "example.com" IN {
type master;
file "forward.zone";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "reverse.zone";
allow-update { none; };
};
zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};
zone "255.in-addr.arpa" IN {
type master;
file "named.broadcast";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.zero";
allow-update { none; };
};
[root@rac1 etc]# chgrp named named.conf
[root@rac1 etc]# cd /var/named/chroot/var/named/
[root@rac1 named]# cp localdomain.zone forward.zone
[root@rac1 named]# cp named.local reverse.zone
[root@rac1 named]# vi forward.zone
$TTL 86400
@ IN SOA rac1.example.com. root.example.com. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS rac1.example.com.
rac1 IN A 192.168.1.100
[root@rac1 named]# vi reverse.zone
$TTL 86400
@ IN SOA rac1.example.com. root.rac1.example.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS rac1.example.com.
100 IN PTR rac1.example.com.
[root@rac1 named]# chgrp named forward.zone
[root@rac1 named]# chgrp named reverse.zone
[root@rac1 named]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.1.100 rac1.example.com rac1
Insert into all the nodes.
[root@rac1 named]# cat /etc/resolv.conf
search example.com
nameserver 192.168.1.100
In Rac1
[root@rac1 named]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac1.example.com
In Rac2
[root@rac2 named]# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=rac2.example.com
[root@rac1 named]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
Execute from both Nodes
[root@rac1 named]# dig rac1.example.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> rac1.example.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2650
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;rac1.example.com. IN A
;; ANSWER SECTION:
rac1.example.com. 86400 IN A 192.168.1.100
;; AUTHORITY SECTION:
example.com. 86400 IN NS rac1.example.com.
;; Query time: 4 msec
;; SERVER: 192.168.1.100#53(192.168.1.100)
;; WHEN: Tue Aug 28 22:56:32 2012
;; MSG SIZE rcvd: 64
[root@rac2 ~]# dig -x 192.168.1.100
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -x 192.168.1.100
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64577
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;100.1.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
100.1.168.192.in-addr.arpa. 86400 IN PTR rac1.example.com.
;; AUTHORITY SECTION:
1.168.192.in-addr.arpa. 86400 IN NS rac1.example.com.
;; ADDITIONAL SECTION:
rac1.example.com. 86400 IN A 192.168.1.100
;; Query time: 3 msec
;; SERVER: 192.168.1.100#53(192.168.1.100)
;; WHEN: Tue Aug 28 23:04:13 2012
;; MSG SIZE rcvd: 104
[root@rac2 ~]# nslookup rac1.example.com
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: rac1.example.com
Address: 192.168.1.100
[root@rac2 ~]# nslookup 192.168.1.100
Server: 192.168.1.100
Address: 192.168.1.100#53
100.1.168.192.in-addr.arpa name = rac1.example.com.
Once your basic dns server is working do the following
append the following in /var/named/chroot/var/named/forward.zone
; Oracle RAC Nodes
rac1 IN A 192.168.1.100
rac2 IN A 192.168.1.200
rac1-priv IN A 192.168.2.100
rac2-priv IN A 192.168.2.200
rac1-vip IN A 192.168.1.251
rac2-vip IN A 192.168.1.252
; Single Client Access Name (SCAN) virtual IP
rac-cluster-scan IN A 192.168.1.150
rac-cluster-scan IN A 192.168.1.151
rac-cluster-scan IN A 192.168.1.152
Append the following in /var/named/chroot/var/named/reverse.zone
; Oracle RAC Nodes
100 IN PTR rac1.example.com.
200 IN PTR rac2.example.com.
251 IN PTR rac1-vip.example.com.
252 IN PTR rac2-vip.example.com.
; Single Client Access Name (SCAN) virtual IP
150 IN PTR rac-cluster-scan.example.com.
151 IN PTR rac-cluster-scan.example.com.
152 IN PTR rac-cluster-scan.example.com.
[root@rac1 named]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
[root@rac1 named]# chkconfig named on
[root@rac1 named]# chkconfig named --list
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Perform following tests on both nodes
nslookup rac1.example.com
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: rac1.example.com
Address: 192.168.1.100
nslookup rac2.example.com
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: rac2.example.com
Address: 192.168.1.200
nslookup rac1
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: rac1.example.com
Address: 192.168.1.100
nslookup rac2
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: rac2.example.com
Address: 192.168.1.200
nslookup 192.168.1.100
Server: 192.168.1.100
Address: 192.168.1.100#53
100.1.168.192.in-addr.arpa name = rac1.example.com.
nslookup 192.168.1.200
Server: 192.168.1.100
Address: 192.168.1.100#53
200.1.168.192.in-addr.arpa name = rac2.example.com.
nslookup rac-cluster-scan
Server: 192.168.1.100
Address: 192.168.1.100#53
Name: rac-cluster-scan.example.com
Address: 192.168.1.152
Name: rac-cluster-scan.example.com
Address: 192.168.1.150
Name: rac-cluster-scan.example.com
Address: 192.168.1.151
Append the following in /etc/hosts all the nodes.
# Public Network - (eth0)
192.168.1.100 rac1.example.com rac1
192.168.1.200 rac2.example.com rac2
# Private Interconnect - (eth1)
192.168.2.100 rac1-priv.example.com rac1-priv
192.168.2.200 rac2-priv.example.com rac2-priv
# Public Virtual IP (VIP) addresses - (eth0:1)
192.168.1.251 rac1-vip.example.com rac1-vip
192.168.1.252 rac2-vip.example.com rac2-vip
Sample /etc/hosts file in both the nodes.
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
# Public Network - (eth0)
192.168.1.100 rac1.example.com rac1
192.168.1.200 rac2.example.com rac2
# Private Interconnect - (eth1)
192.168.2.100 rac1-priv.example.com rac1-priv
192.168.2.200 rac2-priv.example.com rac2-priv
# Public Virtual IP (VIP) addresses - (eth0:1)
192.168.1.251 rac1-vip.example.com rac1-vip
192.168.1.252 rac2-vip.example.com rac2-vip
Execute the following commands from both nodes and verify connectivity.
ping -c 3 rac1.example.com
ping -c 3 rac2.example.com
ping -c 3 rac1-priv.example.com
ping -c 3 rac2-priv.example.com
ping -c 3 rac1
ping -c 3 rac2
ping -c 3 rac1-priv
ping -c 3 rac2-priv
Deconfigure NTP services on both nodes
/sbin/service ntpd stop
chkconfig ntpd off
mv /etc/ntp.conf /etc/ntp.conf.original
rm /var/run/ntpd.pid
Create necessary groups and users for Grid on both nodes
[root@rac1 ~]#groupadd -g 1000 oinstall
[root@rac1 ~]#groupadd -g 1200 asmadmin
[root@rac1 ~]#groupadd -g 1201 asmdba
[root@rac1 ~]#groupadd -g 1202 asmoper
[root@rac1 ~]#useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash -c "Grid Infrastructure Owner" grid
[root@rac1 ~]# id grid
uid=1100(grid) gid=1000(oinstall) groups=1000(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper)
Assign password to grid user on both nodes.
[root@rac1 ~]#passwd grid
Set Bash Profile for grid user on both nodes.
[root@rac1 ~]#su - grid
Replace the content in .bash_profile with the following of grid user on both nodes.
# ---------------------------------------------------
# .bash_profile
# ---------------------------------------------------
# OS User: grid
# Application: Oracle Grid Infrastructure
# Version: Oracle 11g Release 2
# ---------------------------------------------------
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
alias ls="ls -FA"
# ---------------------------------------------------
# ORACLE_SID
# ---------------------------------------------------
# Specifies the Oracle system identifier (SID)
# for the Automatic Storage Management (ASM)instance
# running on this node.
# Each RAC node must have a unique ORACLE_SID.
# (i.e. +ASM1, +ASM2,...)
# ---------------------------------------------------
ORACLE_SID=+ASM1; export ORACLE_SID
# ---------------------------------------------------
# JAVA_HOME
# ---------------------------------------------------
# Specifies the directory of the Java SDK and Runtime
# Environment.
# ---------------------------------------------------
JAVA_HOME=/usr/local/java; export JAVA_HOME
# ---------------------------------------------------
# GRID_BASE
# ---------------------------------------------------
# Specifies the base of the Oracle directory structure
# for Optimal Flexible Architecture (OFA) compliant
# installations. The Oracle base directory for the
# grid installation owner is the location where
# diagnostic and administrative logs, and other logs
# associated with Oracle ASM and Oracle Clusterware
# are stored.
# ---------------------------------------------------
GRID_BASE=/u01/app/grid; export GRID_BASE
ORACLE_BASE=$GRID_BASE; export ORACLE_BASE
# ---------------------------------------------------
# GRID_HOME
# ---------------------------------------------------
# Specifies the directory containing the Oracle
# Grid Infrastructure software. For grid
# infrastructure for a cluster installations, the Grid
# home must not be placed under one of the Oracle base
# directories, or under Oracle home directories of
# Oracle Database installation owners, or in the home
# directory of an installation owner. During
# installation, ownership of the path to the Grid
# home is changed to root. This change causes
# permission errors for other installations.
# ---------------------------------------------------
GRID_HOME=/u01/app/11.2.0/grid; export GRID_HOME
ORACLE_HOME=$GRID_HOME; export ORACLE_HOME
# ---------------------------------------------------
# ORACLE_PATH
# ---------------------------------------------------
# Specifies the search path for files used by Oracle
# applications such as SQL*Plus. If the full path to
# the file is not specified, or if the file is not
# in the current directory, the Oracle application
# uses ORACLE_PATH to locate the file.
# This variable is used by SQL*Plus, Forms and Menu.
# ---------------------------------------------------
ORACLE_PATH=/u01/app/oracle/dba_scripts/sql; export ORACLE_PATH
# ---------------------------------------------------
# SQLPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# SQL*Plus searches for a login.sql file.
# ---------------------------------------------------
# SQLPATH=/u01/app/oracle/dba_scripts/sql; export SQLPATH
# ---------------------------------------------------
# ORACLE_TERM
# ---------------------------------------------------
# Defines a terminal definition. If not set, it
# defaults to the value of your TERM environment
# variable. Used by all character mode products.
# ---------------------------------------------------
ORACLE_TERM=xterm; export ORACLE_TERM
# ---------------------------------------------------
# NLS_DATE_FORMAT
# ---------------------------------------------------
# Specifies the default date format to use with the
# TO_CHAR and TO_DATE functions. The default value of
# this parameter is determined by NLS_TERRITORY. The
# value of this parameter can be any valid date
# format mask, and the value must be surrounded by
# double quotation marks. For example:
#
# NLS_DATE_FORMAT = "MM/DD/YYYY"
#
# ---------------------------------------------------
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
# ---------------------------------------------------
# TNS_ADMIN
# ---------------------------------------------------
# Specifies the directory containing the Oracle Net
# Services configuration files like listener.ora,
# tnsnames.ora, and sqlnet.ora.
# ---------------------------------------------------
TNS_ADMIN=$GRID_HOME/network/admin; export TNS_ADMIN
# ---------------------------------------------------
# ORA_NLS11
# ---------------------------------------------------
# Specifies the directory where the language,
# territory, character set, and linguistic definition
# files are stored.
# ---------------------------------------------------
ORA_NLS11=$GRID_HOME/nls/data; export ORA_NLS11
# ---------------------------------------------------
# PATH
# ---------------------------------------------------
# Used by the shell to locate executable programs;
# must include the $GRID_HOME/bin directory.
# ---------------------------------------------------
PATH=.:${JAVA_HOME}/bin:$JAVA_HOME/db/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/oracle/dba_scripts/bin
export PATH
# ---------------------------------------------------
# LD_LIBRARY_PATH
# ---------------------------------------------------
# Specifies the list of directories that the shared
# library loader searches to locate shared object
# libraries at runtime.
# ---------------------------------------------------
LD_LIBRARY_PATH=$GRID_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$GRID_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
# ---------------------------------------------------
# CLASSPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# contain compiled Java classes.
# ---------------------------------------------------
CLASSPATH=$GRID_HOME/JRE
CLASSPATH=${CLASSPATH}:$GRID_HOME/jdbc/lib/ojdbc6.jar
CLASSPATH=${CLASSPATH}:$GRID_HOME/jlib
CLASSPATH=${CLASSPATH}:$GRID_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/oc4j/ant/lib/ant.jar
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/oc4j/ant/lib/ant-launcher.jar
CLASSPATH=${CLASSPATH}:$JAVA_HOME/db/lib/derby.jar
CLASSPATH=${CLASSPATH}:$GRID_HOME/network/jlib
export CLASSPATH
# ---------------------------------------------------
# THREADS_FLAG
# ---------------------------------------------------
# All the tools in the JDK use green threads as a
# default. To specify that native threads should be
# used, set the THREADS_FLAG environment variable to
# "native". You can revert to the use of green
# threads by setting THREADS_FLAG to the value
# "green".
# ---------------------------------------------------
THREADS_FLAG=native; export THREADS_FLAG
# ---------------------------------------------------
# TEMP, TMP, and TMPDIR
# ---------------------------------------------------
# Specify the default directories for temporary
# files; if set, tools that create temporary files
# create them in one of these directories.
# ---------------------------------------------------
export TEMP=/tmp
export TMPDIR=/tmp
# ---------------------------------------------------
# UMASK
# ---------------------------------------------------
# Set the default file mode creation mask
# (umask) to 022 to ensure that the user performing
# the Oracle software installation creates files
# with 644 permissions.
# ---------------------------------------------------
umask 022
Make sure of setting for RAC1 ORACLE_SID=+ASM1; export ORACLE_SID
Make sure of setting for RAC2 ORACLE_SID=+ASM2; export ORACLE_SID
Activate the bash_profile on both nodes using
[grid@rac1 ~]$ . ./.bash_profile
Create necessary users and groups for Oracle software
[root@rac1 ~]#groupadd -g 1300 dba
[root@rac1 ~]#groupadd -g 1301 oper
[root@rac1 ~]#useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle
[root@rac1 ~]# id oracle
uid=1101(oracle) gid=1000(oinstall) groups=1000(oinstall),1201(asmdba),1300(dba),1301(oper)
Create password for oracle user
[root@rac1 ~]#passwd oracle
Set Bash Profile for oracle user on both nodes.
[root@rac1 ~]#su - oracle
Replace the content in .bash_profile with the following
# ---------------------------------------------------
# .bash_profile
# ---------------------------------------------------
# OS User: oracle
# Application: Oracle Database Software Owner
# Version: Oracle 11g Release 2
# ---------------------------------------------------
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
alias ls="ls -FA"
# ---------------------------------------------------
# ORACLE_SID
# ---------------------------------------------------
# Specifies the Oracle system identifier (SID) for
# the Oracle instance running on this node.
# Each RAC node must have a unique ORACLE_SID.
# (i.e. orcl1, orcl2,...)
# ---------------------------------------------------
ORACLE_SID=orcl1; export ORACLE_SID
# ---------------------------------------------------
# ORACLE_UNQNAME
# ---------------------------------------------------
# In previous releases of Oracle Database, you were
# required to set environment variables for
# ORACLE_HOME and ORACLE_SID to start, stop, and
# check the status of Enterprise Manager. With
# Oracle Database 11g Release 2 (11.2) and later, you
# need to set the environment variables ORACLE_HOME
# and ORACLE_UNQNAME to use Enterprise Manager.
# Set ORACLE_UNQNAME equal to the database unique
# name.
# ---------------------------------------------------
ORACLE_UNQNAME=orcl; export ORACLE_UNQNAME
# ---------------------------------------------------
# JAVA_HOME
# ---------------------------------------------------
# Specifies the directory of the Java SDK and Runtime
# Environment.
# ---------------------------------------------------
JAVA_HOME=/usr/local/java; export JAVA_HOME
# ---------------------------------------------------
# ORACLE_BASE
# ---------------------------------------------------
# Specifies the base of the Oracle directory structure
# for Optimal Flexible Architecture (OFA) compliant
# database software installations.
# ---------------------------------------------------
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
# ---------------------------------------------------
# ORACLE_HOME
# ---------------------------------------------------
# Specifies the directory containing the Oracle
# Database software.
# ---------------------------------------------------
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
# ---------------------------------------------------
# ORACLE_PATH
# ---------------------------------------------------
# Specifies the search path for files used by Oracle
# applications such as SQL*Plus. If the full path to
# the file is not specified, or if the file is not
# in the current directory, the Oracle application
# uses ORACLE_PATH to locate the file.
# This variable is used by SQL*Plus, Forms and Menu.
# ---------------------------------------------------
ORACLE_PATH=/u01/app/oracle/dba_scripts/sql:$ORACLE_HOME/rdbms/admin; export ORACLE_PATH
# ---------------------------------------------------
# SQLPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# SQL*Plus searches for a login.sql file.
# ---------------------------------------------------
# SQLPATH=/u01/app/oracle/dba_scripts/sql; export SQLPATH
# ---------------------------------------------------
# ORACLE_TERM
# ---------------------------------------------------
# Defines a terminal definition. If not set, it
# defaults to the value of your TERM environment
# variable. Used by all character mode products.
# ---------------------------------------------------
ORACLE_TERM=xterm; export ORACLE_TERM
# ---------------------------------------------------
# NLS_DATE_FORMAT
# ---------------------------------------------------
# Specifies the default date format to use with the
# TO_CHAR and TO_DATE functions. The default value of
# this parameter is determined by NLS_TERRITORY. The
# value of this parameter can be any valid date
# format mask, and the value must be surrounded by
# double quotation marks. For example:
#
# NLS_DATE_FORMAT = "MM/DD/YYYY"
#
# ---------------------------------------------------
NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"; export NLS_DATE_FORMAT
# ---------------------------------------------------
# TNS_ADMIN
# ---------------------------------------------------
# Specifies the directory containing the Oracle Net
# Services configuration files like listener.ora,
# tnsnames.ora, and sqlnet.ora.
# ---------------------------------------------------
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
# ---------------------------------------------------
# ORA_NLS11
# ---------------------------------------------------
# Specifies the directory where the language,
# territory, character set, and linguistic definition
# files are stored.
# ---------------------------------------------------
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
# ---------------------------------------------------
# PATH
# ---------------------------------------------------
# Used by the shell to locate executable programs;
# must include the $ORACLE_HOME/bin directory.
# ---------------------------------------------------
PATH=.:${JAVA_HOME}/bin:$JAVA_HOME/db/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
PATH=${PATH}:/u01/app/oracle/dba_scripts/bin
export PATH
# ---------------------------------------------------
# LD_LIBRARY_PATH
# ---------------------------------------------------
# Specifies the list of directories that the shared
# library loader searches to locate shared object
# libraries at runtime.
# ---------------------------------------------------
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
# ---------------------------------------------------
# CLASSPATH
# ---------------------------------------------------
# Specifies the directory or list of directories that
# contain compiled Java classes.
# ---------------------------------------------------
CLASSPATH=$ORACLE_HOME/jdbc/lib/ojdbc6.jar
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/oc4j/ant/lib/ant.jar
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/oc4j/ant/lib/ant-launcher.jar
CLASSPATH=${CLASSPATH}:$JAVA_HOME/db/lib/derby.jar
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
# ---------------------------------------------------
# THREADS_FLAG
# ---------------------------------------------------
# All the tools in the JDK use green threads as a
# default. To specify that native threads should be
# used, set the THREADS_FLAG environment variable to
# "native". You can revert to the use of green
# threads by setting THREADS_FLAG to the value
# "green".
# ---------------------------------------------------
THREADS_FLAG=native; export THREADS_FLAG
# ---------------------------------------------------
# TEMP, TMP, and TMPDIR
# ---------------------------------------------------
# Specify the default directories for temporary
# files; if set, tools that create temporary files
# create them in one of these directories.
# ---------------------------------------------------
export TEMP=/tmp
export TMPDIR=/tmp
# ---------------------------------------------------
# UMASK
# ---------------------------------------------------
# Set the default file mode creation mask
# (umask) to 022 to ensure that the user performing
# the Oracle software installation creates files
# with 644 permissions.
# ---------------------------------------------------
umask 022
Make sure settin for rac1 should be ORACLE_SID=orcl1; export ORACLE_SID
Make sure settin for rac2 should be ORACLE_SID=orcl2; export ORACLE_SID
activate bash profile on both nodes
[oracle@rac1 ~]$ . ./.bash_profile
verify that user nobody exists on both nodes.
[root@rac1 ~]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)
Create directory structures on both nodes.
[root@rac1 ~]# mkdir -p /u01/app/grid
[root@rac1 ~]# mkdir -p /u01/app/11.2.0/grid
[root@rac1 ~]# chown -R grid:oinstall /u01
[root@rac1 ~]# mkdir -p /u01/app/oracle
[root@rac1 ~]# chown oracle:oinstall /u01/app/oracle
[root@rac1 ~]# chmod -R 775 /u01
Insert the following in /etc/security/limits.conf on both nodes.
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
Insert the following in /etc/pam.d/login on both nodes.
session required pam_limits.so
Append the following in root user /etc/profile on both nodes
if [ \$USER = "oracle" ] || [ \$USER = "grid" ]; then
if [ \$SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
Edit kernel parameters on both nodes /etc/sysctl.conf.
leave the fields for
kernel.shmall
kernel.shmmax
as it is and append the following values in /etc/sysctl.conf.
# Controls the maximum number of shared memory segments system wide
kernel.shmmni = 4096
# Sets the following semaphore values:
# SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value
kernel.sem = 250 32000 100 128
# Sets the maximum number of file-handles that the Linux kernel will allocate
fs.file-max = 6815744
# Defines the local port range that is used by TCP and UDP
# traffic to choose the local port
net.ipv4.ip_local_port_range = 9000 65500
# Default setting in bytes of the socket "receive" buffer which
# may be set by using the SO_RCVBUF socket option
net.core.rmem_default=262144
# Maximum setting in bytes of the socket "receive" buffer which
# may be set by using the SO_RCVBUF socket option
net.core.rmem_max=4194304
# Default setting in bytes of the socket "send" buffer which
# may be set by using the SO_SNDBUF socket option
net.core.wmem_default=262144
# Maximum setting in bytes of the socket "send" buffer which
# may be set by using the SO_SNDBUF socket option
net.core.wmem_max=1048576
# Maximum number of allowable concurrent asynchronous I/O requests
fs.aio-max-nr=1048576
Activate kernel settings on both nodes.
[root@rac1 ~]# sysctl -p
Configure shared storage for the cluster.
1) shut down both nodes.
Do the follwoing from first node only.
2) In node1 click (edit virtual machine settings)
3) click on add
4) select harddisk click(next)
5) select create a new virtual disk click(next)
6) Disk Type SCSI click(next)
7) Maximum disk size 2, select allocate all disk space now, click (next)
8) Specify file location "C:\11gRAC\shared\Disk1.vmdk" click finish
By following the above instructions make total of 7 disks specifications are as following.
Voting Disk + OCR
"C:\11gRAC\shared\Disk1" size 2GB
"C:\11gRAC\shared\Disk2" size 2GB
"C:\11gRAC\shared\Disk3" size 2GB
Database Storage
"C:\11gRAC\shared\Disk4" size 12GB
"C:\11gRAC\shared\Disk5" size 12GB
Flash Recovery Area
"C:\11gRAC\shared\Disk6" size 12GB
"C:\11gRAC\shared\Disk7" size 12GB
Edit the C:\RAC11g\rac1\rac1.vmx file
The configuration file for rac1 will already contain configuration information for the seven new SCSI virtual hard disks:
...
scsi0:1.present = "TRUE"
scsi0:1.fileName = "Disk1.vmdk"
scsi0:2.present = "TRUE"
scsi0:2.fileName = "Disk2.vmdk"
scsi0:3.present = "TRUE"
scsi0:3.fileName = "Disk3.vmdk"
scsi0:4.present = "TRUE"
scsi0:4.fileName = "Disk4.vmdk"
scsi0:5.present = "TRUE"
scsi0:5.fileName = "Disk5.vmdk"
scsi0:5.present = "TRUE"
scsi0:5.fileName = "Disk6.vmdk"
scsi0:5.present = "TRUE"
scsi0:5.fileName = "Disk7.vmdk"
...
(rac2 obviously will not at this time!) The configuration information for the seven new hard disks (on rac1) should be removed and replaced with the configuration information in the table below.
#
# ----------------------------------------------------------------
# SHARED DISK SECTION - (BEGIN)
# ----------------------------------------------------------------
# - The goal in meeting the hardware requirements is to have a
# shared storage for the two nodes. The way to achieve this in
# VMware is the creation of a NEW SCSI BUS. It has to be of
# type "virtual" and we must have the disk.locking = "false"
# option.
# - Just dataCacheMaxSize = "0" should be sufficient with the
# diskLib.* parameters, although I include all parameters for
# documentation purposes.
# - maxUnsyncedWrites should matter for sparse disks only, and
# I certainly do not recommend using sparse disks for
# clustering.
# - dataCacheMaxSize=0 should disable cache size completely, so
# other three dataCache options should do nothing (no harm,
# but nothing good either).
# ----------------------------------------------------------------
#
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
disk.locking = "false"
# ----------------------------------------------------------------
# Create one HBA
# ----------------------------------------------------------------
scsi1.present = "TRUE"
scsi1.sharedBus = "virtual"
scsi1.virtualDev = "lsilogic"
# ----------------------------------------------------------------
# Create virtual SCSI disks on single HBA
# ----------------------------------------------------------------
scsi1:0.present = "TRUE"
scsi1:0.fileName = "C:\RAC11g\shared\Disk1.vmdk"
scsi1:0.redo = ""
scsi1:0.mode = "independent-persistent"
scsi1:0.deviceType = "disk"
scsi1:1.present = "TRUE"
scsi1:1.fileName = "C:\RAC11g\shared\Disk2.vmdk"
scsi1:1.redo = ""
scsi1:1.mode = "independent-persistent"
scsi1:1.deviceType = "disk"
scsi1:2.present = "TRUE"
scsi1:2.fileName = "C:\RAC11g\shared\Disk3.vmdk"
scsi1:2.redo = ""
scsi1:2.mode = "independent-persistent"
scsi1:2.deviceType = "disk"
scsi1:3.present = "TRUE"
scsi1:3.fileName = "C:\RAC11g\shared\Disk4.vmdk"
scsi1:3.redo = ""
scsi1:3.mode = "independent-persistent"
scsi1:3.deviceType = "disk"
scsi1:4.present = "TRUE"
scsi1:4.fileName = "C:\RAC11g\shared\Disk5.vmdk"
scsi1:4.redo = ""
scsi1:4.mode = "independent-persistent"
scsi1:4.deviceType = "disk"
scsi1:5.present = "TRUE"
scsi1:5.fileName = "C:\RAC11g\shared\Disk6.vmdk"
scsi1:5.redo = ""
scsi1:5.mode = "independent-persistent"
scsi1:5.deviceType = "disk"
scsi1:6.present = "TRUE"
scsi1:6.fileName = "C:\RAC11g\shared\Disk7.vmdk"
scsi1:6.redo = ""
scsi1:6.mode = "independent-persistent"
scsi1:6.deviceType = "disk"
#
# ----------------------------------------------------------------
# SHARED DISK SECTION - (END)
# ----------------------------------------------------------------
#
Also, append the above configuration in C:\RAC11g\rac1\rac2.vmx file
Close vmware, then open it again and power on all the nodes one by one.
You may face an error saying "clustering not supported for vmware workstation" just ignore this error.
Partition disks for shared storage.
Do this from only first node.
[root@rac1 ~]# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 3379 27037395 83 Linux
/dev/sda3 3380 3901 4192965 82 Linux swap / Solaris
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdc doesn't contain a valid partition table
Disk /dev/sdd: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdd doesn't contain a valid partition table
Disk /dev/sde: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sde doesn't contain a valid partition table
Disk /dev/sdf: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdf doesn't contain a valid partition table
Disk /dev/sdg: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdg doesn't contain a valid partition table
Disk /dev/sdh: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdh doesn't contain a valid partition table
Partition each disk as following only from first node.
[root@rac1 ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-261, default 261):
Using default value 261
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
After partitioning all the disks execute the following command on both nodes
[root@rac1 ~]# partprobe
Sample output from both nodes after partitioning
[root@rac2 ~]# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 3379 27037395 83 Linux
/dev/sda3 3380 3901 4192965 82 Linux swap / Solaris
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 261 2096451 83 Linux
Disk /dev/sdc: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 1 261 2096451 83 Linux
Disk /dev/sdd: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdd1 1 1566 12578863+ 83 Linux
Disk /dev/sde: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sde1 1 1566 12578863+ 83 Linux
Disk /dev/sdf: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdf1 1 1566 12578863+ 83 Linux
Disk /dev/sdg: 12.8 GB, 12884901888 bytes
255 heads, 63 sectors/track, 1566 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdg1 1 1566 12578863+ 83 Linux
Disk /dev/sdh: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdh1 1 261 2096451 83 Linux
Configure ASM
Check your kernel version
[root@rac1 ~]# uname -a
Linux rac1.example.com 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux
Download ASM rpms related to your kernel from the following website.
http://www.oracle.com/technetwork/server-storage/linux/downloads/rhel5-084877.html
In my case my os is based on 32bit or x86 architecture so every file downloaded will be 32bit or x86 based.
IN Library and Tools download the following
oracleasm-support-2.1.7-1.el5.i386.rpm
oracleasmlib-2.0.4-1.el5.i386.rpm
Download one additional rpm according to your kernel
oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm
Install asm on both nodes.
[root@rac1 asm11g]# rpm -Uvh oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm \
> oracleasmlib-2.0.4-1.el5.i386.rpm \
> oracleasm-support-2.1.7-1.el5.i386.rpm
Output
warning: oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159
Preparing... ########################################### [100%]
1:oracleasm-support ########################################### [ 33%]
2:oracleasm-2.6.18-164.el########################################### [ 67%]
3:oracleasmlib ########################################### [100%]
Check on both nodes
[root@rac1 ~]# rpm -qa | grep asm
oracleasm-2.6.18-164.el5-2.0.5-1.el5
ibmasm-3.0-9
oracleasm-support-2.1.7-1.el5
nasm-0.98.39-3.2.2
ibmasm-xinput-2.1-1.el5
oracleasmlib-2.0.4-1.el5
Configure asm on both nodes
[root@rac1 ~]# /usr/sbin/oracleasm configure -i
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 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
Start Oracle ASM library driver on boot (y/n) [n]: y
Scan for Oracle ASM disks on boot (y/n) [y]: y
Writing Oracle ASM library driver configuration: done
Execute the following on both nodes.
[root@rac1 ~]# /usr/sbin/oracleasm init
Creating /dev/oracleasm mount point: /dev/oracleasm
Loading module "oracleasm": oracleasm
Mounting ASMlib driver filesystem: /dev/oracleasm
Execute the following commands from first node only.
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL1 /dev/sdb1
Marking disk "VOL1" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL2 /dev/sdc1
Marking disk "VOL2" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL3 /dev/sdd1
Marking disk "VOL3" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL4 /dev/sde1
Marking disk "VOL4" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL5 /dev/sdf1
Marking disk "VOL5" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL6 /dev/sdg1
Marking disk "VOL6" as an ASM disk: [ OK ]
[root@rac1 ~]# /etc/init.d/oracleasm createdisk VOL7 /dev/sdh1
Marking disk "VOL7" as an ASM disk: [ OK ]
Execute the following from both nodes.
[root@rac2 ~]# /usr/sbin/oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "VOL1"
Instantiating disk "VOL2"
Instantiating disk "VOL3"
Instantiating disk "VOL4"
Instantiating disk "VOL5"
Instantiating disk "VOL6"
Instantiating disk "VOL7"
Execute the following from both nodes.
[root@rac1 ~]# /usr/sbin/oracleasm listdisks
VOL1
VOL2
VOL3
VOL4
VOL5
VOL6
VOL7
Download Oracle software from the following link
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linuxsoft-085393.html
Download the following
Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86
Oracle Grid Infrastructure 11g Release 2 (11.2.0.1.0) for Linux x86
Installation of grid infrastructure and oracle software will be done from node 1
As grid user make the staging directory copy the grid infrastructure file and unzip it
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ mkdir -p /home/grid/software/oracle
[grid@rac1 ~]$ unzip
As oracle user make the staging directory copy the oracle software files and unzip it
[oracle@rac1 ~]$ mkdir -p /home/oracle/software/oracle
[oracle@rac1 ~]$ unzip
[oracle@rac1 ~]$ unzip
Locate and install cvuqdisk RPM on both nodes
[root@rac1 ~]# cp /home/grid/software/oracle/grid/rpm/cvuqdisk-1.0.7-1.rpm /tmp/
[root@rac1 tmp]# scp /tmp/cvuqdisk-1.0.7-1.rpm rac2:/tmp/
root@rac2's password:
cvuqdisk-1.0.7-1.rpm 100% 7831 7.7KB/s 00:00
Install like following on both nodes.
[root@rac1 ~]# cd /tmp/
[root@rac1 tmp]# CVUQDISK_GRP=oinstall; export CVUQDISK_GRP
[root@rac1 tmp]# rpm -iv cvuqdisk-1.0.7-1.rpm
Preparing packages for installation...
cvuqdisk-1.0.7-1
Confirm installation on both nodes.
[root@rac1 tmp]# ls -l /usr/sbin/cvuqdisk
-rwsr-xr-x 1 root oinstall 8272 May 28 2009 /usr/sbin/cvuqdisk
Install Grid infrastructure from first node.
[root@rac1 ~]# xhost +
access control disabled, clients can connect from any host
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ cd /home/grid/software/oracle/grid/
[grid@rac1 ~]$ ./runInstaller
Next, click the [SSH Connectivity] button. Enter the "OS Password" for the grid
user and click the [Setup] button. This will start the "SSH Connectivity" configuration
process:
Verify cluster installation on both nodes.
[grid@rac1 grid]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[grid@rac1 grid]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.CRS.dg ora....up.type ONLINE ONLINE rac1
ora....ER.lsnr ora....er.type ONLINE ONLINE rac1
ora....N1.lsnr ora....er.type ONLINE ONLINE rac2
ora....N2.lsnr ora....er.type ONLINE ONLINE rac1
ora....N3.lsnr ora....er.type ONLINE ONLINE rac1
ora.asm ora.asm.type ONLINE ONLINE rac1
ora.eons ora.eons.type ONLINE ONLINE rac1
ora.gsd ora.gsd.type OFFLINE OFFLINE
ora....network ora....rk.type ONLINE ONLINE rac1
ora.oc4j ora.oc4j.type OFFLINE OFFLINE
ora.ons ora.ons.type ONLINE ONLINE rac1
ora....SM1.asm application ONLINE ONLINE rac1
ora....C1.lsnr application ONLINE ONLINE rac1
ora.rac1.gsd application OFFLINE OFFLINE
ora.rac1.ons application ONLINE ONLINE rac1
ora.rac1.vip ora....t1.type ONLINE ONLINE rac1
ora....SM2.asm application ONLINE ONLINE rac2
ora....C2.lsnr application ONLINE ONLINE rac2
ora.rac2.gsd application OFFLINE OFFLINE
ora.rac2.ons application ONLINE ONLINE rac2
ora.rac2.vip ora....t1.type ONLINE ONLINE rac2
ora....ry.acfs ora....fs.type ONLINE ONLINE rac1
ora.scan1.vip ora....ip.type ONLINE ONLINE rac2
ora.scan2.vip ora....ip.type ONLINE ONLINE rac1
ora.scan3.vip ora....ip.type ONLINE ONLINE rac1
[grid@rac1 grid]$ olsnodes -n
rac1 1
rac2 2
[grid@rac1 grid]$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_SCAN2
LISTENER_SCAN3
LISTENER
[grid@rac2 ~]$ ps -ef | grep lsnr | grep -v 'grep' | grep -v 'ocfs' | awk '{print $9}'
LISTENER_SCAN1
LISTENER
[grid@rac1 grid]$ srvctl status asm -a
ASM is running on rac1,rac2
ASM is enabled.
[grid@rac1 grid]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 2484
Available space (kbytes) : 259636
ID : 1335021663
Device/File Name : +CRS
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
[grid@rac1 grid]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 8cc0163254bd4f75bf2b48371b72d25a (ORCL:VOL1) [CRS]
2. ONLINE 2aa142ade9c44f13bf55ba663d087556 (ORCL:VOL2) [CRS]
3. ONLINE 6c0b0eb065b74fd0bf202648880c197e (ORCL:VOL7) [CRS]
Located 3 voting disk(s).
[grid@rac1 grid]$ dig rac-cluster-scan.example.com
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> rac-cluster-scan.example.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28601
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;rac-cluster-scan.example.com. IN A
;; ANSWER SECTION:
rac-cluster-scan.example.com. 86400 IN A 192.168.1.151
rac-cluster-scan.example.com. 86400 IN A 192.168.1.152
rac-cluster-scan.example.com. 86400 IN A 192.168.1.150
;; AUTHORITY SECTION:
example.com. 86400 IN NS rac1.example.com.
;; ADDITIONAL SECTION:
rac1.example.com. 86400 IN A 192.168.1.100
;; Query time: 9 msec
;; SERVER: 192.168.1.100#53(192.168.1.100)
;; WHEN: Wed Aug 29 23:53:26 2012
;; MSG SIZE rcvd: 129
Backup thr root.sh script on both nodes.
[root@rac1 ~]# cd /u01/app/11.2.0/grid
[root@rac1 grid]# cp root.sh ~/root.sh.racnode1.AFTER_INSTALL
Create ASM Disk groups for database and flash recovery area storage.
Execute following command from first node.
[root@rac1 ~]# su - grid
[grid@rac1 ~]$ asmca
Click on create
Create two disk groups "DATA" & "FRA" with normal redundancy.
Exit configuration and proceed towards Oracle Software installation.
[root@rac1 ~]# xhost +
access control disabled, clients can connect from any host
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ cd /home/oracle/software/oracle/oracle11g/database/
[oracle@rac1 database]$ ./runInstaller
Create cluster database
[oracle@rac1 ~]$ dbca
References:
http://idevelopment.info/data/Oracle/DBA_tips/Oracle10gRAC/CLUSTER_14.shtml
http://idevelopment.info/data/Oracle/DBA_tips/Oracle11gRAC/CLUSTER_12.shtml
this is Awesome Awesome Awesome Awesome Awesome Awesome
ReplyDelete