美文网首页数据库我的专题
Linux下静默安装Oracle 11g RAC

Linux下静默安装Oracle 11g RAC

作者: 小六的昵称已被使用 | 来源:发表于2019-02-22 12:41 被阅读29次

    title: Linux下静默安装Oracle 11g RAC
    categories: 数据库
    tags:
    - RAC
    - Cluster
    - HA
    - Oracle
    timezone: Asia/Shanghai
    date: 2019-01-06


    环境

    # Red Hat Enterprise Linux Server release 6.10.x86_64 (Santiago)
    # Oracle Linux 7.5 x86_64
    
    p13390677_112040_Linux-x86-64_1of7.zip
    p13390677_112040_Linux-x86-64_2of7.zip
    p13390677_112040_Linux-x86-64_3of7.zip
    

    注意事项

    1.主机名都用小写字母,长度不能超过15位,不要有特殊符号

    2.两个节点的Plublic和VIP所在网卡的网卡名要一样

    3.表决盘应该都是相同的大小。不同的大小可能导致可用性降低。

    第一步:规划IP地址和主机名

    1.IP地址规划

    节点 hostname 类型 IP地址 接口 备注
    1 rac1 Plublic IP 10.0.1.131 eth0 手动设置
    2 rac2 Plublic IP 10.0.1.132 eth0 手动设置
    1 rac1-vip Virtaual IP 10.0.1.133 eth0 集群自动设置
    2 rac2-vip Virtaual IP 10.0.1.134 eth0 集群自动设置
    Cluster rac-scan SCAN IP 10.0.1.135 eth0 集群自动设置
    1 rac1-priv Private IP 11.11.11.131 eth1 手动设置
    2 rac2-priv Private IP 11.11.11.132 eth1 手动设置

    2.在两个节点分别将Plublic IP和Private IP写入(by all)

    只需要手动在两个节点上设置静态IP地址即可。修改主机名、关闭防火墙等使用下边脚本来完成

    vim /etc/sysconfig/network-scripts/ifcfg-eth0
    vim /etc/sysconfig/network-scripts/ifcfg-eth1
    

    第二步:设置共享存储

    1.现在Win2012上创建5个存储盘 这里创建了三个1G的投票盘(votingdisk),一个20G的数据盘(data),一个10G的备份盘(backup)。

    2.连接iscsi 安装并设置自动启动(by all)

    扫描iscsi存储并重启服务器,重启后会自动挂载

    mkdir -p /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
    cd /mnt/cdrom/Packages
    
    ----- RedHat6:
    rpm -ivh iscsi-initiator-utils-6.2.0.873-27.el6_9.x86_64.rpm
    chkconfig iscsid on
    iscsiadm -m discovery -t sendtargets -p 10.0.1.141:3260
    
    ----- RedHat7:
    rpm -ivh iscsi-initiator-utils-6.2.0.874-7.0.1.el7.x86_64.rpm
    systemctl start iscsid
    systemctl enable iscsid
    iscsiadm -m discovery -t sendtargets -p 10.0.1.141:3260
    

    3.查看挂载磁盘并分区(任意一个节点操作即可)

    ll /dev/sd*
    fdisk /dev/sdb
    fdisk /dev/sdc
    fdisk /dev/sdd
    fdisk /dev/sde
    fdisk /dev/sdf
    
    分区后如果看不到分区可用以下命令刷新
    partprobe /dev/sdb
    partprobe /dev/sdc
    partprobe /dev/sdd
    partprobe /dev/sde
    partprobe /dev/sdf
    

    4.配置裸盘(by all)

    vim /etc/udev/rules.d/60-raw.rules
    
    ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw1 %N"
    ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw2 %N"
    ACTION=="add", KERNEL=="sdd1", RUN+="/bin/raw /dev/raw/raw3 %N"
    ACTION=="add", KERNEL=="sde1", RUN+="/bin/raw /dev/raw/raw4 %N"
    ACTION=="add", KERNEL=="sdf1", RUN+="/bin/raw /dev/raw/raw5 %N"
    KERNEL=="raw[1-5]*", OWNER="grid" GROUP="asmadmin", MODE="660"
    

    5.启动并验证udev(by all)

    ----- RedHat6:
    /sbin/start_udev
    
    [root@rac1 sshsetup]# ll /dev/raw/
    总用量 0
    crw-rw---- 1 grid asmadmin 162, 1 12月 28 20:14 raw1
    crw-rw---- 1 grid asmadmin 162, 2 12月 28 20:14 raw2
    crw-rw---- 1 grid asmadmin 162, 3 12月 28 20:14 raw3
    crw-rw---- 1 grid asmadmin 162, 4 12月 28 20:14 raw4
    crw-rw---- 1 grid asmadmin 162, 5 12月 28 20:14 raw5
    crw-rw---- 1 root disk     162, 0 12月 28 20:14 rawctl
    
    ----- RedHat7:
    /sbin/udevadm trigger --type=devices --action=change
    重新加载udev rule
    /sbin/udevadm control --reload
    诊断udev rule
    /sbin/udevadm test /sys/block/sdb
    
    ll /dev/raw/
    

    如果磁盘有数据的可以使用以下命令清空磁盘信息(任意一个节点操作即可)

    dd if=/dev/zero of=/dev/raw/raw1 bs=1024 count=256
    dd if=/dev/zero of=/dev/raw/raw2 bs=1024 count=256
    dd if=/dev/zero of=/dev/raw/raw3 bs=1024 count=256
    dd if=/dev/zero of=/dev/raw/raw4 bs=1024 count=256
    dd if=/dev/zero of=/dev/raw/raw5 bs=1024 count=256
    

    第三步:使用初始化脚本初始化系统环境(见附录1)

    1.使用本脚本应注意事项(by all)

    1.必须使用root执行
    2.请确认已经将PlublicIP设置为静态IP
    3.请确认已挂载Linux安装光盘
    4.本脚本可以重复执行
    5.本脚本会覆盖hosts设置,如有特殊需求的请在安装完毕后手动恢复所需内容
    6.vip和priv主机名格式为:“主机名-vip”和“主机名-priv”,如有需要请更改
    7.此脚本编写环境为RedHat6.10 && Oracle 11g RAC
    8.此脚本只针对两个节点的RAC环境初始化,脚本启动的时候会让选择节点1还是节点2
    9.最后请请根据自己实际情况修改脚本内最上部变量后即可执行
    

    2.本脚本所实现功能(by all)

    1.关闭SELinux
    2.关闭iptables
    3.修改主机名
    4.写入hosts
    5.禁用ntpd
    6.创建所需要的账户和组
    7.新建grid和oracle安装目录
    8.配置oracle和grid用户变量
    9.配置本地YUM并安装依赖包
    

    第四步:安装grid

    注意:在以上的脚本里并没有对系统内核做修改,在这步我们使用grid检测脚本来进行环境的检测的同时生成修复脚本来完成对系统内核的修改,可以在提高效率的同时方式手动修改造成错误。
    1.配置ssh互信

    1.1.使用oracle官方系统的脚本(用root账户在其中一个节点执行即可)

    注意:需要同时配置grid和oracle两个账户下的public ip和vip的ssh互信

    注意:在生成秘钥的时候不要设置密码

    /home/grid/grid/sshsetup/sshUserSetup.sh -user oracle -hosts 'rac1 rac2 rac1-priv rac2-priv' -advanced
    /home/grid/grid/sshsetup/sshUserSetup.sh -user grid -hosts 'rac1 rac2 rac1-priv rac2-priv' -advanced
    
    -hosts 表示:需要配置互信的服务器ip
    -user 表示:用于远程登录到服务器上的用户名
    -advanced 表示:hosts里的主机,每两个主机之间都是互信的。
        如果不加-advanced,例如:本机是HOST-A,在本机执行./sshUserSetup.sh -user aime -hosts A B C。那么就是HOST-A->A, HOST-A->B, HOST-A->C 的互信关系。A,B,C之间是不互信的。
    

    1.2.可以使用以下命令测试刚才做的ssh互信是否生效,如果没有提示输入密码并且输出了系统时间就OK(by all)

    su - oracle
    ssh rac1 date && \
    ssh rac2 date && \
    ssh rac1-priv date && \
    ssh rac2-priv date
    
    su - grid
    ssh rac1 date && \
    ssh rac2 date && \
    ssh rac1-priv date && \
    ssh rac2-priv date
    
    2.执行安装前的检查并使用生成的脚本修改内核参数

    2.1.执行安装前的检查(任意节点执行一次即可)

    su - grid
    /home/grid/grid/./runcluvfy.sh stage -pre crsinst -n rac1,rac2 -verbose -fixup
    
    语法说明:
    -pre: 该选项主要检查是否满足安装的需要。 
    -post:该选择主要检查安装后组件是否正常。 
    -n:该选项用于指定节点列表。 
    -verbose:该选项用于输出详细的验证信息。 
    -fixup:这是Oracle 11gR2中新增加的一个参数。利用这个参数,可以产生一个名为runfixup.sh的脚本。
    
    runfixup.sh脚本中包含一系列的操作系统命令,利用这个脚本可以对操作系统进行一定的修改,使其满足安装条件。完成系统进行校验之后,以root用户的身份执行脚本runfixup.sh,就可以解决操作系统中一些尚不满足安装条件的情况。
    

    2.2.根据提示使用root用户在两个节点执行修复脚本并安装cvuqdisk和pdksh,安装完成后再此运行检查应该除了GNS和时间同步其他全部OK(by all)

    /tmp/CVU_11.2.0.4.0_grid/runfixup.sh
    rpm -ivh /home/grid/grid/rpm/cvuqdisk-1.0.9-1.rpm
    rpm -ivh pdksh-5.2.14-37.el5_8.1.i386.rpm
    rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
    
    pdksh需要单独下载:
    https://pan.baidu.com/s/1cb3nsP7plx2tAqyLmeMGiQ
    https://pan.baidu.com/s/1zL3bawYb4sLYx3bqEHQzlw
    
    3.执行静默安装(静默安装脚本见附录2)(节点1执行即可,会自动复制到节点2)
    /home/grid/grid/runInstaller -showProgress -silent -responseFile /home/grid/grid.rsp
    
    -showProgress       用于在控制台上显示安装进度。仅在无提示安装下才支持此选项。
    -ignorePrereq       忽略运行先决条件检查。由于我们没有使用DNS来解析SCAN所以会报一个SCAN的错误,因为使用udev绑定裸设备而没有使用ASMLIB来使用ASM,所以会报一个ASM的错误,这两个错误都是可以忽略的,但静默安装在检测到错误后就会停止安装,不能像图形界面那样点一下忽略跳过,所以我们使用这个参数来绕过预检
    -silent             对于无提示模式下的操作, 输入内容可以是一个响应文件, 也可以是命令行变量值对的列表。
    -responseFile       指定要使用的响应文件和路径。
    其它命令请查询帮助 -help
    
    4.根据提示分别在两个节点按以下顺序执行sh脚本(by all)
    1.节点1:/u01/app/oraInventory/orainstRoot.sh
    2.节点2:/u01/app/oraInventory/orainstRoot.sh
    
    3.节点1:/u01/app/11.2.0/grid/root.sh
    4.节点2:/u01/app/11.2.0/grid/root.sh
    
    Redhat7在执行root.sh的时候出现以下错误提示,经查是个bug:
    ohasd failed to start
    Failed to start the Clusterware. Last 20 lines of the alert log follow: 
    2018-12-31 21:40:24.432: 
    [client(11531)]CRS-2101:The OLR was formatted using version 3.
    
    解决方法1:
    /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1
    
    5.根据提示需要提供密码脚本文件

    在运行安装程序的节点使用grid用户执行以下脚本

    关于此密码文件的官方说明:https://docs.oracle.com/database/121/CWLIN/app_nonint.htm#CWLIN379

    touch /home/grid/cfgrsp.properties
    /u01/app/11.2.0/grid/cfgtoollogs/configToolAllCommands RESPONSE_FILE=/home/grid/cfgrsp.properties
    
    在这里我们只提供一个空文件,关于官方说明只是在需要使用智能管理平台界面IPMICA的时候才需要提供密码。
    
    6.至此grid已安装完成,附上群集状态检查
    [grid@rac1 ~]$ 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 ~]$ crs_stat -t -v
    Name           Type           R/RA   F/FT   Target    State     Host        
    ----------------------------------------------------------------------
    ora....ER.lsnr ora....er.type 0/5    0/     ONLINE    ONLINE    rac1        
    ora....N1.lsnr ora....er.type 0/5    0/0    ONLINE    ONLINE    rac1        
    ora.OCR.dg     ora....up.type 0/5    0/     ONLINE    ONLINE    rac1        
    ora.asm        ora.asm.type   0/5    0/     ONLINE    ONLINE    rac1        
    ora.cvu        ora.cvu.type   0/5    0/0    ONLINE    ONLINE    rac1        
    ora.gsd        ora.gsd.type   0/5    0/     OFFLINE   OFFLINE               
    ora....network ora....rk.type 0/5    0/     ONLINE    ONLINE    rac1        
    ora.oc4j       ora.oc4j.type  0/1    0/2    ONLINE    ONLINE    rac1        
    ora.ons        ora.ons.type   0/3    0/     ONLINE    ONLINE    rac1        
    ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    rac1        
    ora....C1.lsnr application    0/5    0/0    ONLINE    ONLINE    rac1        
    ora.rac1.gsd   application    0/5    0/0    OFFLINE   OFFLINE               
    ora.rac1.ons   application    0/3    0/0    ONLINE    ONLINE    rac1        
    ora.rac1.vip   ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac1        
    ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    rac2        
    ora....C2.lsnr application    0/5    0/0    ONLINE    ONLINE    rac2        
    ora.rac2.gsd   application    0/5    0/0    OFFLINE   OFFLINE               
    ora.rac2.ons   application    0/3    0/0    ONLINE    ONLINE    rac2        
    ora.rac2.vip   ora....t1.type 0/0    0/0    ONLINE    ONLINE    rac2        
    ora....ry.acfs ora....fs.type 0/5    0/     ONLINE    ONLINE    rac1        
    ora.scan1.vip  ora....ip.type 0/0    0/0    ONLINE    ONLINE    rac1        
    
    [grid@rac1 ~]$ olsnodes -n
    rac1    1
    rac2    2
    
    [grid@rac1 ~]$ ps -ef|grep lsnr|grep -v 'grep'|grep -v 'ocfs'|awk '{print$9}'
    LISTENER_SCAN1
    LISTENER
    
    [grid@rac1 ~]$ srvctl status asm -a
    ASM 正在 rac2,rac1 上运行
    ASM 已启用。
    
    [grid@rac1 ~]$ olsnodes -n -i -s -t
    rac1    1       rac1-vip        Active  Unpinned
    rac2    2       rac2-vip        Active  Unpinned
    
    [grid@rac1 ~]$ crsctl query css votedisk
    ##  STATE    File Universal Id                File Name Disk group
    --  -----    -----------------                --------- ---------
     1. ONLINE   859e013bd7544f67bfb2f5ebc7ecbae4 (/dev/raw/raw1) [OCR]
     2. ONLINE   a96ac903004f4ffebf2f6da76fb5325b (/dev/raw/raw2) [OCR]
     3. ONLINE   6e53a9f9bf8e4facbf26317b8edfbd34 (/dev/raw/raw5) [OCR]
    Located 3 voting disk(s).
    
    [grid@rac1 ~]$ srvctl config scan
    SCAN 名称: rac-scan, 网络: 1/10.0.1.0/255.255.255.0/eth0
    SCAN VIP 名称: scan1, IP: /rac-scan/10.0.1.135
    
    [grid@rac1 ~]$ srvctl config scan_listener
    SCAN 监听程序 LISTENER_SCAN1 已存在。端口: TCP:1521
    

    第五步:安装Oracle Database

    1.创建ASM磁盘组DATA用于存放数据库文件和BAK用于备份

    方法1:使用ASMCA
    方法2:使用ASMCMD
    
    1. /home/oracle/database/runInstaller

      -responseFile 指定要使用的响应文件和路径。
      -silent 对于无提示模式下的操作, 输入内容可以是一个响应文件, 也可以是命令行变量值对的列表。
      -executePrereqs 仅执行先决条件检查。
      -showProgress 用于在控制台上显示安装进度。仅在无提示安装下才支持此选项。


    附录:Bug(附彻底解决办法)

    Bug说明:https://www.cnblogs.com/zx3212/p/7017641.html

    ALERT:  Grid Infrastructure Fails to Start OHASD With RedHat Linux or Oracle Linux with RedHat Compatible Kernel (RHCK) Version 3.10.0-514.21.2.EL7.X86_64 or Higher (Doc ID 2282371.1)
    
    https://community.oracle.com/message/14424838#14424838
    

    解决方法:手动创建服务文件,并设置开机自动启动

    touch /usr/lib/systemd/system/ohas.service
    chmod 777 /usr/lib/systemd/system/ohas.service
    cat <<EOF>/usr/lib/systemd/system/ohas.service
    [Unit]
    Description=Oracle High Availability Services
    After=syslog.target
    
    [Service]
    ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    

    以root用户运行下面的命令

    systemctl daemon-reload
    systemctl enable ohas.service
    systemctl start ohas.service
    

    附录1:初始化脚本(将以下内容保存为sh文件直接执行即可)

    #/bin/bash
    # 本脚本针对RedHat6、CentOS6静默安装Oracle 11g RAC初始化系统参数用
    # 本脚本只适用于新安装系统的初始化,已经在使用或者有调整系统参数的禁止使用!!!!!
    # 注意:本脚本会覆盖hosts设置
    
    ################################### 已验证 Linux 发行版 ###################################
    # Red Hat Enterprise Linux Server release 6.10.x86_64 (Santiago)
    # Oracle Linux 7.5 x86_64
    
    ################################### 请根据自己实际情况修改变量 ###################################
    rac1HostName=rac1
    rac2HostName=rac2
    rac1PlublicIP=10.0.1.131
    rac2PlublicIP=10.0.1.132
    rac1VIP=10.0.1.133
    rac2VIP=10.0.1.134
    scanIP=10.0.1.135
    rac1PrivIP=11.11.11.131
    rac2PrivIP=11.11.11.132
    scanName=rac-scan
    oraclePasswd=oracle
    gridPasswd=grid
    
    # grid and oracle 根目录
    GridOracleHomeTemp=/u01
    
    # grid实例名称(节点1为:“名称1”,节点2为:“名称2”)
    GRID_SIDTemp=+ASM
    
    # 安装grid时候的:Oracle Base
    GRID_BASETemp=/u01/app/grid
    
    # 安装grid时候的:Software Location
    GRID_HOMETemp=/u01/app/11.2.0/grid
    
    # 安装database时候的:Oracle Base
    ORACLE_BASETemp=/u01/app/oracle
    
    # 数据库名称
    ORACLE_UNQNAMETemp=oracledbrac
    
    # 数据库实例名称(节点1实例名称为:orcl1,节点2为:orcl2)
    ORACLE_SIDTemp=orcl
    
    ################################### 请根据自己实际情况修改变量 ###################################
    
    
    # 检查当前用户是否为root权限
    if [ `id -u` -eq 0 ];then
        echo "当前用户是root用户,将继续安装!"
    else
        echo "非root用户!"
        exit 0
    fi
    
    # 输出提示,是否已设置静态IP并挂载光驱
    echo
    read -p "请确认您已经将PlublicIP设置为静态IP并已挂载Linux安装光盘.按Enter键开始,Ctrl+C退出" tempchar
    echo
    
    # 请选择你的系统版本(RedHat6或者Redhat7)
    read -p "系统版本为:6 or 7:" LinuxVer
    if [ ${LinuxVer} -eq 6 ]
    then
        echo "您选择的系统是Linux发行版:6"
    elif [ ${LinuxVer} -eq 7 ]
    then
        echo "您选择的系统是Linux发行版:7"
    else
        echo "输入错误,程序将推出"
        exit
    fi
    
    
    # 选择当前节点(此脚本只支持双节点安装RAC)
    read -p "当前节点为1 or 2:" nodeNum
    if [ $nodeNum -eq 1 ]
    then
        echo "当前服务器为:节点1"
        hostname=${rac1HostName}
        racPlublicip=${rac1PlublicIP}
        racVIP=${rac1VIP}
    elif [ $nodeNum -eq 2 ]
    then
        echo "当前服务器为:节点2"
        hostname=${rac2HostName}
        racPlublicip=${rac2PlublicIP}
        racVIP=${rac2VIP}
    else
        echo -e "\033[31m节点选择错误\033[0m"
        exit
    fi
    
    
    # 1.关闭SELinux
    grep "SELINUX=disabled" /etc/selinux/config > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "SElinux本身就是关闭状态"
        setenforce 0
    else
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
        [ $? -eq 0 ] && echo "关闭SELinux - Success" || echo -e "\033[31m关闭SELinux----------Failed\033[0m"
        setenforce 0
    fi
    
    # 2.关闭iptables和firewalld(需要区分6和7)
    if [ ${LinuxVer} -eq 6 ]
    then
        service iptables stop
        chkconfig iptables off
        [ $? -eq 0 ] && echo "禁止iptables开机自动启动 - Success" || echo -e "\033[31m禁止iptables开机自动启动----------Failed\033[0m"
    else
        systemctl stop firewalld
        systemctl disable firewalld
        [ $? -eq 0 ] && echo "禁止firewalld开机自动启动 - Success" || echo -e "\033[31m禁止firewalld开机自动启动----------Failed\033[0m"
        systemctl stop iptables
        systemctl disable iptables
        [ $? -eq 0 ] && echo "禁止iptables开机自动启动 - Success" || echo -e "\033[31m禁止iptables开机自动启动----------Failed\033[0m"
    fi
    
    # 3.修改主机名(需要区分6和7)
    if [ ${LinuxVer} -eq 6 ]
    then
        hostname ${hostname}
        sed -i "/HOSTNAME=/c HOSTNAME=${hostname}" /etc/sysconfig/network
        [ $? -eq 0 ] && echo "修改主机名 - Success" || echo -e "\033[31m修改主机名----------Failed\033[0m"
    else
        hostnamectl set-hostname ${hostname}
        [ $? -eq 0 ] && echo "修改主机名 - Success" || echo -e "\033[31m修改主机名----------Failed\033[0m"
    fi
    
    # 4.写入hosts
    cat <<EOF >/etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    ${rac1PlublicIP} ${rac1HostName}
    ${rac2PlublicIP} ${rac2HostName}
    ${rac1VIP} ${rac1HostName}-vip
    ${rac2VIP} ${rac2HostName}-vip
    ${scanIP} ${scanName}
    ${rac1PrivIP} ${rac1HostName}-priv
    ${rac2PrivIP} ${rac2HostName}-priv
    EOF
    [ $? -eq 0 ] && echo "写入hosts文件 - Success" || echo -e "\033[31m写入hosts----------Failed\033[0m"
    
    # 5.禁用ntpd,Oracle会自动启用自己的ctssd来进行时间同步(需要区分6和7)
    if [ ${LinuxVer} -eq 6 ]
    then
        service ntpd stop
        chkconfig ntpd off
        [ $? -eq 0 ] && echo "禁止ntp开机自动启动 - Success" || echo -e "\033[31m禁止ntp开机自动启动----------Failed\033[0m"
        # mv /etc/ntp.conf /etc/ntp.conf.bak > /dev/null 2>&1
    else
        systemctl stop ntpd
        systemctl disable ntpd
        [ $? -eq 0 ] && echo "禁止ntp开机自动启动 - Success" || echo -e "\033[31m禁止ntp开机自动启动----------Failed\033[0m"
        # mv /etc/ntp.conf /etc/ntp.conf.bak > /dev/null 2>&1
    fi
    
    # 6.创建所需要的账户和组
    
    #Add oracle user. If present ,do nothing but create the mandatory groups
    #添加oracle用户。 如果存在,除了创建必需组之外什么也不做
    
    USERID="54321"
    GROUPID="54321"
    
    # 6.1.检查GROUPID是否被占用
    groupnum=`cat /etc/group | sort -t: -g +2 -3 | grep -v nfsnobody | cut -f3 -d":" | tail -1`
    if [ "${groupnum}" -ge "${GROUPID}" ]; then
        GROUPID=`expr $groupnum + 1`
    fi
    
    # 6.2.检查USERID是否被占用
    usernum=`cat /etc/passwd | sort -t: -g +2 -3 | grep -v nfsnobody | cut -f3 -d":" | tail -1`
    if [ "${usernum}" -ge "${USERID}" ]; then
        USERID=`expr $usernum + 1`
    fi
    
    # 6.3.创建oinstall组
    /bin/grep "^oinstall" /etc/group > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Group oinstall - 已经存在"
    else
        echo "Adding group oinstall with gid ${GROUPID}"
        /usr/sbin/groupadd -g ${GROUPID} oinstall
    fi
    
    # 6.4.创建dba组
    /bin/grep "^dba" /etc/group > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Group dba - 已经存在"
    else
        echo "Adding group dba"
        /usr/sbin/groupadd dba
    fi
    
    # 6.5.创建oper组 add by 6
    /bin/grep "^oper" /etc/group > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Group oper - 已经存在"
    else
        echo "Adding group oper"
        /usr/sbin/groupadd oper
    fi
    
    # 6.6.创建asmdba组 add by 6
    /bin/grep "^asmdba" /etc/group > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Group asmdba - 已经存在"
    else
        echo "Adding group asmdba"
        /usr/sbin/groupadd asmdba
    fi
    
    # 6.7.创建asmadmin组 add by 6
    /bin/grep "^asmadmin" /etc/group > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Group asmadmin - 已经存在"
    else
        echo "Adding group asmadmin"
        /usr/sbin/groupadd asmadmin
    fi
    
    # 6.8.创建asmoper组 add by 6
    /bin/grep "^asmoper" /etc/group > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Group asmoper - 已经存在"
    else
        echo "Adding group asmoper"
        /usr/sbin/groupadd asmoper
    fi
    
    # 6.9.创建oracle账户,如果已有oracle账号,将自动为该账号设置密码。
    /bin/grep "^oracle:" /etc/passwd   > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "Adding user oracle with user id ${USERID}, initial login group oinstall, supplementary group asmadmin,asmdba,dba,oper and  home directory /home/oracle"
        /usr/sbin/useradd -u ${USERID} -g oinstall -G asmadmin,asmdba,dba,oper -d /home/oracle oracle
        if [ "$?" -eq "0" ]; then
            echo "Changing ownership of /home/oracle to oracle:oinstall"
            /bin/chown oracle:oinstall /home/oracle
        else
            echo -e "\033[31m创建oracle用户失败----------Failed\033[0m"
        fi
    else
        echo "用户oracle已经存在"
    fi
    
    # 6.10.创建grid账户 如果已有grid账号,将自动为该账号设置密码。add by 6
    /bin/grep "^grid:" /etc/passwd > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        #Add the user - password is disabled for grid user.
        #添加用户 - 并自动为grid用户设置密码。
        echo "Adding user grid with user id ${USERID}, initial login group oinstall, supplementary group asmadmin,asmdba,asmoper,dba and  home directory /home/grid"
        /usr/sbin/useradd -u `expr ${USERID} + 1` -g oinstall -G asmadmin,asmdba,asmoper,dba -d /home/grid grid
        if [ "$?" -eq "0" ]; then
            echo "Changing ownership of /home/grid to grid:oinstall"
            /bin/chown grid:oinstall /home/grid
        else    
            echo -e "\033[31m创建grid用户失败----------Failed\033[0m"
        fi
    else
        echo "用户grid已经存在"
    fi
    
    # 6.11.为oracle账户设置密码
    echo ${oraclePasswd} | passwd --stdin oracle
    if [ $? -eq 0 ]
    then
        echo "修改oracle密码 - Success"
    else
        echo -e "\033[31m修改oracle密码----------Failed\033[0m"
    fi
    
    # 6.12.为grid账户设置密码
    echo ${gridPasswd} | passwd --stdin grid
    if [ $? -eq 0 ]
    then
        echo "修改grid密码 - Success"
    else
        echo -e "\033[31m修改grid密码----------Failed\033[0m"
    fi
    
    # 6.13.检查oracle用户所属组是否正确
    id oracle | grep asmadmin > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "oracle附属组检查通过"
    else
        usermod -aG asmadmin oracle
        if [ $? -eq 0 ]
        then
            echo "用oracle用户添加组成功"
        else
            echo -e "\033[31m用oracle用户添加组失败----------Failed\033[0m"
        fi
    fi
    
    id oracle | grep asmdba > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "oracle附属组检查通过"
    else
        usermod -aG asmdba oracle
        if [ $? -eq 0 ]
        then
            echo "用oracle用户添加组成功"
        else
            echo -e "\033[31m用oracle用户添加组失败----------Failed\033[0m"
        fi
    fi
    
    id oracle | grep dba > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "oracle附属组检查通过"
    else
        usermod -aG dba oracle
        if [ $? -eq 0 ]
        then
            echo "用oracle用户添加组成功"
        else
            echo -e "\033[31m用oracle用户添加组失败----------Failed\033[0m"
        fi
    fi
    
    id oracle | grep oper > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "oracle附属组检查通过"
    else
        usermod -aG oper oracle
        if [ $? -eq 0 ]
        then
            echo "用oracle用户添加组成功"
        else
            echo -e "\033[31m用oracle用户添加组失败----------Failed\033[0m"
        fi
    fi
    
    # 6.14.检查grid用户所属组是否正确
    id grid | grep asmadmin > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "grid附属组检查通过"
    else
        usermod -aG asmadmin grid
        if [ $? -eq 0 ]
        then
            echo "用户 grid 添加组成功"
        else
            echo -e "\033[31m用户 grid 添加组失败----------Failed\033[0m"
        fi
    fi
    
    id grid | grep asmdba > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "grid附属组检查通过"
    else
        usermod -aG asmdba grid
        if [ $? -eq 0 ]
        then
            echo "用户 grid 添加组成功"
        else
            echo -e "\033[31m用户 grid 添加组失败----------Failed\033[0m"
        fi
    fi
    
    id grid | grep asmoper > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "grid附属组检查通过"
    else
        usermod -aG asmoper grid
        if [ $? -eq 0 ]
        then
            echo "用户 grid 添加组成功"
        else
            echo -e "\033[31m用户 grid 添加组失败----------Failed\033[0m"
        fi
    fi
    
    id grid | grep dba > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "grid附属组检查通过"
    else
        usermod -aG dba grid
        if [ $? -eq 0 ]
        then
            echo "用户 grid 添加组成功"
        else
            echo -e "\033[31m用户 grid 添加组失败----------Failed\033[0m"
        fi
    fi
    
    # 获取oinstall组的最终ID
    GROUPID=`cat /etc/group | grep oinstall | awk -F ":" '{print $3}'`
    
    # 6.15.检查oracle用户主组是否正确
    id oracle | grep gid=${GROUPID} > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "oracle主组检查通过"
    else
        usermod --gid ${GROUPID} oracle
        if [ $? -eq 0 ]
        then
            echo "用户 grid 主组修改成功"
        else
            echo -e "\033[31m用户 oracle 主组修改失败----------Failed\033[0m"
        fi
    fi
    
    # 6.16.检查grid用户主组是否正确
    id grid | grep gid=${GROUPID} > /dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "oracle主组检查通过"
    else
        usermod --gid ${GROUPID} grid
        if [ $? -eq 0 ]
        then
            echo "用户 grid 主组修改成功"
        else
            echo -e "\033[31m用户 grid 主组修改失败----------Failed\033[0m"
        fi
    fi
    
    
    # 7.新建grid和oracle安装目录
    
    mkdir -p ${GRID_BASETemp}
    mkdir -p ${GRID_HOMETemp}
    mkdir -p ${ORACLE_BASETemp}
    chown -R grid:oinstall ${GridOracleHomeTemp}
    chown oracle:oinstall ${ORACLE_BASETemp}
    chmod -R 775 ${GridOracleHomeTemp}
    
    # 8.配置oracle和grid用户变量
    if [ $nodeNum -eq 1 ]
    then
        grep 666666 /home/oracle/.bash_profile
        if [ $? -eq 0 ]; then
            cp /home/oracle/.bash_profile.666666 /home/oracle/.bash_profile
        else
            cp /home/oracle/.bash_profile /home/oracle/.bash_profile.666666
        fi
    
    cat <<EOF >>/home/oracle/.bash_profile
    #add by 666666
    export ORACLE_SID=${ORACLE_SIDTemp}1  # RAC1
    export ORACLE_UNQNAME=${ORACLE_UNQNAMETemp}
    export ORACLE_BASE=${ORACLE_BASETemp}
    export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db
    export TNS_ADMIN=\$ORACLE_HOME/network/admin
    export PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    EOF
    
        grep 666666 /home/grid/.bash_profile
        if [ $? -eq 0 ]; then
            cp /home/grid/.bash_profile.666666 /home/grid/.bash_profile
        else
            cp /home/grid/.bash_profile /home/grid/.bash_profile.666666
        fi
    
    cat <<EOF >>/home/grid/.bash_profile
    #add by 666666
    export ORACLE_SID=${GRID_SIDTemp}1  # RAC1
    export ORACLE_BASE=${GRID_BASETemp}
    export ORACLE_HOME=${GRID_HOMETemp}
    export PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
    umask 022
    EOF
    
    else
        grep 666666 /home/oracle/.bash_profile
        if [ $? -eq 0 ]; then
            cp /home/oracle/.bash_profile.666666 /home/oracle/.bash_profile
        else
            cp /home/oracle/.bash_profile /home/oracle/.bash_profile.666666
        fi
    
    cat <<EOF >>/home/oracle/.bash_profile
    #add by 666666
    export ORACLE_SID=${ORACLE_SIDTemp}2  # RAC2
    export ORACLE_UNQNAME=${ORACLE_UNQNAMETemp}
    export ORACLE_BASE=${ORACLE_BASETemp}
    export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db
    export TNS_ADMIN=\$ORACLE_HOME/network/admin
    export PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    EOF
    
        grep 666666 /home/grid/.bash_profile
        if [ $? -eq 0 ]; then
            cp /home/grid/.bash_profile.666666 /home/grid/.bash_profile
        else
            cp /home/grid/.bash_profile /home/grid/.bash_profile.666666
        fi
    
    cat <<EOF >>/home/grid/.bash_profile
    #add by 666666
    export ORACLE_SID=${GRID_SIDTemp}2  # RAC2
    export ORACLE_BASE=${GRID_BASETemp}
    export ORACLE_HOME=${GRID_HOMETemp}
    export PATH=/usr/sbin:\$PATH
    export PATH=\$ORACLE_HOME/bin:\$PATH
    export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
    umask 022
    EOF
    fi
    
    # 9.配置本地YUM并安装依赖包(需要区分6和7)
    mkdir -p /mnt/cdrom
    mount /dev/cdrom /mnt/cdrom
    mv /etc/yum.repos.d/local.repo /etc/yum.repos.d/local.repo.bak
    cat <<EOF >/etc/yum.repos.d/local.repo
    [local]
    name=local
    baseurl=file:///mnt/cdrom
    gpgcheck=0
    enabled=1
    EOF
    
    
    
    yum clean all       #清理本地缓存
    yum clean plugins   #清理插件缓存
    
    
    yum install -y binutils-* compat-db* compat-db-* control-center* gcc-* gcc-c++-* glibc-* glibc-common-* gnome-libs-* \
    make-* pdksh* sysstat-* xscreensaver-* make-* gdb-6.1post-* glibc-* glibc-common-* glibc-devel-* glibc-devel-* \
    compat-gcc-* compat-gcc-c++-* compat-libstdc++-* compat-libstdc++-devel-* gnome-libs-* libstdc++-* libstdc++-devel-* \
    openmotif-* sysstat-* setarch-* libaio-* libaio-devel-* libXp* libXp-devel* elfutils-libelf-devel* unixODBC-* \
    unixODBC-devel-* compat-libcap1.x86_64 libcap.so.1 sg3_utils
    

    附录2:grid静默安装响应文件

    # 此文件从p13390677_112040_Linux-x86-64_2of7.zip提取
    # by 6 20181231 QQ:1327133225
    
    oracle.install.responseFileVersion=/oracle/install/rspfmt_crsinstall_response_schema_v11_2_0
    
    # 修改1:当前安装节点的计算机名称----------------------------------------------(重点注意1)
    ORACLE_HOSTNAME=rac1
    
    # 修改2:版本信息路径(路径相关可以不修改)
    INVENTORY_LOCATION=/u01/app/oraInventory
    
    # 修改3:语言,多选用,隔开(正常来说保持默认即可)
    SELECTED_LANGUAGES=en,zh_CN
    oracle.install.option=CRS_CONFIG
    
    # 修改4:grid 的 BASE 和 HOME 目录(路径相关可以不修改)
    ORACLE_BASE=/u01/app/grid
    ORACLE_HOME=/u01/app/11.2.0/grid
    
    oracle.install.asm.OSDBA=asmdba
    oracle.install.asm.OSOPER=asmoper
    oracle.install.asm.OSASM=asmadmin
    
    # 修改5:scan名称,和hosts对应--------------------------------------------------(重点注意2)
    oracle.install.crs.config.gpnp.scanName=rac-scan
    
    # 修改6:集群监听端口号---------------------------------------------------------(重点注意3)
    oracle.install.crs.config.gpnp.scanPort=1521
    
    # 修改7:cluster名称,可以保持默认
    oracle.install.crs.config.clusterName=rac-cluster
    
    oracle.install.crs.config.gpnp.configureGNS=false
    oracle.install.crs.config.gpnp.gnsSubDomain=
    oracle.install.crs.config.gpnp.gnsVIPAddress=
    oracle.install.crs.config.autoConfigureClusterNodeVIP=false
    
    # 修改8:节点信息,跟hosts对应---------------------------------------------------(重点注意4)
    oracle.install.crs.config.clusterNodes=rac1:rac1-vip,rac2:rac2-vip
    
    # 修改9:网卡信息和网段,对应ifconfig结果(两个节点的网卡名称需要一致)----------(重点注意5)
    oracle.install.crs.config.networkInterfaceList=eth0:10.0.1.0:1,eth1:11.11.11.0:2
    
    # 存储形式,使用ASM的话保持默认即可(可以不修改)
    oracle.install.crs.config.storageOption=ASM_STORAGE
    
    oracle.install.crs.config.sharedFileSystemStorage.diskDriveMapping=
    oracle.install.crs.config.sharedFileSystemStorage.votingDiskLocations=
    oracle.install.crs.config.sharedFileSystemStorage.votingDiskRedundancy=NORMAL
    oracle.install.crs.config.sharedFileSystemStorage.ocrLocations=
    oracle.install.crs.config.sharedFileSystemStorage.ocrRedundancy=NORMAL
    oracle.install.crs.config.useIPMI=false
    oracle.install.crs.config.ipmi.bmcUsername=
    oracle.install.crs.config.ipmi.bmcPassword=
    
    # SYS密码
    oracle.install.asm.SYSASMPassword=asmadmin
    
    # 修改10:表决盘名称(可以不修改)
    oracle.install.asm.diskGroup.name=OCR
    
    # 修改11:表决盘冗余选项(接受以下3个选项)-----------------------------------------(重点注意6)
    
    # HIGH          高冗余:最少5块磁盘,Oracle ASM默认提供三重镜像。可以容忍在不同故障组中丢失两个Oracle ASM磁盘。
    # NORMAL        正常冗余:最少3块磁盘,Oracle ASM默认提供双向镜像,这意味着镜像所有文件,以便每个范围有两个副本。容许丢失一个磁盘。
    # EXTERNAL      外部冗余:最少1块盘,由外部RAID提供冗余。
    
    oracle.install.asm.diskGroup.redundancy=NORMAL
    oracle.install.asm.diskGroup.AUSize=1
    
    # 修改12:表决盘所使用的裸盘,根据需要修改------------------------------------------(重点注意7)
    oracle.install.asm.diskGroup.disks=/dev/raw/raw1,/dev/raw/raw2,/dev/raw/raw5
    
    oracle.install.asm.diskGroup.diskDiscoveryString=
    
    # ASMSNMP密码
    oracle.install.asm.monitorPassword=asmadmin
    oracle.install.crs.upgrade.clusterNodes=
    oracle.install.asm.upgradeASM=false
    oracle.installer.autoupdates.option=SKIP_UPDATES
    oracle.installer.autoupdates.downloadUpdatesLoc=
    AUTOUPDATES_MYORACLESUPPORT_USERNAME=
    AUTOUPDATES_MYORACLESUPPORT_PASSWORD=
    PROXY_HOST=
    PROXY_PORT=0
    PROXY_USER=
    PROXY_PWD=
    PROXY_REALM=
    

    相关文章

      网友评论

        本文标题:Linux下静默安装Oracle 11g RAC

        本文链接:https://www.haomeiwen.com/subject/dmrkyqtx.html