0

Oracle数据库安装实践

郭耀龙 2017-12-24
138

1.     前言

初入IT行业的时候曾经做过开发,那个时候最怕梦到自己很久前写的且已经上线运行的代码有严重BUG,从这种噩梦中惊醒后定会久久不能入眠。转做DBA之后以为不会再遇到这种惊悚的事,的确,再梦到BUG的时候心里一般都很踏实了,因为毕竟数据库软件不是DBA写的。但是新的恐怖场景又来了——当数据库运行出现问题,经过抽丝剥茧的分析后定位故障是由于安装问题导致。安装!安装!安装!DBA的入门手艺,在这个初级技能上出问题,情何以堪。懊恼(练的炉火纯青的技能怎会搞砸了)、沮丧(怎么这么简单问题怎么会难住冰雪聪明的自己)、焦虑(难道多才多艺的自己不适合做DBA吗),百感交集!

其实,很多人对于Oracle数据库安装存在较大的误解,这不应该算是入门手艺,这里面包含的东西非常丰富,绝对不是一个刚入门的人就能把握的。主要原因有两个,一是Oracle数据库安装隐含着对于数据库的规划设计,这需要对Oracle数据库具有完善的理论知识和丰富的实践经验;二是Oracle数据库安装涉及到数据库、操作系统、网络、存储等不同的技术域,要能做出科学的设计和安装问题处理需要较全面的知识。

本次分享将围绕Oracle数据库安装涉及到的主要问题进行阐述,希望通过本次分享,您能够对数据库安装有新的认识。

 

2.     安装通用规范

2.1.  安装前规划设计

在进行安装前首先需要做的是选择操作系统版本、数据库版本,这里需要注意操作系统及数据库的认证关系,因为这两者将会非常紧密的结合。这一步的目的就是要确认两者的结合是否合法,是否是合法婚姻。这步验证主要是参考MOS的认证矩阵。


另外,选出合法的组合后,还需要考虑二者的结合是否稳定,是否存在BUG,如果有BUG,是否有对应的补丁。一般可以通过操作系统版本进行模糊搜索,检查搜索结果中是否有与自己的环境相吻合场景,吻合的场景影响是否严重。


数据库版本的选择需要考虑企业自己的版本周期规划(如果有,也建议有)和Oracle官方的支持时限。在版本选择上,一般建议选择尽量选择x.2.x.x的版本,大版本选择主流稳定版本,且版本在Oracle支持时限内,PSU选择最近的被较多验证过的版本,一般在发布时之后3个月左右为宜。

安装介质在下载、上传的过程中可能会跨越不同的操作系统,且传输的过程中可能会有损坏的风险,另外,如果从非官方渠道获得的介质存在被恶意篡改的风险,因此安装前最好对介质进行完整性检查,推荐MD5校验。

 

Oracle的后台进程在启动的时候可能会继承到服务器的时区,因此服务器时区会影响数据库的JOB等涉及到时间的工作模块。时区错乱的问题诊断可能还较繁琐,因为通常的SQL查询sysdate是直接调用操作系统函数,返回的值可能与后台进程及JOB得到的值不一致。

由于安装环境的差异性,采用解压tar包的安装方式可能会引发怪异的错误,且很难诊断,如果进行解压tar包方式安装,至少需要进行一次relink操作。relink会将Oracle程序与操作系统关联的库函数等进行link,这样能更好的保障Oracle程序与操作系统结合稳定。建议在操作系统进行升级或者安装补丁后都进行一次relink操作。

在开始安装之前一定要与应用侧沟通好数据库字符集,国家字符集一般不要修改。数据库需要使用哪种类型的字符集只有应用能确认,不能随意设置,因为数据库字符集转较麻烦,且转换较存在前提条件和风险。国内大部分系统会使用ZHS16GBK字符集,但是这不是所有系统通用的,假如你为某超市ERP系统设置ZHS16GBK字符集,那么让很多男DBA又爱又恨的杜蕾斯的说明书可能就无法录入了(因为有日文)。

 

2.2.  安装相关知识点

通过对6+1核心系统的调研发现,核心系统上共建立了139DB Link,外部通向核心系统的DB Link暂时较难统计,后续将采取修改数据库所有用户密码的方法对外部通向核心系统的DB Link进行梳理。

2.2.1      Central Inventory

服务器上安装的Oracle产品清单。在DBCA建库、数据库升级、安装patch等场景都会使用到。位置由/etc/oraInst.loc(AIX/Linux)指定,一般位于$ORACLE_BASE上一层目录的oraInventory中。如果损坏将影响数据库升级和安装patch等维护工作,修复方法可以采用完整的节点的文件覆盖,或者使用$GRID_HOME/oui/bin/runInstaller重建。

2.2.2      Local Inventory

保存某一个ORACLE_HOME下所安装的组件清单,位于$ORACLE_HOME/inventory下,结构较为复杂,很难修复,损坏后一般只能通过重新安装的方式修复。

 

3.     OS/存储/网络实践规划

这部分的规划主要需要考虑如下方面:

1、尽量避免第三方的集群件

常见于AIX系统中的HACMP集群,在高版本的Oracle数据库中,尽量不要使用。

2、慎用下划线

根据RFC标准,不要使用下划线,包括主机名、网卡、域名、网关。

3、默认网关

默认网关要与VIPSCAN IP在同一网段。

4、网卡名要求

节点之间对应的网卡名要相同,且网卡名不能包含“.”。

5、私网地址要求

使用non-routable的网络地址,A 类:10.0.0.0 10.255.255.255B 类:172.16.0.0 172.31.255.255C 类:192.168.0.0 192.168.255.255,参考RFC1918

6、确保网络接口配置正确

包括速度、双工模式,可能的问题gc cr block lost gccurrent block lostifconfig显示Packet send/receive errorsnetstat显示errors/retransmits/reassembly failures,排查问题参考MOS文章Doc ID 563566.1

7、私网网络规划

私网尽量使用独立的交换机,使用VLAN时也不要跨交换机,防止出现Spanning Tree环。

8、私网使用巨帧

如果私网使用了巨帧,请用下面的命令测试巨帧通信是否能够成功:

traceroute -Fnode02-priv 9000           --不同平台和不同版本需要对包大小进行修改

ping -c 2 -M do -s8972 node02-priv

9、私网多播支持

11.2开始,集群私网要求支持多播,具体问题及测试方法参考MOS文章Doc ID 1212703.1

10IPv6支持

12.1开始公网支持IPv6,但是私网依然只支持IPv4

11ASM磁盘规划

ASM规划尽量遵从如下规则:①保证一个磁盘组中不少于4块性能容量相同的磁盘;②同一磁盘组中的磁盘来自不同RAIDLUN

12ASM内存参数优化

默认的ASM实例内存参数可能会出现0RA-4031请参考MOS文档Doc ID 1370925.1进行调整。

13ASM磁盘大小限制

12c之前磁盘大小限制为2TB,超过2TB可能会导致ORA-15196

14NFS挂载问题

NFSRAC配合使用时,注意添加正确的挂载参数,参考MOS文章Doc ID 359515.1

 

4.     Linux内核参数最佳实践

4.1.  操作系统技术认证矩阵

在安装规划前我们已经对操作系统及数据库进行过认证匹配,但每种操作系统下面还会包含非常多的技术项,比如网络、存储、集群文件系统等,这些技术项中的某一种技术是否被Oracle支持,是被Oracle的哪个版本支持,这些还需要进一步的确认,技术细项的认证矩阵主要参考OTN上的文章。

 


4.2.  Virtual Memory参数

虚拟内存参数对于Oracle数据使用内存的方式影响较大,下面几个参数都建议进行设置,保证数据库能够较好的分配和使用服务器内存。

vm.swappiness = 0

vm.dirty_background_ratio= 3

vm.dirty_ratio =80

vm.dirty_expire_centisecs= 500

vm.dirty_writeback_centisecs= 100

 

4.3.  Shared Memory参数

Oracle数据库实例重要的组成部分SGA是由共享内存构成的,因此共享内存相关参数会影响到SGA的正确配置和分配方式。

SHMALL – is the maximumtotal amount of shared memory pages

SHMMAX – is the maximumsize in bytes of a single shared memory segment

SHMMNI – is the maximumtotal amount of shared memory segments

kernel.shmmax =68719476736

kernel.shmall =4294967296

kernel.shmmni =4096

4.4.  Network参数

根据工作负载,rmem_max wmem_max 内核参数应增加到超过默认值 256kb。这些值可确定为每个打开的 socket 分配多少内核缓冲区内存进行网络读取和写入。

net.core.rmem_default = 262144

net.core.rmem_max= 4194304

net.core.wmem_default= 262144

net.core.wmem_max= 1048576

4.5.  File Handles参数

File Handles参数表示能打开的file handle数,Oracle测算每个进程最多打开512file handle,同时,参数的设置需要考虑系统本身打开的file handle

# cat/proc/sys/fs/file-max

4909067

# echo “512 * 300”| bc

153600

# echo “4909067 +153600” | bc
5062667

fs.file-max = 6815744    --Oracle
建议不要小于该值

4.6.  Reverse Path Filtering参数

Linux Kernels 2.6.31 以上版本,Reverse Path filtering的模式变成了Strict,该模式可能导致RAC数据库私网通信disruption,导致私网通信出现问题,可以采用下面的方式将RPF模式调整为loose模式。

net.ipv4.conf.em3.rp_filter= 2

net.ipv4.conf.em4.rp_filter= 2

4.7.  大页内存

参考后面章节。

5.     11g r2 RAC安装最佳实践

5.1.  ORACLE_HME&ORACLE_BASE

对于oracle用户,ORACLE_BASERDBMS的顶级目录,ORACLE_HOME是其下一级目录。对于grid用户,ORACLE_HOME不能是ORACLE_BASE的下一级目录,因为在执行root.sh的时候会更改ORACLE_HOME的权限,会出现INS-32026错误。

 

5.2.  操作系统配置

5.2.1关闭不必要的服务

chkconfig --level2345 rhnsd off

chkconfig --level2345 rpcgssd off

chkconfig --level2345 rpcsvcgssd off

 

5.2.2关闭SELinux

ORACLE官方文档说明从11gR2开始支持开启SELinux功能,但在实际的生产应用中还是遇到一些BUG,所以仍建议关闭SELinux功能

5.2.3时区设置

/etc/sysconfig/clock文件中的内容修改为如下内容:

ZONE="Asia/Shanghai"

5.2.4操作系统包安装参考

操作系统包安装需求查看MOS文章 Doc ID 2226599.1,安装时建议使用yum方式安装,挂载光驱使用完毕后即使卸载,否则可能导致用户监控系统出现文件系统使用率告警。

5.2.5 shmmax & shmall

shmmax - The maximum size(in bytes) of a single shared memory segment

shmall - This parameter sets the total amount of shared memory pagesthat can be used system wide. Hence, shmall should always be at least ceil(shmmax/page_size).

1shmmax参数是单个共享内存段的最大值,单位是bytesshmmax设置大于等于最大的sga_target

2shmall参数是共享内存页面数的最大值,shmall的作用域是整个系统范围,需要大于等于所有实例的sga_target之和除以page_size

 

5.2.6 HugePage设置

如果SGA大于8G以上,就建议配置HugePage。可以用下面的脚本计算各参数的建议值:

#!/bin/bash

KERN=`uname -r |awk -F. '{ printf("%d.%d\n",$1,$2); }'`

# Find out theHugePage size

HPG_SZ=`grepHugepagesize proc/meminfo | awk '{print $2}'`

# Start from 1pages to be on the safe side and guarantee 1 free HugePage

NUM_PG=1

# Cumulativenumber of pages required to handle the running shared memory

segments

for SEG_BYTES in`ipcs -m | awk '{print $5}' | grep "[0-9][0-9]*"`

do

MIN_PG=`echo"$SEG_BYTES/($HPG_SZ*1024)" | bc -q`

if [ $MIN_PG -gt 0]; then

NUM_PG=`echo"$NUM_PG+$MIN_PG+1" | bc -q`

fi

done

# Finish withresults

case $KERN in

'2.4')HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;

echo"Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;

'2.6')MEM_LOCK=`echo "$NUM_PG*$HPG_SZ" | bc -q`;

echo"Recommended setting within the kernel boot command line: hugepages =

$NUM_PG"

echo"Recommended setting within /etc/security/limits.conf: oracle soft

memlock$MEM_LOCK"

echo"Recommended setting within /etc/security/limits.conf: oracle hard

memlock$MEM_LOCK" ;;

*) echo"Unrecognized kernel version $KERN. Exiting." ;;

esac

5.2.7关闭Transparent HugePages

RHEL6 SLES11 开始引入Transparent HugePages,但与OracleRAC存在冲突,可能导致RAC节点驱逐,建议关闭该特性。(RHEL 6.5中默认已关闭)。

启用Transparent HugePages的集群日志内容:

[CSSD][224204544]clssscMonitorThreads clssnmvKillBlockThread not scheduled for7500 msecs

[CSSD][224204544]clssscMonitorThreads clssnmvWorkerThread not scheduled for 8030msecs

 

关闭方法:在/etc/grub.conf文件中添加如下内容并重启操作系统

transparent_hugepage=never

5.2.8网卡配置

1、建议对网卡进行冗余配置,即继续网卡绑定,网卡绑定的模式建议为主备fault-tolerance方式,如果采用负载均衡,交换机上需要进行端口聚合。

2、对于带宽在万兆级别的私网,建议使用巨帧,即调整私网网卡的MTU值到9000(默认为1500),同时在交换机上开启Jumbo Frame

5.2.9磁盘调度算法

磁盘调度算法默认是使用的CFQ算法,对于数据库专用服务器,建议将磁盘调度算法调整为deadline模式,以提升I/O吞吐量和降低I/O响应时间。

echo “deadline”sys/block/磁盘名/queue/scheduler

5.2.10用户限制

具体的用户限制参考Oracle安装文档,本文不做赘述,下面提示下RHEL6版本的特殊地方。对于RHEL6,需要同时修改/etc/security/limits.conf/etc/security/limits.d/90-nproc.conf,两个文件的内容保持一致。

5.2.11已知的操作系统版本及数据库版本问题排除

参考MOS 文档 Doc ID 811306.1


 

 

5.3.  数据库配置

5.3.1文件规划

尽量让redo logfileundo文件等读写频繁的文件分散到不同的磁盘,避免热点盘出现,同时尽量让redologfile这样顺序写的文件与离散读写的数据文件分散,发挥机械盘顺序写的优势;indextable分散到不同表空间。控制文件是数据库的重要文件,读写频繁,容易在异常关闭或者存储故障是损坏,建议进行多路复用,防止单点故障。为redo日志组配置多个成员,一般配置两个,并分散到不同磁盘,防止单点故障。

5.3.2自动任务优化

1、关闭以下任务

2、根据业务特点调整自动统计信息收集任务的时间窗口,特别是周六、周日窗口。

5.3.3参数优化

根据系统情况,并结合对于数据库的版本,对参数进行调整,下面是11.2版本的部分参数调整示例:

5.3.4监控配置

1、调整AWR采用间隔、保留时间;

2、           部署OSW或者NMON

 

6.    其他考虑问题

除了上面提到的问题,在安装数据库时还应该考虑Patch的实施,Patch实施也是一个复杂的问题,对于非常重要的系统,应该对进行完整的补丁分析并制定详细的补丁实施及回退方案。生产中的数据库,一般都使用存储阵列,为防止单点故障,在存储链路上存在冗余,这就需要多路径软件对存储链路进行聚合,多路径软件该如何选择,多路径具体改如何配置都需要进行规划。对于RAC这种对网络环境要求较高的环境,一般都会进行网卡绑定,在不同的操作系统中,网卡绑定的模式需要正确选择,绑定后应该进行测试。交换机、存储等数据库运行的重要环境也需要结合数据库环境进行合理规划,交换机是否需要级联、是否需要单独的内网交换机、存储通道带宽应该如何设计、存储的磁盘类型应该如何选择或组合等等这些问题都应该在安装规划时进行考虑。


最后修改时间:2020-05-07 22:26:37
「喜欢文章,快来给作者赞赏墨值吧」
文章转载自郭耀龙,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论