当前位置: 首页 > Database, HA, Linux, oracle, shell > 正文

Oracle 11g RAC 安装手记

处于实验的目的, 本次采用虚拟机的方式安装rac

HOST机器

硬件: x86, 12G RAM, 100G以上空间

系统: CentOS 6.4 x86_64

准备软件

    VirtualBox-4.2-4.2.10_84104_el6-1.x86_64.rpm
    linux.x64_11gR2_grid.zip
    linux.x64_11gR2_database_1of2.zip
    linux.x64_11gR2_database_2of2.zip
    CentOS-6.3-x86_64-minimal.iso

最终架构

virtual-rac

安装过程

约定:下文中标注【HOST】表示在host机器上执行,标注【ALL】表示在所有的虚拟机上执行

标注【ONE】表示在一个虚拟机上执行即可

安装Virtualbox软件【HOST】

    [root@host ~]# rpm -ivh VirtualBox-4.2-4.2.10_84104_el6-1.x86_64.rpm

设置网卡桥接【HOST】

    [root@host ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 
    DEVICE="br0"
    IPADDR=192.168.1.100
    NETMASK=255.255.240.0
    ONBOOT="yes"
    TYPE="Bridge"

    [root@host ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
    DEVICE="eth0"
    ONBOOT="yes"
    BRIDGE="br0"

准备所需的虚拟机【HOST】

创建硬盘

    [root@host ~]# VBoxManage createhd --filename rac1.vdi --size 32768
    [root@host ~]# VBoxManage createhd --filename rac2.vdi --size 32768

建立虚拟机

    [root@host ~]# VBoxManage createvm --name rac1 --ostype "RedHat_64" --register
    [root@host ~]# VBoxManage createvm --name rac2 --ostype "RedHat_64" --register

为虚拟机添加硬盘驱动器

将硬盘和虚拟机关联

    [root@host ~]# VBoxManage storagectl rac1 --name "SATA Controller" --add sata \
        --controller IntelAHCI
    [root@host ~]# VBoxManage storagectl rac2 --name "SATA Controller" --add sata \
        --controller IntelAHCI

将硬盘插入驱动器

    [root@host ~]# VBoxManage storageattach rac1 --storagectl "SATA Controller" \
        --port 0 --device 0 --type hdd --medium rac1.vdi
    [root@host ~]# VBoxManage storageattach rac2 --storagectl "SATA Controller" \
        --port 0 --device 0 --type hdd --medium rac2.vdi

为虚拟机添加光盘驱动器

    [root@host ~]# VBoxManage storagectl rac1 --name "IDE Controller" --add ide
    [root@host ~]# VBoxManage storagectl rac2 --name "IDE Controller" --add ide

将操作系统安装盘和光盘驱动器关联

    [root@host ~]# VBoxManage storageattach rac1 --storagectl "IDE Controller" \
        --port 0 --device 0 --type dvddrive --medium \
        /path/to/CentOS-6.3-x86_64-minimal.iso
    [root@host ~]# VBoxManage storageattach rac2 --storagectl "IDE Controller" \
        --port 0 --device 0 --type dvddrive --medium \
        /path/to/CentOS-6.3-x86_64-minimal.iso

设置启动顺序

    [root@host ~]# VBoxManage modifyvm rac1 --boot1 dvd --boot2 disk --boot3 \
         none --boot4 none
    [root@host ~]# VBoxManage modifyvm rac2 --boot1 dvd --boot2 disk --boot3 \
         none --boot4 none

调整内存【建议4G内存】

    [root@host ~]# VBoxManage modifyvm rac1 --memory 4096 --vram 128
    [root@host ~]# VBoxManage modifyvm rac2 --memory 4096 --vram 128

添加外部网卡【桥接】

    [root@host ~]# VBoxManage modifyvm rac1 --nic1 bridged --bridgeadapter1 br0
    [root@host ~]# VBoxManage modifyvm rac2 --nic1 bridged --bridgeadapter1 br0

添加内部网卡【桥接】

    [root@host ~]# VBoxManage modifyvm rac1 --nic1 bridged --bridgeadapter2 br0
    [root@host ~]# VBoxManage modifyvm rac2 --nic1 bridged --bridgeadapter2 br0

创建共享磁盘【HOST】

    [root@host ~]# for i in {1..4}; do \
        VBoxManage createhd --filename asm${i}.vdi --size 5120 --format VDI \
        --variant Fixed;
        VBoxManage modifyhd asm${i}.vdi --type shareable; \
    done

将共享磁盘链接到虚拟机【HOST】

    [root@host ~]# for i in {1..4}; do \
        VBoxManage storageattach rac1 --storagectl "SATA" --port ${i} \
            --device 0 --type hdd --medium asm${i}.vdi --mtype shareable; \
    done

    [root@host ~]# for i in {1..4}; do \
        VBoxManage storageattach rac2 --storagectl "SATA" --port ${i} \
            --device 0 --type hdd --medium asm${i}.vdi --mtype shareable \
    done

安装虚拟机操作系统【HOST】

由于虚拟的的操作系统光盘使用的是minimal,安装过程中只要设置好主机名即可

安装前配置【GUEST】

安装需要的软件包【ALL】

    [root@rac1 ~]# yum install binutils-2.* compat-libstdc++-33* \
        sysstat-9.* glibc-2.* glibc-common-2.* glibc-devel-2.* g\
        libgcc-4.* libstdc++-4.* libstdc++-4.*.i686* libstdc++-devel-4.* \
        gcc-c++-4.*x86_64* elfutils-libelf-0*x86_64* \
        elfutils-libelf-0*i686* elfutils-libelf-devel-0*i686* libtool-ltdl*i686* \
        readline*i686* unixODBC* libaio-0.* libaio-devel-0.* ncurses*i686* \
        elfutils-libelf-0.* libc-headers-2.* make-3.* gcc-4.*x86_64* \
        elfutils-libelf-devel-0*x86_64* parted 

安装pdksh【ALL】

    [root@rac1 ~]# rpm -ivh ftp://rpmfind.net/linux/redhat-archive/6.1/en-
           /os/i386/RedHat/RPMS/pdksh-5.2.14-1.i386.rpm

配置系统参数【ALL】

    [root@rac1 ~]# cat >> /etc/sysctl.conf <<EOF
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152 
    kernel.shmmax = 1054504960
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default=262144
    net.core.rmem_max=4194304
    net.core.wmem_default=262144
    net.core.wmem_max=1048586
    EOF

    [root@rac1 ~]# /sbin/sysctl -p

设置系统资源限制【ALL】

    [root@rac1 ~]# cat > /etc/security/limits.d/oracle.conf << EOF
    oracle              soft    nproc   2047
    oracle              hard    nproc   16384
    oracle              soft    nofile  4096
    oracle              hard    nofile  65536
    oracle              soft    stack   10240
    EOF

添加需要的用户和组【ALL】

    [root@rac1 ~]# groupadd -g 1000 oinstall
    [root@rac1 ~]# groupadd -g 1200 dba
    [root@rac1 ~]# useradd -u 1100 -g oinstall -G dba oracle
    [root@rac1 ~]# passwd oracle

设置hosts文件【ALL】

    [root@rac1 ~]# cat > /etc/hosts <<EOF
    127.0.0.1       localhost.localdomain   localhost
    # Public
    192.168.0.111   rac1.localdomain        rac1
    192.168.0.112   rac2.localdomain        rac2
    # Private
    172.16.1.111   rac1-priv.localdomain   rac1-priv
    172.16.1.112   rac2-priv.localdomain   rac2-priv
    # Virtual
    192.168.0.113   rac1-vip.localdomain    rac1-vip
    192.168.0.114   rac2-vip.localdomain    rac2-vip
    # SCAN
    192.168.0.115   scan.localdomain scan
    192.168.0.116   scan.localdomain scan
    192.168.0.117   scan.localdomain scan
    EOF

设置用户默认进程数【ALL】
修改 /etc/security/limits.d/90-nproc.conf

    # Change this
    * soft    nproc    1024

    # To this
    * - nproc 16384 

关闭SELINUX【ALL】

    [root@rac1 ~]# sed -i s/^SELINUX=enforcing/SELINUX=permissive/g /etc/selinux/config
    [root@rac1 ~]# setenforce 0

关闭iptables【ALL】

    [root@rac1 ~]# service iptables stop
    [root@rac1 ~]# service ip6tables stop
    
    [root@rac1 ~]# chkconfig --del iptables
    [root@rac1 ~]# chkconfig --del ip6tables

建立需要的目录,并设置好权限【ALL】

    [root@rac1 ~]# mkdir -p  /u01/app/11.2.0/grid
    [root@rac1 ~]# mkdir -p /u01/app/oracle/product/11.2.0/db_1
    [root@rac1 ~]# chown -R oracle:oinstall /u01
    [root@rac1 ~]# chmod -R 775 /u01/

添加环境变量【ALL】

    [root@rac1 ~]# su - oracle
    [oracle@rac1 ~]$ cat >> .bash_profile <<EOF
    # Oracle Settings
    TMP=/tmp; export TMP
    TMPDIR=$TMP; export TMPDIR

    ORACLE_HOSTNAME=rac1.localdomain; export ORACLE_HOSTNAME
    ORACLE_UNQNAME=RAC; export ORACLE_UNQNAME
    ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
    GRID_HOME=/u01/app/11.2.0/grid; export GRID_HOME
    DB_HOME=$ORACLE_BASE/product/11.2.0/db_1; export DB_HOME
    ORACLE_HOME=$DB_HOME; export ORACLE_HOME
    ORACLE_SID=RAC1; export ORACLE_SID
    ORACLE_TERM=xterm; export ORACLE_TERM
    BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
    PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
    export CLASSPATH

    if [ $USER = "oracle" ]; then
      if [ $SHELL = "/bin/ksh" ]; then
        ulimit -p 16384
        ulimit -n 65536
      else
        ulimit -u 16384 -n 65536
      fi
    fi

    alias grid_env='. /home/oracle/grid_env'
    alias db_env='. /home/oracle/db_env'
    EOF

注意 ORACLE_HOSTNAME 和 ORACLE_SID的设置,两个节点是不一样的

建立集群的环境变量文件【ALL】

    [oracle@rac1 ~]$ cat >> grid_env <<EOF
    ORACLE_SID=+ASM1; export ORACLE_SID
    ORACLE_HOME=$GRID_HOME; export ORACLE_HOME
    PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
    export CLASSPATH
    EOF

注意ORACLE_SID的设置,两个节点是不一样的

建立数据库的环境变量文件【ALL】

    [oracle@rac1 ~]$ cat >> db_env <<EOF
    ORACLE_SID=RAC1; export ORACLE_SID
    ORACLE_HOME=$DB_HOME; export ORACLE_HOME
    PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH

    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
    export CLASSPATH
    EOF

注意ORACLE_SID的设置,两个节点是不一样的

环境变量验证【ALL】

    [oracle@rac1 ~]$ grid_env
    [oracle@rac1 ~]$ echo $ORACLE_HOME
    [oracle@rac1 ~]$ /u01/app/11.2.0/grid
    [oracle@rac1 ~]$ 
    [oracle@rac1 ~]$ db_env
    [oracle@rac1 ~]$ echo $ORACLE_HOME
    [oracle@rac1 ~]$ /u01/app/oracle/product/11.2.0/db_1

磁盘分区【ONE】

    [root@rac1 ~]# for disk in sdb sdc sdd sde; do
        fdisk $disk <<'EOF'
        n
        p
        1
        
        
        w
        EOF
    done

设置UDEV规格【ALL】(保证每次开机后映射的磁盘盘符都是一样的)

    [root@rac1 ~]# i=1
    [root@rac1 ~]# for block in b c d e; do 
        RESULT=$(/sbin/scsi_id -g -u -d /dev/sd${block}); 

        echo "KERNEL==\"sd?1\", BUS==\"scsi\", PROGRAM==\"/sbin/scsi_id -g -u \
        -d /dev/\$parent\", RESULT==\"$RESULT\",NAME=\"asm-disk${i}\", \
        OWNER=\"oracle\", GROUP=\"dba\", MODE=\"0660\""
        
        let "i += 1"
    done >> /etc/udev/rules.d/99-oracle-asmdevices.rules

更新分区表【ALL】

    [root@rac1 ~]# for disk in sdb1 sdc1 sdd1 sde1; do \
        /sbin/partprobe /dev/$disk \
    done

重新加载UDEV规则【ALL】

    [root@rac1 ~]# /sbin/udevadm control --reload-rules

重启UDEV【ALL】

    [root@rac1 ~]# /sbin/start_udev

结果验证【ALL】

    [root@rac1 ~]# ls -al /dev/asm*
    brw-rw---- 1 oracle dba 8, 17 Oct 12 14:39 /dev/asm-disk1
    brw-rw---- 1 oracle dba 8, 33 Oct 12 14:38 /dev/asm-disk2
    brw-rw---- 1 oracle dba 8, 49 Oct 12 14:39 /dev/asm-disk3
    brw-rw---- 1 oracle dba 8, 65 Oct 12 14:39 /dev/asm-disk4

安装Clusterware

首先,进入grid的环境中

    [oracle@rac1 ~]$ grid_env

检查依赖是否满足

    [oracle@rac1 ~]$ ./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose

遇到了这么多的包没有,查询时,明明安装了,可以放心的忽略错误

    Result: Package existence check failed for "libaio-0.3.105 (i386)"
    Result: Package existence check failed for "compat-libstdc++-33-3.2.3 (i386)"
    Result: Package existence check failed for "libaio-devel-0.3.105 (i386)"
    Result: Package existence check failed for "libgcc-3.4.6 (i386)"
    Result: Package existence check failed for "libstdc++-3.4.6 (i386)"
    Result: Package existence check failed for "unixODBC-2.2.11 (i386)"
    Result: Package existence check failed for "unixODBC-devel-2.2.11 (i386)"

执行安装程序

    [oracle@rac1 ~]$ cd /pass/to/your/grid/software
    [oracle@rac1 ~]$ ./runInstaller

1

选择 Install and Configure Oracle Grid Infrastructure for a Cluster

2

选择 Typical installation

3

调整 scan 名, 节点名,ip等

点击 “SSH Connectivity…”, 写入 oracle 用户的密码, 点击Setup

其他的步骤中选择默认,一路next,直到执行 root.sh 时

执行root脚本【ALL】

    [oracle@rac1 ~]$ cd /u01/app/oraInventory
    [oracle@rac1 ~]$ ./orainstRoot.sh

此步骤会遇到一些问题

    [oracle@rac1 ~]$ cd /u01/app/11.2.0/grid
    [oracle@rac1 ~]$ ./root.sh

1. 一定要关闭 iptables
2. host文件中的ip地址一定要正确

经典故障

    CRS-4124: Oracle High Availability Services startup failed.
    CRS-4000: Command Start failed, or completed with errors.
    ohasd failed to start: Inappropriate ioctl for device
    ohasd failed to start at /u01/app/11.2.0/grid/crs/install/rootcrs.pl line 443.

解决方法:
当生成名为 /var/tmp/.oracle/npohasd 的命名管道时,立刻从里边读数据

    [oracle@rac1 ~]$ < /var/tmp/.oracle/npohasd

如果执行root.sh的过程中失败了,可以执行下列命令清除已经失败的设置

    [oracle@rac1 ~]$ cd /u01/app/11.2.0/grid
    [oracle@rac1 ~]$ crs/install/roothas.pl -delete -force -verbose

安装数据库软件

4

选择 Create and configure a database

选择 Server Class

选择 Typical install

选择 Automatic Storage Manager, 填入 SYSTEM 和 ASMSNMP 的密码

剩下的一路默认

下来,会自动调用 dbca 初始化数据库,这里假设我们的数据库名叫 testrac

5

最后,会要求执行root脚本

检查一下数据库状态

    [oracle@rac1 ~]$ grid_env    
    [oracle@rac1 ~]$ srvctl status database -d testrac
    Instance testrac1 is running on node rac1
    Instance testrac2 is running on node rac2

连接进去试试

    [oracle@rac1 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 11.2.0.1.0 Production on Thu Jul 11 19:28:48 2013

    Copyright (c) 1982, 2009, Oracle.  All rights reserved.


    Connected to:
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Real Application Clusters and Automatic Storage Management options

    SQL> select * from v$active_instances;

    INST_NUMBER INST_NAME
    ----------- ------------------------------------------------------------
	      1 rac1.localdomain:+ASM1
	      2 rac2.localdomain:+ASM2

后记

rac在开机启动的时候会卡住, 它到底在干什么呢

    [root@rac1 ~]# ps -ef | grep oha
    root 1581    1  0 18:24 ?     00:00:00 /u01/app/11.2.0/grid/bin/ohasd.bin reboot
    root 1625 1610  0 18:25 pts/0 00:00:00 grep oha
    [root@rac1 ~]# strace -p 1581
    Process 1581 attached - interrupt to quit
    open("/var/tmp/.oracle/npohasd", O_WRONLY

哦,原来在写 /var/tmp/.oracle/npohas 命名管道啊;同样,我们帮它一下

    [root@rac1 ~]# < /var/tmp/.oracle/npohasd

ok, rac可以顺利启动了

    分享到:

本文固定链接: http://klwang.info/oracle-11g-rac-installation-guide/ | 数据库|Linux|软件开发

该日志由 klwang 于2013年07月11日发表在 Database, HA, Linux, oracle, shell 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Oracle 11g RAC 安装手记 | 数据库|Linux|软件开发
关键字: , , , ,

Oracle 11g RAC 安装手记:等您坐沙发呢!

发表评论

*
快捷键:Ctrl+Enter