CentOS 6 安装 Oracle 11gR2 的一些准备工作

SWAP设置

交换空间由系统内的RAM数量决定。 下表显示交换空间建议。

RAMSwap Space
1 GB – 2GBRAM 大小的1.5倍
2 GB – 16 GB等于 RAM 大小
16 GB 及以上16 GB

防火墙设置

IPtables需要打开的端口

PortProtocolDescription
22TCPSSH
80TCPHTTP
443TCPHTTPS
1521TCPOracle Transparent Network Substrate (TNS) Listener default port
1158TCPOracle Enterprise Manager 11g default port
# Generated by iptables-save v1.4.7 on Fri May 11 12:56:20 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [49:5176]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1158 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Fri May 11 12:56:20 2018

调整虚拟内存

调整虚拟内存需要修改五个内核参数,这些参数会影响Oracle数据库中使用虚拟内存的速率。在设置虚拟内存时,需要注意建议值作为起点。下面介绍虚拟内存参数的简要说明和推荐设置,以及脏数据的定义。

脏数据(dirty data)是为了提高性能而修改并保存在页面缓存中的数据。一旦数据被刷新到磁盘,数据是干净的。

  • swappiness - 从0到100的值,它控制系统交换的程度。高值可以优先处理系统性能,当进程处于非活动状态时积极地将进程交换出物理内存。低值优先考虑交互性,并尽可能避免在物理内存之外交换进程,从而减少响应延迟。默认值是60. Oracle推荐的值是0。
  • dirty_ratio - 包含占系统总内存的百分比,生成磁盘写入的进程本身将开始写出脏数据的页数。默认值是20.建议值是80。
  • dirty_background_ratio - 包含占系统总内存的百分比,后台回写守护进程将开始写出脏数据的页数。Oracle推荐值为3。
  • dirty_expire_centisecs - 定义脏数据的年限足以符合写入条件。默认值为3000,以百分之一秒表示。Oracle推荐值为500。
  • dirty_writeback_centisecs - 定义写入脏内存数据写入磁盘的时间间隔。默认值为500,以百分之一秒表示。Oracle推荐值为100。
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 80
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100

调整共享内存

共享内存允许进程通过将内存区域放入内存段来相互通信。就Oracle而言,系统全局区(SGA)使用共享内存段来存储传入数据和控制信息。 Oracle SGA的大小会影响在系统中设置的共享内存页面和共享内存段的数量。默认情况下,红帽企业版Linux 6提供了大量的共享内存页面和段,但是,适当的系统分配取决于系统内的RAM数量。

为了为运行Oracle数据库的系统分配适当数量的共享内存页面和共享内存段,必须设置内核参数shmall,shmmax和shmmni.

  • shmall - 是共享内存页面的最大总量
  • shmmax - 是单个共享内存段的最大字节数
  • shmmni - 是共享内存段的最大总量

确定系统中共享内存页面(shmall)的最大数量的第一步是确定系统的页面大小(以字节为单位)。以下命令可用于获取系统页面大小。

getconf PAGE_SIZE
4096

一旦获取到页面大小,按如下所示计算shmall:

内存大小(单位为字节 byte) / 单个页面大小

例如,在具有48 GB内存的系统上,shmall计算如下所示:

echo "48*1024^3/4096" | bc
12582912

shmmax的计算如下:

内存的一半(单位为字节 byte

例如,在具有48 GB内存的系统上,shmmax计算如下所示:

echo "48*1024^3/2" | bc
25769803776

至于shmmni,Oracle建议将shmmni的值设置为4096。

注意:如果/etc/sysctl.conf中的当前值高于为shmmax和shmall计算的值,请不要更改/etc/sysctl.conf文件中的值。

由于计算的shmmax和shmall的值比已经设置的值小,因此在/etc/sysctl.conf中不做任何更改。

/etc/sysctl.conf文件的片段:

kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 4096

为了使更改立即生效,请运行以下命令:

sysctl -p

调整信号量

红帽企业linux 6为进程之间的信息同步提供信号量。 内核参数sem由四个参数组成:

  • semmsl - 被定义为每个信号量组的最大信号数量
  • semmni - 被定义为整个系统的最大信号集数量
  • semmns - 被定义为整个系统的信号量总数 (注:semmns = semmsl * semmni )
  • semopm - 定义为每个semop系统调用执行的信号操作总数。
kernel.sem = semmsl semmns semopm semmni

在/etc/sysctl.conf文件中需要以下行来为Oracle提供足够的信号量:

kernel.sem = 250 32000 100 128

调整临时端口

Oracle建议临时默认端口范围从9000到65500设置。这确保避免Oracle和其他应用程序使用的所有众所周知的端口和端口。 要设置临时端口范围,请修改/etc/sysctl.conf文件并添加以下行:

net.ipv4.ip_local_port_range = 9000 65500

调整网络缓冲区

通过设置rmem和wmem来优化Oracle中应用程序套接字的默认缓冲区和最大缓冲区。

  • rmem - 接收缓冲区大小
  • wmem - 发送缓冲区大小

在/etc/sysct.conf文件中修改为Oracle推荐的值。

net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

调整异步I/O请求的最大数量

修改内核参数fs.aio-max-nr,设置当前异步I / O请求的最大数量。 Oracle建议将该值设置为1048576.

修改/etc/sysctl.conf文件,如下所示:

fs.aio-max-nr = 1048576

调整文件句柄

在安装Oracle 11gR2(11.2.0.4)时,fs.file-max内核参数必须至少设置为6815744。

内核参数fs.file-max设置操作系统的打开文件句柄的最大数量。 Oracle建议对于在系统中找到的每个Oracle数据库实例,除了已分配给Red Hat Enterprise Linux 6操作系统的打开文件句柄之外,还要分配512*PROCESSSES。数据库实例中的PROCESSES是指oracle用户可以并发连接到Oracle数据库的最大进程数。对于Oracle 11gR2(11.2.0.4),PROCESSES的默认值为150。

要正确计算系统的fs.file-max,首先通过以下命令识别分配给系统的当前fs.file-max:

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

接下来,从系统中找到每个Oracle数据库实例中所有PROCESSES,并将多个PROCESSES加起来,然后乘以512。如以下命令中所示。

echo "512*150" | bc
76800
注:由于尚未创建Oracle数据库,因此使用默认值150

最后,将当前的fs.file-max值与512*PROCESSES得到的新值相加,以获得新的fs.file-max值。

echo "385107+76800" | bc
461907

虽然fs.file-max参数的值因您的环境而异,但Oracle建议不得小于6815744。

修改/etc/sysctl.conf文件,如下所示:

fs.file-max = 6815744

用户和组

在安装oracle数据库11g第2版(11.2.0.4)之前,Oracle建议为oracle grid infrastructure创建grid用户,并为安装在系统上的oracle数据库软件创建oracle用户。就本文档而言,oracle数据库软件所有者是用户oracle,而oracle grid infrastructure软件所有者是用户grid。根据安装的软件,每个用户被指定不同的组来处理特定的角色。oracle用户和grid用户都有一个公共主要组,即oracle中央清单组(oinstall)。

以下是为安装oracle数据库和oracle用户而创建的推荐系统组。

  • osdba组(dba) - 具有dba特权的操作系统用户帐户
  • osoper组(oper) - 创建的可选组,用于将有限的dba特权(sysoper特权)分配给特定的os用户帐户

以下是为安装oracle grid infrastructure和grid用户而创建的推荐系统组

  • osdba组(asmdba) - 提供对oracle asm实例的管理访问

  • osasm组(asmadmin) - 通过sysasm特权为存储文件提供管理访问权限

  • osoper组(asmoper) - 创建的可选组,用于为特定的os用户帐户分配有限的dba特权

groupadd --gid 54321 oinstall
groupadd --gid 54322 dba
groupadd --gid 54323 asmdba
groupadd --gid 54324 asmoper
groupadd --gid 54325 asmadmin
groupadd --gid 54326 oper
useradd --uid 54321 --gid oinstall --groups dba,oper,asmdba,asmoper oracle
useradd --uid 54322 --gid oinstall --groups dba,asmadmin,asmdba,asmoper grid
echo "grid" | passwd --stdin grid
echo "oracle" | passwd --stdin oracle

通过以下命令验证grid和oracle用户的主组和属组:

id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(asmdba),54324(asmoper),54326(oper)
id grid
uid=54322(grid) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(asmdba),54324(asmoper),54325(asmadmin)

调整用户资源限制

Oracle建议针对每个用户允许的打开文件描述符(nofile)的数量,进程数量(nproc)和堆栈段(stack)的大小分别进行软硬限制。设置这些限制的目的是为了防止应用程序(如Oracle)在极其繁重的工作负载下耗尽所有操作系统资源时可能导致的系统崩溃。

在/etc/security/limits.d/中创建一个名为99-grid-oracle-limits.conf的文件,如下所示:

touch /etc/security/limits.d/99-grid-oracle-limits.conf

注意:不直接修改/etc/security/limits.conf文件的原因是由于系统中读取限制文件的顺序。读取/etc/security/limits.conf文件后,会读取/etc/security/limits.d/目录中的文件。如果两个文件包含相同的条目,则最后读取的条目优先。

oracle   soft   nofile    1024
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    1024
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

对99-grid-oracle-limits.conf文件所做的修改立即生效。 但是,请确保先前登录的oracle已注销并重新登录,以使更改生效。

以root身份在/etc/profile.d/中创建一个名为oracle.sh的shell脚本,为oracle用户创建适当的ulimits。

oracle.sh脚本的内容如下:

#Setting the appropriate ulimits for oracle and grid user
if [ $USER = "oracle" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
       ulimit -u 16384
       ulimit -n 65536
    else
       ulimit -u 16384 -n 65536
    fi
fi

if [ $USER = "grid" ]; then
    if [ $SHELL = "/bin/ksh" ]; then
       ulimit -u 16384
       ulimit -n 65536
    else
       ulimit -u 16384 -n 65536
    fi
fi

以oracle和grid用户身份运行以下命令来验证ulimit值:

ulimit -a

配置HugePages(Oracle安装完成后)

默认情况下,RHEL6使用透明巨大页面(transparent huge pages),也被称为匿名巨大页面(anonymous huge pages)。在RHEL6中实现透明巨大页面(THP),通过根据需要动态分配巨大页面,消除了手动管理巨大页面的许多困难,从而改善了内存管理。与静态大页面不同,不需要额外的配置即可使用它们。巨大的页面可以通过增加程序快速访问内存页面的机会来提高应用程序的性能。与传统的巨大页面不同,当需要虚拟内存清理时,THP可以被换出(作为较小的4kB页面)。

不幸的是,Oracle数据库没有利用THP进行进程间通信。事实上,My Oracle Support [ID 1557478.1] 12指出,如果发现THP被启用,则会由于意外的性能问题或延迟而禁用THP。要获得Oracle数据库的大页面的好处,需要分配静态大页面并禁用THP。建议在数据库启动并运行后运行该脚本。数据库启动并运行后分配巨大页面的原因是提供适当数量的页面来处理正在运行的共享内存段。步骤如下:

1.新建bash脚本,将其保存为huge_pages_settings.sh

#!/bin/bash
# Check for the kernel version
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
# Find out the HugePage size
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {'print $2'}`
# Start from 1 pages to be on the safe side and guarantee 1 free HugePage
NUM_PG=1
# Cumulative number 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 with results
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'|'3.8'|'3.10'|'4.1') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
    *) echo "Unrecognized kernel version $KERN. Exiting." ;;
esac
# End

2.以root用户身份运行以下命令,确保huge_pages_settings.sh可执行:

chmod + x huge_pages_settings.sh

3.以root用户身份执行huge_pages_settings.sh脚本,如下所示:

./huge_pages_settings.sh
Recommended setting: vm.nr_hugepages = 2309

4.将huge_pages_settings.sh脚本提供的 hugepages = 2309 添加到/etc/grub.conf中的内核引导命令行中,并在重新启动后持久禁用透明大页面,如下所示:

title Red Hat Enterprise Linux (2.6.32-358.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/myvg-root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_DM rd_LVM_LV=myvg/root EYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=myvg/swap rhgb quiet hugepages=2309 transparent_hugepage=never
initrd /initramfs-2.6.32-358.el6.x86_64.img

注意:由于内存还没有被分割,所以在内核引导命令行中分配大量页面的数量是最可靠的方法.

5.重新启动系统以确保巨大页面设置正常生效。

7.使用以下命令验证系统上的大页面总数:

cat /proc/meminfo | grep -i hugepages_total
HugePages_Total:    2309

8.通过以下命令验证透明超大页面的当前状态是否被设置为永远不变:

cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

注:从Oracle数据库版本11.2.0.2开始,引入了初始化参数“USE_LARGE_PAGES”,以便为每个数据库用例分配大量页面。Oracle数据库11.2.0.2的默认值为true,而对于运行11.2.0.3或更高版本的Oracle数据库,它将设置为auto。有关参数及其值的更多信息,请参阅My Oracle Support 14。

注:巨大页面与自动内存管理(AMM)不兼容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值