1. 为什么要在欧拉系统上部署Oracle 19c
把Oracle 19c装到欧拉系统上,这件事放在三五年前,很多人第一反应是"这不是自找麻烦吗"。但这两年情况变了,越来越多的企业核心业务系统开始往国产化底座上迁移,欧拉作为企业级Linux发行版,在服务器领域的装机量肉眼可见地涨了起来。而Oracle 19c又是很多存量业务绕不开的数据库版本——它属于长期支持版本,官方支持周期到2027年,大量金融、电信、制造行业的系统还跑在上面。于是"欧拉+Oracle 19c"这个组合,就从"小众折腾"变成了"刚需场景"。
我自己前前后后在不同配置的机器上装过七八次,踩过的坑从依赖包缺失到内核参数不生效,从静默安装响应文件写错到监听器起不来,基本把能遇到的雷都趟了一遍。这篇文章就是把这些经验整理出来,给需要做同样事情的同行一个可以直接抄的作业。不管你是刚接触欧拉的新手,还是从CentOS/RHEL迁移过来的老DBA,只要跟着步骤走,都能在自己的环境里把库跑起来。
需要先说明的是,Oracle 19c官方认证的操作系统列表里并没有欧拉,这意味着安装过程中不会走官方的预检查通过路径,需要我们手动绕过一些检查。但这不代表装不上或者跑不稳——欧拉的内核和基础库与RHEL 7/8系列高度兼容,只要把依赖和参数对齐,实际运行稳定性是有保障的。我负责的几个生产库已经在欧拉上跑了两年多,没出过因为系统层面导致的问题。
下面我会从整体思路、环境准备、依赖处理、内核参数、安装实操、建库配置到问题排查,一步步拆开讲。每个环节都会说清楚"为什么这么做",而不只是"照着敲"。
2. 整体方案设计与版本选型思路
2.1 欧拉版本与Oracle版本的匹配逻辑
欧拉目前主流的有20.03 LTS和22.03 LTS两个长期支持版本。Oracle 19c对glibc版本有要求,最低需要2.17。欧拉20.03自带的是glibc 2.28,22.03是2.34,都满足要求。但这里有个细节:Oracle 19c的安装程序里内置了一个对操作系统版本的检查,它会读取/etc/os-release里的信息,如果识别不到它认识的发行版标识,就会直接报错退出。
我的建议是优先选欧拉20.03 LTS SP3或SP4。原因有两个:一是这个版本的内核是4.19,和Oracle 19c的兼容性经过大量实际验证;二是22.03默认的OpenSSL 3.0在某些Oracle组件里会引发库冲突,虽然能解决但要多花不少时间。如果你手头只有22.03的环境,也不是不能用,后面我会专门讲怎么处理OpenSSL的问题。
Oracle这边选19c的哪个小版本也有讲究。19.3是基础版,后面有19.10、19.16、19.19等RU补丁。我一般直接用19.19或者更新的RU版本,因为这些版本里Oracle已经修复了不少在新型Linux上的兼容问题,安装过程会顺很多。如果你用的是19.3的原始安装包,遇到报错的概率会明显高一些。
2.2 安装方式的选择:图形化还是静默
Oracle提供了两种安装方式:图形化界面(OUI)和静默安装(response file)。在欧拉服务器上,通常是没有图形界面的,虽然可以通过X11转发把图形界面投到本地,但实际用下来体验很差——网络稍有波动就断,而且欧拉默认的桌面环境跟OUI的Java界面兼容性一般。
所以我强烈建议用静默安装。静默安装的核心是一个响应文件(response file),里面定义了安装路径、数据库类型、字符集、管理方式等所有参数。写好这个文件,一条命令就能跑完整个安装。好处是可重复、可脚本化、出错了容易定位。后面我会给出一个经过验证的响应文件模板,你只需要改几个路径和密码就能用。
2.3 存储与文件系统规划
Oracle对存储的规划有一套推荐做法,但在欧拉上我们还要考虑文件系统的兼容性。欧拉默认用XFS,这个没问题,Oracle 19c支持XFS。关键是要把不同的数据分开存放:
- 软件安装目录(ORACLE_HOME):建议50GB以上,放数据库软件和补丁
- 数据文件目录(ORADATA):根据业务量定,测试环境100GB起步
- 归档日志目录(ARCH):单独挂盘,避免归档写满影响数据盘
- 快速恢复区(FRA):单独规划,用于备份和闪回
我见过太多人把所有东西都放在一个根分区下,结果归档日志一涨就把整个系统撑爆。分开挂载不只是最佳实践,是保命措施。
提示:欧拉默认的
/tmp分区如果太小(比如只有2GB),安装过程中解压临时文件会失败。建议临时把/tmp扩到至少10GB,或者设置TMP和TMPDIR环境变量指向一个大分区目录。
3. 安装前的系统环境准备
3.1 主机名与网络配置
Oracle的监听器和实例注册都依赖主机名解析,如果主机名解析有问题,后面监听器起不来或者客户端连不上都是常有的事。第一步就是把主机名和hosts文件配好。
# 设置主机名 hostnamectl set-hostname oradb01 # 编辑hosts文件,确保主机名能解析到本机IP cat >> /etc/hosts << EOF 192.168.1.100 oradb01 EOF这里有个坑:欧拉的/etc/hosts默认可能只有IPv6的localhost解析,没有IPv4的。Oracle的监听器在启动时会尝试解析主机名,如果只解析到IPv6地址,监听器可能绑定失败。所以务必确认hosts文件里有127.0.0.1 localhost这一行。
另外,防火墙和SELinux的处理也要提前做。Oracle需要1521端口通信,SELinux在某些情况下会阻止Oracle进程访问文件。测试环境我一般直接关掉SELinux,生产环境则配置相应的策略规则。
# 关闭SELinux(测试环境) setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 防火墙放行1521端口 firewall-cmd --permanent --add-port=1521/tcp firewall-cmd --reload3.2 用户与用户组创建
Oracle不允许用root用户安装和运行,必须创建专用的操作系统用户。标准的用户组规划是这样的:
groupadd -g 54321 oinstall groupadd -g 54322 dba groupadd -g 54323 oper useradd -u 54321 -g oinstall -G dba,oper -d /home/oracle -m oracle passwd oracleoinstall是Oracle软件的所有者组,dba组拥有数据库管理权限,oper组用于日常操作。把oracle用户同时加入dba和oper组,这样它既有管理权限也能做日常运维。
用户创建好之后,要设置资源限制。Oracle对文件描述符、进程数、内存锁定都有要求,这些通过/etc/security/limits.conf来配置:
cat >> /etc/security/limits.conf << EOF 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 soft memlock unlimited oracle hard memlock unlimited EOFmemlock设为unlimited是为了让Oracle能锁定内存,避免被交换到swap。如果这个值设小了,后面建库时AMM(自动内存管理)会报错。
3.3 依赖包安装
这是欧拉上装Oracle最容易出问题的环节。Oracle 19c的安装程序会检查一堆依赖包,但它的检查列表是基于RHEL的包名,欧拉的包名有些不一样。如果直接跑安装程序,会报一堆"missing package"。
我的做法是先把已知需要的包全部装上,然后手动跳过安装程序的依赖检查。需要的包大致分几类:
# 基础编译和运行库 dnf install -y binutils gcc gcc-c++ glibc glibc-devel libaio libaio-devel dnf install -y libstdc++ libstdc++-devel make sysstat unzip # 图形和兼容库(即使静默安装也需要部分) dnf install -y compat-libcap1 compat-libstdc++-33 dnf install -y libXext libXt libX11 libXau libXi # 欧拉特有的补充 dnf install -y ksh libnsl libnsl2 nslookup这里重点说几个容易漏的:
- libnsl:Oracle的某些工具依赖这个库,欧拉默认可能没装,缺了会导致
lsnrctl起不来 - compat-libstdc++-33:这是32位的兼容库,Oracle的安装程序里有些二进制是32位的
- ksh:Oracle的某些脚本用ksh写的,虽然bash也能跑但可能有兼容问题
装完这些包之后,可以用rpm -qa检查一下,确认关键包都在。如果某个包在欧拉的源里找不到,可以去RHEL的镜像里找对应的rpm手动安装,但要注意版本兼容。
注意:不要盲目安装所有Oracle文档里列的包。有些包在欧拉上根本不存在,有些装了反而会引起库冲突。以实际安装时报的错为准,缺什么补什么。
3.4 内核参数调整
Oracle对共享内存、信号量、网络参数都有要求。这些参数通过/etc/sysctl.conf配置,但欧拉有个特点:它可能同时存在/etc/sysctl.conf和/etc/sysctl.d/目录下的配置文件,后者会覆盖前者。所以最稳妥的做法是新建一个专门的配置文件:
cat > /etc/sysctl.d/99-oracle.conf << EOF fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 4294967295 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 EOF sysctl -p /etc/sysctl.d/99-oracle.confkernel.shmmax这个值需要根据物理内存来算。它表示单个共享内存段的最大值,一般设为物理内存的一半或更大。比如128GB内存的机器,可以设为68719476736(64GB)。设小了会导致Oracle启动时报"ORA-27102: out of memory"。
kernel.sem的四个值分别是:信号量集合中的最大信号量数、系统级最大信号量数、每个semop调用的最大操作数、系统级最大信号量集合数。Oracle推荐的值是250 32000 100 128,这个配置在大多数场景下够用。
4. Oracle软件安装实操
4.1 安装包准备与目录规划
Oracle 19c的安装包可以从官方渠道获取,通常是两个zip文件:LINUX.X64_193000_db_home.zip(或者对应RU版本的包)。这个包大概3GB左右,解压后就是完整的安装介质。
目录规划我一般这样安排:
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oraInventory mkdir -p /u02/oradata mkdir -p /u03/arch mkdir -p /u04/fra chown -R oracle:oinstall /u01 /u02 /u03 /u04 chmod -R 775 /u01 /u02 /u03 /u04/u01放软件,/u02放数据文件,/u03放归档,/u04放快速恢复区。这种分离方式在生产环境是必须的,测试环境如果只有一块盘,至少也要用不同的目录区分开。
把安装包解压到ORACLE_HOME目录下:
cd /u01/app/oracle/product/19.3.0/dbhome_1 unzip -q /path/to/LINUX.X64_193000_db_home.zip chown -R oracle:oinstall /u01/app/oracle注意,Oracle 19c的安装包设计成直接解压到ORACLE_HOME目录,而不是像以前那样解压到临时目录再运行runInstaller。这是19c的一个变化,别搞错了。
4.2 环境变量配置
切换到oracle用户,配置环境变量。这些变量要写进.bash_profile,保证每次登录都生效:
su - oracle cat >> ~/.bash_profile << EOF export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=\$ORACLE_BASE/product/19.3.0/dbhome_1 export ORACLE_SID=orcl export PATH=\$ORACLE_HOME/bin:\$PATH export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export TMP=/tmp export TMPDIR=/tmp EOF source ~/.bash_profileNLS_LANG这个变量很关键,它决定了数据库的字符集和客户端显示格式。AL32UTF8是UTF-8字符集,现在新建库基本都用这个。如果设错了,后面建库时字符集可能不对,改起来非常麻烦。
4.3 静默安装响应文件编写
静默安装的核心是响应文件。Oracle在安装介质里提供了模板,在$ORACLE_HOME/install/response/目录下。我基于模板改了一个经过验证的版本:
cat > /home/oracle/db_install.rsp << EOF oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/u01/app/oraInventory ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1 ORACLE_BASE=/u01/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=oper oracle.install.db.OSBACKUPDBA_GROUP=dba oracle.install.db.OSDGDBA_GROUP=dba oracle.install.db.OSKMDBA_GROUP=dba oracle.install.db.OSRACDBA_GROUP=dba SECURITY_UPDATES_VIA_MYORACLESUPPORT=false DECLINE_SECURITY_UPDATES=true EOF几个关键参数解释一下:
INSTALL_DB_SWONLY:只装软件,不建库。建库我们后面单独做,这样更可控InstallEdition=EE:企业版。如果只有标准版授权,改成SEOSDBA_GROUP=dba:指定dba组,这个必须和之前创建的用户组对应DECLINE_SECURITY_UPDATES=true:不接收安全更新通知,否则安装会卡在联网检查
4.4 执行安装与绕过系统检查
正式安装前,先跑一次预检查,看看会报什么错:
cd $ORACLE_HOME ./runInstaller -silent -responseFile /home/oracle/db_install.rsp -applyRU /path/to/RU -ignorePrereqFailure-ignorePrereqFailure这个参数是关键,它让安装程序跳过预检查失败项。因为欧拉不在Oracle的认证列表里,预检查必然会报"操作系统未认证"之类的错误,加上这个参数就能继续。
安装过程大概需要10到20分钟,取决于机器性能。安装日志在$ORACLE_HOME/cfgtoollogs/目录下,如果中途失败,去那里看详细报错。
安装完成后,会提示用root用户执行两个脚本:
# 用root执行 /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/19.3.0/dbhome_1/root.shroot.sh执行时会问一些路径,直接回车用默认值就行。这个脚本会配置一些系统级的设置,比如/etc/oraInst.loc和/usr/local/bin下的符号链接。
实操心得:如果
root.sh执行时报"Failed to create /usr/local/bin/oraenv"之类的错误,通常是权限问题。检查/usr/local/bin目录的权限,确保root可写。另外,欧拉上root.sh可能会因为lsb_release命令不存在而报错,装个redhat-lsb-core包就能解决。
5. 数据库实例创建与配置
5.1 建库响应文件配置
软件装好后,用DBCA(数据库配置助手)静默建库。同样需要一个响应文件:
cat > /home/oracle/dbca.rsp << EOF responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0 gdbName=orcl sid=orcl databaseConfigType=SI policyManaged=false createServerPool=false force=false createAsContainerDatabase=true numberOfPDBs=1 pdbName=pdb1 useLocalUndoForPDBs=true pdbAdminPassword=Oracle_123 templateName=/u01/app/oracle/product/19.3.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc sysPassword=Oracle_123 systemPassword=Oracle_123 emConfiguration=NONE datafileDestination=/u02/oradata recoveryAreaDestination=/u04/fra storageType=FS characterSet=AL32UTF8 nationalCharacterSet=AL16UTF16 listeners=LISTENER memoryPercentage=40 automaticMemoryManagement=false totalMemory=8192 EOF这里有几个决策点值得说明:
是否用CDB架构:Oracle 19c默认推荐CDB(容器数据库)架构,createAsContainerDatabase=true。CDB的好处是资源隔离和管理集中,但如果你是从11g迁移过来的老系统,可能更习惯传统的非CDB。我建议新系统直接用CDB,这是趋势,而且19c里非CDB的支持已经在弱化了。
内存管理方式:automaticMemoryManagement=false表示用ASMM(自动共享内存管理)而不是AMM。AMM需要/dev/shm足够大,欧拉默认的/dev/shm是内存的一半,如果内存很大可能够用,但AMM在某些内核上会有兼容问题。ASMM更稳妥,通过SGA_TARGET和PGA_AGGREGATE_TARGET来控制。
字符集:AL32UTF8是必须的,除非你有特殊需求。建库后再改字符集非常麻烦,一定要在建库时就定好。
5.2 执行建库与验证
dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp建库过程大概15到30分钟。完成后,检查实例状态:
sqlplus / as sysdba SQL> select instance_name, status from v$instance; SQL> select name, open_mode from v$database; SQL> select name, open_mode from v$pdbs;如果实例是OPEN状态,PDB也是READ WRITE,说明建库成功。
监听器也要确认:
lsnrctl status应该能看到LISTENER在1521端口监听,并且有orcl实例注册。
5.3 网络配置与客户端连接
服务名配置在$ORACLE_HOME/network/admin/tnsnames.ora里。如果是CDB架构,客户端连接PDB需要用服务名而不是SID:
cat > $ORACLE_HOME/network/admin/tnsnames.ora << EOF ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb01)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) PDB1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb01)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) ) EOF测试连接:
sqlplus system/Oracle_123@oradb01:1521/pdb1能连上就说明整个链路通了。
6. 常见问题与排查技巧实录
6.1 安装阶段典型报错处理
报错一:INS-08101 操作系统未认证
这是最常见的报错,因为欧拉不在Oracle的认证列表里。解决方法就是加-ignorePrereqFailure参数。如果已经加了还报错,检查是不是有其他预检查项失败,比如内存不足、swap不够等。
报错二:libnsl.so.1: cannot open shared object file
欧拉默认可能没装libnsl。执行dnf install -y libnsl安装即可。如果源里没有,去RHEL的镜像里找libnsl-2.28版本的rpm手动装。
报错三:ORA-27102: out of memory
这是共享内存参数设小了。检查kernel.shmmax和kernel.shmall,确保shmmax大于SGA大小,shmall大于shmmax/4096。改完sysctl后需要重启Oracle实例。
报错四:root.sh执行失败
常见原因是/usr/local/bin权限不对,或者缺少lsb_release命令。装redhat-lsb-core包,并确保/usr/local/bin是root可写的。
6.2 运行阶段问题排查
监听器起不来:先看$ORACLE_HOME/network/log/listener.log,常见原因是主机名解析问题或者1521端口被占用。用netstat -tlnp | grep 1521检查端口。
客户端连不上:按顺序排查——监听器是否在跑、服务名是否正确、防火墙是否放行、tnsnames.ora配置是否正确。用tnsping命令测试。
PDB无法打开:如果PDB是MOUNTED状态,用alter pluggable database pdb1 open;打开。如果报错,检查PDB的数据文件是否存在、权限是否正确。
6.3 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 安装程序闪退 | 缺少图形库或Java环境 | 查看/tmp/OraInstall*.log | 安装libXext等图形库,或用静默安装 |
| 建库卡住不动 | 内存不足或/dev/shm太小 | free -h和df -h /dev/shm | 增大内存或调整/dev/shm |
| 监听器无法启动 | 主机名解析失败 | hostname和cat /etc/hosts | 确保主机名能解析到IPv4地址 |
| 连接报ORA-12541 | 监听器没起或端口不对 | lsnrctl status | 启动监听器,检查端口配置 |
| 归档日志写满 | 归档目录空间不足 | df -h查看归档盘 | 清理归档或扩大空间,配置RMAN自动删除 |
| 数据库启动报ORA-00845 | /dev/shm小于MEMORY_TARGET | df -h /dev/shm | 增大/dev/shm或改用ASMM |
避坑技巧:安装前把
/tmp扩到10GB以上,这个坑我踩过三次。欧拉的/tmp默认可能只有2GB,Oracle安装时解压临时文件会直接把它撑爆,然后安装程序报一个莫名其妙的"空间不足"错误,排查半天才发现是/tmp的问题。
7. 性能调优与日常维护建议
7.1 欧拉系统层面的调优
Oracle在欧拉上跑,系统层面有几个参数值得调整。首先是IO调度器,欧拉默认用mq-deadline,对于数据库这种随机IO密集的场景,改成none(NVMe盘)或者deadline效果更好:
# 查看当前调度器 cat /sys/block/sda/queue/scheduler # 临时修改 echo deadline > /sys/block/sda/queue/scheduler其次是透明大页(THP),Oracle推荐关闭THP,因为THP会导致内存分配延迟抖动:
# 临时关闭 echo never > /sys/kernel/mm/transparent_hugepage/enabled # 永久关闭,加到rc.local或systemd服务里还有vm.swappiness,建议设为10或更低,减少swap使用:
echo 'vm.swappiness = 10' >> /etc/sysctl.d/99-oracle.conf sysctl -p /etc/sysctl.d/99-oracle.conf7.2 数据库层面的基础调优
建库后,有几个参数需要根据实际硬件调整:
-- 查看当前SGA和PGA配置 show parameter sga_target; show parameter pga_aggregate_target; -- 根据内存调整,比如128GB内存的机器 alter system set sga_target=64G scope=spfile; alter system set pga_aggregate_target=16G scope=spfile;SGA_TARGET一般设为物理内存的50%到60%,PGA_AGGREGATE_TARGET设为20%左右。具体值要看业务类型,OLTP系统SGA可以大一些,OLAP系统PGA需要更多。
另外,欧拉上的Oracle建议开启大页(HugePages),可以减少页表开销,提升内存访问效率。配置方法是在/etc/sysctl.conf里设置vm.nr_hugepages,然后在Oracle里设置use_large_pages=ONLY。
7.3 备份与监控要点
生产环境必须配置RMAN备份。最基本的策略是每天全备加归档备份,保留7天:
rman target / RMAN> configure retention policy to recovery window of 7 days; RMAN> configure controlfile autobackup on; RMAN> backup database plus archivelog delete input;监控方面,欧拉自带的sysstat可以收集系统级性能数据,Oracle的AWR报告则提供数据库级的分析。建议每天检查一次告警日志,每周生成一次AWR报告看看有没有异常等待事件。
实操心得:欧拉上的Oracle,我建议把
/u03/arch归档目录单独监控,设置阈值告警。归档写满导致数据库挂起是最常见的生产事故之一,而且往往发生在半夜。配置一个简单的脚本,当归档目录使用率超过80%时自动发邮件通知,能省很多事。
8. 迁移场景下的特别注意事项
8.1 从其他平台迁移到欧拉
如果你是要把现有的Oracle库从别的Linux发行版迁移到欧拉,不能简单地把数据文件拷过来就完事。操作系统变了,数据文件的块头信息可能不兼容。正确的做法是用RMAN的restore或者数据泵(Data Pump)导出导入。
RMAN迁移的步骤大致是:在源库做全备,把备份集传到欧拉机器,在欧拉上装好同版本Oracle软件,用RMAN恢复控制文件和数据文件,然后recover database。注意源库和目标库的字节序(endianness)必须一致,x86平台之间迁移没问题,跨平台就要用convert命令。
数据泵方式更简单但耗时更长,适合数据量不大的场景。在源库expdp导出,在欧拉上的新库impdp导入。注意字符集要一致,否则中文可能乱码。
8.2 迁移后的验证清单
迁移完成后,不能只看数据库能不能启动,要做完整的验证:
- 检查所有数据文件、控制文件、日志文件的状态
- 跑一遍
dbv检查数据文件是否有坏块 - 验证所有业务用户能正常连接
- 检查存储过程、触发器、序列等对象是否完整
- 对比源库和目标库的对象数量
- 跑几个核心业务SQL,对比执行计划和结果
我见过迁移后数据库能启动但某个表空间的数据文件路径不对,导致部分数据不可访问的情况。所以验证一定要做全,不能偷懒。
8.3 回滚方案准备
迁移前一定要准备好回滚方案。最稳妥的做法是保留源库不动,直到新库验证通过并稳定运行一段时间。如果新库出问题,能快速切回源库。回滚方案要写清楚切换步骤、切换时间窗口、需要通知的相关方,并且提前演练一遍。
欧拉上装Oracle 19c这件事,说难不难,说简单也不简单。核心就是把依赖包补齐、内核参数调对、绕过系统检查、响应文件写正确。这四件事做好了,安装过程基本就是等进度条。真正花时间的是后面的调优和验证,那才是保证数据库稳定运行的关键。希望这篇记录能帮你少走一些弯路,如果遇到我没提到的问题,欢迎一起交流。