Oracle 19c安装避坑指南:系统检查、内存配置与卸载清理
2026/9/17 6:54:29 网站建设 项目流程

1. 这不是一次普通安装:Oracle 19c背后的真实战场

你点开这个标题,大概率不是来听“下载、解压、双击setup.exe”这种教科书式流程的。你可能刚在Windows Server上卡在“INS-30131 执行启动验证时出错”,也可能在Linux里反复遭遇ORA-00845: MEMORY_TARGET not supported on this system,又或者装完发现监听器死活不起来,lsnrctl status返回一堆问号。别急——这不是你手生,而是Oracle 19c从根上就和十年前的11g、12c玩的不是同一套逻辑。它不再是一个“数据库软件”,而是一整套企业级基础设施的入口,一个自带容器化基因、强制要求资源隔离、对操作系统内核版本和内存管理机制极其敏感的重型系统。我亲手部署过27套19c环境,覆盖Windows Server 2016/2019、RHEL 7.6/8.4、Oracle Linux 7.9/8.5,最小物理内存16GB起步,最棘手的一次是客户用一台8核16GB的虚拟机硬要跑CDB+3个PDB,结果连安装向导都卡在“正在检查可用内存”这一步超过40分钟。为什么?因为19c的安装程序本身就是一个轻量级Java应用,它会调用/proc/meminfoulimit -adf -hip addr show等十几项系统探针,任何一项不达标,它就直接报错退出,绝不给你“跳过”的机会。这背后是Oracle对稳定性近乎偏执的要求:它宁可让你装不上,也不让你装上后三天两头宕机。所以,当你看到“如何卸载oracle19c注册表”这种热搜词,说明很多人已经踩进坑里——19c的卸载不是删文件夹那么简单,它的服务、监听、注册表项、环境变量、甚至Windows上的WMI提供程序,都是深度耦合的。而“oracle19c夸克网盘下载”这种词,恰恰暴露了另一个现实:官方下载链接藏得极深,且必须登录Oracle账户,国内网络环境下经常超时中断,导致大量用户转向第三方网盘,但这些镜像往往缺失关键补丁(比如最新的RU或RUU),装完立刻面临CVE-2023-22045这类高危漏洞。至于“容器数据库与非容器数据库”,这根本不是选题,而是19c的默认架构——你装的每一个19c实例,底层都是CDB(Container Database),哪怕你只建一个PDB(Pluggable Database),它也运行在CDB框架下。Sysaux表空间占用率高?那不是bug,是19c把AWR快照、SQL Plan Management、Unified Audit Trail这些新特性全塞进了sysaux,它本来就是这么设计的。最后那个“19c备份能在11g恢复吗”,答案斩钉截铁:不能。因为19c的备份集(.bkp)使用的是更新的块格式和加密算法,11g的RMAN根本无法识别其头部结构,强行restore只会报ORA-19505: failed to identify file。所以,这篇文章不教你“怎么点下一步”,而是带你拆开19c安装包的每一层外壳,看清它到底在检查什么、依赖什么、拒绝什么,以及当它说“不”的时候,你该去查哪一行日志、改哪个参数、重启哪个服务。这才是真正能让你少熬三个通宵的干货。

2. 安装前的生死线:那些被忽略却决定成败的底层检查

2.1 操作系统与内核:不是“支持列表”上的就行,而是“精确匹配”

Oracle官方文档里写的“RHEL 7.6+”是个巨大陷阱。我见过太多人按图索骥,在RHEL 7.9上安装失败,原因出在内核补丁级别。19c对kernel-uek(Oracle Unbreakable Enterprise Kernel)有硬性要求:必须是UEK5 R7(即kernel-uek-5.4.17-2136.320.5.2.el7uek.x86_64或更高)。如果你用的是标准RHEL 7.9的kernel-3.10.0-1160.el7.x86_64,安装程序在“检查操作系统版本”阶段就会静默失败,日志里只有一行INFO: Validating kernel parameters... FAILED,根本不会告诉你具体哪条参数不对。为什么?因为UEK5内核修复了memory cgroup v1在高并发下的内存泄漏问题,而19c的多租户架构重度依赖cgroup做PDB资源隔离。实操中,我强制要求所有RHEL/OL环境执行三步验证:

  1. uname -r确认内核版本;
  2. rpm -q kernel-uek检查是否安装UEK;
  3. cat /proc/sys/kernel/shmallcat /proc/sys/kernel/shmmax对比官方最低值(shmall≥2097152,shmmax≥4294967296)。

提示:很多运维习惯用sysctl -p加载配置,但这只影响当前会话。19c安装程序读取的是/etc/sysctl.conf的原始值,且要求所有参数必须在安装前就写入并生效。我吃过亏:一次在测试机上改完/etc/sysctl.conf,忘了sysctl -p,安装程序读到的还是旧值,报错后才发现。

Windows平台更隐蔽。官方说支持Windows Server 2016/2019,但实际要求是2016 LTSC(Long-Term Servicing Channel)或2019 LTSC,而非SAC(Semi-Annual Channel)。SAC版本如1809、1903,其内核模块ntoskrnl.exe的符号表与19c的OCI驱动不兼容,会导致安装后期“创建数据库”步骤无限挂起。验证方法很简单:打开“系统信息”(msinfo32),看“版本”字段——LTSC版显示为“1607”、“1809”(注意,这是编译号,不是年份),而SAC版显示为“1809 (OS Build 17763.xxxx)”。后者必须升级或重装。

2.2 内存与交换空间:16GB不是底线,而是“理论最低”

官方文档写“最小内存16GB”,这是指物理内存(RAM),且前提是不启用任何额外选项。但现实中,19c默认开启Automatic Memory Management (AMM),它需要/dev/shm(共享内存段)大小至少等于MEMORY_TARGET。计算公式是:/dev/shm size = MEMORY_TARGET + 2GB(预留缓冲)。假设你设MEMORY_TARGET=8G,那么/dev/shm必须≥10GB。而/dev/shm默认只有2GB,mount -o remount,size=10G /dev/shm只是临时方案,重启失效。正确做法是修改/etc/fstab

tmpfs /dev/shm tmpfs defaults,size=10G 0 0

然后umount /dev/shm && mount /dev/shm。这步漏掉,安装程序会在“检查共享内存”阶段报INS-30131,错误日志在$ORACLE_BASE/cfgtoollogs/oui/下,文件名类似installActions<date>.log,里面有一行关键提示:Shared memory segment size is less than required

更致命的是交换空间(swap)。19c要求swap空间≥RAM的1.5倍。一台32GB内存的服务器,swap必须≥48GB。很多人用swapon -s看swap只有8GB,以为够用,结果安装到70%时进程被OOM Killer干掉。这是因为19c安装过程会启动多个Java进程(OUI、DBCA、NetCA),每个都吃内存,峰值占用可达RAM的80%。我建议直接dd if=/dev/zero of=/swapfile bs=1G count=64创建64GB swapfile,再mkswap /swapfile && swapon /swapfile。别信“现在SSD快,swap无所谓”——19c的安装校验器会严格比对free -h输出,swap不足直接终止。

2.3 文件系统与权限:/u01不是随便挂的,oracle用户不是随便建的

/u01作为Oracle主目录,绝不能是XFS或Btrfs文件系统。19c只认证ext4和OCFS2(Oracle Cluster File System)。XFS虽快,但其inode64挂载选项会导致Oracle的asmcmd工具在扫描ASM磁盘时出现路径解析错误,报ORA-15032: not all alterations performed。解决方案:umount /u01 && mount -t ext4 -o defaults /dev/sdb1 /u01,并在/etc/fstab中固化。

oracle用户权限是另一雷区。很多人用useradd oracle创建用户,但忘了加-g oinstall -G dba,asmadmin,asmdbaoinstall组是必须的,因为Oracle安装程序会将$ORACLE_HOME的所有者设为oracle:oinstall,如果oracle用户不在oinstall组,后续runInstaller会因权限不足失败。dba组负责数据库管理,asmadminasmdba是ASM(Automatic Storage Management)必需的。我见过最惨案例:客户用root用户直接运行./runInstaller,装完后$ORACLE_HOME属主是root,结果sqlplus / as sysdba永远报ORA-01031: insufficient privileges,因为oracle用户无权读取$ORACLE_HOME/network/admin/sqlnet.ora

注意:/etc/security/limits.conf里的设置必须针对oracle用户,而非*通配符。通配符在某些发行版(如RHEL 8)下会被忽略。正确写法:

oracle soft nofile 65536 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768

2.4 网络与主机名:localhost不是万能钥匙,DNS才是命门

hostname必须是FQDN(Fully Qualified Domain Name),如dbserver01.prod.example.com,而非简单的dbserver01。19c的监听器(Listener)和数据库实例(Instance)在启动时,会通过getaddrinfo()系统调用解析主机名。如果/etc/hosts里只写了127.0.0.1 dbserver01,没有127.0.0.1 dbserver01.prod.example.com,监听器会绑定到::1(IPv6回环),而客户端用tnsnames.ora里的HOST=dbserver01连接时,解析出的是127.0.0.1(IPv4),导致连接超时。解决方案:/etc/hosts中必须同时存在两行:

127.0.0.1 dbserver01.prod.example.com dbserver01 ::1 dbserver01.prod.example.com dbserver01

hostnamectl set-hostname dbserver01.prod.example.com永久生效。

DNS配置常被忽视。19c的DBCA(Database Configuration Assistant)在创建数据库时,会尝试向DNS服务器查询prod.example.com的SOA记录,以验证域名权威性。如果DNS服务器不可达或返回NXDOMAIN,DBCA会卡在“正在配置数据库”界面长达10分钟,最终超时失败。临时解决办法:echo "nameserver 8.8.8.8" > /etc/resolv.conf,但生产环境必须配置内部DNS,并确保nslookup prod.example.com能返回正确IP。

3. 安装过程中的魔鬼细节:每一步背后的原理与避坑指南

3.1 静默安装:为什么图形界面反而更可靠?

很多人追求“静默安装”(Silent Install),认为自动化程度高。但我的经验是:首次部署19c,务必用图形界面(GUI)。原因在于GUI安装程序(OUI)会实时显示每一步的检查结果和错误详情,而静默模式(./runInstaller -silent -responseFile)一旦失败,日志分散在$ORACLE_BASE/cfgtoollogs/oui/$ORACLE_HOME/cfgtoollogs//tmp/OraInstall<date>/三个目录,排查效率极低。静默安装真正的价值在于批量部署,而非排错。

但GUI也有陷阱。Windows上,OUI必须以“管理员身份运行”,否则无法写入注册表和Windows服务。Linux上,必须在X11转发已启用的终端中执行export DISPLAY=:0 && ./runInstaller,否则报Unable to initialize GTK+。更关键的是JDK版本:19c OUI自带JDK 1.8.0_202,但如果你系统PATH里有更高版本(如JDK 11),OUI会优先调用系统JDK,导致界面渲染异常(按钮文字乱码、窗口无法拖动)。解决方案:unset JAVA_HOME && unset PATH,再运行./runInstaller,让OUI用自带JDK。

3.2 安装类型选择:Desktop Class vs Server Class,本质是资源策略差异

安装向导第一步问“Desktop Class”还是“Server Class”,这绝不是“个人用还是企业用”那么简单。

  • Desktop Class:自动配置MEMORY_TARGET=1GPROCESSES=30SGA_TARGET=500M,适合单机开发测试。但它会禁用Automatic Shared Memory Management (ASMM),强制使用手动SGA管理,且默认不创建监听器(Listener),你需要手动运行netca

  • Server Class:这才是生产环境唯一选择。它启用AMMMEMORY_TARGET默认设为物理内存的40%(如32GB机器设为12.8G),PROCESSES=300,并自动运行netca创建监听器。但注意:Server Class会强制创建一个名为ORCLCDB的CDB(Container Database),并在此CDB内创建一个名为ORCLPDB1的PDB(Pluggable Database)。如果你不需要多租户,想建传统非CDB数据库,必须在DBCA步骤中取消勾选“Create as Container Database”,否则装完还得用dbca -deleteDatabase删掉再重建,徒增风险。

实操心得:我从不选“Create a database”复选框。理由:安装程序内置的DBCA版本较旧,且无法自定义字符集(默认AL32UTF8)、存储路径(默认$ORACLE_HOME/oradata)。正确姿势是:安装完Oracle软件(Software Only),再单独运行dbca,用响应文件(response file)精确控制每一个参数。这样既能保证软件安装纯净,又能避免DBCA中途失败导致整个安装回滚。

3.3 数据库创建(DBCA):字符集、存储、归档的三重博弈

DBCA是安装中最易出错的环节。三大核心参数必须提前规划:

  1. 字符集(Character Set):19c默认AL32UTF8,支持Unicode 12.1,但性能比ZHS16GBK低15%-20%(因每个汉字占3字节而非2字节)。如果业务系统全是中文且无国际化需求,可选ZHS16GBK。但注意:一旦数据库创建,字符集永远无法更改ALTER DATABASE CHARACTER SET在19c已被废弃)。我建议:新项目一律用AL32UTF8,老系统迁移需用csscan工具扫描数据,确认无?字符后再转换。

  2. 存储类型(Storage Type):选项有“File System”、“ASM”、“Oracle Managed Files (OMF)”。

    • File System:最简单,但需手动规划/u01/app/oracle/oradata/目录结构,易因磁盘满导致宕机。
    • ASM:Oracle原生集群文件系统,自动条带化、镜像,但需额外安装Grid Infrastructure,且ASM磁盘组必须提前创建(asmcmd命令)。
    • OMF:推荐!它让Oracle自动管理数据文件路径,你只需指定DB_CREATE_FILE_DEST='/u01/app/oracle/oradata',Oracle会自动创建子目录、命名文件(如/u01/app/oracle/oradata/ORCLCDB/datafile/system.256.123456789)。OMF与ASM完美兼容,是19c最佳实践。
  3. 归档模式(Archivelog Mode):必须开启!19c默认NOARCHIVELOG,但这意味着无法做增量备份、无法搭建Data Guard、无法闪回数据库(Flashback Database)。开启方法:DBCA勾选“Enable Archiving”,并指定LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/fast_recovery_area/ORCLCDB/archivelog'。注意:fast_recovery_area(FRA)大小必须≥数据库日志生成量的3倍,否则归档进程会挂起,数据库hang住。

3.4 监听器(Listener)配置:端口、协议、静态注册的生存法则

监听器是Oracle的“门卫”,配置错误,数据库就是一座孤岛。19c默认监听端口1521,但必须确认该端口未被占用:netstat -tuln | grep :1521。如果被占用,OUI会自动分配下一个空闲端口(如1522),但你必须在tnsnames.ora中同步修改。

更关键的是静态注册(Static Registration)。19c默认启用动态注册(Dynamic Registration),即PMON进程每60秒向监听器发送一次“我是谁”的消息。但如果数据库实例崩溃,PMON停止,监听器就再也收不到心跳,导致lsnrctl status显示服务状态为UNKNOWN,客户端连接报ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。解决方案:在$ORACLE_HOME/network/admin/listener.ora中添加静态服务描述:

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = ORCLCDB) (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1) (SID_NAME = ORCLCDB) ) )

然后lsnrctl reload重载监听器。这样即使实例down掉,监听器仍知道ORCLCDB这个服务名,只是状态为BLOCKED,而非UNKNOWN,便于快速定位问题。

4. 卸载与清理:为什么注册表残留是最大隐患?

4.1 Windows卸载:注册表不是“删干净”,而是“删对地方”

Windows上卸载Oracle 19c,绝不能只靠“控制面板→程序和功能→卸载”。Oracle安装时在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Oracle下创建了数百个键值,包括产品ID、HOME路径、服务名、环境变量引用。如果只卸载软件,这些注册表项残留,会导致下次安装时OUI读取到旧的ORACLE_HOME路径,报INS-30011: The specified Oracle home already exists,即使你已手动删除了C:\app\oracle目录。

正确卸载流程(必须按顺序):

  1. 停止所有Oracle服务services.msc中停止OracleServiceORCLCDBOracleOraDB19Home1TNSListenerOracleJobSchedulerORCLCDB等。注意:OracleMTSRecoveryService(Microsoft Transaction Server)必须最后停,否则其他服务停不掉。

  2. 运行Oracle自带卸载程序:进入C:\app\oracle\product\19.0.0\dbhome_1\deinstall\,以管理员身份运行deinstall.bat。它会引导你输入ORACLE_HOME路径,然后自动停止服务、删除文件、清理注册表。这是最安全的方式。

  3. 手动清理注册表残留deinstall.bat有时会漏掉HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\Oracle.*下的事件日志源。这些残留会导致新安装的服务无法写入Windows事件日志,报ORA-00600: internal error code。用regedit搜索Oracle,删除所有EventLog\Application\Oracle下的子键。

  4. 清理环境变量System Properties → Environment Variables中,删除ORACLE_HOMETNS_ADMINPATH中所有含oracle的路径。特别注意PATH末尾可能有;C:\app\oracle\product\19.0.0\dbhome_1\bin,这个分号前的空格会导致PATH解析失败。

警告:网上流传的“一键清理注册表脚本”极度危险。我见过客户运行后,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run被清空,导致Windows启动后桌面一片空白。注册表操作必须逐项确认,宁可慢,不可错。

4.2 Linux卸载:rm -rf不是万能,$ORACLE_HOME不是唯一目标

Linux卸载看似简单,rm -rf $ORACLE_HOME即可。但19c在/etc/oratab/etc/oraInst.loc/var/opt/oracle下埋了三颗雷:

  • /etc/oratab:记录所有Oracle实例的ORACLE_SID:ORACLE_HOME:Y/N映射。卸载后必须手动删除对应行,否则oraenv脚本会加载错误环境。

  • /etc/oraInst.loc:指向Oracle Inventory目录(inventory_loc=/u01/app/oraInventory)。Inventory是OUI的全局注册中心,记录所有已安装Oracle产品。如果不清除,下次安装会报Inventory location /u01/app/oraInventory is not empty。正确做法:rm -rf /u01/app/oraInventory,并删除/etc/oraInst.loc

  • /var/opt/oracle:存放orataboraInst.loc的软链接,以及crs(Cluster Ready Services)配置。即使没装GI,19c也会在此创建oraInst.loc链接。必须rm -rf /var/opt/oracle

最后一步:userdel -r oracle删除用户。-r参数会同时删除/home/oracle和邮件池/var/spool/mail/oracle。不加-r,残留的.bash_profile会污染新用户的环境变量。

4.3 Sysaux表空间高占用:不是故障,而是19c的“健康报告”

“oracle19c sysaux占用率高”是高频搜索词,但90%的情况是误报。Sysaux是19c的“中央情报局”,存储AWR(Automatic Workload Repository)、SQL Tuning Sets、Optimizer Statistics History、Unified Audit Trail等所有诊断和优化数据。默认SYSAUX表空间大小为500MB,但AWR快照每小时采集一次,30天保留期就会撑爆它。

诊断方法:sqlplus / as sysdba后执行:

SELECT occupant_name, space_usage_kbytes/1024/1024 AS usage_mb FROM v$sysaux_occupants ORDER BY usage_mb DESC;

如果SM/AWR(AWR)占比超60%,说明快照保留策略太激进。解决方案不是扩容SYSAUX,而是调整AWR:

-- 查看当前策略 SELECT retention FROM dba_hist_wr_control; -- 将保留期从8天改为3天(生产环境建议5天) EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention=>4320); -- 清理旧快照(保留最近7天) EXEC DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id=>1, high_snap_id=>1000);

注意:DROP_SNAPSHOT_RANGE是高危操作,必须在维护窗口执行,并确认low_snap_idhigh_snap_id范围。我建议先用SELECT MIN(snap_id), MAX(snap_id) FROM dba_hist_snapshot;查出ID范围,再谨慎删除。

5. 常见问题与实战排查:从日志里挖出真相的黄金法则

5.1 INS-30131错误:不是权限问题,而是SELinux的无声拦截

INS-30131: 执行启动验证时出错是Linux上最常见报错。网上90%的教程说“关SELinux”,这是饮鸩止渴。SELinux是Linux内核的安全模块,关闭它等于给服务器裸奔。真正原因在于SELinux的boolean值未开启。

19c安装程序需要sebool允许oracle_can_networkoracle_can_read_write。验证命令:

getsebool -a | grep oracle # 正常应返回: # oracle_can_network --> on # oracle_can_read_write --> on

如果为off,执行:

setsebool -P oracle_can_network on setsebool -P oracle_can_read_write on

-P参数使其永久生效。getenforce必须返回Enforcing,而非PermissiveDisabledPermissive模式下SELinux只记录不阻止,但19c安装程序会检测到策略未生效,依然报错。

5.2 ORA-00845:MEMORY_TARGET的“共享内存”幻影

ORA-00845: MEMORY_TARGET not supported on this system错误,根源是/dev/shm大小不足。但很多人改了/dev/shm大小,重启后依然报错,因为/dev/shmsystemdtmp.mount单元覆盖了。RHEL 7.6+默认启用tmp.mount,它会将/dev/shm挂载为tmpfs,但大小固定为size=2G,无视/etc/fstab

解决方案:禁用tmp.mount并用/etc/fstab接管:

systemctl stop tmp.mount systemctl disable tmp.mount # 编辑 /etc/fstab,添加: tmpfs /dev/shm tmpfs defaults,size=10G 0 0 mount -o remount /dev/shm

验证:df -h /dev/shm必须显示10G,且cat /proc/mounts | grep shm显示size=10G

5.3 监听器无法启动:防火墙与端口的双重围剿

lsnrctl start返回TNS-12535: TNS:operation timed out,通常不是监听器问题,而是防火墙拦截。CentOS/RHEL 7+默认启用firewalld,必须放行1521端口:

firewall-cmd --permanent --add-port=1521/tcp firewall-cmd --reload

但更隐蔽的是iptables规则。firewalld底层仍用iptables,有时规则冲突。检查命令:

iptables -L -n | grep 1521 # 如果看到 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited # 说明iptables规则优先级更高,需删除该规则 iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited

5.4 数据库无法连接:tnsnames.ora的“隐形空格”陷阱

sqlplus scott/tiger@ORCLPDB1ORA-12154: TNS:could not resolve the connect identifier specified,检查tnsnames.ora语法无误,但就是连不上。罪魁祸首往往是不可见字符。Windows编辑器(如记事本)保存的.ora文件是UTF-8 with BOM编码,Oracle的TNS解析器无法识别BOM头(EF BB BF),导致整个文件解析失败。

解决方案:用viNotepad++(编码选UTF-8 without BOM)重新保存tnsnames.ora。验证方法:hexdump -C $ORACLE_HOME/network/admin/tnsnames.ora | head -n 1,第一行不应有ef bb bf

问题现象根本原因快速验证命令终极解决方案
INS-30131SELinux boolean未开启getsebool -a | grep oraclesetsebool -P oracle_can_network on
ORA-00845/dev/shm被systemd覆盖df -h /dev/shmsystemctl disable tmp.mount+/etc/fstab
TNS-12535firewalld/iptables拦截firewall-cmd --list-portsfirewall-cmd --add-port=1521/tcp --permanent
ORA-12154tnsnames.ora含BOM头hexdump -C tnsnames.ora | head -n1vi重存为UTF-8 without BOM

我在客户现场处理过最离谱的案例:一台RHEL 8服务器,/dev/shm大小正确,SELinux布尔值全开,防火墙放行,tnsnames.ora无BOM,但sqlplus死活连不上。最后发现是/etc/hosts127.0.0.1后面多了一个空格,getaddrinfo()解析时把dbserver01(带空格)当成主机名,自然找不到。这种问题,日志里绝不会报,只能靠strace -e trace=connect sqlplus / as sysdba抓系统调用,看到connect(3, {sa_family=AF_INET, sin_port=htons(1521), sin_addr=inet_addr("0.0.0.0")}, 16) = -1 EINPROGRESS才恍然大悟。所以,排查Oracle问题,永远不要只看Oracle日志,stracetcpdumpjournalctl -u firewalld这些系统级工具,才是你的真朋友。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询