Win Server 2019 部署 Oracle 11g/19c 排障

发布时间:2026/11/4 9:56:32
Win Server 2019 部署 Oracle 11g/19c 排障 简介这份图文教程聚焦 Windows Server 2019 环境下的 Oracle 数据库部署面向需要在 Windows 服务器上搭建 Oracle 11g 与 19c 的运维工程师、数据库管理员及项目交付人员也适合在客户端连接环节反复受阻、缺少完整安装文档的读者参考。压缩包内为 1 个 PDF 文件约 5.13MB采用截图配文字的方式编排从操作系统安装与磁盘分区讲起依次记录 Oracle 11.2.0.4 服务端安装、创建 pacs 数据库、11g 与 10g 客户端安装以及 PL/SQL 连接配置的完整过程并单独说明 NIC 网络聚合配置方法。针对部分场景下客户端无法连接数据库的问题文中对 Oracle 19c Client 的数据源连接配置作了较细致的拆解便于对照排查监听、网络与服务命名等环节。目前已有 1857 人学习可作为部署时的操作参照与排错索引。1. 从一台双击 setup.exe 没有任何反应的机器说起给 Windows Server 2019 装 Oracle 11g 和 19c最容易误判的地方是双击 setup.exe 之后安装向导没有任何反应而建库那一步往往不是主要原因。前阵子又碰到一台系统选成了 Server Core、少一组 VC 运行库Oracle 11.2.0.4 的安装向导闪一下就消失只剩一行看不懂的 OUI 日志。Win Server 2019 Oracle 11.2.0.4 服务端 19c Client PL/SQL Developer 这套组合在既要运行老业务、又要做迁移评估的场景里极其常见装不好就是监听起不来、客户端连不上、两个 ORACLE_HOME 互相冲突。下面按我实际排过的顺序从系统底盘一路写到验证闭环。2. 系统基础配置Windows Server 2019 的分区、账户与网卡聚合Oracle 装不上十次里有六次原因在操作系统这一层。这一章处理的是三件事系统版本和分区怎么选、账户和运行库怎么备齐、双网卡怎么聚合成一个业务地址。这三件事在安装向导开始之前就必须定下来事后再调整代价是重装数据库。2.1 桌面体验版与 C 盘留给系统的比例安装介质启动后版本选择界面只有一个正确选项Windows Server 2019 Standard桌面体验。带不带“桌面体验”这几个字差别很大——Server Core 没有完整的图形外壳Oracle 的 OUI 图形安装程序依赖的那套界面组件在 Server Core 上并不完整前面提到的向导闪退一半原因在这里。产品密钥那一步点“我没有产品密钥”激活等系统装完、网络通了再处理不要卡在安装介质上。分区环节用“自定义仅安装 Windows高级”只新建 C 盘剩下的磁盘留白。这不是偷懒是给自己留后悔药Oracle 的 ORACLE_BASE、数据文件、归档日志、快速恢复区都该落在非系统盘C 盘只放操作系统和客户端。等系统起来之后进“计算机管理 → 磁盘管理”把剩余空间按用途切分。分区建议容量放什么备注C:100–150 GB操作系统、客户端软件、临时目录不小于 80 GB否则打补丁会紧张D:剩余空间的 40%ORACLE_BASE、ORACLE_HOME、数据文件11g 与 19c 各建一个子目录E:剩余空间的 40%快速恢复区、归档日志、导出备份与 D 盘物理上分开更好F:剩余安装包、补丁、脚本装完可清理新建简单卷的流程不复杂右键未分配空间 → 新建简单卷 → 指定大小 → 分配驱动器号 → 文件系统选 NTFS、单元大小默认 → 完成。四个分区依次做完再进入下一步。有一点容易被忽略分区做完不要马上往里拷安装包先确认盘符和容量对得上我见过把数据盘和备份盘符搞反、结果归档日志写满系统盘的现场。2.2 账户口令、计算机名与运行库补齐系统初始化时会给 administrator 设密码。这个密码后面会反复用到——安装 Oracle 服务端时要用它来启动服务配置监听时要用它来提权——所以别设一个带特殊符号到自己也记不住的串。口令复杂度按组织的安全策略走但如果策略强制 90 天改密建议给 Oracle 单独建一个本地账户并把它加进 Administrators 组避免服务账户密码到期导致数据库起不来。计算机名在装 Oracle 之前就要改好改完重启。Oracle 的监听注册、Enterprise Manager 配置、部分视图里都会写死主机名装完再改名基本等于重配监听。命名用纯英文加短横线长度控制在 15 字符以内避开中文和下划线开头的组合。运行库是这一步真正的重点。Oracle 11.2.0.4 的安装程序依赖 Visual C 2010 运行库19c 的安装程序依赖 2013 及以上版本。两个都装上顺序无所谓装完重启一次。用 PowerShell 一次性确认# 列出已安装的 VC 运行库重点看 2010 x64 和 2013/2015-2022 x64 在不在 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* | Where-Object { $_.DisplayName -like *Visual C* } | Select-Object DisplayName, DisplayVersion | Sort-Object DisplayName # 顺便把系统临时目录和 Oracle 需要的环境变量前置检查做掉 $env:TEMP $env:TMP [System.Environment]::OSVersion.Version这段脚本做两件事。前半段从注册表的卸载项里捞出所有 Visual C 运行库的名字和版本2010 那一项如果缺失11g 的 setup.exe 大概率静默退出2013 及以后的版本缺失19c Client 的安装界面会报 OUI 框架错误。后半段打印临时目录和系统版本号临时目录路径里绝对不能有中文和空格用户名是中文的话C:\Users\张三\AppData\Local\Temp这种路径会让解压阶段的安装程序直接失败解决办法是把 TEMP 和 TMP 两个变量都改到C:\Temp建好目录并给 Everyone 读写权限。还有一项把 IE 增强的安全配置关掉。它本身跟 Oracle 没关系但很多现场的补丁包、驱动、文档都靠浏览器下载开着它会在中间环节反复卡住运维时间就是这么被消耗掉的。2.3 双网卡聚合成一个业务地址数据库服务器常见的接法是两条网线进两台交换机一主一备。Windows Server 2019 自带网卡组合NIC Teaming不需要装厂商驱动就能做这是它比 2008 R2 省事的地方。配置入口在“服务器管理器 → 本地服务器 → 网卡组合”也可以用 PowerShell 一条命令建起来。先确认物理网卡状态和现有的组合组# 列出所有网卡注意“已断开”的那块可能只是没插线 Get-NetAdapter | Format-Table Name, InterfaceDescription, Status, LinkSpeed -AutoSize # 已经存在的组合组新机上一般返回空 Get-NetLbfoTeam确认两块网卡都是 Up 之后新建组合组# 交换机独立模式 动态负载均衡这是双交换机接法下最稳的组合 New-NetLbfoTeam -Name Team-Oracle -TeamMembers 以太网 2,以太网 3 -TeamingMode SwitchIndependent -LoadBalancingAlgorithm Dynamic # 给组合组配业务地址不要配在物理网卡上 New-NetIPAddress -InterfaceAlias Team-Oracle -IPAddress 10.10.10.20 -PrefixLength 24 -DefaultGateway 10.10.10.1 Set-DnsClientServerAddress -InterfaceAlias Team-Oracle -ServerAddresses 10.10.10.11,10.10.10.12-TeamingMode有三个取值SwitchIndependent不依赖交换机做端口聚合配置两块网卡接不同交换机也能用是最省事的一种LACP需要交换机侧配合做链路聚合Static需要交换机配置静态聚合。现场如果没法确认交换机配置一律选SwitchIndependent。-LoadBalancingAlgorithm选Dynamic它按流量哈希而不是按连接数分配单条大流量比如一次全库导出也能吃到两条链路Address Hash和Hyper-V Port在数据库场景下都不如它。配完之后有一个必须核对的点Get-NetLbfoTeam输出里的状态应该是 UpGet-NetIPAddress -InterfaceAlias Team-Oracle能看到配上去的地址。监听器绑定的必须是这个聚合地址或者0.0.0.0不能绑到某一块物理网卡上——绑物理网卡的话那块网卡一断聚合组虽然还在监听却已经断了。这一点在第 3 章的 listener.ora 里会再落实一次。3. Oracle 11.2.0.4 服务端从分卷解压到 pacs 库落地11.2.0.4 是 11g 的最后一个补丁集版本也是目前还在一线跑的老系统里最常见的版本。它的安装程序是 Java 写的对路径、字符集、临时空间都比较敏感把前置条件做干净后面就顺。3.1 分卷解压与 setup.exe 的前置条件11g 的安装介质通常是两个压缩分卷win64_11gR2_database_1of2.zip和2of2.zip。这两卷必须解压到同一个目标目录先解 1 再解 2让第二次解压去补全database\stage\Components下的内容。分别解压到两个目录再手动合并——这是网上流传最广的错误做法。分别解压到两个目录会导致install目录下的响应文件与组件目录对不上setup.exe 会直接报“无法找到安装文件”。# 两卷解压到同一目标目录第二次必须加 -Force 覆盖同名文件 Expand-Archive -Path D:\soft\win64_11gR2_database_1of2.zip -DestinationPath D:\soft\db11g Expand-Archive -Path D:\soft\win64_11gR2_database_2of2.zip -DestinationPath D:\soft\db11g -Force # 三个关键位置都要存在缺一个就别往下走了 Test-Path D:\soft\db11g\database\setup.exe Test-Path D:\soft\db11g\database\stage\Components (Get-ChildItem D:\soft\db11g\database\stage\Components -Directory).Count-Force在这里是关键参数不加的话第二卷遇到同名目录会跳过组件目录只剩下前半部分。最后一行数一下Components下面的子目录数量正常应该是几百个量级如果只有几十个说明第二卷没解压进去。解压目标路径只允许英文、数字和下划线长度尽量控制在 60 字符以内D:\soft\db11g这种就很好。所有带中文、空格、括号的路径都会在 OUI 的解压阶段触发问题。另外解压和安装期间把杀毒软件的实时扫描关掉OUI 会临时释放大量小文件实时扫描能让一个 20 分钟的安装变成两小时。右击setup.exe→ 以管理员身份运行不要双击。这一步不做后面写注册表、注册服务时会失败而且报错信息通常含糊。3.2 向导里的六次关键点击向导的每一步都有默认值但默认值不一定是对的。按顺序说明六个必须明确的选项第一屏弹“配置安全更新”取消勾选“我希望通过 My Oracle Support 接收安全更新”。勾着它就要填邮箱和密码不填过不去填了后续会一直尝试联网。取消后弹一个“未指定电子邮件地址”的确认框点“是”继续。第二屏“软件更新”选**“跳过软件更新”**。这一步装的是 OPatch 和补丁元数据需要联网访问在线仓库内网环境必然超时卡在这里等十几分钟是常态。第三屏“安装选项”选**“仅安装数据库软件”**。注意这是本文与很多网上教程的最大分歧先装软件再用 DBCA 单独建库。理由是建库是个可以反复重来的动作软件安装不是——如果选“创建和配置数据库”一旦创建到一半失败很常见比如字符集选错、数据文件路径写错整个安装就得从头再来。拆成两步返工成本就低得多。第四屏“系统类”选**“单实例数据库安装”**。这一屏还有个“Oracle Real Application Clusters 数据库安装”的选项单机环境误选了会在后面的节点配置反复报错。第五屏是产品语言和版本。语言勾“英语”和“简体中文”简体中文一定要有否则后面 PL/SQL 里看到的是问号。版本选**“企业版”**标准版在并行、分区等特性上有限制老业务迁移过来说不准哪个功能就用不了。第六屏是目录和先决条件检查。Oracle 基目录填D:\app\oracle软件位置会自动跟成D:\app\oracle\product\11.2.0\dbhome_1。这个路径记牢第 4 章配置客户端环境变量时要用。全局数据库名和 SID 在这一步先不填下一步 DBCA 再定。先决条件检查会报一堆警告物理内存不足、Swap 空间不足这两条在 Windows 上属于误报Windows 用页面文件勾“全部忽略”继续但**“操作系统内核参数”和“缺少程序包”这两类警告要看清**那通常是运行库真缺了。3.3 监听注册与 DBCA 静默建 pacs 库软件装完后监听器由 Net Configuration Assistant 配也可以在命令行跑netca。配完的listener.ora长这样路径在D:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 10.10.10.20)(PORT 1521)) (ADDRESS (PROTOCOL IPC)(KEY EXTPROC1521)) ) ) ADR_BASE_LISTENER D:\app\oracleHOST这里填第 2 章配的聚合地址10.10.10.20不要填主机名也不要填localhost。填主机名的话DNS 或 hosts 解析出问题时监听会绑定失败填localhost则只能本机连外部客户端全部超时。PORT保持 1521改端口的话所有客户端的 tnsnames 都要跟着改没有特别理由不动它。IPC 那条是本地连接用的不需要可以删但保留它能省掉一些本地工具连接时的排查时间。建库用 DBCA。图形界面跑一遍确认参数然后固化成静默脚本这是我惯用的做法——图形界面每次都要点十几屏参数还容易记错。REM 静默建库全局库名与 SID 都叫 pacs字符集跟随老业务选 ZHS16GBK dbca -silent -createDatabase ^ -templateName General_Purpose.dbc ^ -gdbName pacs ^ -sid pacs ^ -characterSet ZHS16GBK ^ -nationalCharacterSet AL16UTF16 ^ -sysPassword Oracle_2024 ^ -systemPassword Oracle_2024 ^ -datafileDestination D:\app\oracle\oradata ^ -recoveryAreaDestination D:\app\oracle\fast_recovery_area ^ -redoLogFileSize 200 ^ -emConfiguration NONE ^ -sampleSchema false逐项说明。-templateName用通用模板不要用数据仓库或事务处理模板那两者会预置一堆你不需要的初始化参数。-gdbName和-sid都设成pacs两者不一致会给后续客户端连接留下 SID 与服务名的理解偏差。-characterSet选ZHS16GBK是因为老的业务库就是这个字符集新库若用 AL32UTF8跨库做数据泵导入时会反复报长度超限和乱码——字符集必须在建库时定死装完只能重建。-redoLogFileSize给到 200 MB默认 50 MB 在大批量写入时会频繁切日志。-emConfiguration NONE跳过 Enterprise Manager 的 Database Control 配置那东西在 11g 上依赖 Flash现在基本没人用跳过之后建库时间能省三分之一。-sampleSchema false不装示例用户省空间也避免多出几个默认口令账户。密码里如果含$、、!这类字符在 bat 里要做转义否则会被 cmd 吃掉。我一般先用纯字母数字下划线建完库再按策略改。建库完成后把监听状态和数据字典都查一遍# 切到 oracle 用户环境后执行Windows 上直接用当前管理员账户 lsnrctl status sqlplus / as sysdba-- 确认实例状态、库名和字符集三件事 SELECT instance_name, host_name, status FROM v$instance; SELECT name, open_mode, log_mode FROM v$database; SELECT parameter, value FROM nls_database_parameters WHERE parameter IN (NLS_CHARACTERSET,NLS_LANGUAGE);v$instance的status应该是OPENv$database的open_mode是READ WRITE字符集查询返回ZHS16GBK三条对上服务端就算立住了。4. 客户端并行方案19c Client 与 11g、10g 客户端不打架服务端只有一个客户端却可能有三个版本。老业务系统用的工具链绑死在 11g 甚至 10g 的 OCI 上新做的迁移评估又要 19c 的驱动。三个客户端装在同一台机器上不是问题问题是同一时刻只有一个能生效谁在 PATH 前面谁说了算。4.1 三个 ORACLE_HOME 的目录规划规划原则只有一条每个客户端一个独立的 ORACLE_HOME绝不嵌套绝不复用。建议的目录布局客户端版本ORACLE_HOME 路径位数典型用途19c ClientD:\app\client\19.0.0\client_164 位新版 PL/SQL Developer、迁移工具、数据泵11g ClientD:\app\client\product\11.2.0\client_132 位老 PL/SQL 版本、老业务客户端10g ClientD:\app\client\product\10.2.0\client_132 位极老的报表工具、老版本 Toad安装顺序按版本从低到高先 10g再 11g最后 19c。原因是 19c 的安装程序会在注册表里写一些全局项先装的低版本不会去动它们反过来先装 19c 再装 10g10g 的安装程序可能覆盖掉部分 PATH 相关项虽然可以手工修但没必要给自己找事。环境变量靠批处理来切换别去“系统属性 → 环境变量”里改全局值。全局改来改去最后自己都忘了当前是哪个版本echo off REM 切到 11g 客户端老工具链用这个32 位 OCI set ORACLE_HOMED:\app\client\product\11.2.0\client_1 set TNS_ADMIND:\app\client\product\11.2.0\client_1\network\admin set NLS_LANGSIMPLIFIED CHINESE_CHINA.ZHS16GBK set PATH%ORACLE_HOME%\bin;C:\Windows\system32;C:\Windows echo 当前 ORACLE_HOME%ORACLE_HOME% sqlplus -v三个变量各有分工。ORACLE_HOME决定 sqlplus、imp、exp 这些命令行工具从哪个目录取TNS_ADMIN单独指出来是关键它让 tnsnames.ora 和 sqlnet.ora 的读取路径脱离 ORACLE_HOME 的默认推导多版本共存时能省掉大量“为什么改了 tnsnames 不生效”的困惑NLS_LANG决定客户端字符集老库是 ZHS16GBK 就写SIMPLIFIED CHINESE_CHINA.ZHS16GBK服务端是 AL32UTF8 就写SIMPLIFIED CHINESE_CHINA.AL32UTF8两边不一致时中文一定乱码。PATH那一行把%ORACLE_HOME%\bin放在最前面而不是用set PATH%PATH%;...追加。这个顺序很重要如果之前已经装过别的客户端并且它的 bin 在 PATH 前面追加到末尾等于没切。写完这一行sqlplus -v的输出应该显示 11.2.0.4 的版本号不一致就说明 PATH 里还有更靠前的 ORACLE 目录。4.2 19c Client 安装与 tnsnames.ora 写法19c Client 的安装包解压后跑setup.exe安装类型有“管理员”“运行时”“定制”三个选项。选**“管理员”**它会带上 sqlplus、数据泵、Oracle Net 全套工具“运行时”只带最精简的驱动PL/SQL Developer 装上连主目录都指不过去。安装目录用D:\app\client\19.0.0\client_1不要装到服务端的 ORACLE_BASE 下面。tnsnames.ora 的写法在 11g 和 19c 之间有个容易出错的地方就是SERVICE_NAME。19c 建库时默认会给服务名加域名后缀而 11g 建的 pacs 库服务名就是纯pacsPACS (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 10.10.10.20)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME pacs) ) ) PACS_SID (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 10.10.10.20)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SID pacs) ) )同一个库配两个别名一个走SERVICE_NAME一个走SID。这不是冗余是排障手段客户端报ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务时换PACS_SID试一下能连上就说明是服务名写错了连不上就是监听或网络的问题一步就把故障范围对半切开。SERVER DEDICATED是专用服务器模式除非明确配了共享服务器否则都写这个。sqlnet.ora 里加一行能解决一部分 19c 客户端连不上 11g 老库的问题# 19c 客户端默认禁用了低版本认证协议连 11g 老库时按需放开 SQLNET.ALLOWED_LOGON_VERSION_SERVER 8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT 8这两行的作用是放宽 Oracle Net 允许的认证协议版本下限。19c 出于安全考虑默认只接受较新的协议而 11.2.0.4 里有些老账户的口令哈希还是旧格式握手阶段直接就被拒了现象是ORA-28040: 没有匹配的验证协议。注意这两个参数只是让握手能过账户本身的密码哈希该升级还是要升级改完参数后把相关账户的密码重设一次让它重新生成新格式的哈希。4.3 PL/SQL Developer 的 OCI 指向PL/SQL Developer 本身不含数据库驱动它靠oci.dll连库。这个 dll 的位数必须和 PL/SQL Developer 主程序的位数一致错一位就是ORA-12154或者初始化错误。判断方法任务管理器里看进程有没有*32后缀或者在“帮助 → 关于”里看版本信息。PL/SQL Developer 位数必须指向的 OCI对应 ORACLE_HOME32 位32 位oci.dll11g 或 10g 的 32 位 client64 位64 位oci.dll19c 的 64 位 client配置入口在 PL/SQL Developer 登录窗口的“取消”按钮进去之后菜单“首选项 → 连接”填两项——Oracle 主目录填 ORACLE_HOME 的完整路径OCI 库填...\bin\oci.dll的完整路径。填完不要急着点确定先关掉再重开 PL/SQL让它重新加载 dll。如果这台机器上同时要跑 32 位和 64 位的 PL/SQL做法是装两份 PL/SQL 到不同目录各自配各自的 OCI 路径。不要试图用同一个 PL/SQL 切换位数那个开关不存在。还有一个常见的连接问题PL/SQL 里报“无法处理服务器名”但 sqlplus 用同样的别名能连上。原因通常是 PL/SQL 用的是它自己读到的那份 tnsnames.ora路径由 ORACLE_HOME 推导而不是环境变量里的TNS_ADMIN。解决办法是把TNS_ADMIN也设成 PL/SQL 指向的那个客户端的 network\admin 目录让它俩读同一份文件。5. 安装与连接避坑五个现场翻车的记录下面五条都是实际排过的按“现象 → 原因 → 解决”记。装在中间卡住的时候先在这五条里对一遍比翻日志快。5.1 安装阶段向导闪退、检查卡死与解压报错现象一双击 setup.exe进程在任务管理器里闪一下就没了没有任何窗口也没有报错弹窗。原因缺 Visual C 2010 x64 运行库或者系统是 Server Core 没有完整图形组件。OUI 的启动引导程序依赖这两个前提缺一个就静默退出日志只写在%TEMP%下的一个临时目录里装完系统清理就找不到了。 解决先装 VC 2010 x64 运行库并重启确认系统版本是“桌面体验”确认是以管理员身份运行而不是双击把 TEMP 和 TMP 改到无中文无空格的路径。四条都满足还是闪退去C:\Program Files\Oracle\Inventory\logs下找最新的installActions*.log里面通常会写明缺哪个 dll。现象二先决条件检查卡在“正在执行检查”超过二十分钟进度条不动。原因检查程序在探测网络和主机名解析如果机器配了不可达的 DNS 或者 hosts 里有一条指向错误地址的主机名记录探测会一直等到超时。另一种情况是机器物理内存小于 11g 要求的 2 GB检查程序在反复评估。 解决先把网卡 DNS 清成内网可达的地址检查 hosts 文件里有没有本机主机名的错误映射。等不下去就点“全部忽略”11g 在 Windows 上的内存和 Swap 警告基本都是误报实际运行看的是页面文件配置把虚拟内存设成系统管理即可。现象三解压完点 setup.exe报“无法找到安装文件”或“OUI 无法初始化”。原因两个分卷分别解压到了两个目录或者第二卷解压时没覆盖同名文件导致stage\Components目录下的组件不完整。 解决清空目标目录重来用Expand-Archive解 1of2再加-Force解 2of2 到同一路径。解完数一下stage\Components下的子目录数量正常是几百个。数量对不上就是没解全别硬着头皮往下走。5.2 连接阶段ORA-12514、ORA-12154 与 ORA-28040现象四监听状态显示 READY服务也注册了但客户端连库报ORA-12514: 监听程序当前无法识别连接描述符中请求的服务。原因tnsnames.ora 里的SERVICE_NAME跟库里实际的服务名不一致。11g 用 DBCA 建库时如果全局库名填了带域名后缀的形式服务名就会带上后缀而客户端按纯库名去连监听认不出来。另一种可能是监听刚重启服务还没完成动态注册lsnrctl status里能看到服务列表是空的。 解决先在服务端执行lsnrctl status看输出的“服务摘要”里列出的服务名到底是什么照抄到客户端。如果是动态注册还没完成等一到两分钟或者执行ALTER SYSTEM REGISTER;强制注册一次。走不通就换SID pacs的别名再试能连上就锁定是服务名的问题。现象五19c 客户端连 11.2.0.4 的库报ORA-28040: 没有匹配的验证协议或者报ORA-01017: 用户名/口令无效但密码确认没输错。原因19c 的 Oracle Net 默认把可接受的认证协议版本下限提高了11g 里一些老账户的口令哈希格式低于这个下限握手阶段就被拒绝表现出来却像是密码错了。 解决在客户端的 sqlnet.ora 里加SQLNET.ALLOWED_LOGON_VERSION_SERVER 8和SQLNET.ALLOWED_LOGON_VERSION_CLIENT 8服务端那份也同步加一遍更稳妥。改完重启客户端连接。如果还是 01017用 sysdba 登进去查SELECT username, password_versions FROM dba_users WHERE username业务用户;如果只显示10G把该用户密码重设一次让它生成 11G 及以上的哈希。6. 装完怎么验证三条命令把环境固定住装完不验证等于没装完。我的习惯是从服务端、网络、客户端三层各打一枪三枪都响这套环境才算交付。第一枪在服务端确认实例和监听的状态# 监听必须有 pacs 的服务摘要状态是 READY lsnrctl status # 实例状态、库名、字符集三项一次查完 sqlplus / as sysdbaSELECT instance_name, status FROM v$instance; SELECT name, open_mode FROM v$database; SELECT value FROM nls_database_parameters WHERE parameter NLS_CHARACTERSET;第二枪打网络从客户端机器上用 tnsping 测别名解析# 15 秒内返回 OK 说明别名解析和网络层都通返回 TNS-03505 是别名没找到 tnsping PACS # 用 19c 的 sqlplus 连 11g 的库这条能过跨版本就通了 sqlplus 业务用户名/口令PACStnsping只验证到监听层不验证账户所以它通了但 sqlplus 连不上问题一定在认证或服务名不在网络。这个区分能省掉很多抓包的时间。第三枪做一次真实的读写不是查dual那种走形式的-- 建个临时表插一条确认表空间、字符集、权限链路都对 CREATE TABLE verify_chk (id NUMBER, memo VARCHAR2(100)); INSERT INTO verify_chk VALUES (1, 连通性验证-中文); COMMIT; SELECT id, memo, LENGTHB(memo) FROM verify_chk; DROP TABLE verify_chk PURGE;LENGTHB返回的字节数这一列很关键中文在 ZHS16GBK 下每字 2 字节在 AL32UTF8 下每字 3 字节。如果返回的数字跟预期字符集对不上说明客户端 NLS_LANG 和服务端字符集不匹配这时候导数据一定乱码得在导入之前修掉。还有两个收尾动作容易被跳过。一是把D:\app\oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\下的listener.ora、tnsnames.ora、sqlnet.ora备份一份到 F 盘这三个文件改坏过的人都知道从备份还原比重新配快十倍。二是把第 4 章那几个批处理切 11g、切 19c、切 10g放到桌面并改成一眼能认出的名字下次接手的人不用再问“现在生效的是哪个 ORACLE_HOME”。从那以后我每次装完这套组合交付前都强制走一遍 tnsping sqlplus 建表插中文这三步不管前面装得多顺。前面忽略的路径问题、字符集问题、位数问题全都会在这三步里暴露出来而在客户面前暴露和在机房里暴露是两个完全不同的代价。希望帮到你。本文还有配套的精品资源点击获取