Linux 6.6+ Oracle RAC 12c搭建详解

发布时间 2023-08-01 10:03:10作者: Wes-Q

1.  Red Hat Enterprise Linux Server release 6.6 x86_64 两台

2.  Oracle 12.1.0.1

3.  ASM存储方式

4.  软件下载:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-linux-12201-3608234.html

 

5.  基础安装包yum -y install binutils.x86_64 compat-libcap1.x86_64 compat-libstdc* e2fsprogs.x86_64 libaio* libXau* libXi* libXtst* libstdc* glibc* libgcc* ksh gcc-c++*

6.  内核参数设置

vi /etc/sysctl.conf

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 10485760

kernel.shmmax = 42949672960

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 = 1048576

 

7.  主机ip配置

7个IP是需要申请的,其中2个作为Public IP,2个作为VIP,1个Scan-IP,这5个IP应当是同一网段的,最后还需要2个不同网段的Private IP,虽然私网IP可以自定义,但是在不清楚私网是通过公网直连还是通过单独的交换机时(其实oracle要求private ip的interconnect使用单独的交换机且带宽需要至少是GB级别),最好申请独立的私网IP。网卡每个节点需要2个至少,Public IP占用一个,Private占用一个。

vi /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#oracle RAC public IP

10.161.170.90 vlxcndsz01dbt01 vlxcndsz01dbt01.aac.com

10.161.170.91 vlxcndsz01dbt02 vlxcndsz01dbt02.aac.com

#oracle RAC vip IP

10.161.170.92 vlxcndsz01dbt01-vip

10.161.170.93 vlxcndsz01dbt02-vip

#oracle RAC private IP

10.160.21.16 vlxcndsz01dbt01-pri

10.160.21.17 vlxcndsz01dbt02-pri

#oracle RAC Scan IP

10.161.170.94 ractestscan

 

8. 禁用防火墙和selinux

service iptables stop

service ip6tables stop

chkconfig iptables off

chkconfig ip6tables off

/etc/selinux/config

修改文件中的SELINUX="" 为 disabled ,然后重启。

 

9. NTP时间同步

两个节点安装ntp服务

yum -y install ntp

主节点配置如下:

vim /etc/ntp.conf

 

 

辅助节点上配置

 

 

验证

 

分别开启服务端及客户端的ntp服务,并配置开机自启

 

service ntpd start

chkconfig ntpd on

客户端运行如下命令,与服务端实现同步

 

ntpdate -u 192.168.0.101

 

没有额外的时间同步服务器的话,互相同步就行。

 

 

 

10. 添加用户、组及目录

 

--两节点添加用户和组

groupadd -g 5001 oinstall

groupadd -g 5002 dba

groupadd -g 5003 asmadmin

groupadd -g 5004 asmdba

groupadd -g 5005 asmoper

groupadd -g 5006 oper

useradd -u 5001 -g oinstall -G asmadmin,asmdba,asmoper,dba grid

useradd -u 5002 -g oinstall -G dba,asmdba,oper oracle

 

--两节点创建目录并设置权限

mkdir -p /u01/app/oracle/product/12.2.0/db_1

mkdir -p /u01/app/grid

mkdir -p /u01/12.2.0/grid

mkdir -p /u01/app/oraInventory

chown -R oracle.oinstall /u01/app/oracle/

chown -R oracle.oinstall /u01/app/oracle/*

chown -R grid.oinstall /u01/app/grid/

chown -R grid.oinstall /u01/app/oraInventory/

chown -R grid.oinstall /u01/12.2.0/grid/

 

--修改用户安全限制:

vi /etc/security/limits.conf

oracle soft nofile 2048

oracle hard nofile 65536

oracle soft nproc 16384

oracle hard nproc 16384

oracle soft stack 10240

oracle hard stack 32768

oracle hard memlock 134217728

oracle soft memlock 134217728

grid soft nofile 2048

grid hard nofile 65536

grid soft nproc 16384

grid hard nproc 16384

grid soft stack 10240

grid hard stack 32768

grid hard memlock 134217728

grid soft memlock 134217728

 

/etc/pam.d/login文件加上内容:

session   required    pam_limits.so

 

--两节点设置用户环境变量,向.bash_profile添加如下项:

su - grid

vi .bash_profile

export ORACLE_BASE=/u01/app/grid

export ORACLE_HOME=/u01/12.2.0/grid

export ORACLE_SID=+ASM1/+ASM2

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

su - oracle

vi .bash_profile

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1

export ORACLE_SID=orcl1/orcl2

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export PATH=$ORACLE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

 

--在节点一配置ssh互信,步骤如下:

--使用root将数据库软件拷贝至/home/oracle/下:

# chown oracle.oinstall linuxx64_12201_database.zip

# su - oracle

$ unzip linuxx64_12201_database.zip

$ cd database/sshsetup/

$ ./sshUserSetup.sh -user oracle -hosts "node1 node2" -advanced -noPromptPassphrase

$ ./sshUserSetup.sh -user grid -hosts "node1 node2" -advanced -noPromptPassphrase

--最后在节点1使用oracle和grid用户都执行以下两条命令验证互信:

$ ssh node2 date

$ ssh node2-priv date

--如果不需要输入密码则说明互信配置成功。

 

*****************************************************************************************************

  1. 这里遇到SSH互信不通过的异常,原因是第二节点91上oracle及grid账号没有密码文件/home/oracle/.ssh/authorized_keys,从第一个节点copy过来就行。

打开/etc/ssh/sshd_config配置文件,修改

PubkeyAuthentication yes

AuthorizedKeysFile     .ssh/authorized_keys

启用publickey认证,同时必须保证PasswordAuthentication yes必须yes状态。

 

  1. Note2上/etc/sysconfig/network-scripts/中没有pri网卡信息,同时没有安装NetworkManager,需要yum install NetworkManager,然后启动服务service NetworkManager start,使用nmcli con show命令,查看ech1网卡的UUID信息,记下UUID值,使用ip addr命令查看网卡信息,记下ech1网卡的MAC地址, 将 /etc/sysconfig/network-scripts/目录中ifcfg-ech3文件复制一份,并命名为 ifcfg-ech1,重新修改配置文件,注意修改必要的硬件信息, 最后重新启动网卡/etc/init.d/network restart。

*****************************************************************************************************

 

 

11.获取sd盘的uuid然后将uuid绑定至99-oracle-asmdevices.rules

 

[root@node1 ~]#  scsi_id --whitelisted --replace-whitespace --device=/dev/sde

[root@node1 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="36000c292a8c68de639eeff754a6c5238", NAME+="asm-diskc", OWNER="grid", GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="36000c292a94b9a84b54baa8aeabd7b6f", NAME+="asm-diskd", OWNER="grid", GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="36000c295b9bf5baa40699a57cf3e55c9", NAME+="asm-diske", OWNER="grid", GROUP="asmadmin", MODE="0660"

KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="36000c293160833809144536b57d6ec68", NAME+="asm-diskf", OWNER="grid", GROUP="asmadmin", MODE="0660"

#KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="36000c29bd240a2afe682ec71a3c24d9c", NAME+="asm-diskg", OWNER="grid", GROUP="asmadmin", MODE="0660"

 

每块盘都需要添加。

 

 

12. GRID安装

 

将linuxx64_12201_grid_home.zip拷贝至grid用户的$ORACLE_HOME,/u01/12.2.0/grid,然后:

 

# chown grid.oinstall linuxx64_12201_grid_home.zip

# su - grid

$ unzip linuxx64_12201_grid_home.zip

--这样在进行安装时就会将你设置的grid用户的$ORACLE_HOME作为GI家目录了。

--注意所有软件都只需在节点一解压,节点二无需操作,安装GI和DB软件的过程中安装程序会自动将软件传至远端节点。

--这里还需要先装下cvuqdisk包,这个包存在于解压后的/home/oracle/database/rpm/目录下:

cp /home/oracle/database/rpm/cvuqdisk-1.0.10-1.rpm /root

--使用root rpm安装cvuqdisk

rpm -ivh cvuqdisk-1.0.10-1.rpm

--以上包的安装需要在2节点都执行,使用scp将cvuqdisk包传至节点二安装。

解压后使用grid用户进行GI安装:

 

远程的需要先配置DISPLAY :

export DISPLAY=本地ip:0.0

xhost +

cd /u01/12.2.0/grid/

./gridSetup.sh

 

********************************************************************************************

安装grid发现问题

INS-40718] Single Client Access Name (SCAN):bydb-cluster-scan could not be resolved.

Cause - The name you provided as the SCAN could not be resolved using TCP/IP host name lookup. 

Action - Provide name to use for the SCAN for which the domain can be resolved.

这是因为/etc/hosts配置的scan和界面中指定的scan name不一致引起

hosts文件配置:

10.161.170.94 ractestscan

所以界面中的SCAN Name要是ractestscan才不会报错

 

 

创建asm disk group时发现磁盘状态为member

使用dd删除磁头内容

dd if=/dev/zero of=/dev/sdc bs=1024 count=2056

 

 

子网不一致的异常:

将节点的网络配置修改成一致,eth device名称需一致。

 

resolv.conf Integrity 报错

--如果没有DNS服务器,则忽略。

 

/etc/resolv.conf 为只读模式

使用chmod 777 resolv.conf  会报如下的错:

chmod: changing permissions of `/etc/resolv.conf': Operation not permitted

首先先查看一下属性

sudo lsattr /etc/resolv.conf

然后去除i这个属性

sudo chattr -i /etc/resolv.conf

然后再修改权限chmod 777 resolv.conf  

 

OUI-10022:The target area /oracle/oraInventory cannot be used because it is in an invalid state

修改oraInst.loc文件(2节点)

vim /etc/oraInst.loc

inventory_loc=u01/app/oraInventory

inst_group=oinstall

 

 

[INS-20802] Oracle Cluster Verification Utility failed

Skip

*****************************************************************************************************

至此GRID已经安装完毕,使用如下命令查看集群状态:

su - grid

crsctl stat res -t

 

 

13. 创建ASM磁盘组

 

使用grid用户执行asmca创建数据磁盘组DATA和存放REDO、归档的磁盘组,一般测试环境这几个磁盘组合在一起即可。

 

 

14. 安装Oracle软件

 

使用oracle用户执行dbca建库:

--如无pdb需求,那么不选create as container database

 

--并不推荐以上建库方式,建议使用下边的高级配置,可以自己设置SGA,PGA和字符集等等。

 

建库完毕后使用如下命令查看整个集群和数据库的状态:

su - grid

crsctl stat res -t

srvctl config database -d orcl

lsnrctl status

 

 

15. 最后

 

ALTER SYSTEM SET AUDIT_TRAIL=NONE SCOPE=SPFILE SID='*';--关闭审计

alter system set deferred_segment_creation=false SCOPE=BOTH SID='*'; --关闭段创建延迟

#ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=SPFILE SID='*'; --关闭密码大小写验证,在12c版本中此参数已被弃用,如果手动改为FALSE,除非设置正确的SQLNET.ALLOWED_LOGON_VERSION_SERVER参数,否则所有用户都会无法登陆,因此不要这么改了。

ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;--设置登录次数为无限

ALTER SYSTEM SET CONTROL_FILE_RECORD_KEEP_TIME=31 SCOPE=BOTH SID='*';--控制文件内容保存时间

ALTER SYSTEM SET MAX_DUMP_FILE_SIZE='2048M' SCOPE=BOTH SID='*';--DUMP文件size的最大值

ALTER SYSTEM SET PROCESSES=2048 SCOPE=SPFILE SID='*';--最大进程数

ALTER SYSTEM SET "_UNDO_AUTOTUNE"=FALSE SCOPE=BOTH SID='*';--关闭UNDO自动调优的功能

ALTER SYSTEM SET "_USE_ADAPTIVE_LOG_FILE_SYNC"=FALSE SCOPE=BOTH SID='*'; --关闭自适应日志同步功能

alter database add supplemental log data; --打开附加日志,便于进行故障后数据找回

重启使以上部分设置生效:srvctl stop/start database -d orcl

 

最后,再设置下数据和归档的备份计划,根据业务压力调整下REDO大小和组数就可以了。

 

 

 

CRS异常

*****************************************************************************************************

CRS-4639: Could not contact Oracle High Availability Services

 

原因,crs没有启动

方法1、oracle中的bug,

启动之前需要执行

/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1   (如果想让重启能够执行,需要加入rc.local中,两个节点)

然后再执行

[root@rac2 bin]# ./crsctl start crs

 

方法1如果不行可以尝试方法2

 

[root@rac2 install]# /u01/app/11.2.0/grid/crs/install/roothas.pl -deconfig -force -verbose

 

然后重新配置

[root@rac2 grid]# ./root.sh

Running Oracle 11g root.sh script...

 

The following environment variables are set as:

    ORACLE_OWNER= oracle

    ORACLE_HOME=  /u01/app/11.2.0/grid

    ...

即可

如果是centos6以上还需要运行

[root@rac2 ~]# /bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

 

检查

[root@rac2 bin]# ./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

 

 

另外,注意的是,如果还是在重启服务器之后不能启动crs,则需要在启动crs之前执行命令(两个节点)

/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1

追根就是oracle的一个bug

 

[root@rac2 bin]# ./crsctl check crs

CRS-4638: Oracle High Availability Services is online

CRS-4535: Cannot communicate with Cluster Ready Services

CRS-4530: Communications failure contacting Cluster Synchronization Services daemon

CRS-4534: Cannot communicate with Event Manager

这个问题有几个原因

1、使用./crsctl start crs 之后立即执行了check,需要等待

2、需要查看节点连通状态,公有网络私有等,还有就是disk的属性

[root@rac2 disks]# ll

total 0

brw-rw---- 1 oracle dba 8, 17 Feb 10 23:47 DISK5

brw-rw---- 1 oracle dba 8, 33 Feb 10 23:47 DISK6

*****************************************************************************************************

 

 

先查看 rpm -qa | grep java

显示如下信息:

java-1.5.0-gcj-1.5.0.0-29.1.el6.i686

java-1.6.0-openjdk-1.6.0.0-1.50.1.11..5.e16_3-i386

卸载openjdk:

rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.i686

rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5.e16_3-i386