暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

【学习】RHEL 7下安装Oracle19c两节点RAC

dblife 2021-11-06
1614


目录


1.    系统配置

1.1.     自动创建perl5目录问题

1.2.     关闭numa 和transparent_hugepage

1.3.     关闭RemoveIPC

1.4.     关闭ssh的DNS解析

1.5.     关闭防火墙

1.6.     关闭selinux

1.7.     关闭avahi-daemon服务

1.8.     配置私网IP

1.9.     修改主机名

1.10.       yum配置

1.11.       安装rpm包

1.12.       配置系统参数

1.13.       配置hosts文件

1.14.       查看系统时区

1.15.       配置时间同步服务

1.16.       需关闭的服务

1.17.       需打开的服务

1.18.       NOZEROCONF

1.19.       启动multipath服务

1.20.       创建用户和组

1.21.       配置用户环境变量

1.22.       解压安装包

1.23.       安装cvuqdisk rpm包

1.24.       重启主机

1.25.       存储配置(使用multipath并使用AFD)

2.    安装grid

3.    创建磁盘组

4.    安装db软件

5.    打19.5的补丁

4.1.     补丁冲突检查

4.2.     检查磁盘空间是否足够

4.3.     以root执行opatchauto打补丁(分别在两个节点执行,不能并行)   

4.4.     查看数据库版本

4.5.     处理二节点数据库版本不一致问题

5.    建库及配置

5.1.     创建ASM磁盘组

5.2.     dbca建库

5.3.     查看数据库时区

5.4.     检查无效对象

5.5.     PDB下AWR设置

5.6.     配置HugePage

5.7.     数据库参数配置

5.8.     设置进程空闲时间限制

5.9.     修改glogin.sql,添加如下内容

5.10.       创建用户和表空间

5.11.       ORA-28040

5.12.       限制idle会话时长






01


系统配置


1.1.  自动创建perl5目录问题

该目录删除后,再次登录的时候回自动创建

这和perl-homedir这个rpm包有关

 

编辑/etc/profile.d/perl-homedir.sh

PERL_HOMEDIR=1

修改为

PERL_HOMEDIR=0

退出系统,重新登录

 

1.2.  关闭numa 和transparent_hugepage

           


1.3.  关闭RemoveIPC

1.4.  关闭ssh的DNS解析

Vi /etc/ssh/sshd_config    并重启sshd服务

systemctl restart sshd.service


1.5.  关闭防火墙


systemctl  stop  firewalld.service

systemctl disable firewalld.service

systemctl status firewalld.service

 

1.6.  关闭selinux


sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/config



# add by xieyunhui 2020-11-10

session   required     pam_limits.so

 

1.7.  关闭avahi-daemon服务

Oracle 12c以下版本RAC与Redhat Linux的avahi-daemon服务的水火不容


systemctl disable avahi-daemon.socket

 

1.8.  配置私网IP

 

1.9.  修改主机名

 hostnamectl set-hostname wangzhao    # 重启永久生效

1.10.    yum配置


[cdrom]

name=Local cdrom

baseurl=file:///mnt/

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 


1.11.    安装rpm包

# OELRHEL上,oracle12.2及之后的数据库版本,不再需要编译器gccgcc-c++

yum -y install gcc*

yum -y install bc

yum -y install binutils

yum -y install compat-libcap1

yum -y install compat-libstdc++

yum -y install elfutils-libelf

yum -y install elfutils-libelf-devel

yum -y install fontconfig-devel

yum -y install glibc

yum -y install glibc-devel

yum -y install ksh

yum -y install libaio

yum -y install libaio-devel

yum -y install libX11

yum -y install libXau

yum -y install libXi

yum -y install libXtst

yum -y install libXrender

yum -y install libXrender-devel

yum -y install libgcc

yum -y install libstdc++

yum -y install libstdc++-devel

yum -y install libxcb

yum -y install make

yum -y install smartmontools

yum -y install sysstat

yum -y install net-tools

#(for Oracle RAC and Oracle Clusterware)

rpm -ivh compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

1.12.    配置系统参数

SHMALL参数:设置共享内存总页数。这个值太小有可能导致数据库启动报错。很多人调整系统内核参数的时候只关注SHMMAX参数,而忽略了SHMALL参数的设置。这个值推荐设置为物理内存大小除以分页大小。

# getconf PAGE_SIZE

对于32G的内存,4K分页大小的系统而言,SHMALL的值应该设置为

select 32*1024*1024*1024/4096 from dual; ==8388608

 

SHMMAX参数:用于定义单个共享内存段的最大值。

64linux 系统:可取的最大值为物理内存值 -1byte ,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE 即可,可以取物理内存 -1byte 。  

内存为12G时,该值为 12*1024*1024*1024-1 =12884901887

内存为16G时,该值为 16*1024*1024*1024-1 =17179869183

内存为32G时,该值为 32*1024*1024*1024-1 =34359738367

内存为64G时,该值为 64*1024*1024*1024-1 =68719476735

内存为128G时,该值为 128*1024*1024*1024-1 =137438953471

 

hugepage配置



# kernel parameters for 19C  installation,add by xieyunhui 2019-12-19

fs.file-max = 6815744

kernel.sem = 250 32000 100 128

kernel.shmmni = 4096

kernel.shmall = 1073741824

kernel.shmmax = 4398046511104

kernel.panic_on_oops = 1

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

net.ipv4.conf.all.rp_filter = 2

net.ipv4.conf.default.rp_filter =  2

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range =  9000 65500

net.ipv4.ipfrag_high_thresh =  16777216

net.ipv4.ipfrag_low_thresh =  15728640

vm.min_free_kbytes=409600

vm.vfs_cache_pressure=200

vm.max_map_count=262144

vm.swappiness=40

vm.nr_hugepages  = 38788

vm.hugetlb_shm_group=54321

[root@dw01 ~]# more  /proc/sys/vm/hugetlb_shm_group

0

[root@dw01 ~]# id oracle

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

本环境中数据库启动正常,大页也可以正常使用,但是在系统日志中有类似Mar 11  12:12:33 i-q2ghx82t kernel: oracle (3677): Using mlock ulimits for  SHM_HUGETLB is deprecated 这样的告警.通过分析,是由于少配置了hugetlb_shm_group参数导致(vm.hugetlb_shm_group 参数设置为有权使用 HugePages  的操作系统组。默认情况下,此参数设置为 0,从而允许所有组使用 HugePages。可以将此参数设置为 Oracle 数据库进程所属的操作系统组,如  oinstall),在本系统中在sysctl.conf中增加vm.hugetlb_shm_group=54321,然后重启系统(测试中,如果只是重启数据库,非系统重启后第一次重启数据库,不会出现该告警),系统日志没有出现相关告警.


Linux7 需要修改/etc/systemd/system.conf而不是/etc/security/limits.conf


# add by xieyunhui 2019-12-19

oracle    soft   nofile    65536

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

 

备注:Memlock在HugePage环境开启,单位为KB。

1.13.    配置hosts文件


1.14.    查看系统时区

 ll  /etc/localtime
 lrwxrwxrwx. 1 root root 35 Dec 12 09:50  /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai


 [oracle@hs-ylb-DB-yc ~]$ date -R
 Mon, 27 Apr 2020 10:53:11 +0800

 

 

1.15.    配置时间同步服务

[root@dw02 ~]# cat /etc/chrony.conf |grep  -v ^#|grep -v ^$

server 10.69.89.1

maxchange 500 0 -1

maxslewrate 500

driftfile /var/lib/chrony/drift

rtcsync

logdir /var/log/chrony

 


maxslewrate 500

#makestep 10 3

 

 


 

时间同步最大阀值应设置为500秒,服务器与时间服务器的时间误差超过500秒时应停止同步,在RedHat Enterprise Linux Server 6上ntpd服务将自动退出,在RedHat Enterprise Linux Server 7上chronyd服务将忽略跳过,配置方法如下:

在配置文件/etc/chrony.conf中添加如下内容:

maxchange 500 0 -1

 

RHEL7上chrony默认已经开启微调模式,默认值是83333.333 ppm (one twelfth),即每秒同步 1/12 秒,在RHEL6上微调模式同步1秒需要2000秒的时间,即每秒同步0.5ms,需保证所有RHEL版本时间服务的微调模式一致,

在RHEL7上需将微调模式的频率修改为500 ppm,即1/2000秒,配置如下:

注释或者删除配置文件/etc/chrony.conf中的如下内容:

#makestep 10 3

在配置文件/etc/chrony.conf中添加如下内容:

maxslewrate 500

以上所有修改之后,需要重新启动ntpd或者chronyd服务器,操作如下:

 

在RedHat Enterprise Linux Server 7上:

# systemctl restartchronyd.service

[root@rac-04 grid]# systemctl restart chronyd.service

[root@rac-04 grid]# systemctl enable chronyd.service

查看时间同步源:

# chronyc sources -v

查看时间同步状态:

# chronyc sourcestats -v

服务器第一次与时间服务器进行时间同步需采用手动同步的方式,在同步之前需要检查与时间服务器的误差范围,若误差范围较大(超过预设500s),需要评估时间调整后对操作系统和业务的影响,检查方法如下:

# ntpdate -q <NTP Server IP地址>

 

               手动同步方法如下:

# ntpdate <NTPServer IP地址>

        注:手动同步时间时需要先停止时间服务,同步完成后才开启时间服务。

 

 

1.16.    需关闭的服务

服务名称

服务描述

cups

打印服务

postfix

邮件服务

pcscd

smart卡登录服务

smartd

磁盘监控服务,对于做过RAID的磁盘无效

alsasound

声卡服务

iscsitarget

iscsi target服务

smb

与windows互访问的文件服务

acpid

acpi高级电源管理服务

cpuspeed

Cpu节能工具

iptables

ipv4防火墙服务

ip6tables

ipv6防火墙服务

firewall

防火墙服务(RHEL7上才有的)

systemctl disable firewalld

systemctl disable avahi-daemon

systemctl disable bluetooth

systemctl disable cpuspeed

systemctl disable cups

systemctl disable firstboot

systemctl disable ip6tables

systemctl disable iptables

systemctl disable pcmcia

systemctl stop autofs

systemctl stop nfslock

systemctl stop rpcidmapd

systemctl stop rpcgssd

systemctl stop ntpd

systemctl stop bluetooth.service

systemctl stop cups.path

systemctl stop cups.socket

systemctl stop postfix.service

systemctl stop rpcbind.service

systemctl stop rpcbind.socket

systemctl stop  NetworkManager-dispatcher.service

systemctl stop  dbus-org.freedesktop.NetworkManager.service

systemctl stop abrt-ccpp.service

systemctl stop cups.service

systemctl stop libvirtd

 

systemctl disable autofs

systemctl disable nfslock

systemctl disable rpcidmapd

systemctl disable rpcgssd

systemctl disable ntpd

systemctl disable bluetooth.service

systemctl disable cups.path

systemctl disable cups.socket

systemctl disable postfix.service

systemctl disable rpcbind.service

systemctl disable rpcbind.socket

systemctl disable  NetworkManager-dispatcher.service

systemctl disable  dbus-org.freedesktop.NetworkManager.service

systemctl disable abrt-ccpp.service

systemctl disable cups.service

systemctl disable  libvirtd

 

1.17.    需打开的服务

服务名称

服务描述

kdump

内存转储服务

cron

定时服务

auditd

审计服务

rsyslog

日志服务

sysstat

系统监控

sshd

安全shell服务

irqbalance

中断平衡服务(低时延应用需要关闭)

network

网络服务

 

1.18.    NOZEROCONF

12c RAC 配置

CSSD Fails to Join the Cluster After PrivateNetwork Recovered if avahi Daemon is up and Running (Doc ID 1501093.1)文档中建议

# echo "NOZEROCONF=yes" >> /etc/sysconfig/network

 

1.19.    启动multipath服务

 

1.20.    创建用户和组

检查系统用户

cat /etc/passwd|grep bash  # 删除无关用户


groupadd -g 54321 oinstall

groupadd -g 54322 dba

groupadd -g 54323 asmadmin

groupadd -g 54324 asmdba

groupadd -g 54325 asmoper

useradd -u 54321 -g oinstall -G  dba,asmadmin,asmdba,asmoper oracle

echo "zAq1XsW2CdE3VfR4"|passwd  --stdin oracle

useradd -u 54322 -g oinstall -G  asmadmin,asmdba,asmoper,dba grid

echo "Oracle_123"|passwd  --stdin grid

 

1.21.    配置用户环境变量

创建目录

mkdir -p /u01/app/19c/grid

mkdir -p /u01/app/grid

mkdir -p  /u01/app/oracle/product/19c/db_1/

chown -R grid:oinstall /u01

chown oracle:oinstall /u01/app/oracle

chmod -R 775 /u01/

 


ORACLE_SID=+ASM1

ORACLE_BASE=/u01/app/grid

ORACLE_HOME=/u01/app/19c/grid

PATH=$ORACLE_HOME/bin:$PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export ORACLE_SID ORACLE_BASE ORACLE_HOME  PATH LD_LIBRARY_PATH NLS_LANG

stty erase ^H

 

alias obase='cd $ORACLE_BASE'

alias ohome='cd $ORACLE_HOME'

alias tns='cd $ORACLE_HOME/network/admin'

alias envo='env | grep ORACLE'

 


ORACLE_SID=jzdb1

ORACLE_BASE=/u01/app/oracle

ORACLE_HOME=$ORACLE_BASE/product/19c/db_1

PATH=$ORACLE_HOME/bin:$PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

NLS_LANG=AMERICAN_AMERICA.AL32UTF8

export ORACLE_SID ORACLE_BASE ORACLE_HOME  PATH LD_LIBRARY_PATH NLS_LANG

stty erase ^H

alias obase='cd $ORACLE_BASE'

alias ohome='cd $ORACLE_HOME'

alias tns='cd $ORACLE_HOME/network/admin'

alias envo='env | grep ORACLE'

1.22.    解压安装包

unzip Oracle Database 19.3.0.0.0 for Linuxx86-64.zip -d $ORACLE_HOME

 

1.23.    安装cvuqdisk rpm包

1.24.    重启主机

重启两台主机

1.25.    存储配置(使用multipath并使用AFD)

DG_OCR

3块5G

DG_FRA

300G

DG_DATA

6块500G

配置multipath.conf,添加如下内容:,配置完成之后,重启主机

multipaths{

     multipath {

                wwid36f4796010093e1189d2df8500000002c  -à>>根据multipath -ll查到

                      alias mpatha

         }

     multipath {

                wwid 36f4796010093e1189d2dc3840000002b

                      alias mpathb

         }

     multipath {

                wwid 36f4796010093e1189d2d1bf30000002a

                      alias mpathc

         }  

     multipath {

                wwid 36f4796010093e1189d2e60c50000002d

                      alias mpathd

         }  

     multipath {

                wwid 36f4796010093e1189d2e9c150000002e

                      alias mpathe

         }  

     multipath {

                wwid 36f4796010093e1189d31468f00000031

                      alias mpathf

         }  

     multipath {

                wwid 36f4796010093e1189d2f25330000002f

                      alias mpathg

         }  

     multipath {

                wwid 36f4796010093e1189d30762800000030

                      alias mpathh

         }  

 

}

配置存储权限

  • chmod u+x /etc/rc.d/rc.local

  • 在rc.local中添加如下内容

chown grid:oinstall /dev/mapper/mpath*

chown grid.asmadmin /dev/mapper/mpatha

chown grid.asmadmin /dev/mapper/mpathb

chown grid.asmadmin /dev/mapper/mpathc

 

OCR盘的属主必须是asmadmin


AFD若与多路径绑定搭配使用的方法不需要提前使用root用户给磁盘打标签。但是对磁盘的初始化赋权需要通过chmod和chown的方式手动完成,并且,为了保证重启后,权限仍然正确,需要启用rc.local或其他开机自配置的脚本或工具,辅助完成。

 

如果使用multipath并使用AFD,以下内容不用执行

 

存储权限配置(编辑 /etc/rc.d/rc.local,添加如下内容)

chown grid.oinstall /dev/mapper/mpath*

chown grid.asmadmin /dev/mapper/mpatha

chown grid.asmadmin /dev/mapper/mpathb

chown grid.asmadmin /dev/mapper/mpathd

 


ORACLE_BASE变量被设置为临时目录可以避免在安装Oracle Grid Infrastructure之前在Grid Home目录中创建诊断或跟踪文件。在执行下面的操作之前,确保是在$ORACLE_HOME/bin目录中执行命令。

 


./asmcmd afd_label OCR02 /dev/mapper/mpathb–init

./asmcmd afd_label OCR03 /dev/mapper/mpathc–init

./asmcmd afd_label DG_FRA01/dev/mapper/mpathd –init

(# For lot of disks,you can use this loop:

# i=0; for j in {a..d}; do i=$((i+1));./asmcmd afd_label DISK0${i} /dev/sd${j} --init; done

)

 

 

其它磁盘按照上述步骤进行label。

在另外的节点上,不再需要做label,而是直接scan即可,这跟使用ASMLIB、UDEV的操作非常像。

$asmcmd afd_scan

 





 

其实,AFD也在使用UDEV,label过后的磁盘在/dev/oracleafd/disks目录中可以找到。


操作系统中可以看到AFD磁盘和底层磁盘的对应关系。

读取磁盘头信息


默认AU为4m,块大小为4096,每个AU有1024个块,磁盘头的备份块就在第二个AU的倒数第二个块,就是第2046个块(不包括第一个AU的第一个块(也就是磁盘头块))




02


安装GRID


安装前检查安装条件是否具备

$ORACLE_HOME/runcluvfy.shstage -pre crsinst -n dw01,dw02 -verbose

 

Verifying /dev/shm mounted as temporary  file system ...FAILED

 

/dev/shm 提示检查失败,值过小,后面启动实例时可能会失败

 

Verifying /dev/shm mounted as temporary  file system ...FAILED

 

rac2: PRVE-0426 : The size of in-memory  file system mounted as /dev/shm is

 

       "871" megabytes which is less than the required size of  "2048" megabytes

 

       on node "rac2"

 

解决方案:增加操作内存,增大shm

 

[root@rac2 ~]# mount -o  remount,size=2100M /dev/shm


解压:unzip xxx.zip -d $ORACLE_HOME


也可以通过以下方式,在安装的过程中打补丁(数据库软件安装过程也可以类似操作)

./gridSetup.sh-applyRU /tmp/31305339

Configure an Oracle Standalone Cluster

 

Cluster name长度必须小于15个字符


 cluster name must be less than 15 chars

(19c GridInstallation Failed. (Doc ID 2549484.1))

 

DNS/NIS name service:未使用DNS服务器配置SCAN IP时,上报此告警,可以忽略。

 

/dev/shm mounted as temporary filesystem:该告警为Oracle的一个Bug,cluvfy check并非检查“/dev/shm”是否已挂载,而是检查“/etc/fstab”中关于“/dev/shm”的配置信息,可以忽略。 

 

 

禁用ora.crf

[grid@dw01 ~]$ crsctl stat res ora.crf  -init

NAME=ora.crf

TYPE=ora.crf.type

TARGET=ONLINE

STATE=ONLINE on dw01

[grid@dw02 ~]$ crsctl stat  res ora.crf -init -p|grep AUTO

AUTO_START=always

[root@dw01 db]#  /u01/app/19c/grid/bin/crsctl modify resource "ora.crf" -attr  "AUTO_START=0" -init

[grid@dw01 ~]$ crsctl stat res ora.crf  -init -p|grep AUTO

AUTO_START=0

 





03


创建磁盘组


执行asmca





04


安装DB软件



解压安装包到$ORACLE_HOME目录

unzip Oracle Database 19.3.0.0.0 for Linuxx86-64.zip -d $ORACLE_HOME

          





05


建库及配置

5.1.  创建ASM磁盘组

     

5.2.  dbca建库

     

此处建议Custom Database

  

 

5.3.  处理二节点数据库版本不一致问题

以下以oracle用户执行

  • 首先查看两个节点的$ORACLE_HOME/bin/oracle文件的权限和大小,发现二节点该文件大小和一节点(正常节点)的不一致。

  • 关闭数据库:srvctl stop database -d xxx

  • 拷贝一节点的$ORACLE_HOME/bin/oracle文件到二节点相应目录下

  • 在二节点执行:$ORACLE_HOME/bin/relink all

  • 启动数据库:srvctl start database -d xxx

  • 登录二节点数据库后,数据库版本正常

注意:二节点在relink后,汇报如下错误:该错误可忽略

+0x264):  undefined reference to `sslss_async_call_cnt_'

skswr.c:(text.hot+0x29e):  undefined reference to `sslss_async_call_cnt_'

skswr.c:(text.hot+0x2ac):  undefined reference to `sslss_async_call_cnt_'

skswr.c:(text.hot+0x2b8):  undefined reference to `sslss_sig_pending_'

skswr.c:(text.hot+0x2cd):  undefined reference to `sslss_sigset_raise_signals'

 

INFO:  

make:  *** [/u01/app/oracle/product/19c/db_1/rdbms/lib/oracle] Error 1

 

INFO:  End output from spawned process.

INFO:  ----------------------------------

SEVERE:  oracle.sysman.oii.oiil.OiilActionException: Error in invoking target 'irman  ioracle idrdactl idrdalsnr idrdaproc rac_on dnfs_on' of makefile  '/u01/app/oracle/product/19c/db_1/rdbms/lib/ins_rdbms.mk'. See  '/u01/app/oracle/product/19c/db_1/install/relinkActions2020-09-27_11-25-24AM.log'  for details.

       at oracle.sysman.oii.oiis.OiisMakeDeps.invokeMakefile(OiisMakeDeps.java:537)

       at  oracle.sysman.oii.oiis.OiisMakeDeps.doRelink(OiisMakeDeps.java:614)

       at  oracle.sysman.oii.oiis.OiisMakeDeps.doOperation(OiisMakeDeps.java:799)

       at  oracle.sysman.oii.oiis.OiisMakeDeps.main(OiisMakeDeps.java:809)

 

 

5.4.  查看数据库时区

SQL>  select dbtimezone from dual; # CDBPDB
 
 DBTIME
 ------
 +00:00

--修改时区

SQL>  alter database set time_zone='+08:00'; # 重启数据库

SQL>  select dbtimezone from dual;
 
 DBTIME
 ------
 +08:00
 
 SQL>

如果是RAC的环境,还需要检查其它的服务,比如 db nodeapps,listener ,asm等等的时区是不是都是错的。
 
 srvctl getenv database -d <dbname>
 srvctl getenv nodeapps -n <nodename>
 srvctl getenv listener
 srvctl getenv asm
 
 --
如果需要修改,例子:
 e.g
 srvctl setenv asm -t 'TZ=<the TZ you  want>'

 

5.5.  检查无效对象

5.6.  PDB下AWR设置

1) Set  awr_pdb_autoflush_enabled=true on PDB level:

alter session set container=PDB1;
 alter system set awr_pdb_autoflush_enabled=true sid=’*’ scope=both;

2) Set AWR  snpashot properly

select * from  cdb_hist_wr_control;
 
 DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID
 2580889417 +40150 00:01:00.0 +00008 00:00:00.0 DEFAULT 3
 
 execute dbms_workload_repository.modify_snapshot_settings(interval => 60);
 
 select * from cdb_hist_wr_control;
 
 DBID SNAP_INTERVAL RETENTION TOPNSQL CON_ID
 2580889417 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT 3

 

3) Also please set AWR_SNAPSHOT_TIME_OFFSET to  1000000 to avoid performance issue when multiple PDBs creating snapshots in  same time.CDB级)
 
alter system set  AWR_SNAPSHOT_TIME_OFFSET=1000000 scope=both;

4) Wait for 1-2 hours  for automatic snapshots to be generated:

select * from  awr_pdb_snapshot;

Or you can  create snapshots manually:

SQL> connect  / as sysdba
 SQL> alter session set container=PDB1;
 SQL> exec dbms_workload_repository.create_snapshot();

Create AWR or  ADDM report:


 @?/rdbms/admin/awrrpt
 
@$ORACLE_HOME/rdbms/admin/addmrpt.sql
 Specify the location of AWR Data
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 AWR_ROOT - Use AWR data from root (default)
 AWR_PDB - Use AWR data from PDB    ** Use the location AWR_PDB  for a PDB level report

 


 

5.7.  配置HugePage

执行以下脚本

#!/bin/bash
 
#
 
# hugepages_settings.sh
 
#
 
# Linux bash script to compute values for the
 
# recommended HugePages/HugeTLB configuration
 
# on Oracle Linux
 
#
 
# 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
 
# http://support.oracle.com
 
 
# Welcome text
 
echo "
 This script is provided by Doc ID 401749.1 from My Oracle Support
 (http://support.oracle.com) where it is intended to compute values for
 the recommended HugePages/HugeTLB configuration for the current shared
 memory segments on Oracle Linux. 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 the overall 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" ;;
     
'3.8'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
     
'3.10'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
     
'4.1'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
     
'4.14'echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
     *) 
echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;
 
esac
 
 
# End

 

chmod +x hugepages_settings.sh

关闭集群和数据库

设置内核参数(sysctl.conf)

chmod +x hugepages_settings.sh

检查hugepage

grep -i huge /proc/meminfo

启动集群和数据库

检查hugepage

grep -i huge /proc/meminfo

 

5.8.  数据库参数配置

alter system set open_cursors=2000  scope=both sid='*';

alter system set  session_cached_cursors=500 scope=spfile sid='*';

alter system set inmemory_size=5G  scope=spfile sid='*';

alter system set db_files=3000  scope=spfile sid='*';

alter system set enable_ddl_logging=true  scope=both sid='*';

alter profile default limit  PASSWORD_LIFE_TIME unlimited;

alter system set  "_lm_drm_disable"=7 scope=spfile sid='*';

alter system set temp_undo_enabled=true  scope=both sid='*';

alter system set "_undo_autotune"  = false scope=both sid='*';

alter system set undo_retention=1800  scope=both sid='*';

alter system set shared_pool_size=5G  scope=both sid='*';

select dbtimezone from dual;

alter database set time_zone='+08:00';

重启数据库

 

5.9.  RMAN参数配置

配置控制文件snapshot放在共享存储行,防止主库更新控制文件时失败,导致备库恢复失败。

5.10.    设置进程空闲时间限制

在oracle用户下找到$ORACLE_HOME/network/admin/sqlnet.ora,

SQLNET.EXPIRE_TIME=5

SQLNET.EXPIRE_TIME指定发送探针以验证客户端/服务器连接是否处于活动状态的时间间隔(以分钟为单位)。设置大于0的值可确保由于客户端终止异常,连接无法无限期保持打开状态。如果探测发现终止连接或不再使用的连接,则会返回错误,导致服务器进程退出。此参数主要用于数据库服务器,该服务器通常一次处理多个连接。

当设置了resource_limit=true。通过idle_time限制sessionidle 时间

IDLE_TIME:限制每个会话所允许的最长连续空闲时间,超过这个时间会话将自动断开。参数值是一个整数,单位是分钟。

 

当设置了resource_limit=true 。通过idle_time限制session idle 时间。session idle超过设置时间,状态为sniped(v$session).,然而OS下的process并不会释放,当session(userprocess) 再次与server process 通讯,将关闭相应的server process.

sqlnet.expire_time 的原理不一样,Oracle Server 发送包探测dead connection ,如果连接关闭,或者不再用,则关闭相应的server process.

以上两者组合使用,减少server process,防止process超过init$ORACLE_SID极限值。

 

5.11.    修改glogin.sql,添加如下内容 添加后会导致打补丁失败

--SQLPLUS默认编辑器设置为vi

define _editor=vi

--默认打开DBMA_OUTPUT,这样不必要每次在输入这个命令,同时将默认缓冲池设置得尽可能大

set serveroutput on size 1000000

--假脱机输出文本时,会去除文本行两端的空格,而且行宽不定,如果设置为off(默认设置),假脱机输出的文本行宽度则等于所设置的linesize

set trimspool on

--设置选择LONG和CLOB列时显示的默认字节数

set long 5000

--设置显示的文本宽为200个字符

set linesize 200

--设置SQLPLUS多久打印一次标题,将此参数设置大些这样每页只显示一次标题

set pagesize 9999

--设置AUTOTRACE得到解释计划输出的默认宽度,一般80足够放下整个计划

column plan_plus_exp format a80

--设置SQLPLUS提示符,显示格式为用户@数据库名

column global_name new_value gname

set termout off

define gname=idle

column global_name new_value gname

select lower(user) ||'@'||  substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_name

from (select  global_name,instr(global_name,'.') dot from global_name);

set sqlprompt '&gname>'

set termout on

 

5.12.    创建用户和表空间

 

SQL> create role pub_role;

 

Role created.

 

SQL> grant connect,create table,create  view,create materialized view,create job, manage scheduler,create synonym  ,debug any procedure, debug connect session ,RESTRICTED SESSION,create  sequence,create trigger,create type,CREATE   PROCEDURE to pub_role;

 

select 'revoke execute on  '||table_name||' from public;' from dba_tab_privs where grantee='PUBLIC' and  privilege='EXECUTE' and table_name in  ('UTL_FILE','UTL_TCP','UTL_HTTP','UTL_SMTP','DBMS_LOB','DBMS_SYS_SQL','DBMS_JOB');

 

 

SQL> grant pub_role to XTCRM;

 

Grant succeeded.

 

CREATE TABLESPACE XTCRM     LOGGING DATAFILE  '+DG_DATA/JZDB/DATAFILE/xtcrm01.dbf' SIZE 100M AUTOEXTEND ON ;

 

Alter user xtcrm qutoa unlimited on  xtcrm;

 

create user XTCRM

   identified by "1QaZ#eDc"

   default tablespace XTCRM

   profile jzdb_profile;

 

User created.

 

SQL> alter user xtcrm quota unlimited  on XTCRM;

 

User altered.

 

 

CREATE TABLESPACE TBS_BSS_XTDC DATAFILE  '+DG_DATA/JZDB/DATAFILE/xtdc01.dbf' SIZE 100M AUTOEXTEND ON ;

create user XTDC

   identified by "5TgB^yHn"

   default tablespace TBS_BSS_XTDC

   profile jzdb_profile;

SQL> alter user xtcrm quota unlimited  on TBS_BSS_XTDC;

 

User altered.

 

SQL> grant pub_role to XTDC;

 

Grant succeeded.

 

--创建角色

create role pub_role;

--给角色权限

grant connect,resource,create view,create  job,create synonym ,debug any procedure, debug connect session to pub_role;

grant connect,resource,create view,create  materialized view,on commit refresh ,global query rewrite,create job,create  synonym ,debug any procedure, debug connect session to pub_role;

 

--取消public角色的execute权限

select 'revoke execute on  '||table_name||' from public;' from dba_tab_privs where grantee='PUBLIC' and  privilege='EXECUTE' and table_name in  ('UTL_FILE','UTL_TCP','UTL_HTTP','UTL_SMTP','DBMS_LOB','DBMS_SYS_SQL','DBMS_JOB');

 

5.13.    ORA-28040

修改oracle用户下$ORACLE_HOME/network/admin/sqlnet.ora

解决客户端连接报:ORA-28040: No MatchingAuthentication Protocol

SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10

sqlnet.expire_time=10 # min

监听重启后,必须再次修改下用户密码,否则用户登录时就会报密码错误

重新修改数据库用户密码:

alter user BTA50 identified by"4RfV%tGb";

 

参考:


12c and Later Releases: ORA-28040 After Upgrade: No Matching AuthenticationProtocol (Doc ID 1957995.1)

 

5.14.    限制idle会话时长

数据库连接的客户端异常断开后,其占有的相应并没有被释放,如从v$session视图中依旧可以看到对应的session处于inactive,且对应的服务器进程也没有释放,导致资源长时间地被占用, SQLNET.EXPIRE_TIME对于这个问题我们提供了解决方案,专门用于清理那些异常断开的情形,如网络异常中断,客户端异常掉电,异常重启等。通过设定参数为非零值(分钟)来发送探测包以检查客户端的异常断开。一旦探测包找到了异常的连接将返回错误,清除对应的server process

5.15.   取消密码时长限制

alter profile defaultlimit PASSWORD_LIFE_TIME unlimited;

 

文章转载自dblife,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论