技术知识
Oracle 12c 单机安装
RHEL7.6 12c 安装过程
主机名设置
hostnamectl set-hostname oradb
===================================================================================
本地光盘作为yum源
/run/media/root/RHEL-7.6\ Server.x86_64/
mkdir /mnt/dvd
ls -ld /mnt/dvd
mount /dev/sr0 /mnt/dvd
# cd /etc/yum.repos.d/
# vi rh76.repo
[iso]
name=Media
baseurl=file:///mnt/dvd
gpgcheck=0
enabled=1
# 清除yum缓存
yum clean all
# 缓存本地yum源
yum makecache
# 测试yum本地源
yum list
===================================================================================
建立用户和组
/usr/sbin/groupadd -g 54321 oinstall
/usr/sbin/groupadd -g 54322 dba
/usr/sbin/groupadd -g 54323 oper
/usr/sbin/groupadd -g 54324 backupdba
/usr/sbin/groupadd -g 54325 dgdba
/usr/sbin/groupadd -g 54326 kmdba
/usr/sbin/useradd -u 54321 -g oinstall -G oinstall,dba,oper oracle
echo "oracle" | passwd --stdin oracle
echo "grid" | passwd --stdin grid
修改分组
usermod -a -G dba,oper oracle
说明:这里的usermod指修改,-a就相当于append dba,oper是用户组,oracle指存在的用户 ,-G 标识组的意思
将用户分配给主要用户组
usermod -g oinstall oracle 说明:-g 用户初始化为指定为登录组
===================================================================================
安装必要的文件包
yum install -y compat-lib*
yum install -y gcc-*
yum install -y gcc-c++*
yum install -y glibc-dev*
yum install -y libaio-*
yum install -y sysstat-*
yum install -y binutils-*
yum install -y glibc-*
yum install -y libgcc-*
yum install -y libstdc++*
yum install -y make-*
或者
yum install binutils compat-libstdc++-33 gcc gcc-c++ glibc glibc.i686 glibc-devel ksh libgcc.i686 libstdc++-devel libaio libaio.i686 libaio-devel libaio-devel.i686 libXext libXext.i686 libXtst libXtst.i686 libX11 libX11.i686 libXau libXau.i686 libxcb libxcb.i686 libXi libXi.i686 make sysstat unixODBC unixODBC-devel zlib-devel zlib-devel.i686 compat-libcap1 -y
===================================================================================
关闭防火墙
[root@oradb]# systemctl stop firewalld
[root@oradb]# systemctl disable firewalld
关闭 SElinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
cat /etc/selinux/config
关闭禁用透明大页和配置HugePage【生产环境必须】
关闭禁用透明大页
Linux 7.4中的关闭方法
当然Oracle Linux 默认已经关闭了THP,可以不用再进行关闭,但如果是Redhat 6,7,SUSE 11 那么还是需要手工来操作的
Linux 7 之后,需要修改/etc/default/grub文件,添加transparent_hugepage=never,然后执行grub2-mkconfig,最后再重启系统
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/enabled
如没有没有,则检查
cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
如果/sys/kernel/mm/transparent_hugepage 和 /sys/kernel/mm/redhat_transparent_hugepage 这2个文件都不存在,那么就是在系统内核中移除了THP
cat /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
reboot
验证
[root@oradb]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@oradb]# cat /proc/cmdline
配置HugePage
HugePage 的实际大小可以使用如下命令查看:
$ grep Hugepagesize /proc/meminfo
可以使用sysctl -w 命令临时生效:
# sysctl -w vm.nr_hugepages=xxxx
永久生效配置修改: /etc/sysctl.conf 文件添加如下内容:
vm.nr_hugepages=xxxx
# grep HugePages /proc/meminfo
关闭avahi-daemon
Avahi-daemon 可能会带来网络问题和bug,尤其是对于RAC系统,Oracle建议直接关闭
[root@oradb]#
systemctl stop avahi-daemon
systemctl disable avahi-daemon
创建目录
mkdir -p /u01/app/oracle/product/12.2.0.1.0/dbhome_1
oracle用户
cat /home/oracle/.bash_profile
export TMP=/tmp
export TEMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl
export ORACLE_UNQNAME=oracle
export JAVA_HOME=/usr/local/java
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0.1.0/dbhome_1
export ORACLE_TERM=xterm
export NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"
export NLS_LANG=american_america.ZHS16GBK
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS11=$ORACLE_HOME/nls/data
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
export THREADS_FLAG=native
umask 022
alias home='cd /u01/app/oracle/product/12.2.0.1.0/dbhome_1'
修改资源限制 /etc/security/limits.conf
[root@oradb]#
cat >> /etc/security/limits.conf <<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 3145728
oracle hard memlock 3145728
EOF
设置PAM
确保加载了最新版本的 PAM,然后在 /etc/pam.d/login 文件中添加或编辑以下行:
[root@oradb]#
cat >> /etc/pam.d/login <<EOF
session required pam_limits.so
EOF
配置NOZEROCONF
vi /etc/sysconfig/network增加以下内容
NOZEROCONF=yes
也可以直接执行如下语法完成修改:
echo "NOZEROCONF=yes" >>/etc/sysconfig/network
修改内核参数 /etc/sysctl.c
[root@oradb]#
cat >> /etc/sysctl.conf <<EOF
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.sem = 5010 64000 5010 256
kernel.shmmni = 4096
kernel.shmall = 8388608
kernel.shmmax = 34359738367
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
net.ipv4.ip_local_port_range = 9000 65500
EOF
dbserver【hostname oradb】
kernel.shmall = 13185268
kernel.shmmax = 67508572160
即刻生效
[root@oradb]#
sysctl -p
kernel.sem:对应4个值
SEMMSL、SEMMNS、SEMOPM、SEMMNI
SEMMSL: 每个信号集的最大信号数量
数据库最大 PROCESS 实例参数的设置值再加上 10 。
Oracle 建议将 SEMMSL 的值设置为不少于 100 。
SEMMNS:用于控制整个 Linux 系统中信号(而不是信号集)的最大数。
Oracle 建议将 SEMMNS 设置为:系统中每个数据库的 PROCESSES 实例参数设置值的总和,加上最大 PROCESSES 值的两倍,最后根据系统中 Oracle 数据库的数量,每个加 10 。
使用以下计算式来确定在 Linux 系统中可以分配的信号的最大数量。它将是以下两者中较小的一个值:SEMMNS 或 (SEMMSL * SEMMNI)
SEMOPM: 内核参数用于控制每个 semop 系统调用可以执行的信号操作的数量。
semop 系统调用(函数)提供了利用一个 semop 系统调用完成多项信号操作的功能。
一个信号集能够拥有每个信号集中最大数量的SEMMSL 信号,因此建议设置 SEMOPM 等于SEMMSL 。
Oracle 建议将 SEMOPM 的值设置为不少于 100 。
SEMMNI :内核参数用于控制整个 Linux 系统中信号集的最大数量。
Oracle 建议将 SEMMNI 的值设置为不少于 100 。
kernel.shmmni: 共享内存段的最大数量
注意该参数不是shmmin,是shmmni,shmmin 表示内存段最小大小
shmmni缺省值4096 足够
shmmax(bytes) = shmmni(page size, default 4k) * shmall (page的个数)
shmall、shmmax参数要根据实际内存数进行调整,不然安装会有问题,静态安装很容易忽略
kernel.shmall :
该参数控制可以使用的共享内存的总页数。 Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。
一个共享内存段的最大大小是 16G ,那么需要共享内存页数是 16GB/4KB==4194304 (页),
当内存为 12G 时, kernel.shmall = 3145728
当内存为 16G 时, kernel.shmall = 4194304
当内次为 32G 时, kernel.shmall = 8388608
当内存为 64G 时, kernel.shmall = 16777216
当内存为 128G 时, kernel.shmall = 33554432
kernel.shmmax :
是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。
设置应该足够大,能在一个共享内存段下容纳下整个的 SGA , 设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。
至于导致系统下降的主要原因为在实例启动以及 ServerProcess 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低 ( 在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响 ) ,但是其他时候都不会有影响。
官方建议值:
32 位 linux 系统:可取最大值为 4GB ( 4294967296bytes ) -1byte ,即 4294967295 。建议值为多于内存的一半,所以如果是 32 为系统,一般可取值为 4294967295 。 32 位系统对 SGA 大小有限制,所以 SGA 肯定可以包含在单个共享内存段中。
64 位 linux 系统:可取的最大值为物理内存值 -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
安装必要的文件包
yum install binutils compat-libstdc++-33 gcc gcc-c++ glibc glibc.i686 glibc-devel ksh libgcc.i686 libstdc++-devel libaio libaio.i686 libaio-devel libaio-devel.i686 libXext libXext.i686 libXtst libXtst.i686 libX11 libX11.i686 libXau libXau.i686 libxcb libxcb.i686 libXi libXi.i686 make sysstat unixODBC unixODBC-devel zlib-devel zlib-devel.i686 compat-libcap1 -y
====================================================================================