在rockylinux 9.3环境中采用rpm模式部署oracle 19c
用途
在开发数据库系统时,可以验证功能是否与oracle的表现一致,验证正确性和兼容性
限制
- 虚拟机安装,cpu 2*4 内存16g 磁盘100g
- 目标生产环境是rhel 9.x,学习环境采用rocky linux 9.3
- 选择oracle版本是长期支持版19c
- 只验证基础的功能,可以禁用cdb pdb
- 安装的oracle只需要功能验证不用于生产环境,也不进行性能测试
查找资料
- bing上查找资料,一般找到的安装oracle的资料是centos 7.x,8.x,而9.x的比较少,找到:
- 基于rhel9,oracle linux 9安装oracle 19c 数据库
可惜文中表示安装oracle时需要安装库补丁,流程还是比较麻烦 - linux安装oracle19c完整版(图形+静默安装) 系统参数都是手工设置和通过界面设置,可以参考
- 基于rhel9,oracle linux 9安装oracle 19c 数据库
- 直接查找官方文档
- oracle database installation guide 19c for linux
发现最新的19c没有要求安装补丁,并且支持rpm方式安装,过程非常简洁,尝试成功后总结,供大家参考。
- oracle database installation guide 19c for linux
准备环境
安装虚拟机的过程不再赘述,安装后需要做的准备工作如下:
- 关闭防火墙
#检查防火墙状态 systemctl status firewalld.service #关闭防火墙 systemctl stop firewalld.service #禁止开机启动防火墙 systemctl disable firewalld.service
- 关闭selinux
vi /etc/selinux/config
编辑内容:
#selinux=enforcing #注释掉 selinux=disabled #增加
存盘退出,下次重新启动后生效。如果想使配置立即生效,执行:
setenforce 0
- 配置域名
采用修改/etc/hostname的方式,重启后生效
vi /etc/hostname oracle19c.learning.cn
- 配置域名解析
vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.154.19 oracle19c oracle19c.learning.cn
- 配置软件源
事先将rocky linux 9.3的iso mount到/mnt/rocky9/
vi /etc/yum.repos.d/rocky.repo [baseos] name=rocky linux $releasever - baseos baseurl=file:///mnt/rocky9/baseos/ gpgcheck=1 enabled=1 countme=1 metadata_expire=6h gpgkey=file:///etc/pki/rpm-gpg/rpm-gpg-key-rocky-9 [appstream] name=rocky linux $releasever - appstream baseurl=file:///mnt/rocky9/appstream/ gpgcheck=1 enabled=1 countme=1 gpgkey=file:///etc/pki/rpm-gpg/rpm-gpg-key-rocky-9
- 准备oracle rpm
- 预安装rpm:
访问oracle linux 9的软件源,如x86对应的是: https://yum.oracle.com/repo/oraclelinux/ol9/appstream/x86_64/,
找到对应oracle 19c的预安装版本,如 oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm,下载该预安装rpm - oracle 19c:
访问 oracle下载页 找到最新的19c版本,如
oracle-database-ee-19c-1.0-1.x86_64.rpm,然后下载到本地
- linux共享windows目录
为了节省linux的磁盘空间,直接在linux中访问windows下载的rpm
- 在windows中共享保存rpm的文件夹,如名称为//192.168.154.1/oracle
- 在linux中链接windows的共享
mkdir -p /mnt/oracle mount -t cifs -o username=xxxx,password=yyyy //192.168.154.1/oracle /mnt/oracle
请把"xxxx","yyyy"换成实际的用户名和密码
部署oracle预安装rpm包
按官方文档,安装 preinstallation rpm时会:
- 解析oracle grid infrastructure和oracle database所需的依赖项,并自动下载和安装对应的rpm包
- 创建oracle用户,将其加入新创建的orainventory (oinstall)和 osdba (dba)组中
- 按oracle数据库预安装rpm程序的建议设置sysctl.conf、系统启动参数和驱动程序参数
- 设置硬和软资源限制 linux进程资源访问限制
- 根据内核版本设置其他推荐参数
- 在linux x86_64和linux aarch64机器的内核中设置numa=off
dnf install -y /mnt/oracle/19c/oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm last metadata expiration check: 0:01:14 ago on wed 17 apr 2024 12:02:20 pm cst. dependencies resolved. ====================================================================================================== package architecture version repository size ====================================================================================================== installing: oracle-database-preinstall-19c x86_64 1.0-1.el9 @commandline 33 k installing dependencies: chkconfig x86_64 1.24-1.el9 baseos 161 k gssproxy x86_64 0.8.4-6.el9 baseos 108 k initscripts x86_64 10.11.5-1.el9 baseos 210 k keyutils x86_64 1.6.3-1.el9 baseos 72 k ksh x86_64 3:1.0.0~beta.1-3.el9 appstream 879 k libxxf86dga x86_64 1.1.5-8.el9 appstream 20 k libaio-devel x86_64 0.3.111-13.el9 appstream 10 k libdmx x86_64 1.1.4-12.el9 appstream 16 k libev x86_64 4.33-5.el9 baseos 52 k libnfsidmap x86_64 1:2.5.4-20.el9 baseos 60 k libnsl x86_64 2.34-83.el9.7 baseos 77 k libverto-libev x86_64 0.3.2-3.el9 baseos 13 k nfs-utils x86_64 1:2.5.4-20.el9 baseos 425 k rpcbind x86_64 1.2.6-5.el9 baseos 56 k sssd-nfs-idmap x86_64 2.9.1-4.el9_3 baseos 42 k xorg-x11-utils x86_64 7.5-40.el9 appstream 106 k xorg-x11-xauth x86_64 1:1.1-10.el9 appstream 36 k transaction summary ====================================================================================================== install 18 packages total size: 2.3 m installed size: 7.5 m downloading packages: running transaction check transaction check succeeded. running transaction test transaction test succeeded. running transaction preparing : 1/1 installing : libnfsidmap-1:2.5.4-20.el9.x86_64 1/18 installing : ksh-3:1.0.0~beta.1-3.el9.x86_64 2/18 running scriptlet: ksh-3:1.0.0~beta.1-3.el9.x86_64 2/18 installing : libdmx-1.1.4-12.el9.x86_64 3/18 installing : libxxf86dga-1.1.5-8.el9.x86_64 4/18 installing : xorg-x11-utils-7.5-40.el9.x86_64 5/18 installing : xorg-x11-xauth-1:1.1-10.el9.x86_64 6/18 installing : libaio-devel-0.3.111-13.el9.x86_64 7/18 installing : libnsl-2.34-83.el9.7.x86_64 8/18 installing : keyutils-1.6.3-1.el9.x86_64 9/18 installing : libev-4.33-5.el9.x86_64 10/18 installing : libverto-libev-0.3.2-3.el9.x86_64 11/18 installing : gssproxy-0.8.4-6.el9.x86_64 12/18 running scriptlet: gssproxy-0.8.4-6.el9.x86_64 12/18 running scriptlet: rpcbind-1.2.6-5.el9.x86_64 13/18 installing : rpcbind-1.2.6-5.el9.x86_64 13/18 running scriptlet: rpcbind-1.2.6-5.el9.x86_64 13/18 created symlink /etc/systemd/system/multi-user.target.wants/rpcbind.service → /usr/lib/systemd/system/rpcbind.service. created symlink /etc/systemd/system/sockets.target.wants/rpcbind.socket → /usr/lib/systemd/system/rpcbind.socket. running scriptlet: nfs-utils-1:2.5.4-20.el9.x86_64 14/18 installing : nfs-utils-1:2.5.4-20.el9.x86_64 14/18 running scriptlet: nfs-utils-1:2.5.4-20.el9.x86_64 14/18 installing : chkconfig-1.24-1.el9.x86_64 15/18 installing : initscripts-10.11.5-1.el9.x86_64 16/18 running scriptlet: initscripts-10.11.5-1.el9.x86_64 16/18 created symlink /etc/systemd/system/sysinit.target.wants/import-state.service → /usr/lib/systemd/system/import-state.service. created symlink /etc/systemd/system/sysinit.target.wants/loadmodules.service → /usr/lib/systemd/system/loadmodules.service. running scriptlet: oracle-database-preinstall-19c-1.0-1.el9.x86_64 17/18 installing : oracle-database-preinstall-19c-1.0-1.el9.x86_64 17/18 installing : sssd-nfs-idmap-2.9.1-4.el9_3.x86_64 18/18 running scriptlet: oracle-database-preinstall-19c-1.0-1.el9.x86_64 18/18 running scriptlet: sssd-nfs-idmap-2.9.1-4.el9_3.x86_64 18/18 verifying : chkconfig-1.24-1.el9.x86_64 1/18 verifying : libverto-libev-0.3.2-3.el9.x86_64 2/18 verifying : initscripts-10.11.5-1.el9.x86_64 3/18 verifying : rpcbind-1.2.6-5.el9.x86_64 4/18 verifying : libev-4.33-5.el9.x86_64 5/18 verifying : sssd-nfs-idmap-2.9.1-4.el9_3.x86_64 6/18 verifying : gssproxy-0.8.4-6.el9.x86_64 7/18 verifying : nfs-utils-1:2.5.4-20.el9.x86_64 8/18 verifying : libnfsidmap-1:2.5.4-20.el9.x86_64 9/18 verifying : keyutils-1.6.3-1.el9.x86_64 10/18 verifying : libnsl-2.34-83.el9.7.x86_64 11/18 verifying : libaio-devel-0.3.111-13.el9.x86_64 12/18 verifying : xorg-x11-xauth-1:1.1-10.el9.x86_64 13/18 verifying : xorg-x11-utils-7.5-40.el9.x86_64 14/18 verifying : libxxf86dga-1.1.5-8.el9.x86_64 15/18 verifying : libdmx-1.1.4-12.el9.x86_64 16/18 verifying : ksh-3:1.0.0~beta.1-3.el9.x86_64 17/18 verifying : oracle-database-preinstall-19c-1.0-1.el9.x86_64 18/18 installed: chkconfig-1.24-1.el9.x86_64 gssproxy-0.8.4-6.el9.x86_64 initscripts-10.11.5-1.el9.x86_64 keyutils-1.6.3-1.el9.x86_64 ksh-3:1.0.0~beta.1-3.el9.x86_64 libxxf86dga-1.1.5-8.el9.x86_64 libaio-devel-0.3.111-13.el9.x86_64 libdmx-1.1.4-12.el9.x86_64 libev-4.33-5.el9.x86_64 libnfsidmap-1:2.5.4-20.el9.x86_64 libnsl-2.34-83.el9.7.x86_64 libverto-libev-0.3.2-3.el9.x86_64 nfs-utils-1:2.5.4-20.el9.x86_64 oracle-database-preinstall-19c-1.0-1.el9.x86_64 rpcbind-1.2.6-5.el9.x86_64 sssd-nfs-idmap-2.9.1-4.el9_3.x86_64 xorg-x11-utils-7.5-40.el9.x86_64 xorg-x11-xauth-1:1.1-10.el9.x86_64 complete!
注意:安装完成后重新启动系统,确认所有的系统参数已经应用
验证预安装rpm的工作成果(不是强迫症无需关注这一部分)
- 检查依赖项,执行命令
dnf repoquery --requires oracle-database-preinstall-19c-1.0-1.el9.x86_64.rpm /bin/sh /etc/redhat-release /usr/bin/bash bc bind-utils binutils ethtool glibc glibc-devel initscripts ksh libaio libaio-devel libgcc libnsl libstdc++ libstdc++-devel make module-init-tools net-tools nfs-utils openssh-clients pam policycoreutils policycoreutils-python-utils procps psmisc smartmontools sysstat tar unzip util-linux-ng xorg-x11-utils xorg-x11-xauth
显示所有的依赖项,说明在部署预安装rpm过程中,检查3个文件和31个rpm的依赖关系
- 检查系统配置/etc/sysctl.conf 增加了内容
cat /etc/sysctl.conf # oracle-database-preinstall-19c setting for fs.file-max is 6815744 fs.file-max = 6815744 # oracle-database-preinstall-19c setting for kernel.sem is '250 32000 100 128' kernel.sem = 250 32000 100 128 # oracle-database-preinstall-19c setting for kernel.shmmni is 4096 kernel.shmmni = 4096 # oracle-database-preinstall-19c setting for kernel.shmall is 1073741824 on x86_64 kernel.shmall = 1073741824 # oracle-database-preinstall-19c setting for kernel.shmmax is 4398046511104 on x86_64 kernel.shmmax = 4398046511104 # oracle-database-preinstall-19c setting for kernel.panic_on_oops is 1 per orabug 19212317 kernel.panic_on_oops = 1 # oracle-database-preinstall-19c setting for net.core.rmem_default is 262144 net.core.rmem_default = 262144 # oracle-database-preinstall-19c setting for net.core.rmem_max is 4194304 net.core.rmem_max = 4194304 # oracle-database-preinstall-19c setting for net.core.wmem_default is 262144 net.core.wmem_default = 262144 # oracle-database-preinstall-19c setting for net.core.wmem_max is 1048576 net.core.wmem_max = 1048576 # oracle-database-preinstall-19c setting for net.ipv4.conf.all.rp_filter is 2 net.ipv4.conf.all.rp_filter = 2 # oracle-database-preinstall-19c setting for net.ipv4.conf.default.rp_filter is 2 net.ipv4.conf.default.rp_filter = 2 # oracle-database-preinstall-19c setting for fs.aio-max-nr is 1048576 fs.aio-max-nr = 1048576 # oracle-database-preinstall-19c setting for net.ipv4.ip_local_port_range is 9000 65500 net.ipv4.ip_local_port_range = 9000 65500
注: 原文件备份在/etc/sysctl.d/99-initial-sysctl.conf
- 检查系统配置/etc/sysconfig/network 增加了内容
cat /etc/sysconfig/network # created by anaconda # oracle-database-preinstall-19c : add nozeroconf=yes nozeroconf=yes
- 检查进程资源配置
cat /etc/security/limits.d/oracle-database-preinstall-19c.conf # oracle-database-preinstall-19c setting for nofile soft limit is 1024 oracle soft nofile 1024 # oracle-database-preinstall-19c setting for nofile hard limit is 65536 oracle hard nofile 65536 # oracle-database-preinstall-19c setting for nproc soft limit is 16384 # refer orabug15971421 for more info. oracle soft nproc 16384 # oracle-database-preinstall-19c setting for nproc hard limit is 16384 oracle hard nproc 16384 # oracle-database-preinstall-19c setting for stack soft limit is 10240kb oracle soft stack 10240 # oracle-database-preinstall-19c setting for stack hard limit is 32768kb oracle hard stack 32768 # oracle-database-preinstall-19c setting for memlock hard limit is maximum of 128gb on x86_64 or 3gb on x86 or 90 % of ram oracle hard memlock 134217728 # oracle-database-preinstall-19c setting for memlock soft limit is maximum of 128gb on x86_64 or 3gb on x86 or 90% of ram oracle soft memlock 134217728 # oracle-database-preinstall-19c setting for data soft limit is 'unlimited' oracle soft data unlimited # oracle-database-preinstall-19c setting for data hard limit is 'unlimited' oracle hard data unlimited
- 检查进启动配置的变化
diff /boot/grub2/grub.cfg /boot/grub2/grub.cfg-oracle-database-preinstall-19c.orabackup 设置“numa=off transparent_hugepage=never”关闭了透明大页和numa < set kernelopts="root=/dev/mapper/rl-root ro crashkernel=1g-4g:192m,4g-64g:256m,64g-:512m resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet numa=off transparent_hugepage=never " --- > set kernelopts="root=/dev/mapper/rl-root ro crashkernel=1g-4g:192m,4g-64g:256m,64g-:512m resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet "
注意:修改了内核参数,需要重新启动
- 验证创建用户和用户组
groups oracle oracle : oinstall dba oper backupdba dgdba kmdba racdba id oracle uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),54323(oper),54324(backupdba),54325(dgdba),54326(kmdba),54330(racdba)
从结果可见oracle属于7个组
- 验证透明大页是否关闭
cat /sys/kernel/mm/transparent_hugepage/enabled always madvise [never] cat /sys/kernel/mm/transparent_hugepage/defrag always defer defer+madvise [madvise] never
- 也可以查看安装日志
cat /var/log/oracle-database-preinstall-19c/results/orakernel.log
安装oracle rpm
dnf install -y /mnt/oracle/19c/oracle-database-ee-19c-1.0-1.x86_64.rpm last metadata expiration check: 0:04:44 ago on wed 17 apr 2024 12:02:20 pm cst. dependencies resolved. ========================================================================================================== package architecture version repository size ========================================================================================================== installing: oracle-database-ee-19c x86_64 1.0-1 @commandline 2.5 g transaction summary ========================================================================================================== install 1 package total size: 2.5 g installed size: 6.9 g downloading packages: running transaction check transaction check succeeded. running transaction test transaction test succeeded. running transaction preparing : 1/1 running scriptlet: oracle-database-ee-19c-1.0-1.x86_64 1/1 installing : oracle-database-ee-19c-1.0-1.x86_64 1/1 running scriptlet: oracle-database-ee-19c-1.0-1.x86_64 1/1 [info] executing post installation scripts... [info] oracle home installed successfully and ready to be configured. to configure a sample oracle database you can execute the following service configuration script as root: /etc/init.d/oracledb_orclcdb-19c configure verifying : oracle-database-ee-19c-1.0-1.x86_64 1/1 installed: oracle-database-ee-19c-1.0-1.x86_64 complete!
禁用cdb
vi /etc/init.d/oracledb_orclcdb-19c ... export oracle_home=/opt/oracle/product/19c/dbhome_1 export oracle_version=19c export oracle_sid=orclcdb export template_name=general_purpose.dbc export charset=al32utf8 export pdb_name=orclpdb1 export listener_name=listener export number_of_pdbs=1 export create_as_cdb=true 修改为 export create_as_cdb=false
初始化数据库
[root@oracle19c ansible]# /etc/init.d/oracledb_orclcdb-19c configure configuring oracle database orclcdb. prepare for db operation 10% complete copying database files 40% complete creating and starting oracle instance 42% complete 46% complete 50% complete 54% complete 60% complete completing database creation 66% complete 70% complete executing post configuration actions 100% complete database creation complete. for details check the logfiles at: /opt/oracle/cfgtoollogs/dbca/orclcdb. database information: global database name:orclcdb system identifier(sid):orclcdb look at the log file "/opt/oracle/cfgtoollogs/dbca/orclcdb/orclcdb.log" for further details. database configuration completed successfully. the passwords were auto generated, you must change them by connecting to the database using 'sqlplus / as sysdba' as the oracle user.
可以查看详细一点儿的日志(输出了时间)
cat /opt/oracle/cfgtoollogs/dbca/orclcdb/orclcdb.log
本次初始化耗时6分钟,对比没有禁用cdb的一次实验,初始化耗时15分钟
修改oracle用户的环境变量
su - oracle vi .bashrc # 在原文件最后增加 umask 022 export tmp=/tmp export tmpdir=$tmp export nls_lang=american_america.al32utf8 export oracle_base=/opt/oracle export oracle_home=$oracle_base/product/19c/dbhome_1 export tns_admin=$oracle_home/network/admin export ld_library_path=$oracle_home/lib:/lib:/usr/lib export oracle_sid=orclcdb export path=$oracle_home/bin:$path
小技巧:修改.bashrc 而不是.bash_profile的原因是可以支持非登录模式执行shell
验证基本功能
返回root重新以oracle用户执行
su - oracle [oracle@oracle19c ~]$ sqlplus / as sysdba sql*plus: release 19.0.0.0.0 - production on thu apr 18 17:23:03 2024 version 19.3.0.0.0 copyright (c) 1982, 2019, oracle. all rights reserved. connected to: oracle database 19c enterprise edition release 19.0.0.0.0 - production version 19.3.0.0.0 sql> create table t1(a int primary key,b varchar(16)); table created. sql> insert into t1 values(100,'beijing'); 1 row created. sql> insert into t1 values(200,'天津'); 1 row created. sql> select * from t1 order by a desc; a b ---------- ---------------- 200 天津 100 beijing
重新启动系统后,发现服务不会自动重启,设置自动重启
采用rpm安装并没有设置自动重新启动oracle的服务,运行 sqlplus / as sysdba 执行简单sql报错,信息如下:
[oracle@oracle19c ~]$ sqlplus / as sysdba sql*plus: release 19.0.0.0.0 - production on thu apr 18 22:59:25 2024 version 19.3.0.0.0 copyright (c) 1982, 2019, oracle. all rights reserved. connected to an idle instance. sql> select * from t1 ; select * from t1 * error at line 1: ora-01034: oracle not available process id: 0 session id: 0 serial number: 0
所以要手工增加自动重启的服务,此处主要参考oracle 19c 在centos 7的本地rpm包安装及调试,个别地方稍作修正
- 设置公共环境变量文件
vi /etc/sysconfig/orclcdb.oracledb oracle_base=/opt/oracle oracle_home=/opt/oracle/product/19c/dbhome_1 oracle_sid=orclcdb
- 创建监听服务
vi /usr/lib/systemd/system/orclcdb@lsnrctl.service [unit] description=oracle net listener after=syslog.target network.target [service] type=forking environmentfile=/etc/sysconfig/orclcdb.oracledb execstart=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl start execstop=/opt/oracle/product/19c/dbhome_1/bin/lsnrctl stop user=oracle [install] wantedby=multi-user.target
- 创建服务启动服务
vi /usr/lib/systemd/system/orclcdb@oracledb.service [unit] description=oracle database service after=syslog.target network.target lsnrctl.service [service] type=forking environmentfile=/etc/sysconfig/orclcdb.oracledb execstart=/opt/oracle/product/19c/dbhome_1/bin/dbstart $oracle_home execstop=/opt/oracle/product/19c/dbhome_1/bin/dbshut $oracle_home user=oracle [install] wantedby=multi-user.target
- 设置启动
vi /etc/oratab ... #orclcdb:/opt/oracle/product/19c/dbhome_1:n #将此处原来的n修改为y orclcdb:/opt/oracle/product/19c/dbhome_1:y
-
激活服务
systemctl enable orclcdb@lsnrctl
systemctl enable orclcdb@oracledb -
小技巧,先不忙着启动系统,先手工启动服务进行验证
systemctl start orclcdb@lsnrctl systemctl start orclcdb@oracledb
如果有错误信息,则通过 systemctl status orclcdb@lsnrctl 分析问题
- 重启后检验服务状态
[root@oracle19c ansible]# netstat -tunlp | grep -e '1521|5500' tcp6 0 0 :::5500 :::* listen 1090/tnslsnr tcp6 0 0 :::1521 :::* listen 1090/tnslsnr [root@oracle19c ansible]# su - oracle [oracle@oracle19c ~]$ sqlplus / as sysdba sql*plus: release 19.0.0.0.0 - production on thu apr 18 23:21:52 2024 version 19.3.0.0.0 copyright (c) 1982, 2019, oracle. all rights reserved. connected to: oracle database 19c enterprise edition release 19.0.0.0.0 - production version 19.3.0.0.0 sql> select * from t2 ; a b ---------- ---------------- 100 beijing 200 天津
总结
本文的内容主要来自网络,但是经过了本人多次的验证和整理,剔除了一些不必要的环节,也为大家跳过了一些坑。如果有不足之处,请不吝指正,我一定及时修改更新。
1、rpm安装的限制
- 仅用于安装 oracle 数据库软件,rac不能这样安装,并且扣除preinstallation,安装rpm的难度与静默安装相当。
- rpm 只能用于安装软件,而不能用于更新软件
- 无法控制软件安装的目录,即不一定能满足企业安装规范的目录约束
- 推荐仅用于实验环境,不要用于生产环境
2、一些坑(网上个别文档有些笔误)
- 19c 缺省在/etc/init.d/oracledb_orclcdb-19c 设置了字符集为al32utf8,无需在其他地方设置服务器字符集
- /etc/hosts 一定要设置正确,但是无需删除127.0.0.1,::1 那两行
- 预安装rpm准备的内容见“验证预安装rpm的工作成果”部分,这些工作都不需要手工执行
- 仅仅功能验证的话不要启动cdb,否则连创建一个普通用户都要好几步操作
发表评论