Oracle 19c 是甲骨文LTS 长期支持企业级关系型数据库,稳定可靠、安全性强。兼容多平台,适配高并发、海量数据场景。集成容器数据库 CDB/PDB架构,便于多租户集中管理。
广泛用于金融、政务、大型业务核心系统。
一、前期准备
1、修改电脑名、查看操作系统版本和内核
[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]# cat /etc/redhat-release
[root@node1 ~]# uname -r
2、查看磁盘分区
[root@node1 ~]# df -h
[root@node1 ~]# lsblk
3、检查操作系统运行级别
[root@node1 ~]# runlevel
4、检查内存和swap大小
[root@node1 ~]# egrep 'Mem|Swap' /proc/meminfo
[root@node1 tmp]# free -h
5、检查目录和共享段大小
[root@node1 ~]# df -h /u01/ /tmp/
# 默认为操作系统的一半
[root@node1 ~]# df -h /dev/shm/
# 修改共享内存大小
[root@node1 ~]# vi /etc/fstab
# 根据具体情况调整
tmpfs /dev/shm tmpfs defaults,size=1G 0 0
[root@node1 ~]# mount -o remount /dev/shm/
[root@node1 ~]# df -h /dev/shm/
6、关闭透明大页
# 查看透明大页是否关闭(always表示启用,never表示禁用)
[root@node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
# 修改grub配置文件添加“transparent_hugepage=never”
[root@node1 ~]# grep CMDLINE /etc/default/grub
[root@node1 ~]# sed -i 's/^GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 transparent_hugepage=never"/' /etc/default/grub
# 重建/boot/grub2/grub.cng文件(On BIOS-based machines)
[root@node1 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启服务器
[root@node1 ~]# init 6
# 查看参数设置是否正确
[root@node1 ~]# cat /proc/cmdline
# 查看透明大页是否关闭(always表示启用,never表示禁用)
[root@node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
7、配置SSH Timeout
# 为了防止在“AttachHome”操作期间,SSH连接中断,配置SSH daemon的超时时间为unlimited。
[root@node1 ~]# sed -i '/^#LoginGraceTime/c\LoginGraceTime 0' /etc/ssh/sshd_config
[root@node1 ~]# systemctl restart sshd
8、检查磁盘I/O调度
# 为了更好的性能,建议用deadline I/O调度,使用以下命令查看I/O调度策略。
[root@node1 ~]# for i in a b c d e f g h; do cat /sys/block/sd${i}/queue/scheduler; done
[mq-deadline] kyber bfq none
9、检查软件依赖包
# 挂载光盘
[root@node1 ~]# mount /dev/sr0 /mnt/
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# mkdir bak
[root@node1 yum.repos.d]# mv *.repo bak
[root@node1 yum.repos.d]# cat > /etc/yum.repos.d/oel7.repo <
[ol7_local]
name=Oracle Linux 7 Local Repository
baseurl=file:///mnt/
gpgcheck=0
enabled=1
EOF
[root@node1 yum.repos.d]# yum clean all
[root@node1 yum.repos.d]# yum makecache
# 安装以下软件包
[root@node1 yum.repos.d]# yum install -y bc binutils compat-libcap1 compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libXrender libXrender-devel libX11 libXau libXi libXtst libgcc libstdc++ libstdc++-devel libxcb make policycoreutils policycoreutils-python smartmontools sysstat10、修改hosts文件
[root@node1 tmp]# cat >/etc/hosts<
192.168.11.100 node1
EOF
11、关闭SElinux和防火墙
[root@node1 ~]# systemctl status firewalld.service
[root@node1 ~]# systemctl stop firewalld.service
[root@node1 ~]# systemctl disable firewalld.service
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node1 ~]# cat /etc/selinux/config
12、关闭NUMA
# 官方建议在Linux Redhat 7的环境中建议关闭NUMA,不然以后可能影响数据库性能
# 查看default的grub的entry
[root@node1 tmp]# grubby --default-kernel /boot/vmlinuz-3.10.0-1160.el7.x86_64
# 查看default grub的具体信息
[root@node1 tmp]# grubby --info /boot/vmlinuz-3.10.0-1160.el7.x86_64
index=1
kernel=/boot/vmlinuz-3.10.0-1160.el7.x86_64
args="ro rhgb quiet transparent_hugepage=never "
root=UUID=e6f6741a-d7e3-45d9-ac1c-98fe3cb6f940
initrd=/boot/initramfs-3.10.0-1160.el7.x86_64.img
title=Oracle Linux Server 7.9, with Linux 3.10.0-1160.el7.x86_64
# 更新args,添加numa=off的参数
[root@node1 tmp]# grubby --args=numa=off --update-kernel /boot/vmlinuz-3.10.0-1160.el7.x86_64
# 确认numa=off加入default grub中
[root@node1 tmp]# grubby --info /boot/vmlinuz-3.10.0-1160.el7.x86_64
args="ro rhgb quiet transparent_hugepage=never numa=off"
# 重启服务器
[root@node1 tmp]# init 6
13、禁用chronyd
[root@node1 ~]# systemctl stop chronyd
[root@node1 ~]# systemctl disable chronyd
# 移除chrony配置文件:(必须移除,否则校验NTP失败)
[root@node1 ~]# mv /etc/chrony.conf /etc/chrony.confbak
14、禁用avahi-daemon
# avahi-daemon可能会带来网络问题和bug,尤其是对于RAC系统,Oracle建议直接关闭。
[root@node1 ~]# systemctl stop avahi-daemon.service
[root@node1 ~]# systemctl disable avahi-daemon.service
15、配置内核参数和网络参数
# 注意,在Linux 7上,建议先备份下/etc/sysct.conf原始配置文件,重名为别的文件后再进行修改。
[root@node1 ~]# cp /etc/sysctl.conf /etc/sysctl.confbak
[root@node1 ~]#cat > /etc/sysctl.conf<
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 785846944
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 = 1048576
# 禁用ASLR
kernel.randomize_va_space = 0
EOF
[root@node1 ~]# sysctl -p
17、设置NOZEROCONF
# 确保路由169.254.0.0/16不会被添加到路由表中
[root@node1 ~]# echo 'NOZEROCONF=yes' >> /etc/sysconfig/network
18、设置RemoveIPC=no
# 在RHEL7.2+平台上, systemd-login服务增加了一个特性在用户完全退出时清除所有的IPC对象,通过/etc/systemd/logind.conf配置文件中的RemoveIPC选项控制。当最后一个Oracle或者grid用户断开连接时,OS移除这些用户的共享内存段和信号量,进而导致ASM和DB实例崩溃。
[root@node1 ~]# sed -i 's/^#RemoveIPC=no/RemoveIPC=no/' /etc/systemd/logind.conf[root@node1 ~]# grep RemoveIPC /etc/systemd/logind.conf
# 重启systemd-logind或重启OS
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl restart systemd-logind
19、创建用户和用户组
[root@node1 ~]# groupadd -g 10001 oinstall
[root@node1 ~]# groupadd -g 10002 dba
[root@node1 ~]# groupadd -g 10003 oper
[root@node1 ~]# groupadd -g 10004 bakdba
[root@node1 ~]# groupadd -g 10005 dgdba
[root@node1 ~]# groupadd -g 10006 kmdba
[root@node1 ~]# groupadd -g 10007 racdba
[root@node1 ~]# useradd -u 10001 -g oinstall -G dba,oper,bakdba,dgdba,kmdba,racdba oracle
# 修改密码
[root@node1 ~]# echo "oracle" | passwd oracle --stdin
20、创建文件目录
[root@node1 ~]# mkdir -p /u01/app/oracle
[root@node1 ~]# mkdir -p /u01/app/oraInventory
[root@node1 ~]# mkdir -p /u01/app/oracle/product/19.3.0/db_1
[root@node1 ~]# chown -R oracle:oinstall /u01/
[root@node1 ~]# chmod -R 770 /u01/
21、配置环境变量
# Oracle用户环境变量配置
[root@node1 ~]# su - oracle
[oracle@node1 ~]$ cat > /home/oracle/.bash_profile <<'EOF'
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/u01/app/oracle
export ORACLE_SID=nodedb
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/db_1
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$ORACLE_HOME/bin
EOF
22、配置用户shell limits
[root@node1 ~]# cat >/etc/security/limits.conf<<EOF
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle hard stack 32768
oracle soft memlock unlimited
oracle hard memlock unlimited
EOF
23、配置用户的profile
# 编辑文件profile,在文件中加入(如果条目不存在)或者修改下面的内容。
[root@node1 ~]# cat >>/etc/profile<<'EOF'
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
unlimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
EOF
24、配置用户登录权限
[root@node1 ~]# cat >>/etc/pam.d/login <EOF
session required pam_limits.so
EOF
二、软件安装
1、安装数据库软件
[root@node1 tmp]# su - oracle
[oracle@node1 tmp]$ unzip -q LINUX.X64_193000_db_home.zip -d $ORACLE_HOME/
[oracle@node1 ~]$ cd $ORACLE_HOME
[oracle@node1 db_1]$ ./runInstaller
--这里选择只安装软件,后面再创建数据库

--选择单实例安装

--在“数据库版本”中选择“企业版”,然后选择“下一步”。

--在“安装位置”的“Oracle基目录”中,根据实际情况进行设置,然后选择“下一步”。
发现此处已经无法调整数据库的home目录了,因此要在安装前规划和创建好该目录。

--在创建Inventory中选择默认设置,然后“下一步”。

--在操作系统组中选择默认设置,然后“下一步”。

--在“root脚本执行配置”中根据实际情况调整,这里选择默认设置,然后“下一步”。

--在“先决条件检查”中会检查服务器是否满足安装要求,如果通过检查,直接选择“下一步”。

--点击Fix & Check Again,然后新建一个窗口,以root账号执行该脚本。

--在“概要”中可以详细查看之前的设置,如果没有什么问题,选择“安装”,开始正式安装数据库。

--开始进行安装

--安装快完成的时候会提示执行两个脚本。新开一个终端以root账号登录,然后把上面两个脚本复制到终端执行,执行完以后单击“OK”。


--安装完成。

2、安装补丁包
# 查看当前数据库补丁的版本
[root@node1 tmp]# su - oracle
[oracle@node1 tmp]$ cd $ORACLE_HOME/OPatch
[oracle@node1 OPatch]$ ./opatch version
# 下载相应的OPATCH工具:opatch 12.2.0.1.47或以后的版本
[root@node1 tmp]# su - oracle
[oracle@node1 ~]$ mv $ORACLE_HOME/OPatch $ORACLE_HOME/OPatch_bak
[oracle@node1 ~]$ cd /tmp/
[oracle@node1 ~]$ unzip p6880880_190000_Linux-x86-64.zip -d /$ORACLE_HOME
[oracle@node1 tmp]$ cd $ORACLE_HOME/OPatch
[oracle@node1 OPatch]$ ./opatch version
# 冲突检查,首先需要上传RU补丁并解压
[oracle@node1 tmp]$ unzip p36233263_190000_Linux-x86-64.zip
[oracle@node1 tmp]$ cd /tmp/36233263/
[oracle@node1 36233263]$ /u01/app/oracle/product/19.3.0/db_1/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
# 安装补丁
[oracle@node1 36233263]$ /u01/app/oracle/product/19.3.0/db_1/OPatch/opatch apply
Do you want to proceed? [y|n]
User Responded with:
以上两个都选择:y
# 查看升级后的数据库版本
[oracle@node1 36233263]$ /u01/app/oracle/product/19.3.0/db_1/OPatch/opatch lspatches
# 注意:
如果是生产环境已经启动数据库,首先关闭数据库,关闭监听再进行补丁升级
3、创建数据库监听
[oracle@node1 ~]$ netca
--选择侦听配置,然后下一步。

--选择添加,然后下一步。

--设置侦听的名字,然后下一步。

--选择默认,然后下一步。

--根据实际情况设置端口,这里选择默认,然后下一步。

--这里选择不配置其它的侦听,然后下一步。

--侦听配置完成,然后选择下一步。

--选择完成,完成所有侦听的配置。

4、创建数据库
[oracle@node1 ~]$ dbca
--选择创建创建,然后下一步。

--选择高级配置,然后下一步。

--选择Custom Database,然后下一步。

--根据实际情况填写数据库的名称,然后下一步。

--选择使用下面的数据库存储属性,然后下一步。

--根据实际情况是否设置快速恢复区和开启归档,这里不设置快速恢复区和不开启归档,然后下一步。

--这里会自动识别之前创建好的侦听,然后选择下一步。

--这里选择默认,然后下一步。

--选择自动内存管理,然后下一步。

--根据实际情况选择字符集,一旦选择后就不能修改。

--这里选择不配做EM,然后下一步。

--选择为所有账号设置同样的密码,然后设置实际的数据库密码,然后下一步。

--如果设置的密码不满足复杂度要求,会弹出下面的提示,这里选择是,然后下一步即可。

--这里选择默认,然后下一步。

--这里可以检查之前的配置是否合理,如果不合理可以回到对应的位置进行修改,检查没问题后选择下一步。

--开始安装数据库。

--数据库安装完成。
三、启动数据库检查数据库状态
[root@node1 tmp]# su - oracle
[oracle@node1 ~]$ sqlplus / as sysdba
SQL> startup
SQL> select instance_name,status from v$instance;