参考文档:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwlin/index.html
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/index.html
https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
建设背景:
建设本文档的目的在于详细梳理12c RAC图形化安装的流程,结合官方文档尽可能解释安装过程中的各种操作的原理,提供不同的存储配置方法和参数修改方法,最后形成一套完整的12c RAC图形化安装步骤以便于今后参考。
安装流程:
一、软件下载
下载 linuxx64_12201_database.zip 和 linuxx64_12201_grid_home.zip 就可以了,然后上传至节点1的任意目录。
二、硬件和网络环境
检查内存(至少8GB)、Swap和硬盘大小等等,参考GRID官网安装文档的:Server Hardware Checklist for Oracle Database Installation。
需要说明的是12c RAC安装,OCR盘至少需要40GB大小,因为12c新增了MGMTDB实例进行集群管理,如果你不单独的为他创建一个磁盘组,这些信息就会进入OCR盘,导致OCR盘需要40GB的空间才够。
检查操作系统版本,参考GRID官网安装文档的:Operating System Checklist for Oracle Database Installation on Linux。
本文的系统环境为Oracle Enterprise Linux 6.9。
tmpfs务必保证至少是最大内存的一半。
如果需要更大的SGA,那么至少要将将tmpfs设置为大于SGA的值,因为OEL系统下Oracle占用的共享内存不能大于tmpfs。
检查网络环境。
7个IP是需要申请的,其中2个作为Public IP,2个作为VIP,1个Scan-IP,这5个IP应当是同一网段的,最后还需要2个不同网段的Private IP,虽然私网IP可以自定义,但是在不清楚私网是直连还是通过交换机时,最好申请独立的私网IP。网卡每个节点需要2个至少,Public IP占用一个,Private占用一个。
以下为一个示例/etc/hosts文件:
vi /etc/hosts
#需要注意的是12c对主机名的要求比以前更加严格,不再允许出现下划线'_',只能使用连接线'-'。
#Public IP
192.168.10.101 node1
192.168.10.102 node2
#Private IP
1.1.1.1 node1-priv
1.1.1.2 node2-priv
#VIP
192.168.10.103 node1-vip
192.168.10.104 node1-vip
#Scan-IP
192.168.10.105 scanip
三、系统环境设置
Oracle强烈推荐使用一个名为oracle-database-server-12cR2-preinstall的RPM包来做预原装的检测工作。
此RPM包安装完毕后会出现一个/usr/bin/oracle-database-server-12cR2-preinstall-verify的系统命令,此命令主要就是做一些RAC安装前的准备工作,如禁用透明大页,修改内核参数和修改用户limits等等,需要提示的是此脚本只修改Oracle用户的limits,对于grid用户你需要把Oracle的limits内容复制一遍就可以了,相关的文件位置为:
/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf
--需要说明的是:limits.d目录中的用户限制文件是在/etc/security/limits.conf文件生效之后生效的,因此会覆盖limits.conf文件中的重复部分。
--稳妥起见直接在/etc/security/limits.d/oracle-database-server-12cR2-preinstall.conf文件中定义好oracle和grid用户的ulimit限制。
Oracle提供了多种 oracle-database-server-12cR2-preinstall RPM包的下载方式,这里只选择我认为较简单的一种获取方式:
wget http://yum.oracle.com/public-yum-ol6.repo -O /etc/yum.repos.d/public-yum-ol6.repo
--执行以上下载命令前最好检查下你是否本来就有public-yum-ol6.repo,如果有先做个备份防止被覆盖。
yum -y install oracle-database-server-12cR2-preinstall
--如果无法联网,那么可以使用yum的--downloadonly选项在其他机器上下载此rpm包后上传到安装节点,然后使用rpm安装。
--无法联网时使用rpm安装oracle-database-server-12cR2-preinstall还需要先安装ksh依赖包。
--此外注意,如果没有yum makecache那么以上安装可能非常慢,因为这个repo库特别庞大,国内网络连Oracle的yum源的速度大家也懂得。
安装完毕后会出现一个oracle-database-server-12cR2-preinstall-verify的系统命令,执行此命令应该就可以进行预设置了,然而实测还发现这个命令在OEL6.5版本上不能用,因为需要/etc/sysctl.d文件夹,这个文件夹OEL6.9是有的6.5并没有,因此要么是需要低版本的oracle-database-server-12cR2-preinstall,要么是不支持OEL6.5,无论是哪种原因这里都懒得深究了。
那么假如不用oracle-database-server-12cR2-preinstall,我们自己大致需要做哪些预操作呢,主要有以下几部分:
禁用透明大页
如果有大页需求,Oracle建议使用标准的大页提升性能,严禁使用透明大页。透明大页与标准大页的区别在于可以在系统运行时分配内存,而标准大页只能重启生效。
如果你要使用大页来提升性能,请务必搜索安装文档的所有HugePage关键词,根据文档作出修改,消除大页带来的隐患。
具体禁用透明大页的步骤,我就不复制粘贴了,有兴趣的参考12c GI安装文档的4.13部分--Disabling Transparent HugePages,百度也可以查到关闭方式。
基础包安装
oracle-database-server-12cR2-preinstall也不会帮你装好这些包,因此这一步是必须要手工做的。
yum -y install binutils.x86_64 compat-libcap1.x86_64 compat-libstdc e2fsprogs.x86_64 libaio libXau libXi libXtst libstdc
--以上命令是我自己简化后的安装语句,一般来说执行完以上安装就足够了,不够也没事,装grid时如果有缺失的根据报错Detail再装就好了。
--不同Linux版本所需的包完整列表参考GI安装官方文档的4.7小节--Operating System Requirements for x86-64 LinuxPlatforms。
内核参数修改(64GB内存 40GB tmpfs时的设置)
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
时间同步设置
参考网上配置ntp相关的文档即可,手工设置时间也可以。
禁用防火墙和selinux
当然你也可以选择使用防火墙但是开放相应端口,但是简便起见我还是直接关了。
service iptables stop
service ip6tables stop
chkconfig iptables off
chkconfig ip6tables off
--selinux的关闭自己上网搜。
其他的预安装要求个人认为不再需要了,如果有更高的性能需求可以查看官方文档来进行更详细的设置,但本着简单安装、简单管理的原则,就这样啦。
四、用户、组、以及目录
--两节点添加用户和组
groupadd -g 501 oinstall
groupadd -g 502 dba
groupadd -g 503 asmadmin
groupadd -g 504 asmdba
groupadd -g 505 asmoper
groupadd -g 506 oper
useradd -u 501 -g oinstall -G asmadmin,asmdba,asmoper,dba grid
useradd -u 502 -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/
--修改用户安全限制:
--如果你不使用oracle-database-server-12cR2-preinstall,那么将以下内容复制到/etc/security/limits.conf文件中即可
--如果你使用了oracle-database-server-12cR2-preinstall,那么将以下内容复制到/etc/security/limits.d/oracle-database-server-12cR2-preinstall.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
--无论以上哪种用户安全限制方式,都是需要PAM模块来调用的,因此继续检查/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:$ORACLE_HOME/OPatch:$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<br>export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$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
--如果不需要输入密码则说明互信配置成功。
五、存储环境设置
存储的配置总结下只有2步:持久化配置 和 权限配置 ,我们分两种情况来描述存储配置的步骤。
情况一:使用多路径软件时:
一般来说生产上的存储使用系统自带的多路径软件multipath即可完成多路径持久化配置,这里贴一个示例配置文件的一部分:
multipath.conf written by anaconda
......
multipaths {
multipath {
wwid "360080e50003279f000001a785a275fe8"
alias REDO_01
}
multipath {
wwid "360080e50003279f000001a775a275fba"
alias RAC_OCR
}
multipath {
wwid "360080e50003279f000001a795a27604e"
alias RAC_ARCHIVE
}
multipath {
wwid "360080e50003217cc00001c6d5a280dd8"
alias REDO_02
}
multipath {
wwid "360080e50003217cc00001c6e5a280e2b"
alias RAC_DATA
}
}
--不建议在这里加uid gid mode来设置属主和权限,因为不能设置附属group。
根据uuid进行了alias的绑定,之后重启multipathd即可,使用multipath -ll可以看到聚合后的盘。
然后使用multipath自带的udev文件12-dm-permissions.rules来完成聚合盘(/dev/dm-)的权限配置,这样安装时直接查找/dev/mapper/路径即可找到以alias名字显示的盘。
--设置步骤:
cp /usr/share/doc/device-mapper-1.02.117/12-dm-permissions.rules /etc/udev/rules.d/
vi /etc/udev/rules.d/12-dm-permissions.rules
--添加或注释如下一行:
ENV{DM_UUID}=="mpath-?*", OWNER:="grid", GROUP:="asmadmin", MODE:="660"
--说白了就是设置下聚合盘的权限
start_udev
这里还有一些替代的方法,例如使用60-raw.rules来代替12-dm-permissions.rules的权限设置功能,例子如下:
vi /etc/udev/rules.d/60-raw.rules
ACTION=="add", KERNEL=="dm-0", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="dm-1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="dm-2", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="dm-3", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", KERNEL=="dm-4", RUN+="/bin/raw /dev/raw/raw5 %N"
KERNEL=="raw", OWNER="grid" GROUP="asmadmin", MODE="0660"
--其原理是:/dev/mapper/下的盘符其实是指向/dev/dm-的,将这些聚合盘映射为裸设备,也可以同时改变权限,缺点在于没有alias容易混淆。
--这里可能有人说多路径可能生成不同的dm-*,后缀数字是不稳定的,我觉得没必要担心,只要你不去作死改多路径配置文件,这个后缀的数字就不会变,绑定的raw盘也就不会变。
start_udev
至此情况一的权限配置已经完成了,你还可以通过99-oracle-asmdevices.rules来继续改变下底层盘的权限,但是这一步可做可不做。
vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003279f000001a785a275fe8", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003279f000001a775a275fba", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003279f000001a795a27604e", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003217cc00001c6d5a280dd8", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="360080e50003217cc00001c6e5a280e2b", OWNER="grid", GROUP="asmadmin", MODE="0660"
--重启udev
start_udev
情况二:如果你未使用multipath(常见于使用虚拟机的测试环境)
那么直接使用99-oracle-asmdevices.rules(Device Mapper)来完成持久化配置和权限配置,并绑定易于人眼识别的name。
--参考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
--以及参考:官网文档附加的A部分中的Configuring Device Persistence Manually for Oracle ASM小节
--基本步骤就是:首先使用scsi_id获取sd盘的uuid,然后将uuid绑定至99-oracle-asmdevices.rules即可。
以上介绍的两种情况都是使用了udev来完成存储配置的,你也可以使用ASMLIB来完成ASM盘的持久化和权限配置,具体参见GI或Database的官方安装文档的:Configuring Storage Device Path Persistence Using Oracle ASMLIB部分。
六、GRID安装
这里有个小坑,12c的GRID安装不再会按你设置的grid用户的$ORACLE_HOME变量来作为GI的家目录,而是直接将你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安装:
cd /u01/12.2.0/grid/
./gridSetup.sh
接下来基本只要下一步下一步就完事了,我自己的安装步骤忘了截图,因此这里参考下如下网址的安装截图:
注意:别按他的预安装步骤做,他使用的是很古老的单用户RAC安装方式,现在推荐使用单独的grid用户来管理集群,与管理数据库的oracle用户分离开。
--这里需要特别说明下,如果你选了YES即为GIMR创建单独的MGMT磁盘组,那么OCR盘大小20GB左右就可以(当然你还需要为MGMT磁盘组准备存储),如果你选择NO,那么请保证OCR盘至少40GB大小(准确数字忘了大概是38GB左右,不过40GB保险)。
根据提示一次在两节点执行以上脚本即可,出现下图所示文字是表示执行成功:
至此GRID已经安装完毕,使用如下命令查看集群状态:
su - grid
crsctl stat res -t
七、创建ASM磁盘组
使用grid用户执行asmca创建数据磁盘组DATA和存放REDO、归档的磁盘组,一般测试环境这几个磁盘组合在一起即可。
su - grid
sqlplus / as sysasm
set lines 200
col path for a40
select group_number,header_status,state,name,path,redundancy from v$asm_disk;
select group_number,name,state,COMPATIBILITY,DATABASE_COMPATIBILITY from v$asm_diskgroup;
create diskgroup DATA external redundancy disk '/dev/mapper/RAC_DATA' ATTRIBUTE 'compatible.asm' = '12.2';
create diskgroup ARCHIVE external redundancy disk '/dev/mapper/RAC_ARCHIVE' ATTRIBUTE 'compatible.asm' = '12.2';
create diskgroup REDO external redundancy disk '/dev/mapper/REDO_01','/dev/mapper/REDO_02' ATTRIBUTE 'compatible.asm' = '12.2';
八、DATABASE安装
cd /home/oracle/database
./runInstaller
根据提示执行以上脚本即可。
九、创建数据库
使用oracle用户执行dbca建库:
--如无pdb需求,那么不选create as container database
--并不推荐以上建库方式,建议使用下边的高级配置,可以自己设置SGA,PGA和字符集等等。
建库完毕后使用如下命令查看整个集群和数据库的状态:
su - grid
crsctl stat res -t
srvctl config database -d orcl
lsnrctl status
十、最后的工作
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大小和组数就可以了。
转载于:https://blog.51cto.com/yiliang/2338317