简介:本资源是一份面向数据库运维工程师、系统集成人员及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
- Oracle Base:
- 先决条件检查:当弹出“检查失败”对话框时,勾选 “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_TARGET6.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_1 | echo %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中添加:
注意:此为临时方案,生产环境应升级 PL/SQL Developer 至 14+ 版本,并启用 TLS 加密。SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8
从那以后我每次部署 Oracle 到 Server 2019,都强制走一遍这五步验证:服务状态 → 监听器注册 → 实例健康 → 客户端连接 → 双版本隔离。少一步,上线当天凌晨三点的电话就会响起。希望帮到你。
本文还有配套的精品资源,点击获取