基于Linux的oracle 12cR2 RAC 标准化安装(四)

来源:这里教程网 时间:2026-03-03 18:15:59 作者:

安装最新  PSU  版本

参看Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets (  文档 ID 1454618.1)  文档,下载目前基于GI  的最新版本的PSU

                                             

根据文档下载最新的GI PSU  并安装文档内容安装最新的PSU 

 

创建数据磁盘组

grid  用户执行:

打开Xmanager-passice

export DISPLAY=xxx.xxx.xxx.xxx:0.0(xxx.xxx.xxx.xxx  为操作机器的IP 0.0  xxmanager  的端口)

grid  用户运行asmca

asmca

 

 

 

下一步:创建DATA  磁盘组

输入磁盘组名:DATA

选择冗余方式为  Extenal

如果未发现磁盘,选择右下角Change Ddisk Discovery Path  修改磁盘发现路径

编辑Database Compatibility  12.2.0.0.0  (修改后12.2  之前数据库将无法使用此磁盘组)

勾选需要创建磁盘组的磁盘

 

下一步:创建磁盘组

下一步:磁盘组创建成功

 

创建实例

运行命令

Oracle  用户执行dbca  命令:

export DISPLAY=xxx.xxx.xxx.xxx:0.0(xxx.xxx.xxx.xxx  为操作机器的IP 0.0  xxmanager  的端口)

$dbca

 

安装截图

选择高级配置:

 

下一步:选择创建集群类型数据库,并选择数据库类型

选择节点

下一步:填写实例名字,以及可选的cdb  参数

下一步:选择数据存放的磁盘组,

下一步,快速恢复区和归档选项,可以不选,事后可添加

可不选  oracle vault  选项

 

内存配置

Process  配置

字符集设置

EM  设置(不建议此处配置)

下一步:输入用户密码

选择创建数据库选项

预先的环境检查

以上报错可以忽略

下一步概要信息

数据库创建中

数据库创建完成

安装结束

参数优化

运维部分

密码过期时间  ,从  11g  开始,  oracle  对数据库所有密码默认过期时间  180  天:

SQL> alter profile default limit  PASSWORD_LIFE_TIME unlimited;

 

密码登陆错误次数    对于输入错误密码导致数据库账号被锁定 

SQL> alter profile default limit  FAILED_LOGIN_ATTEMPTS unlimited;

 

密码大小写敏感  ,该参数默认值是TRUE  ,因此,默认情况下密码大小写是敏感的

SQL> alter system set SEC_CASE_SENSITIVE_LOGON=false;

 

审计策略

Oracle  的审计从11g  开始,默认为开启,在12c  中依然建议关闭:

SQL> alter system set audit_trail=none scope=spfile sid='*';

 

关闭延迟段创建

  11.2  开始,这个值的默认值是  true  ,建议  12c  中设置成  false 

备注:延迟段创建会导致  10g  客户端  exp  导出  12g  文件无法导出空表等

 

关闭跨节点并行查询

ALTER SYSTEM SET =TRUE SCOPE=BOTH;

12g  会智能的将查询分布在所有的节点,但是在普通心跳网络模式下,会加剧心跳压力,在非  IB  交换机模式下建议关闭

 

直接路径读

对于大表,  Oracle 12c  倾向于直接路径读。如果  AWR  中,关于直接路径读的等待事件较高,可以考虑关闭该等待事件。

alter system  set "_serial_direct_read"=never scope=spfile sid='*';

 

9.1.6  调整  JOB  进程数量

11g  12.1  里面默认是1000  12.2  里这个值默认是4000  ,建议设置成和CPU core  相等的值(以8 core  cpu  为例)。

alter system set "JOB_QUEUE_PROCESSES" = 8 scope=spfile;

调整  _use_single_log_writer  隐含参数

alter system set "_use_single_log_writer"=true scope=spfile;

参考文档:

Multiple Log Writers in 12c Causing Enabling and Disabling of Adaptive Scalable Log Writer Workers Which Cause High 'log file sync' Wait Event (  文档 ID 2174075.1  )

该参数主要有三个可选值 true, false, adaptive, 默认值为ADAPTIVE。

对于ADAPTIVE 和False 如果CPU个数大于一个则会有多个lg0n进程

对于true 则不会生成多个lg0n进程,而如同12.1之前那样仅有单个LGWR

 

里面关闭  DRM

alter system set "_gc_policy_time"=0 scope=spfile sid='*';

alter system set "_gc_undo_affinity"=false scope=spfile sid='*';

 

DRM  本身是需要消耗资源的,并且存在诸多bug,对于一个设计较差的系统而言,频繁的DRM,也会引发Library cache lock而导致实例挂住。

优化部分

9.2.1  关闭自适应执行计划调整

自适应执行计划调整为oracle  自动优化机制,异常情况下会导致执行计划不稳定。

alter system set OPTIMIZER_ADAPTIVE_PLANS =false;

 

自适应游标共享调整

自适应游标共享为oracle  自动优化机制,异常情况下会导致执行计划不稳定及内存使用异常。

alter system set "_optimizer_adaptive_cursor_sharing"=false scope=spfile;

alter system set "_optimizer_extended_cursor_sharing"=none  scope=spfile;

alter system set "_optimizer_extended_cursor_sharing_rel"=none  scope=spfile;

 

关闭  feedback

一些通过feedback  修正执行计划的行为可能导致执行计划不稳定及内存使用异常。

alter system set "_optimizer_use_feedback"=false scope=spfile;

alter system set "_optimizer_gather_feedback"=false scope=spfile;

 

调整  SCN  参数

alter system set " "=1 scope=spfile sid='*';

alter system set "_external_scn_logging_threshold_seconds"=600 scope=spfile sid='*';

SCN  递增的一个极限阀值,模式是  24  小时,调整到  1  小时有助于减少  dblink  报错:无效的  SCN

第二个参数为了检测当数据库被同步一个很大  SCN  后告警日志能够及时检测,防止出现  SCN  过度传染

以上两个参数需要在  11.2.0.3  以上版本设置,低于该版本需要  patch  一定补丁才可以设置。

内存抖动参数

alter system set " "=false scope=both;

 

备注:

当数据库系统由于  shared pool(large pool..)  中的内存被耗尽而将产生  ORA-4031  错误时  ,  即使没有使用自动内存管理的特性  数据库也会通过缩小  buffer cache  的内存  ,  然后扩展  shared pool  内存的大小  ,  从而避免发生  ORA-4031  错误  当将参数”  _memory_imm_mode_without_autosga  ”设置为  FALSE    ,  可以关闭该特性  ,  但数据库仍然会像以前一样受到  ORA-4031  错误的威胁  注意  ,  从实际使用中的观察结果看来  ,  这种内存调整是不可逆的  ,  就是说当  shared pool  存在大量空闲内存时并不会释放上次从  buffer cache'  借用  '  的内存  .  建议如果有存在内存抖动的问题,还是以优化  SQL  为主,建议关闭该参数。

 

开启  DDL  记录操作

alter system set enable_ddl_logging=true;

备注:

对于希望监控  DDL  操作的,可以将次参数打开,相关  DDL  操作会记录到数据库告警日志中

 

内存参数优化

  64G  主机内存的情况下,建议  ORACLE  内存设置如下  :

SGA

25G

PGA

5G

SHARED_POOL

5G

 

以上参数设置相对保守,可以自行决定具体参数设置范围,但是不能让  SGA+PGA  内存  >60%OS_Mem  并且确保主机交换空间充足

在线日志调整

在线  redo  日志组建议,每个节点  5  组,每组一个日志文件,每个日志文件大小在  200M-500M  (视具体业务情况而定),但是默认的  4  组每个节点  2    每组  50M  的默认设置明显是不够的

 

 

部分参数优化

磁盘组兼容性

compatible  参数(数据库的兼容版本)还确定启用的功能。该参数适用于数据库实例或  ASM  实例,具体取决于  instance_type  参数。例如,将该参数设置为  10.1  将禁止使用  Oracle Database 11g  中引入的任何新功能(磁盘联机  /  脱机、可变区等)。

建或变更  ASM  磁盘组时,可以使用  CREATE DISKGROUP  命令或  ALTER DISKGROUP  命令新增的  ATTRIBUTE  子句更改其属性。

调整  ASM  内存参数  (  影响版本  Release 11.2 to 12.2)

该部分参考  RAC  规模,如果主机  CPU  数量低于  32  内存小于  64G ASM  磁盘组规模低于  4T  则不需要设置该部分参数

MEMORY_TARGET  参数又基于  PROCESSES  参数相关连,有可能导致缺省配置不足,在内存充裕的情况下建议调整(  asm  实例修改  ):

SQL> alter system set memory_max_target=4096m scope=spfile; SQL> alter system set memory_target=1536m scope=spfile;

 

备注:参看  文档 ID

In   11.2.0.3/11.2.0.4, the "  PROCESSES" parameter will be default   to "available CPU cores * 80 + 40" (in the ASM spfile).  As   the default value for "  MEMORY_TARGET" is based on "  PROCESSES",   it can be insufficient if there is a large number of CPU cores or large number   of diskgroups which could cause issues (i.e. Grid Infrastructure stack fails   to stop with   ORA-04031 etc) per    &   , it is recommended to increase   the value of   MEMORY_MAX_TARGET &   MEMORY_TARGET before   upgrading/installing to 11.2.0.3/11.2.0.4 (does not apply to 10g ASM).

 

1) If PROCESSES   parameter is explicitly set:

The MEMORY_TARGET should   be set to no less than:

      256M + PROCESSES  * 132K (64bit)

 or

      256M + PROCESSES  * 120K (32bit)

2) If PROCESSES   parameter is not set:

The MEMORY_TARGET should   be set to no less than:

      256M + (available_cpu_cores * 80 + 40)   * 132K  (64bit)

or

256M +   (available_cpu_cores * 80 + 40) * 120K    (32bit)

 

 

 

监控部署

监控部署对于  RAC  有着至关重要的作用,在出现故障或者出现疑难杂症的时候,必要的监控部署对问题的解决有着关键帮助

 

部署

OSwatch  作为监控主机性能及资源的工具,由  oracle  开源提供,建议每个工程师都会部署该工具

详见文档:

301137.1     OS Watcher User Guide

580513.1      How To Start OSWatcher Black Box Every System Boot (Linux specific)

 

 

策略调整

默认  30  分钟执行一次,保留  10  天(一个业务周期)

exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>10*24*60);

exec dbms_workload_repository.modify_baseline_window_size(10);

 

 

 

内存开启大页(物理内存大于  128g  开启)

HugePages  详解

参考文档:

HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux (  文档 ID 749851.1)

HugePages on Linux: What It Is... and What It Is Not... (  文档 ID 361323.1)

HugePages on Oracle Linux 64-bit (  文档 ID 361468.1)

Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (  文档 ID 401749.1)

/proc/meminfo Does Not Provide HugePages Information on Oracle Enterprise Linux (OEL5) (  文档 ID 860350.1)

Hugepages are Not used by Database Buffer Cache (  文档 ID 829850.1)

 

 

正文:

 

HugePages  是通过使用大页内存来取代传统的  4kb  内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。尤其是对于  8GB  以上的内存以及较大的  Oracle SGA size  ,建议配值并使用  HugePage  特性

 

huge page  的大小

huge page  的大小取决于所使用的操作系统的内核版本以及不同的硬件平台 可以使用  $grep Hugepagesize /proc/meminfo  来查看  huge page  的大小,对于较大的系统内存以及  sga  ,使用  hugepage  可以极大程度的提高  Oracle  数据库性能

 

 

正确配置huge page

本次配置过程详见文档: HugePages on Oracle Linux 64-bit (  文档 ID 361468.1)

本操作基于  RHEL 6  进行测试:

[root@rehl6 ~]# more /etc/redhat-release

Red Hat Enterprise Linux Server release 6.2 (Santiago)

[root@rehl6 ~]# 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

 

1.

查看当前系统是否配置  HugePages

下面的查询中HugePages相关的几个值都为0,表明当前未配置ugePages,其次可以看到[root@rehl6 ~]#

AnonHugePages:   1142784 kB

HugePages_Total:       0

HugePages_Free:        0

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

2.

修改用户的memlock限制

通过修改/etc/security/limits.conf 配置文件来实现

   该参数的值通常配置为略小于当前的已安装系统内存,如当前你的系统内存为64GB,可以做如下设置

  *   soft   memlock    60397977

  *   hard   memlock    60397977

   上述的设置单位为kb,不会降低系统性能。至少也要配置为略大于系统上所有SGA的总和。

   使用ulimit -l 来校验该设置

 

3.  禁用AMM(Oracle 11g)

如果当前的Oracle 版本为10g,可以跳过此步骤。

如果当前的Oracle 版本为11g、12c,由于AMM(Automatic Memory Management)特性与Hugepages不兼容,需要禁用AMM。

ALTER SYSTEM RESET memory_target SCOPE=SPFILE;

ALTER SYSTEM RESET memory_max_target SCOPE=SPFILE;

ALTER SYSTEM SET sga_target=<n>g SCOPE=SPFILE;

ALTER SYSTEM SET pga_aggregate_target=<n>g SCOPE=SPFILE;

SHUTDOWN IMMEDIATE;

STARTUP;

 

4.

计算vm.nr_hugepages 值

简单的计算方法如下:(只做系统估计)

简单的计算原理是total SGA_MAX_SIZE(多个instance的总和)/hugepagesize + N

N  为少量内存盈余,一般多出100就足够了。如果主机内存128GB,计划70GB用于SGA共享内存,则大页内存需70×1024/2=35840

使用Oracle 提供的脚本hugepages_settings.sh的脚本来计算vm.nr_hugepages的值(这个值设置的是hugepage momory 的大小)

   在执行脚本之前确保所有的Oracle 实例已启动以及ASM也启动(存在的情形下)

  $ ./hugepages_settings.sh

该文档脚本可以参看MOS文档,附录一提供摘录

Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (  文档 ID 401749.1)

 

5.  设置vm.nr_hugepages参数

编辑/etc/sysctl.conf 来设置vm.nr_hugepages参数

  $ sysctl -w vm.nr_hugepages = 1496  (该值为上述脚本获得的值,  vm.nr_hugepages指明了内存页数) 

  $ sysctl -p

 

6.  重启实例及服务:

上述的所有步骤已经实现了动态修改,但对于HugePages的分配需要重新启动主机server才能生效。

 

7.  验证

HugePages  相关参数的值会随着当前服务器上的实例的停止与启动而动态发生变化

   通常情况下,HugePages_Free的值应当小于HugePages_Total的值,在HugePages被使用时HugePages_Rsvd值应当为非零值。

  $ grep Huge /proc/meminfo

  HugePages_Total:   131

  HugePages_Free:     20

  HugePages_Rsvd:     20

  Hugepagesize:     2048 kB

 

   如下面的情形,当服务器上仅有的一个实例被关闭后,HugePages_Rsvd的值为零。且HugePages_Free等于HugePages_Total

  $ grep Huge /proc/meminfo

  HugePages_Total:   131

  HugePages_Free:    131

  HugePages_Rsvd:      0

  Hugepagesize:     2048 kB  

 

 

 

后续备注:

/etc/security/limits.conf  配值文件中memlock参数的值通常配值位略小于当前的已安装系统内存

 

2. Huge  pagesize  LINUX  的大页的大小为  2M  这是不能改变的,而且大页在  oracle  服务器上只与参数  sga_max_size  有关,  hugepage  目前只能用于共享内存段等少量内存类型,例如  oracle SGA    PGA  则不适用,所以不能随便乱设置大页内容,如果没有  oracle  提供的脚本,我们只需要简单的计算原理:  total SGA_MAX_SIZE(  多个  instance  的总和)  /hugepagesize + N N  为稍微超出一点的内存大小,如果主机内存  128GB  ,计划  70GB  用于  SGA  共享内存,则大内存页需  70×1024/2=35840

 

vm.nr_hugepages  参数指定了大页的数目,大页数目*2(2048K大页每页的大小)就是可以使用的内存大页总大小。

huge page  的大小 huge page  的大小取决于所使用的操作系统的内核版本以及不同的硬件平台 可以使用  $grep Hugepagesize /proc/meminfo  来查看  huge page  的大小 下面是不同平台常用的  huge page  的大小。 HW Platform Source Code Tree  Kernel 2.4  Kernel 2.6 ----------------- ---------------------  ------------  ------------- Linux x86 (IA32) i386  4 MB  4 MB *  Linux x86-64 (AMD64, EM64T)  x86_64  2 MB  2 MB  Linux Itanium (IA64) ia64  256 MB    256 MB  IBM Power Based Linux (PPC64) ppc64/powerpc  N/A **    16 MB  IBM zSeries Based Linux s390  N/A 1 MB  IBM S/390 Based Linux s390  N/A   N/A

 

附录一:  (  该脚本不同版本或许会有些许变化,建议参考文件重新下载)

hugepages_settings.sh

#!/bin/bash

#

#   hugepages_settings.sh

#

#   Linux bash script to compute values for the

#   recommended HugePages/HugeTLB configuration

#

#   Note: This script does calculation for all shared memory

#   segments available when the script is run, no matter it

#   is an Oracle RDBMS shared memory segment or not.

#

#   This script is provided by Doc ID 401749.1 from My Oracle Support

#  

 

#   Welcome text

echo   "

This   script is provided by Doc ID 401749.1 from My Oracle Support

()   where it is intended to compute values for

the   recommended HugePages/HugeTLB configuration for the current shared

memory   segments. Before proceeding with the execution please note following:

 * For ASM instance, it needs to configure   ASMM instead of AMM.

 * The 'pga_aggregate_target' is outside the   SGA and

   you should accommodate this while   calculating SGA size.

 * In case you changes the DB SGA size,

   as the new SGA will not fit in the   previous HugePages configuration,

   it had better disable the whole HugePages,  

   start the DB with new SGA size and run the   script again.

And   make sure that:

 * Oracle Database instance(s) are up and   running

 * Oracle Database 11g Automatic Memory   Management (AMM) is not setup

   (See Doc ID 749851.1)

 * The shared memory segments can be listed   by command:

     # ipcs -m

 

 

Press   Enter to proceed..."

 

read

 

#   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}'`

if   [ -z "$HPG_SZ" ];then

    echo "The hugepages may not be   supported in the system where the script is being executed."

    exit 1

fi

 

#   Initialize the counter

NUM_PG=0

 

#   Cumulative number of pages required to handle the running shared memory   segments

for   SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | 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

 

RES_BYTES=`echo   "$NUM_PG * $HPG_SZ * 1024" | bc -q`

 

#   An SGA less than 100MB does not make sense

#   Bail out if that is the case

if   [ $RES_BYTES -lt 100000000 ]; then

    echo "***********"

    echo "** ERROR **"

    echo "***********"

    echo "Sorry! There are not enough   total of shared memory segments allocated for

HugePages   configuration. HugePages can only be used for shared memory segments

that   you can list by command:

 

    # ipcs -m

 

of   a size that can match an Oracle Database SGA. Please make sure that:

 * Oracle Database instance is up and running  

 * Oracle Database 11g Automatic Memory   Management (AMM) is not configured"

    exit 1

fi

 

#   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') echo "Recommended setting:   vm.nr_hugepages = $NUM_PG" ;;

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

esac

 

#   End

相关推荐