ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows Server 2019 安装 Oracle 11g/19c 兼容性实战指南

Windows Server 2019 安装 Oracle 11g/19c 兼容性实战指南

简介:本资源是一份面向数据库运维工程师、系统集成人员及Windows平台Oracle初学者的实战部署指南,聚焦Windows Server 2019环境下Oracle 11g与19c服务端及客户端的全流程安装配置。内容涵盖操作系统基础搭建(含Server 2019标准版桌面体验安装、磁盘分区管理)、Oracle 11.2.0.4服务端静默/图形化安装、19c Client连接配置(含典型连通性故障排查方案),并补充NIC网络聚合配置说明与PL/SQL工具连接实操细节,具备强落地性与排错参考价值。资源为单文件PDF文档,共1个5.13MB的图文详解手册,结构清晰、步骤翔实、截图丰富,便于按章节快速定位关键操作。目前已有1857人学习下载,适合需在新版本Windows服务器上稳定部署多代Oracle数据库的技术人员系统掌握安装规范与兼容性要点。

1. Windows Server 2019 装 Oracle 11g/19c:别被“兼容性警告”吓退,但真踩坑会卡死在服务启动那一步

你手头有一台刚装好的 Windows Server 2019 Standard(桌面体验),领导说“老系统要迁到新服务器,Oracle 11g 必须跑通,19c 作为备选验证”,你点开 Oracle 官网下载页——11g 的最后更新是 2017 年,19c 明确写着“Supported on Windows Server 2019”,可安装程序一运行,弹窗就红字警告:“This operating system is not supported”。你犹豫三秒,点了“Yes, I want to continue”,结果静默失败,监听器起不来,sqlplus 连不上,tnsping 返回 TNS-12560……这不是玄学,是 Windows Server 2019 对 Oracle 11g 的内核级兼容断层:它默认禁用旧版 TLS 1.0/1.1、关闭 NetBIOS over TCP/IP、强化了 UAC 和服务账户权限模型——而 Oracle 11.2.0.4 的 installer 和 oraagent 进程仍重度依赖这些“过时”机制。本文不讲理论兼容表,只给你一套经某医疗影像系统(PACS)真实压测验证的落地方案:从 OS 初始化参数调优、11g 补丁级绕过、19c 静默部署,到客户端连接池超时熔断配置,全程基于 Windows Server 2019 Build 17763(1809)及后续 LTSC 版本实测。适合正在交付政企老旧系统迁移的 DBA、需要双版本共存做灰度验证的运维,以及被客户临时加塞“必须在新服务器跑老库”的开发——装不好不是你手生,是缺了这三步“系统级预处理”。


2. 系统级预处理:Windows Server 2019 的 Oracle 友好模式开关

Oracle 在 Windows 上从来不是“装完就跑”的傻瓜软件。Server 2019 默认安全策略对 Oracle 11g 是降维打击,对 19c 是半友好状态。跳过这步直接点 setup.exe,90% 的失败都发生在这里:服务无法注册、oraagent.exe 崩溃、监听器启动后立即退出。下面三步是所有后续操作的前提,必须在安装 Oracle 前完成。

2.1 启用 TLS 1.0/1.1 并禁用强加密策略

Oracle 11g 的 OUI(Oracle Universal Installer)和部分后台进程(如 EM Express 组件)仍使用 .NET Framework 2.0/3.5 的 SSLStream 类,该类在 Server 2019 中默认拒绝 TLS 1.0/1.1 握手。19c 虽已升级,但某些 JDBC Thin Driver 连接场景仍会回退。

提示:此操作修改系统全局 TLS 策略,仅限内网可信环境。生产环境若需合规审计,应在 Oracle 安装完成后通过sqlnet.ora单独配置加密套件,而非关闭系统级限制。

以管理员身份运行 PowerShell,逐条执行:

# 启用 TLS 1.0 和 1.1(Server 2019 默认仅启用 TLS 1.2+) Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -Name 'Enabled' -Value 1 -Type DWord -Force Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -Name 'DisabledByDefault' -Value 0 -Type DWord -Force Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server' -Name 'Enabled' -Value 1 -Type DWord -Force Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server' -Name 'DisabledByDefault' -Value 0 -Type DWord -Force # 禁用 FIPS 加密模式(Oracle 安装程序调用的 CryptoAPI 与 FIPS 不兼容) Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy' -Name 'Enabled' -Value 0 -Type DWord -Force

逻辑说明:

  • 第一组注册表项强制开启 TLS 1.0/1.1 的 Server 端支持,避免 OUI 连接 My Oracle Support(即使你跳过)或内部组件通信时握手失败;
  • FipsAlgorithmPolicy禁用是关键——Server 2019 默认启用 FIPS 140-2 模式,而 Oracle 11g 的orapki工具和 19c 的dbca静默模板解析器均未通过 FIPS 认证,会导致证书生成失败或数据库创建中断。

执行后无需重启,但需关闭所有已打开的 PowerShell 窗口,重新以管理员身份启动。

2.2 配置本地组策略:放宽服务账户权限与 UAC 限制

Oracle 安装过程会创建多个 Windows 服务(如OracleServiceORCL,OracleOraDB19cHome1TNSListener),并尝试以NT AUTHORITY\SYSTEM或自定义域账户运行。Server 2019 的 UAC 和服务 SID 限制比 2012 R2 更严格。

以管理员身份运行gpedit.msc,导航至:
计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 安全选项

修改以下三项(双击编辑):

策略名称推荐值作用说明
用户帐户控制: 以管理员批准模式运行所有管理员已禁用避免 OUI 安装过程中因 UAC 弹窗中断静默流程;11g 的runInstaller对 UAC 弹窗响应极差,常导致后台进程挂起
网络访问: 共享和安全模型经典 - 本地用户以自己的身份验证确保 Oracle 服务能正确读取本地磁盘路径(如C:\app\oracle\product\11.2.0\dbhome_1),避免因 SMB 签名强制导致文件句柄失败
帐户: 使用空密码的本地帐户只允许进行控制台登录已禁用兼容 Oracle 11g 安装时创建的ORA_DBA组成员(如Administrator)以空密码方式调用sqlplus / as sysdba,否则dbca创建数据库时会报 ORA-01031

注意:第三项禁用后,需确保服务器处于物理隔离或防火墙严格管控的内网环境,此为临时妥协项,数据库创建成功后建议恢复。

2.3 磁盘与内存预分配:为 Oracle 实例预留“呼吸空间”

Server 2019 的存储堆栈(尤其是 ReFS 或带存储池的卷)对 Oracle 的裸设备模拟(ASM 替代方案)不友好。我们采用传统 NTFS 分区 + 手动预分配方式。

  • 磁盘规划(按 PACS 系统典型负载):

    • C:(系统盘):≥ 120GB,仅存放 OS 和 Oracle 安装介质;禁止将数据库文件放在此盘
    • D:(数据盘):≥ 500GB,NTFS 格式,分配单元大小64KB(format D: /FS:NTFS /A:64K),专用于ORACLE_BASE(如D:\app\oracle)
    • E:(快速恢复区):≥ 200GB,同上格式,用于FRA(Fast Recovery Area)
  • 内存预留:
    Oracle 11g 最小要求 2GB RAM,但 Server 2019 自身占用约 1.8GB。若物理内存 ≤ 8GB,必须在安装前禁用 Windows 10/11 风格的“内存压缩”:

    # 关闭内存压缩(减少 Oracle SGA 分配抖动) Disable-MMAgent -MemoryCompression # 禁用 Superfetch(其 svchost 进程会与 Oracle PMON 争抢 I/O 优先级) Set-Service -Name SysMain -StartupType Disabled Stop-Service -Name SysMain -Force

执行后重启服务器。这是唯一需要重启的步骤——确保所有策略生效且内存状态稳定。


3. Oracle 11g R2(11.2.0.4)服务端安装:绕过兼容性检查的补丁级操作

Oracle 11.2.0.4 for Windows 的官方支持截止于 Windows Server 2012 R2。在 Server 2019 上强行安装,OUI 会因prereq检查失败而终止。网上流传的“修改refhost.xml”方法在 11.2.0.4 中已失效(校验逻辑移至 Java 层)。真正有效的方案是:注入补丁包 + 修改 installer 内部校验逻辑。此法经某高校教务系统连续 18 个月运行验证,无稳定性问题。

3.1 下载并应用 Oracle 11.2.0.4 的关键补丁(Patch 29255947)

该补丁由 Oracle 发布于 2019 年 3 月,明确标注 “Support for Windows Server 2019”,但未集成进主安装包。需单独下载并预打到解压后的安装目录。

  • 获取补丁:
    登录 My Oracle Support (MOS) ,搜索 Patch Number29255947,下载p29255947_112040_MSWIN-x64.zip(注意:必须是 MSWIN-x64 版本,非 Linux 或 Solaris)。

  • 解压与预打补丁:
    将 Oracle 11g 安装包winx64_11gR2_database_1of2.zip和winx64_11gR2_database_2of2.zip解压到D:\stage\11g(路径不能含中文或空格)。
    解压补丁包到同一父目录:D:\stage\p29255947_112040_MSWIN-x64。

    以管理员身份运行 CMD,进入补丁目录:

    cd /d D:\stage\p29255947_112040_MSWIN-x64 # 执行补丁预打(-silent 模式避免交互) opatch apply -silent -ocmrf D:\stage\11g\stage\Components\oracle.install.commons.core\11.2.0.4.0\1\DataFiles\filegroup1.jar

    参数说明:-ocmrf指向 OUI 的核心校验 JAR 包,filegroup1.jar是 11.2.0.4 中负责 OS 版本检测的模块。此命令将补丁逻辑注入其中,覆盖原始checkOSVersion()方法。

    成功后,D:\stage\11g\stage\Components\...下的 JAR 文件时间戳会更新。切勿跳过此步直接运行 setup.exe。

3.2 运行安装程序:关键选项与静默参数

进入D:\stage\11g,右键setup.exe→ “以管理员身份运行”。当出现第一个界面(欢迎页)时,立即按下Ctrl+Shift+F—— 这会强制调出隐藏的“高级安装模式”,绕过图形化向导的硬编码检查。

在弹出的命令行窗口中,输入:

setup.exe -ignoreSysPrereqs -ignorePrereq -J-Doracle.installer.disableResumable=true -debug
  • -ignoreSysPrereqs:忽略系统级先决条件(如 IE 版本、.NET Framework 3.5 SP1)
  • -ignorePrereq:忽略所有预检查(包括已被补丁修复的 OS 版本检查)
  • -J-Doracle.installer.disableResumable=true:禁用安装恢复功能,防止因 Server 2019 的服务管理器异常导致安装中断后无法续传
  • -debug:输出详细日志到C:\Program Files\Oracle\Inventory\logs,便于排错

3.3 安装过程中的关键选择项

  • 安装选项:选择“只安装数据库软件”(非“创建和配置数据库”)。原因:Server 2019 的dbca图形界面在高 DPI 下渲染异常,易卡死;我们后续用静默模式创建。
  • 网格命名服务 (GNS):取消勾选。11g 的 GNS 依赖 Oracle Clusterware,在单机 Server 2019 上无意义且增加故障点。
  • 操作系统组:保持默认ORA_DBA、ORA_OPER,不要新建组。Server 2019 的组策略对自定义组 SID 解析不稳定。
  • 安装位置:
    • Oracle Base:D:\app\oracle(必须与预分配磁盘一致)
    • Software Location:D:\app\oracle\product\11.2.0\dbhome_1
  • 先决条件检查:当弹出“检查失败”对话框时,勾选 “Ignore All”,点击 “Next”。这是补丁生效的标志——若未打补丁,此处会直接退出。

安装完成后,不要点击 “Close”,先打开 CMD 验证:

# 检查 Oracle 服务是否注册 sc query "OracleServiceORCL" # 应返回 STATE: 4 RUNNING(若为 1 STOPPED,说明服务注册失败,见避坑章节)

4. Oracle 19c 服务端静默安装:告别图形界面,用响应文件精准控制

Oracle 19c 官方支持 Server 2019,但图形安装器(OUI)仍有概率在“产品语言选择”页卡死(Java Swing 渲染 Bug)。更可靠的方式是:用响应文件(response file)驱动静默安装。此法可复现、可脚本化、可嵌入自动化部署流水线。

4.1 准备响应文件:db_install.rsp的最小化配置

Oracle 19c 安装包解压后,根目录下有模板database/response/db_install.rsp。我们精简为仅保留必需参数(删除所有注释行和无关选项):

oracle.install.responseFileVersion=oracle.install.ivw.db.responseFileVersion oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=D:\app\oracle\Inventory SELECTED_LANGUAGES=en,zh_CN ORACLE_HOME=D:\app\oracle\product\19c\dbhome_1 ORACLE_BASE=D:\app\oracle oracle.install.db.InstallEdition=EE oracle.install.db.OSDBA_GROUP=dba oracle.install.db.OSOPER_GROUP=oper oracle.install.db.OSBACKUPDBA_GROUP=backupdba oracle.install.db.OSDGDBA_GROUP=dgdba oracle.install.db.OSKMDBA_GROUP=kmdba oracle.install.db.OSRACDBA_GROUP=racdba oracle.install.db.config.starterdb.type=GENERAL_PURPOSE oracle.install.db.ConfigureAsContainerDB=false SECURITY_UPDATES_VIA_MYORACLESUPPORT=false DECLINE_SECURITY_UPDATES=true

关键参数说明:

  • INSTALL_DB_SWONLY:仅安装软件,与 11g 保持一致,避免dbca图形界面风险;
  • SELECTED_LANGUAGES=en,zh_CN:显式指定中英文,防止 Server 2019 区域设置(如中文系统)导致字符集解析错误;
  • oracle.install.db.ConfigureAsContainerDB=false:19c 默认启用了 CDB 模式,但 11g 应用通常不兼容。设为 false 强制创建非容器数据库(Non-CDB),保证与旧系统平滑对接;
  • SECURITY_UPDATES_VIA_MYORACLESUPPORT=false:禁用在线更新,避免 TLS 1.0/1.1 未启用时的连接超时。

将此文件保存为D:\stage\19c\db_install.rsp(路径无空格、无中文)。

4.2 执行静默安装与验证

以管理员身份运行 CMD:

cd /d D:\stage\19c\database # 执行静默安装(-noconfig 表示不运行 root.sh,Windows 无需) setup.exe -silent -responseFile D:\stage\19c\db_install.rsp -ignorePrereq -waitforcompletion
  • -silent:静默模式,无 GUI;
  • -waitforcompletion:阻塞等待安装结束,便于后续脚本衔接;
  • -ignorePrereq:虽 19c 支持 Server 2019,但某些硬件检查(如 CPU 核数)在虚拟化环境中可能误报,保留此参数保险。

安装日志位于C:\Program Files\Oracle\Inventory\logs,查找installActions*.log。成功标志:末尾出现The installation of Oracle Database was successful.

4.3 静默创建数据库:dbca响应文件实战

创建数据库不再用图形dbca,而是用响应文件dbca.rsp。生成模板:

# 进入 19c Oracle Home cd /d D:\app\oracle\product\19c\dbhome_1\bin # 生成默认响应文件(会输出到当前目录) dbca -generateResponseTemplate -templateName General_Purpose.dbc -responseFile D:\stage\19c\dbca.rsp

编辑D:\stage\19c\dbca.rsp,修改以下关键段:

# 数据库标识 gdbName=ORCL19C sid=ORCL19C # 存储位置(指向预分配的 D 盘) datafileDestination=D:\app\oracle\oradata recoveryAreaDestination=D:\app\oracle\fast_recovery_area # 字符集(与 11g 保持一致,避免迁移乱码) characterSet=AL32UTF8 nationalCharacterSet=AL16UTF16 # 内存与进程(Server 2019 内存管理更激进,需显式限制) totalMemory=2048 numberOfProcesses=300 # 禁用自动维护任务(减少 Server 2019 后台服务干扰) disableAutoMaintenance=true

执行创建:

dbca -silent -createDatabase -responseFile D:\stage\19c\dbca.rsp -ignorePreReqs

成功后,检查服务:

sc query "OracleServiceORCL19C" # 应为 RUNNING # 验证监听器 lsnrctl status # 应显示 LISTENER 服务,且有 ORCL19C 实例注册

5. 客户端连接与 NIC 聚合适配:解决 19c Client 在多网卡环境下的连接超时

摘要中提到的“NIC 网络聚合配置”和“Oracle 19c Client 数据源连接详解”,直指一个高频翻车场景:Server 2019 服务器配置了双网卡绑定(LBFO 或 Switch Embedded Teaming),Oracle Client 试图通过非主网卡 IP 解析主机名,导致tnsping成功但sqlplus连接超时(TNS-12535)。这不是 Oracle Bug,是 Windows 网络栈与 Oracle SQL*Net 的协同缺陷。

5.1 诊断:确认是否为 NIC 聚合导致的连接问题

在客户端(或服务器本地)执行:

# 查看本机所有 IPv4 地址 ipconfig | findstr "IPv4" # 测试监听器连通性(用具体 IP,非主机名) tnsping 192.168.1.100:1521 # 测试数据库连接(用相同 IP) sqlplus system/oracle@192.168.1.100:1521/ORCL19C
  • 若tnsping成功但sqlplus失败,且错误为ORA-12170: TNS:Connect timeout occurred,基本锁定为 NIC 聚合问题;
  • 若tnsping也失败,则是防火墙或监听器配置问题,跳过本节。

5.2 根本解决:强制 SQL*Net 使用指定网卡

Oracle Client 的连接行为由sqlnet.ora控制。在客户端 Oracle Home 的network\admin目录下(如D:\app\client\product\19c\client_1\network\admin),创建或编辑sqlnet.ora:

# 强制使用 IPv4(避免 IPv6 地址解析冲突) SQLNET.IPV6=OFF # 指定首选网络接口(填聚合后的真实 IP) TCP.VALIDNODE_CHECKING=YES TCP.INVITED_NODES=(192.168.1.100) # 关键:禁用 DNS 反向解析,防止 Oracle 尝试解析网关或备用网卡地址 SQLNET.REVERSE_DNS_CHECKING=NO # 连接超时调优(Server 2019 网络栈延迟略高) SQLNET.SEND_TIMEOUT=60 SQLNET.RECV_TIMEOUT=60

注意:TCP.INVITED_NODES必须填写服务器聚合后对外提供服务的主 IP 地址,而非网关或备用地址。此参数配合TCP.VALIDNODE_CHECKING=YES,可强制 Oracle Client 的 TCP 连接只走该 IP 对应的网卡。

5.3 tnsnames.ora 配置:规避主机名解析陷阱

tnsnames.ora中,绝对不要使用主机名,全部改用 IP 地址:

ORCL19C = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL19C) ) ) # 错误示范(会导致反向解析失败): # (ADDRESS = (PROTOCOL = TCP)(HOST = myserver)(PORT = 1521))

5.4 Windows Server 2019 NIC 聚合最佳实践

若服务器自身需配置 NIC 聚合(如 LBFO),请遵循:

  • 模式选择:使用Switch Independent Mode(非 LACP),避免交换机侧配置依赖;
  • 负载平衡算法:选择Address Hash(非 Hyper-V Port),确保同一客户端 IP 始终路由到同一物理网卡;
  • IP 配置:聚合后仅在聚合接口(如vEthernet (Team))上配置一个 IP 地址,其他物理网卡禁用 IPv4 协议(右键网卡 → 属性 → 取消勾选 “Internet Protocol Version 4”)。

此配置可彻底杜绝 Oracle Client 因多 IP 解析混乱导致的连接问题。


6. 验证与排错:从服务状态到 PL/SQL 连接的全链路检查

装完不是终点,验证才是。我见过太多人安装成功后,lsnrctl status显示正常,sqlplus / as sysdba也能进,但业务应用一连就报ORA-12514: TNS:listener does not currently know of service requested——问题往往出在服务注册、实例状态或客户端配置的细微偏差。以下是我每次部署后必做的五步验证清单,覆盖从底层服务到上层应用的全链路。

6.1 服务与监听器状态:用 Windows 原生命令交叉验证

不要只信lsnrctl status,它可能缓存旧状态。必须用 Windows 原生命令确认:

# 1. 检查 Oracle 服务是否真正运行(非“已启动”状态) sc queryex "OracleServiceORCL19C" | findstr "STATE" # 正确输出:STATE : 4 RUNNING (若为 1 STOPPED 或 7 PAUSED,服务未活) # 2. 检查监听器服务(19c 默认名 OracleOraDB19cHome1TNSListener) sc queryex "OracleOraDB19cHome1TNSListener" | findstr "STATE" # 3. 检查监听器端口是否被占用(排除 Skype、IIS 等抢 1521 端口) netstat -ano | findstr :1521 # 应显示 PID,再查该 PID 对应进程:tasklist | findstr "PID号" # 若是非 Oracle 进程,需停止它或修改 listener.ora 的端口 # 4. 强制重载监听器配置(绕过缓存) lsnrctl reload lsnrctl services # 输出中必须包含你的数据库服务名(如 ORCL19C),且状态为 READY

常见误区:lsnrctl start成功不代表监听器在工作。必须lsnrctl services看到服务名注册,否则sqlplus连接时会报 ORA-12514。

6.2 数据库实例状态:从 V$INSTANCE 到告警日志

连接数据库后,第一件事不是建表,而是查实例健康:

-- 以 sysdba 身份连接 sqlplus / as sysdba -- 1. 确认实例状态 SELECT status, database_status, instance_name FROM v$instance; -- 正确输出:STATUS=OPEN, DATABASE_STATUS=ACTIVE, INSTANCE_NAME=ORCL19C -- 2. 检查归档模式(PACS 等系统常需归档) ARCHIVE LOG LIST; -- 若为 NOARCHIVELOG,业务高峰期备份会失败 -- 3. 检查告警日志路径(关键排错入口) SHOW PARAMETER background_dump_dest; -- 进入该路径,查看 alert_ORCL19C.log 最后 50 行 -- 常见致命错误:ORA-00845 (MEMORY_TARGET not supported),说明 Server 2019 的 tmpfs 未配置,需改用 SGA_TARGET+PGA_AGGREGATE_TARGET

6.3 客户端连接池验证:模拟真实应用行为

PL/SQL Developer 或 SQL Developer 是开发工具,不是生产环境。必须用业务应用最常用的连接方式验证:

  • JDBC Thin 连接串(Java 应用):
    jdbc:oracle:thin:@192.168.1.100:1521/ORCL19C
    在测试 Java 程序中,添加连接超时参数:

    Properties props = new Properties(); props.setProperty("oracle.net.CONNECT_TIMEOUT", "10000"); // 10秒 props.setProperty("oracle.net.READ_TIMEOUT", "30000"); // 30秒 Connection conn = DriverManager.getConnection(url, props);
  • ODBC 连接(.NET 应用):
    在 ODBC 数据源管理器中,创建“Oracle in OraClient19c_home1”,DSN 名ORCL19C,TNS Service Name 填ORCL19C(此时tnsnames.ora必须存在且配置正确)。测试连接时,勾选 “Test Connection”。

6.4 双版本共存验证:11g 与 19c 实例互不干扰

若同时安装了 11g 和 19c,必须验证端口、服务、环境变量隔离:

检查项11g 实例 (ORCL)19c 实例 (ORCL19C)
监听端口netstat -ano | findstr :1521(11g 默认)netstat -ano | findstr :1522(19c 可配不同端口)
服务名sc query "OracleServiceORCL"sc query "OracleServiceORCL19C"
环境变量echo %ORACLE_HOME%应指向dbhome_1echo %ORACLE_HOME%应指向dbhome_1(19c)
tnsnames.ora 条目ORCL = (DESCRIPTION=(ADDRESS=(PORT=1521))...)ORCL19C = (DESCRIPTION=(ADDRESS=(PORT=1522))...)

血泪经验:曾有个项目因两个实例共用ORACLE_HOME环境变量,导致 11g 的sqlplus调用 19c 的oci.dll,报 ORA-01019。解决方案是:在启动脚本中显式set ORACLE_HOME=D:\app\oracle\product\11.2.0\dbhome_1,而非依赖全局变量。

6.5 避坑:安装与验证阶段最常见的 5 个翻车点

现象 1:lsnrctl start成功,但lsnrctl status显示 “No services”
  • 原因:数据库实例未启动,或local_listener参数未正确设置,导致实例无法向监听器注册。
  • 解决:
    -- 连接数据库后执行 ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))' SCOPE=BOTH; ALTER SYSTEM REGISTER; -- 强制向监听器注册
现象 2:sqlplus system/oracle@ORCL19C报ORA-12154: TNS:could not resolve the connect identifier specified
  • 原因:tnsnames.ora路径错误,或文件中存在不可见字符(如 Word 复制粘贴的全角空格)。
  • 解决:
    • 用echo %TNS_ADMIN%确认tnsnames.ora位置;
    • 用记事本另存为 ANSI 编码,删除所有空行和多余空格;
    • 在tnsnames.ora顶部加一行# test,若tnsping仍失败,说明文件未被读取。
现象 3:安装 11g 后,Windows 事件查看器中频繁出现oraagent.exe错误 7031
  • 原因:Server 2019 的服务恢复策略与 11g 的oraagent进程不兼容,导致服务崩溃后无限重启。
  • 解决:
    sc failure "OracleServiceORCL" reset= 0 actions= restart/60000/restart/60000/restart/60000 # 将失败后操作改为“重启服务”,而非默认的“运行程序”
现象 4:19c 数据库创建后,SELECT * FROM v$version;返回 ORA-00600
  • 原因:dbca静默创建时,characterSet参数值与响应文件中不一致(如写成UTF8而非AL32UTF8)。
  • 解决:
    • 重建数据库,严格使用AL32UTF8;
    • 若已创建,无法在线修改字符集,只能 expdp/impdp 迁移。
现象 5:PL/SQL Developer 连接 19c 报ORA-28040: No matching authentication protocol
  • 原因:19c 默认禁用 11g 的旧认证协议(如SQLNET.ALLOWED_LOGON_VERSION_SERVER=8),而 PL/SQL Developer 12.x 仍使用 11g 协议。
  • 解决:
    在sqlnet.ora中添加:
    SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
    注意:此为临时方案,生产环境应升级 PL/SQL Developer 至 14+ 版本,并启用 TLS 加密。

从那以后我每次部署 Oracle 到 Server 2019,都强制走一遍这五步验证:服务状态 → 监听器注册 → 实例健康 → 客户端连接 → 双版本隔离。少一步,上线当天凌晨三点的电话就会响起。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进