参考文档:html
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/cwlin/index.htmlnode
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/ladbi/index.htmllinux
https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linuxc++
建设背景:数据库
建设本文档的目的在于详细梳理12c RAC图形化安装的流程,结合官方文档尽量解释安装过程当中的各类操做的原理,提供不一样的存储配置方法和参数修改方法,最后造成一套完整的12c RAC图形化安装步骤以便于从此参考。安全
安装流程:bash
1、软件下载网络
下载 linuxx64_12201_database.zip 和 linuxx64_12201_grid_home.zip 就能够了,而后上传至节点1的任意目录。
2、硬件和网络环境
须要说明的是12c RAC安装,OCR盘至少须要40GB大小,由于12c新增了MGMTDB实例进行集群管理,若是你不单独的为他建立一个磁盘组,这些信息就会进入OCR盘,致使OCR盘须要40GB的空间才够,其中OCR和votefiles大约须要2GB,MGMT占用38GB,若是RAC节点数大于2那么还须要再增长一些MGMT的空间,例如5节点大约须要再加5GB,固然这里的值都是在外部冗余的条件下计算的。
本文的系统环境为Oracle Enterprise Linux 6.9。
若是须要更大的SGA,那么至少要将将tmpfs设置为大于SGA的值,由于OEL系统下Oracle占用的共享内存不能大于tmpfs。
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 #须要注意的是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 node2-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关键词,根据文档做出修改,消除大页带来的隐患。
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* glibc* libgcc* ksh gcc-c++* --以上命令是我本身简化后的安装语句,通常来讲执行完以上安装就足够了,不够也没事,装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相关的文档便可,手工设置时间也能够。
因为内网的数据交互会使用大量UDP端口,所以官网要求为RAC关闭防火墙,因此:
service iptables stop service ip6tables stop chkconfig iptables off chkconfig ip6tables off --selinux的关闭本身上网搜。
其余的预安装要求我的认为再也不须要了,若是有更高的性能需求能够查看官方文档来进行更详细的设置,但本着简单安装、简单管理的原则,就这样啦。
4、用户、组、以及目录
--两节点添加用户和组 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
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 --若是不须要输入密码则说明互信配置成功。
5、存储环境设置
存储的配置总结下只有2步:持久化配置 和 权限配置 。通常来讲这两步是能够合在一块儿的,只是使用多路径软件时须要分开来说(多路径软件多了一个多路径聚合的步骤)。
所谓持久化就是将磁盘经过UUID或者其余惟一标识符绑定为一个human friendly的磁盘名(能够是磁盘的软连接等),而权限配置就是为了可使oracle能够正确使用这些磁盘,给他们赋予正确的用户和组以及权限(MODE)。
在Linux环境下可以实现设备持久化的系统服务就是udev,除此以外几乎别无他法(就算有也千万别用)。能够经过man udev来查看udev rules的配置规则。
咱们分两种状况来描述存储配置的步骤。
通常来讲生产上的存储使用系统自带的多路径软件multipath便可完成多路径持久化配置(lvm device mapper),这里贴一个示例配置文件的一部分:
# 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-*)的udev配置,这样安装时直接查找/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容易混淆。 # start_udev
至此状况一的权限配置已经完成了。
那么直接使用99-oracle-asmdevices.rules(udev规则,名字随便定,第一个数字表示解析顺序)或者经过60-raw.rules绑定raw盘来完成持久化配置和权限配置,并绑定易于人眼识别的name。
这种直接使用udev规则的方式与上述多路径绑定的区别只是在于无需经过多路径lvm进行映射,使用udev直接完成了绑定工做+权限配置工做。
参考:https://oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-oracle-linux
以及参考:官网文档附加的A部分中的Configuring Device Persistence Manually for Oracle ASM小节
基本步骤就是:
首先获取sd盘的uuid或ID_SERIAL(或其余能够惟一标识磁盘且在udev中定义了的标识符),而后将uuid/ID_SERIAL绑定至99-oracle-asmdevices.rules便可。
例如: # /usr/lib/udev/scsi_id -g -u -d /dev/sdb --获取到某个盘的scsi-id。 # udevadm info --query=all --name=/dev/sdb | grep ID_SERIAL --获取到某个盘的ID_SERIAL
本文绑定UUID和ID_SERIAL的示例都来一个,以便新手能够清楚的认识udev是个什么东西:
绑定UUID示例(其实还能够大大简化):
[root@node1 ~]# cat /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VBc6580c49-d54cc0df", RUN+="/bin/sh -c 'mknod /dev/asmdisk01 b $major $minor; chown grid:asmadmin /dev/asmdisk01; chmod 0660 /dev/asmdisk01'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB41a7cba4-749c4aec", RUN+="/bin/sh -c 'mknod /dev/asmdisk02 b $major $minor; chown grid:asmadmin /dev/asmdisk02; chmod 0660 /dev/asmdisk02'"
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d $devnode", RESULT=="1ATA_VBOX_HARDDISK_VB6aaaf601-96dab065", RUN+="/bin/sh -c 'mknod /dev/asmdisk03 b $major $minor; chown grid:asmadmin /dev/asmdisk03; chmod 0660 /dev/asmdisk03'"
绑定ID_SERIAL示例:
KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VBc6580c49-d54cc0df",SYMLINK+="asm-ocr", OWNER="grid",GROUP="asmadmin",MODE="0660" KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB41a7cba4-749c4aec",SYMLINK+="asm-mgmt",OWNER="grid",GROUP="asmadmin",MODE="0660" KERNELS=="sd*",ENV{ID_SERIAL}=="VBOX_HARDDISK_VB6aaaf601-96dab065",SYMLINK+="asm-data",OWNER="grid",GROUP="asmadmin",MODE="0660"
须要注意的是rules文件中的内容是不容许任何主动换行符的,例如\等。
而后执行以下命令使udev规则生效便可:
udevadm control --reload-rules
udevadm trigger --type=devices
//Linux 7以前应该只须要start_udev便可,7版本去除了start_udev的命令,使用udevadm替代。
至于udev的规则文件中KERNELS,ENV{}都是些什么东西,为什么用KERNELS和KERNEL均可以,为什么用不一样的命名方式都行,直接man udev寻找答案。
在这里我还要提一句,udev在CentOS-7上有个坑,NAME关键字再也不能表示devnode名了,只能表示网卡名,这坑实在是太深我也翻车了,仔细看了好几遍man udev才发现。
6、GRID安装
这里有个小坑,12c的GRID安装再也不会按你设置的grid用户的$ORACLE_HOME变量来做为GI的家目录,而是直接将你GRID软件的解压目录做为家目录。
固然这个小坑还可能引起另外一个大坑,屡次尝试安装grid时你会发现绑定好的磁盘即使dd格式化掉在安装grid时也找不到了...此时只要删了解压的grid目录从新解压安装就行了...(MMP的12c,还有扯淡的屎同样PDB,谁让你从11g升12c直接上腿就完事了)
你须要将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磁盘组准备存储,大概须要40G),若是你选择NO,那么请保证OCR盘至少40GB大小(准确数字忘了大概是38GB左右,不过40GB保险)。
根据提示依次在两节点执行以上脚本便可,出现下图所示文字是表示执行成功:
至此GRID已经安装完毕,使用以下命令查看集群状态:
su - grid crsctl stat res -t
7、建立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';
8、DATABASE安装
cd /home/oracle/database ./runInstaller
根据提示执行以上脚本便可。
9、建立数据库
使用oracle用户执行dbca建库:
--如无pdb需求,那么不选create as container database
--并不推荐以上建库方式,建议使用下边的高级配置,能够本身设置SGA,PGA和字符集等等。
建库完毕后使用以下命令查看整个集群和数据库的状态:
su - grid crsctl stat res -t srvctl config database -d orcl lsnrctl status
10、最后的工做
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大小和组数就能够了。