Oracle RAC安装
参考链接:https://blog.csdn.net/u012779110/article/details/125862423,需要安装两个操作系统Oracle Linux 7.4,分别命名为rac1和rac2,需要设置
①rac1和rac2操作系统的外部IP,叫Public IP(固定的IP),公共ip,是真实的ip,提供对外的数据服务,这两个需要和宿主机IP在同一个网段。因为宿主机IP是172.25.100.1/255.255.255.0,所以可以设置为172.25.100.131和172.25.100.132
②rac1和rac2的虚拟IP,叫virtual IP(浮动的IP),简称vip,与公共IP在同一个网段,用于故障切换和负载均衡。设置为172.25.100.133和172.25.100.134
③rac1和rac2的内部IP,叫private ip,私有IP,用于节点间的通讯,如心跳同步。设置为1.1.1.1和1.1.1.2
④scan ip,对应的是整个RAC群体(scan是single client access name),通讯路径是client->scan ip->vip。设置为172.25.100.130
一、安装操作系统
安装链接:https://www.cnblogs.com/muhai/p/16567352.html
这里虚拟机名称是rac1和rac2,位置在E:\RAC\rac1和E:\RAC\rac2
二、配置网络(与之前单节点稍有不同,所以这里重新描述)
1、修改host(rac1和rac2都要配置)
vi /etc/hosts #Public IP 172.25.100.131 rac1 172.25.100.132 rac2 #Virtual IP 172.25.100.133 rac1-vip 172.25.100.134 rac2-vip #Private IP 1.1.1.1 rac1-priv 1.1.1.2 rac2-priv #Scan IP 172.25.100.130 rac-scan
2、配置网卡(添加网卡参考链接:https://www.linuxidc.com/Linux/2017-03/142370.htm),rac1和rac2方法一致,但是要区分ip。
cd /etc/sysconfig/network-scripts ls -lrth //可以看到有ifcfg-ens33和ifcfg-ens36两张网卡信息,ifconfig查看只有ens33的信息,没有ens36,ens36的配置文件是空的,可以把ens36删除,利用nmtui生成ens36网卡 rm -rf ens36 nmtui
①Enter;②向右箭头Add;③Enter;
④向下箭头Ethernet;⑤删除默认名称,Profile name和Device都输入ens36;⑥IPv4配置选择Manual,输入地址1.1.1.1,可以在ifcfg-end36里面修改(也可以到后面配置),向下箭头到OK->back->quit
#vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static //修改BOOTPROTO ONBOOT=yes //修改ONBOOT IPADDR=172.25.100.131 //增加rac2是172.25.100.132 NETMASK=255.255.255.0 //增加 GATEWAY=172.25.100.1 //增加 #vi /etc/sysconfig/network-scripts/ifcfg-ens36 BOOTPROTO=static //修改BOOTPROTO
IPADDR=1.1.1.1 //rac2是1.1.1.2
之后通过ifconfifig查看网卡信息还是没有ens36,需要在虚拟机界面添加网卡,即虚拟机->设置->添加->网络适配器->仅主机模式,ifup ens36之后ifconfig查看可以看到ens36的相关信息
三、安装前准备(RAC安装先准备grid和asm,之后再安装数据库,因为安装数据库的时候要选择节点)
参考链接:https://www.cnblogs.com/muhai/p/16498840.html第二步,先挂载iso文件(在安装前准备里第三步的6),关闭selinux和防火墙,后添加yum源(软件包,在131和132之间传送安装包可以使用scp)
1、这里创建安装目录有点区别,不只有oracle的安装路径,还有grid的安装路径(rac1和rac2都要配置,不然后面确认目录是会出错)
mkdir -p /u01/app/grid mkdir -p /u01/app/19.0.0/grid mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1 mkdir -p /home/oracle/scripts chown -R grid:oinstall /u01 chown -R oracle:oinstall /u01/app/oracle /home/oracle/scripts chmod -R 775 /u01 /home/oracle/scripts
2、配置环境变量(rac1和rac2都要配置,而且两个节点的内容略有不同)
①grid用户(节点1的ORACLE_SID是+ASM1,节点二的ORACLE_SID是+ASM2)
//grid用户 su - grid #vi /home/grid/.bash_profile umask 022 export TMP=/tmp export TMPDIR=$TMP export ORACLE_BASE=/u01/app/grid export ORACLE_HOME=/u01/app/19.0.0/grid export ORACLE_SID=+ASM1 export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export PATH=/usr/sbin:/usr/local/bin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib alias sqlplus=' rlwrap sqlplus' alias rman=' rlwrap rman' alias adrci='rlwrap adrci' alias dgmgrl='rlwrap dgmgrl' alias asmcmd='rlwrap asmcmd'
②oracle用户(rac1和rac2都要配置,节点1的ORACLE_HOSTNAME和ORACLE_SID都是rac1,节点2的都是rac2)
su - oracle
#vi /home/oracle/.bash_profile
umask 022 export TMP=/tmp export TMPDIR=$TMP export ORACLE_HOSTNAME=rac1 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1 export ORACLE_SID=rac1 export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss" export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export PATH=/usr/sbin:/usr/local/bin:$PATH export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib alias sqlplus=' rlwrap sqlplus' alias rman=' rlwrap rman' alias adrci='rlwrap adrci' alias dgmgrl='rlwrap dgmgrl' alias asmcmd='rlwrap asmcmd'
3、ASM配置(rac1和rac2的.wmx都要配置,grid安装时OCR需要至少三个磁盘,安装数据库实例时也要执行ASM磁盘组存放数据文件,这里创建6个磁盘)
①虚拟机创建共享盘(创建之前E:\RAC\sharedisk19c目录要存在,这个命令在宿主机执行)
"C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 2g -a lsilogic -t 2 "E:\RAC\sharedisk19c\share-ocr01.vmdk" "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 2g -a lsilogic -t 2 "E:\RAC\sharedisk19c\share-ocr02.vmdk" "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 2g -a lsilogic -t 2 "E:\RAC\sharedisk19c\share-ocr03.vmdk" "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 10g -a lsilogic -t 2 "E:\RAC\sharedisk19c\share-data01.vmdk" "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 10g -a lsilogic -t 2 "E:\RAC\sharedisk19c\share-data02.vmdk" "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -c -s 10g -a lsilogic -t 2 "E:\RAC\sharedisk19c\share-data03.vmdk" //OCR组只有ocr01、ocr02的话两个磁盘在后面安装grid配置ASM的时候不会成功,normal方式最少3个,加上ocr03
前面的exe是执行程序,-c是创建命令,-s是执行大小命令,-a是指定磁盘适配器类型,有三种类型,这里选择lsi logic scsi接口适配器,-t指定虚拟磁盘的类型,选择2是创建一个包含在单一虚拟文件中的预分配虚拟磁盘,双引号里是创建的共享盘位置
②编辑虚拟机配置文件
关闭两台虚拟机->记事本打开Rac1.wmx和Rac2.wmx添加以下内容->重新打开rac2和rac2,查看两个节点的设置会出现硬盘2、硬盘3...
//在Rac1.wmx,Rac2.wmx后面加入以下内容,scsi1:0表示第一块,scsi1:1表示第二块... #shared disks configure diskLib.dataCacheMaxSize=0 diskLib.dataCacheMaxReadAheadSize=0 diskLib.dataCacheMinReadAheadSize=0 diskLib.dataCachePageSize=4096 diskLib.maxUnsyncedWrites = "0" disk.locking = "FALSE" scsi1.sharedBus = "virtual" scsi1.present = "TRUE" scsi1.virtualDev = "lsilogic" scsi1:0.mode = "independent-persistent" scsi1:0.deviceType = "disk" scsi1:0.present = "TRUE" scsi1:0.fileName = "E:\RAC\sharedisk19c\share-ocr01.vmdk" scsi1:0.redo = "" scsi1:1.mode = "independent-persistent" scsi1:1.deviceType = "disk" scsi1:1.present = "TRUE" scsi1:1.fileName = "E:\RAC\sharedisk19c\share-ocr02.vmdk" scsi1:1.redo = "" scsi1:2.mode = "independent-persistent" scsi1:2.deviceType = "disk" scsi1:2.present = "TRUE" scsi1:2.fileName = "E:\RAC\sharedisk19c\share-ocr03.vmdk" scsi1:2.redo = "" scsi1:3.mode = "independent-persistent" scsi1:3.deviceType = "disk" scsi1:3.present = "TRUE" scsi1:3.fileName = "E:\RAC\sharedisk19c\share-data01.vmdk" scsi1:3.redo = "" scsi1:4.mode = "independent-persistent" scsi1:4.deviceType = "disk" scsi1:4.present = "TRUE" scsi1:4.fileName = "E:\RAC\sharedisk19c\share-data02.vmdk" scsi1:4.redo = "" scsi1:5.mode = "independent-persistent" scsi1:5.deviceType = "disk" scsi1:5.present = "TRUE" scsi1:5.fileName = "E:\RAC\sharedisk19c\share-data03.vmdk" scsi1:5.redo = ""
③配置共享存储(这里磁盘组前缀是asm-disk*,创建6个磁盘,后面安装grid配置OCR和安装Oracle软件时使用,查找磁盘组可以/dev/asm*查找)
//获取设备标识符,与之后的对比 /usr/lib/udev/scsi_id -g -u -d /dev/sdb
cat /dev/null >/etc/udev/rules.d/99-oracle-asmdevices.rules //循环将信息输入到 /etc/udev/rules.d/99-oracle-asmdevices.rules文件,循环7次,因为有7个磁盘 for i in a b c d e f g; do echo "KERNEL==\"sd*\", ENV{DEVTYPE}==\"disk\", SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id -g -u -d \$devnode\",RESULT==\"`/usr/lib/udev/scsi_id -g -u -d /dev/sd$i`\", RUN+=\"/bin/sh -c 'mknod /dev/asm-disk$i b \$major \$minor; chown grid:asmadmin /dev/asm-disk$i; chmod 0660 /dev/asm-disk$i'\"" >> /etc/udev/rules.d/99-oracle-asmdevices.rules; done
cat /etc/udev/rules.d/99-oracle-asmdevices.rules
//将配置的文件直接传给rac2,不需要重新生成 scp /etc/udev/rules.d/99-oracle-asmdevices.rules rac2:/etc/udev/rules.d/ //清盘 dd if=/dev/zero of=/dev/sdb bs=4M count=100 dd if=/dev/zero of=/dev/sdc bs=4M count=100 dd if=/dev/zero of=/dev/sdd bs=4M count=100 dd if=/dev/zero of=/dev/sde bs=4M count=100 dd if=/dev/zero of=/dev/sdf bs=4M count=100 dd if=/dev/zero of=/dev/sdg bs=4M count=100 //加载rules文件,重新加在udev rule /sbin/udevadm control --reload //检查新的设备名称 /sbin/udevadm trigger --type=devices --action=change //诊断udev rule /sbin/udevadm test /sys/block/* ll /dev/asm* reboot
4、停用avahi服务(rac1和rac2都要配置)
systemctl stop avahi-daemon
systemctl disable avahi-daemon
5、rac1解压安装文件(只是rac1,grid、oracle、Opatch和RU补丁,都只是解压到rac1,但另外的节点rac2不需要,在安装时rac2的/u01/app/19.0.0/grid和/u01/app/oracle/product/19.0.0/dbhome_1要保持干净,不能有任何文件,否则会出现The Oracle home location contains directories or files on following remote nodes:,即rac2的ORACLE_HOME路径下包含目录和文件)
LINUX.X64_193000_grid_home.zip是grid安装包
LINUX.X64_193000_db_home.zip是oracle安装包
p6880880_190000_Linux-x86-64.zip是OPatch更新包
p33803476_190000_Linux-x86-64.zip是grid升级补丁包
p33806152_190000_Linux-x86-64.zip是oracle升级补丁包
chown -R grid:oinstall /ORACLE19C su - grid -c "unzip /ORACLE19C/LINUX.X64_193000_grid_home.zip -d /u01/app/19.0.0/grid/" chown -R oracle:oinstall /ORACLE19C su - oracle -c "unzip /ORACLE19C/LINUX.X64_193000_db_home.zip -d /u01/app/oracle/product/19.0.0/dbhome_1" chown -R grid:oinstall /ORACLE19C su - grid cd /u01/app/19.0.0/grid ./OPatch/opatch lsinventory //目前版本是 12.2.0.1.17 mv OPatch OPatch.BAK //备份 unzip /ORACLE19C/p6880880_190000_Linux-x86-64.zip -d /u01/app/19.0.0/grid/ unzip /ORACLE19C/p33803476_190000_Linux-x86-64.zip -d /ORACLE19C
6、安装cvuqdisk
rpm -ivh /u01/app/19.0.0/grid/cv/rpm/cvuqdisk-1.0.10-1.rpm
注:设置好前面的配置之后可以对两个节点进行快照,如果后面安装失败可以直接返回该快照。
四、安装grid软件(在rac1安装时rac2也会同步安装,所以前面步骤比如创建用户、设置环境变量、asm磁盘等都要一起设置好)
1、先升级后安装,升级到19.15版本
//图形化界面登录grid用户
source ~/.bash_profile cd $ORACLE_HOME //升级并安装grid ./gridSetup.sh -applyRU /ORACLE19C/33803476
配置选项,默认 新集群配置 Oracle Grid Infrastructure,Next
集群配置,默认 配置Oracle默认集群,Next
网络即插即用,默认选择Create Local SCAN,Cluster Name为rac,SCAN Name为rac-scan
集群节点信息,添加另一个节点信息。Add->Add a single node->Public Hostname:rac2->Virtual Hostname:rac2-vip,next
点击SSH Connectivity,输入grid密码,点击Setup,出现Failed to setup passwordless SSH的错误(rac2),反应过来是rac2那台主机还没有创建grid用户,所以出现错误,在rac2创建号grid用户之后Setup就成功了。Setup之后点击Test。在选择磁盘之前一定要把rac1、rac2的安装前东西配置好,因为两台是一起安装的。
点击Next出现错误Installer has detected that alias names ....,查看rac2的主机名发现不是rac2而是localhost.localdomain,需要通过root用户将其改为rac2,Next就可以了
网络接口使用情况,ens33作为public ip,ens36作为priv ip
存储选项,默认,Use Oracle Flex ASM for storages
创建GI管理仓库,默认,No
创建ASM磁盘组,OCR和表决磁盘组名改为OCR,冗余选择External,磁盘查找路径修改为查找/dev/asm*,找到后会出现在列表里,取消选中configure Oracle ASM Filter Driver
(11.2g以后normal至少要三个磁盘,high至少5个磁盘)
设置ASM密码,选择使用统一密码(这里密码太简单了报错),设置成Oracle321。这里的用户有SYS等
故障隔离,默认
管理选项,不做任何操作,Next
操作系统组,默认(这些组在前面的时候创建过了)
安装路径,默认(rac2的这些路径也要存在,否则会报错)
在rac2没有创建相关的目录路径(也没有配置环境变量)时会出现错误(在rac1安装的时候rac2也同步安装,相关的东西都要一致)
创建产品清单位置,默认
root脚本执行,默认,不选
必要条件检查,选择全部忽略
总结,选择安装
在提示执行脚本的时候,需要两个节点以root用户执行两个脚本。先执行完脚本再点击OK。
# /u01/app/oraInventory/orainstRoot.sh # /u01/app/19.0.0/grid/root.sh
执行顺序是节点rac1、rac2都先执行/u01/app/oraInventory/orainstRoot.sh;之后节点rac1、rac2再执行/u01/app/19.0.0/grid/root.sh。如果rac1先执行完上面两个脚本,再到rac2执行该两个脚本会出现错误CLSRSC-505: The root script cannot proceed on this node rac2 because the root script...参考链接是https://blog.csdn.net/qq961573863/article/details/106029982。
service NetworkManager stop; //关闭网络管理器 chkconfig NetworkManager off /u01/app/19.0.0/grid/root.sh
之后查看hostname,发现主机名变成rac1-vip,通过hostnamectl set-hostname rac1将主机名改成rac1,之后再rac1运行该脚本就成功了,成功之后在rac2运行该脚本,之后也成功了。
出现这个错误,可忽略,点击Next即可。
结束。
crsctl stat res -t查看集群状态
su -grid cd $ORACLE_HOME/bin crsctl stat res -t
五、添加ASM磁盘组DATA(存放ORACLE的数据文件,以grid用户运行)
su - grid
asmca
1、点击磁盘组,点击创建
2、创建磁盘组。步骤是输入磁盘组名称DATA,冗余选择External,默认显示符合项Show Eligible,可以更改查找前缀,最后点击确定。
3、创建成功,Exit
六、安装ORACLE软件(root解压,oracle执行)
chown oracle:oinstall /ORACLE19C/ su - oracle -c "unzip /ORACLE19C/p33806152_190000_Linux-x86-64.zip -d /ORACLE19C/" //解压ORACLE的升级包到rac1,之前的p33803476_190000_Linux是grid的升级包
su - oracle
cd $ORACLE_HOME mv OPatch OPatch.BAK //备份,oracle home目录也要更新OPatch包 unzip /ORACLE19C/p6880880_190000_Linux-x86-64.zip //图形界面登录oracle用户 source ~/.bash_profile cd $ORACLE_HOME ./runInstaller -applyRU /ORACLE19C/33806152/ //先升级再安装oracle数据库
1、配置选项,选择第二个,仅安装软件
2、数据库安装选项,默认,RAC安装
3、节点选择,点击SSH连接,输入密码,Setup->Test->Next
4、数据库版本,默认企业版
5、安装路径,默认
6、操作系统组,默认
7、Root脚本执行,默认
8、条件检查,选中忽略全部,Next(注:如果有ASM的错误,比如下面的ASM storage privilege for the user oracle,下面提示是asmdba组里没有oracle用户,需要在创建用户组的时候把oracle加入相关用户组)
9、总结,Install
先执行完脚本点击OK。
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh
10、安装产品,完成之后Close。
七、创建数据库实例
//图形界面登录oracle用户 su - oracle dbca
1、数据库操作,默认,创建数据库
2、创建模式,默认,高级配置
3、部署类型,默认
4、节点选择,默认,有rac1和rac2
5、数据库标识,全局数据库名和SID设置为rac,不选择创建为容器数据库
6、存储选项,选择第二个选项,数据文件存储类型选择ASM,路径默认,勾中OMF。这里发现数据文件位置是空的没有检测到,但是之前已经创建过DATA磁盘组了,这里就是oracle用户读取不了grid创建DATA磁盘组的权限问题。需要给orale用户授权。
cd /u01/app/19.0.0/grid/bin/ ll -l oracle //检查GRID_HOME/bin下oracle是否有s权限,如果没有则添加s权限 chomd +s oracle ls -l oracle //-rwsrwsr-x 1 grid oinstall 425729040 Mar 23 16:13 oracle
7、 快速恢复选项。默认,不选,Next。
8、Data Vault Option,默认,不选,Next。
9、内存配置选项,默认ASMM,SGA+PGA占总的70%~90%,Next
10、管理器选项,取消选中所有。
11、用户密码,选择使用相同密码,设置为Oracle321
12、创建数据库选项,默认,Next。
13、条件检查,与DNS相关的警告,选择Ignore All,Next
14、Summary,点击Finish。
15、开始创建数据库实例。
16、Finish。
如果创建数据库实例的时候出现创建不成功的情况,进入$ORACLE_BASE/diag/rdbms/rac/rac2/trace/alert_rac1.log查看日志发现出现ORA-27508:IPC error sending a message,和节点安装配置asm&private IP有关。
su - grid oifcfg getif //查看当前节点的网口信息,发现有两个asm&private ip oifcfg delif -global eth0/172.24.5.0 //删除私网eth0即可
八、节点操作命令
1、查看节点启动状态(grid用户)
crsctl stat res -t
2、查看实例状态(oracle用户)
srvctl status database -d rac
3、启停节点并查看实例状态(oracle用户)
srvctl stop instance -d rac -i rac1 //关闭节点rac1 srvctl status database -d rac //节点状态 srvctl start instance -d rac -i rac1 //开启节点rac1 srvctl status database -d rac //节点状态
4、通过sqlplus连入数据库,查看节点状态
sqlplus / as sysdba;
出现bash: rlwrap: command not found...错误是因为没有安装rlwrap依赖包,重新通过yum install即可
select instance_number,instance_name,host_name,status,version from gv$instance;