安装数据库阶段是非常重要的一环,安装合理可以避免很多后续问题,当前生产环境基本都使用的CentOS7 Oracle11gR2的搭配,现将虚拟机环境下图形安装方式整理如下,内容包含:系统参数设置、数据库软件安装、监听配置及建库
一、准备工作
1、环境规划
设置 | 备注 | |
---|---|---|
内存 | 8G | |
交换分区(SWAP) | 8G | 物理内存16GB以内,SWAP的大小应该与物理内存相等;物理内存大于16GB时,SWAP的大小设置为16G |
磁盘1 | /oracle | 软件安装盘,生产最小设置50G |
磁盘2 | /oradata | 数据文件存放盘,根据业务情况设置大小 |
磁盘3 | /backup | 备份盘,考虑使用NFS |
磁盘4 | /archive | 归档日志盘,根据业务情况设置大小 |
2、基本环境配置
2.1 系统检查和调整
- 检查hostname
hostname
--修改:hostnamectl set-hostname 主机名
- 检查操作系统版本
uname -a
cat /etc/redhat-release
- 检查磁盘分区情况
df -h
- 检查内存情况
free -h
- 检查网卡信息
ifconfig
2.2 修改hosts文件
将IP、主机名对应关系添加到host文件,示例:
代码语言:javascript复制echo "192.168.10.136 xktest" >> /etc/hosts
cat /etc/hosts
代码语言:javascript复制2.3 配置语言环境变量
代码语言:javascript复制echo "export LANG=en_US" >> ~/.bash_profile
source ~/.bash_profile
2.4 准备文件系统
代码语言:javascript复制fdisk -l 查看磁盘
代码语言:javascript复制pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde
vgcreate oravg /dev/sdb
vgcreate datavg /dev/sdc
vgcreate backvg /dev/sdd
vgcreate archvg /dev/sde
lvcreate -n oralv -L 20000M oravg
lvcreate -n datalv -L 20000M datavg
lvcreate -n backuplv -L 20000M backvg
lvcreate -n archivelv -L 20000M archvg
--格式化为xfs格式
mkfs.xfs /dev/backvg/backuplv
mkfs.xfs /dev/archvg/archivelv
mkfs.xfs /dev/datavg/datalv
mkfs.xfs /dev/oravg/oralv
代码语言:javascript复制设置文件系统自动挂载
代码语言:javascript复制vi /etc/fstab
/dev/oravg/oralv /oracle xfs defaults 0 0
/dev/datavg/datalv /oradata xfs defaults 0 0
/dev/backvg/backuplv /backup xfs defaults 0 0
/dev/archvg/archivelv /archive xfs defaults 0 0
或者采用如下方式
代码语言:javascript复制echo "/dev/oravg/oralv /oracle xfs defaults 0 0" >> /etc/fstab
创建挂载目录
代码语言:javascript复制mkdir /oracle
mkdir /oradata
mkdir /backup
mkdir /archive
挂载
代码语言:javascript复制mount /oracle
mount /oradata
mount /backup
mount /archive
2.5 关闭不必要的系统服务
- 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
--关闭后查看状态
systemctl status firewalld
或 firewall-cmd --stat
- 关闭selinux(重启生效)
--永久关闭
vi /etc/selinux/config
修改SELINUX参数为disabled
--临时关闭
setenforce 0
查看状态 getenforce
2.6 配置yum源
代码语言:javascript复制mount /dev/cdrom /mnt
备份原有文件
代码语言:javascript复制cd /etc/yum.repos.d
mkdir bak
mv *.repo bak/
生成配置文件
代码语言:javascript复制echo "[EL]" >> /etc/yum.repos.d/source.repo
echo "name=Linux 7.x DVD" >> /etc/yum.repos.d/source.repo
echo "baseurl=file:///mnt" >> /etc/yum.repos.d/source.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/source.repo
echo "enabled=1" >> /etc/yum.repos.d/source.repo
检查内容
代码语言:javascript复制cat /etc/yum.repos.d/source.repo
2.7 安装所需包
代码语言:javascript复制yum -y install binutils compat-libstdc -33 gcc gcc-c glibc glibc-common glibc-devel ksh libaio libaio-devel libgcc libstdc libstdc -devel make sysstat openssh-clients compat-libcap1 xorg-x11-utils xorg-x11-xauth elfutils unixODBC unixODBC-devel libXp elfutils-libelf elfutils-libelf-devel smartmontools
单独安装
代码语言:javascript复制rpm -ivh compat-libstdc -33-3.2.3-69.el6.x86_64.rpm
2.8 修改资源限制参数
代码语言:javascript复制vi /etc/security/limits.conf
# ORACLE SETTING
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 16384
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
oracle soft memlock 8000000 --根据实际物理内存设置,单位KB,略低于物理内存,示例中内存8G
oracle hard memlock 8000000 --根据实际物理内存设置,单位KB,略低于物理内存,示例中内存8G
vi /etc/security/limits.d/20-nproc.conf
* soft nproc 16384
说明:
- soft代表软件限制,hard代表硬件限制
- 软件限制到了会报警,硬件限制到了会报错
- nproc参数:操作系统级别对每个用户创建的进程数的限制
- nofile参数:文件描述符(句柄)一个进程能够打开文件的次数,也就是一个进程能打开多少文件,影响应用的并发度
- stack参数:堆大小
- memlock参数:限制锁定内存的大小,单位KB,略低于物理内存
2.9 配置内核参数
代码语言:javascript复制vi /etc/sysctl.conf
# ORACLE
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 1258291
kernel.shmmax = 5153960755
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
#kernel.panic_on_oops = 1
vm.nr_hugepages = 2600
sysctl -p 生效
参数 | 说明 |
---|---|
fs.aio-max-nr | 可以拥有的异步IO请求数,避免IO系统故障,默认 |
fs.file-max | 允许的文件句柄最大数目,默认 |
kernel.shmall | 控制共享内存页数=shmmax/PAGESIZE;getconf PAGESIZE 查看PAGESIZE |
kernel.shmmax | 单个共享内存段最大值,让数据库在一个共享段里容纳整个SGA。举例:假设有8G内存,数据库最大使用内存,不要超过物理内存的80%(SGA PGA),所以8G内存情况下,SGA要小于4.8G,PGA要小于1.6G,计算shmmax值最大为4.8Gx1024x1024x1024=5153960755 |
kernel.shmmni | 共享内存段的最大数量,默认 |
kernel.sem | 空格不能去掉,信号参数,默认 |
net.ipv4.ip_local_port_range | oracle本地ipv4端口范围 |
net.core.rmem_default | 默认 |
net.core.rmem_max | 默认 |
net.core.wmem_default | 默认 |
net.core.wmem_max | 默认 |
kernel.panic_on_oops | CentOS7需要加上该参数,避免12cbug |
vm.nr_hugepages | 大内存页,默认4K/页,数据库建议用2M/页,该参数一定要大于SGA。计算方式:sga_max_size/2M 100~500M。8G内存情况下SGA最大4.8G,(4.8x1024)/2=2457.6,加一点得2600 |
检查大页情况
代码语言:javascript复制cat /proc/meminfo | grep Huge
2.10 创建用户、组及目录
创建组
代码语言:javascript复制/usr/sbin/groupadd -g 60001 oinstall
/usr/sbin/groupadd -g 60002 dba
/usr/sbin/groupadd -g 60003 oper
创建oracle用户
代码语言:javascript复制useradd -u 61001 -g oinstall -G dba,oper oracle
passwd oracle
注意:不建议使用echo “oracle” | passwd --stdin oracle 命令设置,该方式使用history可以看到密码,另有符号问题可能会导致bug
创建目录
代码语言:javascript复制mkdir -p /oracle
mkdir -p /oracle/app/oracle/product/11.2.0
mkdir -p /oracle/app/oraInventory
注意:不建议使用/u01作为目录,使用/oracle清晰避免误操作
修改所属组及授权
代码语言:javascript复制chown -R oracle:oinstall /oracle
chown -R oracle:oinstall /oradata
chown -R oracle:oinstall /backup
chown -R oracle:oinstall /archive
chmod -R 775 /oracle
chmod -R 775 /oradata
chmod -R 775 /backup
chmod -R 775 /archive
2.11 关闭透明大页
rac环境下会导致节点重启及性能问题 查看设置前情况
代码语言:javascript复制cat /sys/kernel/mm/transparent_hugepage/defrag
always madvise [never]
cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
修改设置
代码语言:javascript复制vi /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled;then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
chmod x /etc/rc.d/rc.local
设置后需要重启系统
2.12 修改numa功能
代码语言:javascript复制vi /etc/default/grub
在GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet numa=off" 这一行加上numa=off
--重新编译
grub2-mkconfig -o /etc/grub2.cfg
参考:
- https://www.thegeekdiary.com/how-to-disable-numa-in-centos-rhel-67/
- https://www.cnblogs.com/wjoyxt/p/4804081.html
2.13 共享内存段
代码语言:javascript复制vi /etc/fstab
没有的话加入下一行
none /dev/shm tmpfs defaults,size=8G 0 0
--生效
mount -o remount /dev/shm
2.14 配置环境变量
代码语言:javascript复制su - oracle
vi ~/.bash_profile
代码语言:javascript复制export PATH
#左侧显示
PS1="[`whoami`@`hostname`:"'$PWD]'
export TMP=/tmp
export LANG=en_US
export TMPDIR=$TMP
export ORACLE_UNQNAME=xktest
export ORACLE_SID=xktest
export ORACLE_BASE=/oracle/app/oracle;
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1;
export NLS_DATA_FORMAT="yyyy-mm-dd HH24:MI:SS";
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;
#线程标志
export THREADS_FLAG=native;
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch
#终端类型
export ORACLE_TERM=xterm;
#代表使用oracle用户创建的文件都是755权限,此处是反码
umask=022
注意:等号前后不能有空格
二、安装Oracle软件
1、安装包上传解压
代码语言:javascript复制cd /tmp
--使用终端工具将压缩包上传
p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip
代码语言:javascript复制su - oracle
unzip 解压
解压缩完成后出现database文件夹 用户是oracle 组是oinstall
2、软件安装
代码语言:javascript复制cd database
CentOS7下安装11gR2有bug,需要执行如下安装命令
代码语言:javascript复制./runInstaller -jreLoc /etc/alternatives/jre_1.8.0
注意:虚拟机环境无法打开图形化界面需要执行
代码语言:javascript复制export DISPLAY=192.168.10.1:0.0
上面IP为本机IP
安装前检查问题解决:
- /tmp目录空间不足,清理空间即可,对实际安装无影响
- 内核参数shmall不符合要求,勾选后点击【Fix&Check Again】,在root执行脚本解决
- 缺少安装包,安装即可,pdksh包在7环境下不需要可选择ignore
安装到86%报错,这里为CentOS7下安装11gR2的bug,处理方式: /oracle/app/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk 先备份,再修改 搜索NMECTL这一行 在括号后面加上 -lnnz11 修改保存
再点击retry
root下执行脚本
到此软件安装完毕
三、配置监听
代码语言:javascript复制su - oracle
netca
完成,查看1521端口是否被监听
代码语言:javascript复制netstat -an | grep 1521
查看监听状态
代码语言:javascript复制lsnrctl status
四、DBCA建库
Database Name设置与SID相同,要与.bash_profile文件中ORACLE_SID相同
不安装EM
按照图示选择,数据文件路径设置为/oradata
不启动闪回区,先不启用归档
选择Custom,参数设置要符合2.7小节说明 另外不要使用AMM,与内存大页不兼容
注意:在step 10 if 11这一步,需要设置
- 控制文件多路复用
- system、sysaux、TEMP、UNDOTBS1 生产环境设置至少20G(20480M)
- USERS表空间设置5G即可,
- 重做日志至少5组,至少200M/组
建库完毕
代码语言:javascript复制--查看监听状态
lsnrctl status
--登陆数据库查看
sqlplus / as sysdba
五、总结
- 以上为系统参数设置、数据库软件安装、监听配置及建库过程,后续还有补丁安装、参数优化步骤
- 部分设置,如numa还需深入了解原理,实际验证
- 生产环境一般使用静默安装方式,后续另开一篇
- 安装、分区、建库等都可通过shell脚本简化流程,该部分需要加强