Upgrade Oracle 9i RAC to Oracle 10g RAC

January 31, 2006

by Vincent Chan

This article provides the procedures for converting Oracle 9i (9.2.0.4) RAC to Oracle 10g (10.2.0.1) RAC on Red Hat Enterprise Linux 3 (RHEL3).

Oracle Database 10g and Oracle Real Application Cluster (RAC) 10g itself, boast many new and exciting features that simplify database manageability and provide higher availability and scalability. Compared to its predecessors, Oracle 10g RAC is much easier to install, use and manage, thereby reducing the total cost of ownership.

Overview

The RAC cluster comprises two Intel x86 servers running on RHEL3 (Kernel 2.4.21-27). Each node has access to a shared storage and connectivity to the public and private network.

This article is structured into the following steps:

1. Preliminary Installation
2. Install Oracle Clusterware
3. Install Oracle RAC Software
4. Upgrade the Database
5. Migrate Database to ASM (Optional Step)

Unless otherwise specified, you should execute all steps on both nodes.

Here's an overview of our Oracle 9i RAC environment:

Host Name

Instance Name

Database Name

$ORACLE_HOME

Database File Storage

salmon1

prod1a

prod1

/u01/app/oracle/product/9.2.0

OCFS

salmon2

prod1b

prod1

/u01/app/oracle/product/9.2.0

OCFS

 

File

File Name

File Storage

Quorum

/ocfs/prod1/quorum

OCFS

Shared Configuration

/ocfs/prod1/srvm

OCFS

And an overview of the Oracle 10g RAC environment:

Host Name

Instance Name

Database Name

$ORACLE_HOME

Database File Storage

salmon1

prod1a

prod1

/u01/app/oracle/product/10.2.0/db_1

OCFS

salmon2

prod1b

prod1

/u01/app/oracle/product/10.2.0/db_1

OCFS

 

File

File Name

File Storage

Voting Disk

/ocfs/prod1/vdisk1

/ocfs/prod1/vdisk2

/ocfs/prod1/vdisk3

OCFS

Oracle Cluster Registry

/ocfs/prod1/ocr1

/ocfs/prod1/ocr2

OCFS

Step 1: Preliminary Installation

1a. Verify software package versions

Install the required packages. Additional information can be obtained from http://download-east.oracle.com/docs/cd/B19306_01/install.102/b14203/prelinux.htm#sthref380

  • binutils-2.14
  • compat-db-4.0.14-5
  • compat-gcc-7.3-2.96.128
  • compat-gcc-c++-7.3-2.96.128
  • compat-libstdc++-7.3-2.96.128
  • compat-libstdc++-devel-7.3-2.96.128
  • gcc-3.2
  • glibc-2.3.2-95.27
  • make-3.79
  • openmotif-2.2.3
  • setarch-1.3-1

1b. Verify kernel parameters

Verify the following kernel parameters. Additional information can be obtained from http://download-east.oracle.com/docs/cd/B19306_01/install.102/b14203/prelinux.htm#sthref418

[root@salmon1]# sysctl -a | grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 2147483648
[root@salmon1]# sysctl -a | grep sem
kernel.sem = 250        32000   100     128
[root@salmon1]# sysctl -a | grep -i ip_local
net.ipv4.ip_local_port_range = 1024     65000
[root@salmon1]# sysctl -a | grep -i file-max
fs.file-max = 65536
[root@salmon1]# sysctl -a | egrep "rmem_default|rmem_max|wmem_default| wmem_max"
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_max = 262144

1c. Verify users and groups

Verify that the oracle user primary group is oinstall and the secondary group is dba.

[root@salmon1]# id oracle
uid=500(oracle) gid=501(oinstall) groups=501(oinstall),500(dba)
Verify that the user nobody exists on the node. 
[root@salmon1]# id nobody
uid=99(nobody) gid=99(nobody) groups=99(nobody)

1d. Edit the oracle user environment file

Verify that the oracle user primary group is oinstall and the secondary group is dba.

[oracle@salmon1]$ more .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
export PATH=$PATH:$HOME/bin
export ORACLE_SID=prod1a
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/crs
export ORA_CRS_HOME=$ORACLE_BASE/product/crs
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
umask 022

1e. Configure the oracle user shell limits

[root@salmon1]# more /etc/security/limits.conf
*                soft    nproc            2047
*                hard    nproc            16384
*                soft    nofile           1024
*                hard    nofile           65536
[root@salmon1]# grep pam_limits /etc/pam.d/login
 session    required     /lib/security/pam_limits.so

1f. Configure public and private network

Using the information below, make the necessary changes to network interface devices eth0 (public) and eth3 (private).

[root@salmon1]# redhat-config-network

Host Name

IP Address

Type

salmon1.dbsconsult.com

192.168.0.184

Public (eth0)

salmon2.dbsconsult.com

192.168.0.185

Public (eth0)

salmon1-priv.dbsconsult.com

10.10.10.84

Private (eth3)

salmon2-priv.dbsconsult.com

10.10.10.85

Private (eth3)

salmon1-vip.dbsconsult.com

192.168.0.186

Virtual

salmon2-vip.dbsconsult.com

192.168.0.187

Virtual

1g. Edit the /etc/hosts file

Add the entries for Virtual IP (VIP) addresses in /etc/hosts. VIP is required in Oracle 10g RAC to increase availability by eliminating the need to wait on network timeout which may take as long as 10 minutes. Refer to http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&p_id=264847.1 for additional information on VIP configuration.

127.0.0.1   localhost.localdomain  localhost
10.10.10.84  salmon1-priv.dbsconsult.com        salmon1-priv
10.10.10.85  salmon2-priv.dbsconsult.com        salmon2-priv
192.168.0.184  salmon1.dbsconsult.com           salmon1
192.168.0.185  salmon2.dbsconsult.com           salmon2
192.168.0.186  salmon1-vip.dbsconsult.com     salmon1-vip
192.168.0.187  salmon2-vip.dbsconsult.com     salmon2-vip

Verify the hostname and the configured network interface devices.

[root@salmon1]# hostname
salmon1.dbsconsult.com
[root@salmon1]# /sbin/ifconfig

1h. Establish user equivalence with SSH

During the Oracle Clusterware and RAC installation, the Oracle Universal Installer (OUI) has to be able to copy the software as oracle to all RAC nodes without being prompted for a password. This can be accomplished using ssh instead of rsh.

To establish user equivalence, generate the user's public and private keys as the oracle user on both nodes.

[oracle@salmon1]$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Created directory '/home/oracle/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
5d:8c:42:97:eb:42:ae:52:52:e9:59:20:2a:d3:6f:59 oracle@salmon1.dbsconsult.com
The public key on each node is copied to both nodes. Execute the following on each node.    
[oracle@salmon1]$ ssh salmon1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'salmon1 (192.168.0.184)' can't be established.
RSA key fingerprint is 00:d9:70:08:bc:fd:b5:e4:e3:df:a3:c7:d8:46:1e:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'salmon1,192.168.0.184' (RSA) to the list of known hosts.
oracle@salmon1's password:
[oracle@salmon1]$ ssh salmon2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'salmon2 (192.168.0.185)' can't be established.
RSA key fingerprint is 00:d9:70:08:bc:fd:b5:e4:e3:df:a3:c7:d8:46:1e:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'salmon2,192.168.0.185' (RSA) to the list of known hosts.
oracle@salmon2's password:

Test the connection on every node. Verify that you are not prompted for password when you run the following the second time.

  • ssh salmon1 date
  • ssh salmon2 date
  • ssh salmon1-priv date
  • ssh salmon2-priv date
  • ssh salmon1.dbsconsult.com date
  • ssh salmon2.dbsconsult.com date
  • ssh salmon1-priv.dbsconsult.com date
  • ssh salmon2-priv.dbsconsult.com date

1i. Configure hangcheck timer kernel module

The hangcheck timer kernel module monitors the system's health and restarts a failing RAC node. It uses two parameters, hangcheck_tick (defines the system checks frequency) and hangcheck_margin (defines the maximum hang delay before a RAC node is reset), to determine if a node is failing.

The hangcheck timer should have already been configured for Oracle 9i (9.2.0.4) RAC. Verify that the following line is in /etc/rc.d/rc.local.

[root@salmon1]# grep insmod /etc/rc.d/rc.local
insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

1j. Create pfile

Save a copy of the pfile for the database upgrade.

SQL> create pfile='/tmp/pfile_singleinst' from spfile;







The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers