1.1 正确安装数据库软件
安装数据库软件是每个DBA最基础的技能,本节的重点不是教大家如何安装数据库软件,而是介绍安装过程中那些容易被忽视的点,以及对异常问题的处理。
1.1.1 安装过程中容易忽视的点
对于安装,最忌讳的就是在没有相关基础知识的前提下,随便在网上搜索教程并依样安装。因为网上教程的质量参差不齐,大多数是一些初学者自己摸索实践的实验笔记,没有针对特定的操作系统进行完善,存在较多隐患,所以初学者更应该注重参考官方文档。
1.数据库版本选择
作为核心生产系统,数据库版本的选择非常重要,有一个必须遵守的原则就是:稳定。
2017年以前,Oracle的版本发布策略一直保持在3~4年一个大版本,两代产品之间通过Release 1和Release 2区分。当更新到Release 2时,基本上可以认为该版本是比较稳定的版本,也是生产系统优先选择的升级版本。Release 1的发布包含了大量的新特性,属于Beta验证测试版本,Bug较多,不建议在生产环境中安装采用。但从2017年7月开始,Oracle改变了以往的数据库软件发布流程,采用了年度Release和季度更新的策略。比如,目前最新的版本是Oracle 19c,表示该版本发布于2019年。表1-1列举了Oracle各个大版本中最稳定的小版本,这也是我们推荐安装的版本。
表1-1 推荐的Oracle数据库版本
版本选择固然很重要,但同时我们也需要关心每个版本的生命周期,尤其是现在正在使用的或即将上线的数据库版本是否还处于Oracle官方免费服务阶段,若已不在官方免费服务阶段,那么一旦遇到未知Bug,就需要额外支付高额费用。现在市面上很多客户都在使用的Oracle 11g最终版本(即11.2.0.4),已于2019年1月1日进入Paid Extended Support(有偿扩展支持)阶段,处理新产生的Bug需要付费。其实11.2.0.4版本在2014年12月31日就结束了Premier Support(最高优先级的支持)阶段,进入Extended Support Fee Waived(延长支持免费阶段)阶段(2014年12月31日至2018年12月31日),在该阶段Oracle免费提供该版本的扩展服务。图1-1为Oracle官方11g及以上版本数据库生命周期表。
图1-1 Oracle 11g及以上版本生命周期表
2.操作系统兼容性
Oracle运行在操作系统之上,两者的联系非常紧密,要想数据库发挥最佳的运行性能,选择合适的操作系统非常重要。
有MOS账号的读者可以登录http://support.oracle.com/进行查看。即使没有MOS官方账号也没有关系,表1-2为大家列出了主流操作系统和Oracle数据库的支持列表。
表1-2 主流操作系统和Oracle版本支持列表
大家在安装Oracle之前,请务必确认特定操作系统的兼容性。
3.操作系统参数设置
数据库的稳定运行依赖于操作系统合理的参数设置,其中,CPU、内存、交换分区、系统补丁、磁盘划分及内核参数设置必须符合数据库的最低安装要求。Oracle官方针对不同操作系统和软件版本给出了详细的建议,分别如下。Oracle 11g及以下版本请查看MOS文档:Oracle Database (RDBMS) on Unix AIX, HP-UX, Linux, Mac OS X, Solaris, Tru64 Unix Operating Systems Installation and Configuration Requirements Quick Reference (8.0.5 to 11.2) (Doc ID 169706.1)。Oracle 12c及以上版本请查看MOS文档:Oracle Database (RDBMS) on Unix AIX, HP-UX, Linux, Solaris and MS Windows Operating Systems Installation and Configuration Requirements Quick Reference (12.1/12.2/18c/19c) (Doc ID 1587357.1)。我们必须要重视这部分的预检工作,大量的安装和线上问题都证明了此环节非常重要。
4.操作系统重要参数讲解
下面列举了Linux内核的重要参数,具体说明如下。
·kernel.shmall:表示可以在系统范围内使用的共享内存总量(以页为单位)。
·kernel.shmmax:表示单个共享内存段的最大大小(以字节为单位)。
kernel.shmall和kernel.shmmax的值需要根据系统的物理内存和页面大小进行设置。通常,这两个参数的计算方式如下:
kernel.shmall = ( _PHYS_PAGES) kernel.shmmax = ( _PHYS_PAGES / 2) * PAGE_SIZE shell> echo $(expr $(getconf _PHYS_PAGES)) shell> echo $(expr $(getconf _PHYS_PAGES) / 2 \* $(getconf PAGE_SIZE))
·kernel.shmmni:用于设置系统范围内共享内存段的最大数量。
·fs.file-max:表示系统级别能够打开的文件句柄的数量,如达到上限则会提示“Too many open files”或“Socket/File: Can't open so many files”等错误信息。
·fs.file-max-nr:表示同时可以拥有的异步I/O请求数量,不能超过aio-max-nr,若上下文切换过多,达到操作系统阈值,则会提示以下错误信息“ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O”。
·ip_local_port_range:表示限定端口的使用范围。
·net.core.rmem_default:表示接收套接字缓冲区大小的默认值。
·net.core.rmem_max:表示接收套接字缓冲区大小的最大值。
·net.core.wmem_default:表示发送套接字缓冲区大小的默认值。
·net.core.wmem_max:表示发送套接字缓冲区大小的最大值。
limits.conf用于限制用户可以使用的最大文件数、最大线程、最大内存等资源使用量,设置命令如下:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
soft是一个警告值,而hard则是一个真正意义上的阈值,一旦超过hard,系统就会报错。
5.Linux内存大页配置
随着内存价格的不断下跌,配置几百兆字节(MB)甚至几太字节(TB)内存的主机越来越多。虚拟内存是以分页进行管理的,比如,标准的4KB页。显然,物理内存太大会导致分页数量过多,从而导致内存管理效率的降低。比如,物理内存为512GB时,虚拟内存至少应为512GB甚至1TB以上。以4KB页面为单位,512GB的虚拟内存将拥有134 217 728个页面。面对数量如此巨大的页面,无论是Hash还是索引树,都要承受高昂的搜索成本,同时还会增加内存操作的并发性访问冲突。为了降低内存页的搜索成本和发生冲突的概率,可以增加虚拟内存分页,比如,从4KB变更为16MB,分页大小将从134 217 728降低为32 768,即使再低配的虚拟内存管理系统也可以高效率地管理32 768个分页。
HugePages的大小取决于所使用的操作系统的内核版本及不同的硬件平台。可以使用grep Hugepagesize /proc/meminfo命令来查看HugePages的大小,一般来说,我们接触最多的X86服务器的大页基本上是大小为2MB的内存大页。接下来介绍在RHEL6(同样适用于RHEL7)上设置内存大页的具体步骤。
1)检查操作系统的版本及内核参数。检查命令如下:
shell> more /etc/redhat-release Red Hat Enterprise Linux Server release 6.2 (Santiago) shell> uname -a Linux rehl6 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
2)查看当前系统是否配置了HugePages。在下面的查询中,HugePages的几个相关值都为0,表明当前未配值HugePages,其次可以看到该版本的大页大小为2MB:
shell> grep Huge /proc/meminfo AnonHugePages: 1142784 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
3)修改用户的memlock限制。可以通过修改/etc/security/limits.conf配值文件来修改用户的memlock限制,该参数的值通常设置为略小于当前已安装的系统内存大小,比如,当前系统的内存大小为64GB,可以进行如下设置:
* soft memlock 60397977 * hard memlock 60397977
上述的设置单位为KB,memlock的大小至少要配置为略大于系统上所有SGA(System Global Area,系统全局区)的总和。
4)禁用AMM(Automatic Memory Management,自动内存管理)。如果当前的Oracle版本为10g,则可以跳过此步骤。如果当前的Oracle版本为11g,那么由于AMM的特性与HugePages不兼容,因此需要禁用AMM,禁用命令如下:
SQL> ALTER SYSTEM RESET memory_target SCOPE=SPFILE; SQL> ALTER SYSTEM RESET memory_max_target SCOPE=SPFILE; SQL> ALTER SYSTEM SET sga_target=<n>g SCOPE=SPFILE; SQL> ALTER SYSTEM SET pga_aggregate_target=<n>g SCOPE=SPFILE; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;
5)计算vm.nr_hugepages的值。简单的计算原理是total SGA_MAX_SIZE(多个instance的总和)/hugepagesize+N,N为少量内存盈余,一般设置为100就足够了。如果主机内存大小为128GB,计划其中的70GB用于SGA共享内存,则内存大页为70×1024/2=35 840。我们也可以使用Oracle提供的脚本hugepages_settings.sh(该脚本可以在MOS上下载,文档ID:361468.1)来计算vm.nr_hugepages的值(这个值设置的是内存大页的大小)。在执行脚本之前应确保所有的Oracle实例都已启动,且ASM(Automatic Storage Management,自动存储管理)也已启动(如果存在ASM)。命令如下:
shell> ./hugepages_settings.sh
6)设置vm.nr_hugepages参数。可以通过编辑/etc/sysctl.conf来设置vm.nr_hugepages参数,命令如下:
shell> sysctl -w vm.nr_hugepages = 1496 <!--该值为上述脚本获得的值,vm.nr_hugepages指明了内存页数--> shell> sysctl -p
7)重启主机验证。HugePages相关参数的值会随着当前服务器上实例的停止与启动而发生动态变化。通常情况下,HugePages_Free的值应当小于HugePages_Total的值,在使用HugePages时,HugePages_Rsvd的值应当为非零值,命令如下:
shell> grep Huge /proc/meminfo HugePages_Total: 131 HugePages_Free: 20 HugePages_Rsvd: 20 Hugepagesize: 2048 kB
在下面的情形中,当服务器上仅有的一个实例被关闭时,HugePages_Rsvd的值为零,且HugePages_Free的值等于HugePages_Total的值:
shell> grep Huge /proc/meminfo HugePages_Total: 131 HugePages_Free: 131 HugePages_Rsvd: 0 Hugepagesize: 2048 kB
1.1.2 常见安装问题的处理
1.介质错误
常见的介质错误有:将32位的介质包安装在64位的操作系统上,或者误将Linux介质包上传到AIX环境进行安装。笔者刚开始参加工作的时候就犯过这样的错误,排查了很久才发现,所以对于这个问题一直牢记在心,并从此养成了安装前再三确认介质的好习惯。
2./etc/hosts问题
我们除了需要写入IP地址信息之外,还要确保127.0.0.1地址的存在,否则集群安装运行root.sh脚本时会遇到如下问题:
/oracle/grid/crs_1/bin/srvctl start nodeapps -n his01 ... failed FirstNode configuration failed at /oracle/grid/crs_1/crs/install/crsconfig_lib.pm line 9379. /oracle/grid/crs_1/perl/bin/perl -I/oracle/grid/crs_1/perl/lib -I/oracle/grid/ crs_1/crs/install /oracle/grid/crs_1/crs/install/rootcrs.pl execution failed
3.主机名设置
主机名必须符合RFC 952标准,即可使用字母、数字和字符,不允许使用下划线等特殊字符。建议主机名不要太长,尽量不要使用大写字母、下划线或特殊字符等,长度应尽量控制在10个字符以内。
4.复制数据库软件问题
在操作系统环境相同的情况下,可能会有一些数据库管理员,为了图方便而使用tar的方式复制数据库软件,而忘记了Inventory目录的复制,导致后期打补丁时遇到了麻烦。这里为大家提供恢复Inventory的方法,可以在Inventory损坏或缺失的情况下使用。
1)检查Inventory信息,Inventory信息丢失或损坏时,会提示以下报错信息:
shell> ./opatch lsinv Oracle Interim Patch Installer version 12.2.0.1.17 Copyright (c) 2020, Oracle Corporation. All rights reserved. Oracle Home : /oracle/app/product/19.3.0/db_1 Central Inventory : /oracle/oraInventory from : /oracle/app/product/19.3.0/db_1/oraInst.loc OPatch version : 12.2.0.1.17 OUI version : 12.2.0.7.0 Log file location : /oracle/app/product/19.3.0/db_1/cfgtoollogs/opatch/ opatch2020-08-05_00-08-40AM_1.log LsInventorySession failed: OPatch failed to locate Central Inventory. Possible causes are: The Central Inventory is corrupted The oraInst.loc file specified is not valid. OPatch failed with error code 73
2)Linux环境重建Inventory的方法。通用的重建方法如下:
shell> cd $ORACLE_HOME/oui/bin shell> ./runInstaller -silent -ignoreSysPrereqs -attachHome ORACLE_HOME="/oracle/app/product/19.3.0/db_1" ORACLE_HOME_NAME="OraDb19c_home1" Starting Oracle Universal Installer... Checking swap space: must be greater than 500 MB. Actual 14909 MB Passed The inventory pointer is located at /etc/oraInst.loc You can find the log of this install session at: /oracle/oraInventory/logs/AttachHome2020-08-05_12-09-36AM.log 'AttachHome' was successful.
确认oraInventory是否重建完成,命令如下:
shell> more /etc/oraInst.loc inventory_loc=/oracle/oraInventory inst_group=oinstall shell> cd /oracle/oraInventory/ContentsXML/ shell> ls comps.xml inventory.xml libs.xml shell> more inventory.xml <?xml version="1.0" standalone="yes" ?> <!-- Copyright (c) 1999, 2020, Oracle and/or its affiliates. All rights reserved. --> <!-- Do not modify the contents of this file by hand. --> <INVENTORY> <VERSION_INFO> <SAVED_WITH>12.2.0.7.0</SAVED_WITH> <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER> </VERSION_INFO> <HOME_LIST> <HOME NAME="OraDb19c_home1" LOC="/oracle/app/product/19.3.0/db_1" TYPE="O" IDX="1"/> </HOME_LIST> <COMPOSITEHOME_LIST> </COMPOSITEHOME_LIST> </INVENTORY> <!--以上信息表明Inventory已经重建完成。-->
ORACLE_HOME为当前数据库的HOME目录,ORACLE_HOME_NAME为自定义名称。
3)Windows环境重建Inventory。通用的重建方法如下:
C:\Users\Administrator>d: D:\>cd D:\app\Administrator\product\11.2.0\dbhome_1\oui\bin D:\app\Administrator\product\11.2.0\dbhome_1\oui\bin>setup.exe -silent -attachHome ORACLE_HOME="D:\app\Administrator\product\11.2.0\dbhome_1" ORACLE_HOME_NAME="ora11g" C:\Program Files\Oracle\Inventory\ContentsXML\inventory.xml <?xml version="1.0" standalone="yes" ?> <!-- Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. --> <!-- Do not modify the contents of this file by hand. --> <INVENTORY> <VERSION_INFO> <SAVED_WITH>11.2.0.4.0</SAVED_WITH> <MINIMUM_VER>2.1.0.6.0</MINIMUM_VER> </VERSION_INFO> <HOME_LIST> <HOME NAME="ora11g" LOC="D:\app\Administrator\product\11.2.0\dbhome_1" TYPE="O" IDX="1"/> </HOME_LIST> <COMPOSITEHOME_LIST> </COMPOSITEHOME_LIST> </INVENTORY> <!--以上信息表明Inventory已经重建完成。-->
1.1.3 集群安装最佳实践
1.集群软件配置规范
(1)基本说明
安装前需要准备如下安装介质,并放至目录/oracle/software中。
Oracle Grid安装介质如下:
LINUX.X64_193000_grid_home.zip
Oracle Database安装介质如下:
LINUX.X64_193000_db_home.zip
验证介质包的完整性,命令如下:
shell> sha256sum LINUX.X64_193000_db_home.zip shell> sha256sum LINUX.X64_193000_grid_home.zip
(2)安装目录规范
安装目录的规划原则是创建/oracle文件系统,以用于Oracle数据库软件的安装。基于本地存储新建文件系统,大小为100GB,目录规划如下:
Oracle Base目录:/oracle/app/oracle Oracle Grid目录:/oracle/app/19c/grid Oracle Home目录:/oracle/app/oracle/product/19c/db
(3)磁盘组配置规范
表1-3是磁盘组的创建说明。
表1-3 磁盘组创建说明
(4)网络配置规范
表1-4是网络配置的具体说明。
表1-4 网络配置
/etc/hosts文件内容如下:
192.168.2.191 rac19c1 192.168.2.192 rac19c2 192.168.56.191 rac19c1-priv 192.168.56.192 rac19c2-priv 192.168.2.193 rac19c1-vip 192.168.2.194 rac19c2-vip 192.168.2.195 rac19c-sip
2.操作系统配置规范
(1)系统硬件环境检查
服务器安装要求物理内存至少达到8GB,检查命令如下:
shell> grep MemTotal /proc/meminfo MemTotal: 7793088 kB
SWAP分区的大小需要按照表1-5所示的推荐配置进行设置。
表1-5 SWAP推荐配置
查看系统当前的SWAP分区,检查命令如下:
shell> grep SwapTotal /proc/meminfo SwapTotal: 4063228 kB
/tmp临时目录空间大于1GB,当前系统检查命令如下:
shell> df -Th /tmp Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/VG0-Lv_tmp ext4 3.9G 19M 3.6G 1% /tmp
/oracle文件系统空间至少为50GB,推荐大小为100GB。
检查双节点时区,命令如下:
shell> date -R
确定系统版本能够支持Oracle 19c数据库,命令如下:
shell> uname -m
(2)关闭NetworkManager
NetworkManager可用于管理主机网络的配置信息,该服务如果出现了异常情况,则会影响系统网络的运行,关闭命令如下:
<!--关闭运行中的服务--> shell> systemctl stop NetworkManager <!--关闭操作系统自启动--> shell> systemctl disable NetworkManager shell> systemctl status NetworkManager
(3)操作系统依赖包检查
Linux 7 x86-64系统需要如下RPM(Red-Hat Package Manager,软件包管理器):
<!--挂载光驱配置yum:--> shell> mount /dev/cdrom /mnt shell> vi /etc/yum.repos.d/dvd.repo 添加如下: [dvd] name=dvd baseurl=file:///mnt gpgcheck=0 shell> yum install -y bc binutils gcc gcc-c++ compat-libcap1 compat-libstdc++33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libXrender-devel libX11 libXau libXi libXtst libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat
(4)禁用selinux
禁用selinux的命令如下:
shell> vi /etc/selinux/config <!--修改SELINUX=disabled-->
(5)关闭透明大页(Transparent HugePages)
shell> grep AnonHugePages /proc/meminfo AnonHugePages: 0 kB shell> cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] <!--never表示已关闭-->
(6)关闭防火墙
shell> systemctl stop firewalld shell> systemctl disable firewalld
(7)关闭Chrony服务
shell> systemctl stop chronyd.service shell> systemctl disable chronyd.service
(8)关闭NUMA(Non Uniform Memory Access,非一致性内存访问)
根据MOS Doc ID: 1962100.1的描述可知,这里需要关闭NUMA。
在Red Hat 7版本多内存多CPU环境下,NUMA启用会引起系统挂起,作为解决方案建议关闭NUMA。
<!--查看default grub 的入口信息--> shell> grubby --default-kernel /boot/vmlinuz-3.10.0-862.el7.x86_64 <!--查看default grub的具体信息--> shell> grubby --info /boot/vmlinuz-3.10.0-862.el7.x86_64 index=0 kernel=/boot/vmlinuz-3.10.0-862.el7.x86_64 args="ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 " root=/dev/mapper/centos-root initrd=/boot/initramfs-3.10.0-862.el7.x86_64.img title=CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) <!--更新args , 添加numa=off的参数--> shell> grubby --args=numa=off --update-kernel /boot/vmlinuz-3.10.0-862.el7.x86_64 <!--确认numa=off加入default grub中--> shell> grubby --info /boot/vmlinuz-3.10.0-862.el7.x86_64 index=0 kernel=/boot/vmlinuz-3.10.0-862.el7.x86_64 args="ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 numa=off" root=/dev/mapper/centos-root initrd=/boot/initramfs-3.10.0-862.el7.x86_64.img title=CentOS Linux (3.10.0-862.el7.x86_64) 7 (Core) <!--重启服务器-->
(9)创建用户和组
需要创建的组,命令如下:
shell> groupadd -g 1000 oinstall shell> groupadd -g 1001 dba shell> groupadd -g 1010 asmadmin shell> groupadd -g 1011 asmdba shell> groupadd -g 1012 asmoper shell> groupadd -g 1013 backupdba shell> groupadd -g 1014 kmdba shell> groupadd -g 1015 oper shell> groupadd -g 1016 dgdba shell> groupadd -g 1017 racdba shell> useradd -u 1000 -g oinstall -G oinstall,dba,oper,backupdba,dgdba,racdba,kmdba, asmdba -d /home/oracle -s /bin/bash oracle shell> useradd -u 1001 -g oinstall -G oinstall,dba,racdba,asmadmin,asmdba,asmoper -m -d /home/grid grid <!--使用passwd命设置令oracle和grid用户密码-->
(10)用户变量设置
添加oracle用户环境变量,命令如下:
PATH=$PATH:$HOME/bin:/sbin:/usr/sbin BASH_ENV=$HOME/.bashrc export BASH_ENV PATH unset USERNAME export ORACLE_BASE=/oracle/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/19c/db export GRID_HOME=/oracle/app/19c/grid export ORACLE_SID=<SID> export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:/sbin:/usr/sbin:/bin: /usr/local/bin:$GRID_HOME/bin:. export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib: $ORACLE_HOME/network/jlib export NLS_LANG=american_america.ZHS16GBK set -o vi umask 022 alias gobase='cd $ORACLE_BASE' alias gohome='cd $ORACLE_HOME' alias gocrs='cd $GRID_HOME'
添加grid用户环境变量,命令如下:
export ORACLE_BASE=/oracle/app/grid export ORACLE_HOME=/oracle/app/19c/grid export PATH=$ORACLE_HOME/bin:.:$PATH export ORACLE_SID=+ASM1 alias ll='ls -l' alias gohome='cd $ORACLE_HOME' alias bdump='cd /oracle/app/grid/diag/asm/+asm/$ORACLE_SID/trace' set -o vi umask 022
添加root用户环境变量,命令如下:
export GRID_HOME=/oracle/app/19c/grid export PATH=$PATH:$GRID_HOME/bin
修改用户资源限制,以root用户登录操作系统,命令如下:
shell> vi /etc/security/limits.conf
将以下内容添加到文件的最后:
oracle soft nproc 16384 oracle hard nproc 16384 oracle soft nofile 65536 oracle hard nofile 65536 oracle soft memlock unlimited oracle hard memlock unlimited oracle soft stack 10240 oracle hard stack 32768 grid soft nproc 16384 grid hard nproc 16384 grid soft nofile 65536 grid hard nofile 65536 grid soft memlock unlimited grid hard memlock unlimited grid soft stack 10240 grid hard stack 32768
这些参数设置后会立即生效,但需要注意的是,当前已登录在系统上的oracle、grid用户,需要重新登录系统,修改才会生效。
下面以oracle用户重新登录系统为例,检查命令及结果如下:
shell> ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 30299 max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 65536 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 10240 cpu time (seconds, -t) unlimited max user processes (-u) 16384 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
(11)操作系统参数调整
修改系统内核参数,通过root用户在/etc/sysctl.conf文件的最后部分增加以下内容:
shell> vi /etc/sysctl.conf # Oracle DB 19C Cconfiguration Parameter net.ipv4.conf.all.accept_redirects=0 net.ipv4.ip_local_port_range=30000 61000 kernel.shmall = 268435456 kernel.shmmax = 270961027072 kernel.shmmni = 4096 kernel.sem = 250 32000 100 200 fs.file-max=8388608 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_max=4194304 net.core.rmem_default=4194304 fs.aio-max-nr=4194304 net.core.wmem_max=4194304 net.core.wmem_default=262144 vm.nr_hugepages = 2100 vm.hugetlb_shm_group = 501 vm.swappiness = 100 net.ipv4.tcp_max_syn_backlog=8196 net.core.netdev_max_backlog=8096 net.ipv4.tcp_keepalive_intvl=30 net.ipv4.tcp_fin_timeout=30 net.ipv4.tcp_retries2=5 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_tw_reuse=1 net.core.somaxconn=4096 net.ipv4.tcp_keepalive_time=1800
(12)设置大页
若操作系统内存大于32GB,则建议开启大页,具体配置请参考1.1.1节的Linux内存大页配置部分。
3.GI软件安装
(1)创建软件安装目录
shell> chown grid:oinstall /oracle shell> chmod 775 /oracle shell> mkdir -p /oracle/app shell> chown -R grid:oinstall /oracle/app shell> chmod 775 /oracle/app shell> mkdir -p /oracle/app/grid shell> chown grid:oinstall /oracle/app/grid shell> chmod 775 /oracle/app/grid shell> mkdir -p /oracle/app/19c/grid shell> chown grid:oinstall /oracle/app/19c shell> chown grid:oinstall /oracle/app/19c/grid shell> mkdir -p /oracle/app/oracle shell> chown -R oracle:oinstall /oracle/app/oracle shell> mkdir -p /oracle/software shell> chown grid:oinstall /oracle/software
(2)解压软件包
仅在节点1上执行,命令如下:
shell> su - grid shell> cd /oracle/software shell> unzip linuxx64_12201_grid_home.zip -d $ORACLE_HOME
(3)安装cvuqdisk软件包
cvuqdisk软件包安装命令如下:
shell> su - shell> cd $GRID_HOME/cv/rpm/ shell> export CVUQDISK_GRP=oinstall shell> rpm -ivh cvuqdisk-1.0.10-1.rpm shell> rpm -q cvuqdisk
(4)配置磁盘权限
配置udev,设置磁盘权限,命令如下:
/etc/udev/rules.d/99-oracleasm.rules KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block" PROGRAM=="/usr/lib/udev/ scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VBd682751f-ce794697", NAME="sdb", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block" PROGRAM=="/usr/lib/udev/ scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB7bdde4e9-27b4e0cc", NAME="sdc", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block" PROGRAM=="/usr/lib/udev/ scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB993321fb-acb10878", NAME="sde", OWNER="grid", GROUP="asmadmin", MODE="0660" KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block" PROGRAM=="/usr/lib/udev/ scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB3ccdb1e4-f023cffb", NAME="sdd", OWNER="grid", GROUP="asmadmin", MODE="0660"
本次示例为虚拟机安装,实际安装时,不同存储厂商的配置可能会略有不同。实际生产可以使用Linux自带的multipath(多路径)。安装相关RPM,基本配置如下:
shell> rpm -ivh device-mapper-* shell> rpm -ivh device-mapper-multipath-* shell> rpm -ivh device-mapper-1* <!--启动和激活multipathd进程--> shell> mpathconf --enable --with_multipathd y
使用自带模板编辑多路径设备权限,配置如下:
shell> cp /usr/share/doc/device-mapper-1.02.117/12-dm-permissions.rules /etc/udev/rules.d/ shell> vi /etc/udev/rules.d/12-dm-permissions.rules ENV{DM_NAME}=="mpath?", OWNER:="grid", GROUP:="oinstall", MODE:="660" ENV{DM_NAME}=="mpathe", OWNER:="grid", GROUP:="oinstall", MODE:="660" ENV{DM_NAME}=="mpathd", OWNER:="grid", GROUP:="oinstall", MODE:="660" ENV{DM_NAME}=="mpathc", OWNER:="grid", GROUP:="oinstall", MODE:="660" ENV{DM_NAME}=="mpathb", OWNER:="grid", GROUP:="oinstall", MODE:="660"
在节点2上也执行同样的操作。配置完成后建议重新启动多路径软件,命令如下:
shell> /etc/init.d/multipathd restart
启动完成后,系统会在/etc/下生成multipath.conf文件,以及在/etc/multipath下生成bindings及wwid,其中wwid会记录系统中所有挂载盘的盘唯一ID。
(5)grid软件安装
检查所有节点的配置文件/etc/oraInst.loc、/etc/oratab是否存在相关配置,若有,则删除。删除命令如下:
shell> rm -rf /etc/oracle /tmp/.oracle /var/tmp/.oracle /oracle/app/oraInventory /oracle/app/grid/* /tmp/GridSetupActions*
使用grid用户登录节点1,执行如下命令:
shell> export TMOUT= shell> cd $ORACLE_HOME shell> ./gridSetup.sh
然后开始图形化安装,这里省略图形化安装的步骤及安装后的检查,grid用户执行“crsctl stat res -t”命令即可检查集群的状态。
4.数据库软件安装
(1)数据库选择说明
Oracle数据库版本选择19.3版。数据库为RAC(Real Application Clusters,实时应用集群)实例环境,根据项目需要安装组件,如无特殊要求,则按默认选项安装。
(2)安装Oracle数据库软件
使用runInstaller启动安装程序。oracle用户登录节点1,执行命令如下:
shell> unzip LINUX.X64_193000_db_home.zip -d $ORACLE_HOME shell> ./runInstaller
进入安装界面,在配置选项(Select Configuration Opation)中选择Set up Software Only(只设置软件)。我们一般不推荐在安装软件的过程中同步创建数据库,一方面是为了便于后续补丁的实施,另一方面,也是希望通过DBCA(Database Configuration Assistant,数据库配置助手)更加专业地创建一个符合业务需求的数据库。由于图形化安装数据库软件的过程比较简单,因此这里省略掉图形化安装各步骤的界面及说明,大家在安装过程中注意以下几点即可。
·安装软件前需要先确认集群状态是正常的。
·一般不建议在安装软件时候默认选择创建数据库。
·安装过程中应确保oracle用户SSH(Secure Shell,安全外壳协议)互信没有问题。
·需要着重处理安装过程的预检输出,不要轻易忽略错误。
5.数据库实例创建注意事项
(1)数据库命名规则
数据库名默认为系统首字母缩写,以下将数据库名简称为xxxx。除此之外,从安全的角度考虑,我们通常要避免使用默认端口1521,以防止端口恶意扫描。
(2)表空间命名规则
将数据和索引分别存放在不同的表空间,如果条件允许,则可以把这些表空间放在对应的物理磁盘RAID组中,这样可以提高表空间的性能。
应用表空间可以使用本地表空间管理方式,即指定每个区(extent)的大小为1MB,采用自动段(Automatic Segment)管理方式,单个数据文件大小为32GB。核心系统建议固定分配数据文件大小,如8GB。
(3)应用表空间命名规则
数据表空间命名为XXXX_DATA_TBS_yy,数据文件为xxxx_datayy,单个数据文件大小为32GB。
索引表空间命名为XXXX_INDX_TBS_yy,数据文件为xxxx_indxyy,单个数据文件大小为32GB。
其中,XXXX是用户名缩写,均为大写字母;yy两位为数字编号,从01开始,依此类推;数据文件的大小设定为32GB。
(4)在线日志
高并发环境redo和数据文件的I/O消耗比较大,因此建议redo和数据文件分开存放于不同的磁盘。在线日志的大小建议初始化设置为500MB,后期再根据每日的日志量进行调整。
(5)Oracle 19c数据库参数设置
对于系统中每个新上线的数据库,其配置参数可以参考表1-6中给出的值,必要时进行适当修改即可。
表1-6 核心参数参考