Windows Server 2019 安装 Oracle 11g 与 19c 客户端:从磁盘规划到 ODBC 配置全记录
简介面向Windows Server 2019运维与实施人员的Oracle数据库部署图文指南覆盖Oracle 11g、19c服务端安装及客户端连接配置。内容以实际项目推进顺序展开从操作系统安装、磁盘分区到Oracle 11.2.0.4服务端部署、创建pacs数据库再到11g/10g/19c Client安装与PLSQL连接验证同时附有NIC网络聚合配置说明并针对客户端无法连接数据库的常见场景给出19c Client数据源连接详解便于在生产或测试环境快速落地。全文为一份PDF文档共1个文件大小约5.13MB图文步骤清晰适合需要按步对照操作的中级DBA、运维工程师及数据库实施人员。目前已有1855人学习下载对于需要完成Oracle双版本环境搭建和连接排障的读者可作为直接参考的操作手册。1. 版本组合的坑Windows Server 2019 上的 Oracle 11g 与 19c 客户端给某公司一台新服务器装 Windows Server 2019上面要跑影像存档系统数据库定的是 Oracle 11.2.0.4。11g 在部署文档里经常被当成老古董但在生产环境里它仍然是大量业务系统认证过的稳定版本。真装起来才发现这个组合的坑比想象中多11g 的图形安装程序在 Server 2019 上启动慢甚至没反应19c 客户端连 11g 库偶尔报协议不匹配32 位老程序在 64 位系统上找不到数据源驱动网上零散搜半天也拼不齐一套完整流程。这篇按我实际装通的顺序写成安装笔记覆盖系统磁盘分区、网卡聚合、服务端建库、客户端数据源配置到最后验证照着走能少踩一遍弯路。2. Windows Server 2019 安装与磁盘规划桌面体验版和分区策略2.1 版本选择为什么必须选带桌面体验的 StandardWindows Server 2019 安装镜像里有 Standard 和 Datacenter 两套大版本每个又分「桌面体验」和「Server Core」两种形态。很多人图 Core 占资源少直接装 Core结果到 Oracle 这一步傻眼11g 的 OUI 是图形界面程序Core 没有桌面组件可以承载装到一半就报 UI 初始化失败。所以服务器的基调要提前定死选「Windows Server 2019 Standard桌面体验」后面装 Oracle 的图形 OUI、DBCA、Net Manager 全靠这个桌面环境。安装过程里有两个无关紧要但容易卡住的点。第一个是产品密钥点击「我没有产品密钥」直接跳过系统装完进入桌面后再激活不影响任何组件安装。第二个是许可条款勾选接受之后必须选「自定义仅安装 Windows高级」不要选升级安装因为这是新服务器部署升级安装走的是另一条迁移流程和我们要的干净环境是两回事。引导阶段会重启一次重启后进入「系统准备过程中」界面这时要给 administrator 设置密码。密码强度和复杂度建议直接按域密码标准来大写字母、小写字母、数字、特殊符号四类里至少三类长度不少于 10 位。这里有个不算坑但要留心的点Oracle 服务在安装时会把实例账号信息写入系统如果 administrator 密码太弱等保扫描那关过不去后面补改密码又要重启 Oracle 服务折腾。2.2 磁盘管理C 盘之外的业务盘怎么分卷操作系统装完进入桌面后第一件事是打开磁盘管理。右键「此电脑」→「管理」→「磁盘管理」能看到未分配的空间。我的习惯是 C 盘只装操作系统和 Oracle 软件本体数据库数据文件单独放一个盘比如 D 盘或 E 盘这样后续做备份恢复、扩容都清晰。新建简单卷的向导里有一个「磁盘大小」设置默认是整块盘全部纳入如果打算一块物理盘拆多个逻辑卷这里手动填大小如果不拆直接下一步。驱动器号建议从 D 开始往后排避免哪天插入 U 盘时盘符冲突。文件系统选 NTFS分配单元大小保持默认的 4096 字节不要为了「性能」去改 64KBOracle 数据文件是大小块混合读取默认值最稳。卷标建议写成分区用途比如 DATA、ARCH方便后面对照。注意Windows Server 2019 的磁盘管理默认会把新建简单卷格式化成 NTFS。如果服务器将来要做双机热备涉及集群共享盘这里不能直接格式化成 NTFS要在故障转移集群管理器里处理普通单机部署不用管这个。Oracle 安装对磁盘空间的需求比想象中大11g 软件本体加 DBCA 建库单实例全装要 15 GB 左右数据文件再按业务量预留。我给这台机器定的方案是 C 盘 120 GB 装系统加软件D 盘整块做数据盘。C 盘一定不能小装完系统再装 Oracle 软件C 盘剩余空间掉得很快一旦红了临时文件没地方写OUI 会报磁盘空间不足。2.3 NIC 网络聚合双网卡的团队化配置数据库服务器的网络建议做聚合。Server 2019 自带的 NIC Teaming 功能不需要额外装驱动图形界面操作路径是服务器管理器 → 本地服务器 → 找到「NIC Teaming」→ 点击右侧的 Disabled 链接进入配置。选中两块物理网卡右键或从任务菜单里选「Add to New Team」先给团队起个名字。这里有两个参数直接影响后续的稳定性。Teaming Mode 建议选「Switch Independent」意思是交换机不需要做链路聚合配置服务器这边自己管理流量分配适合机房网络没做过端口绑定的普通交换机。如果想榨干带宽且网络组愿意配合配交换机可以选「静态成组」但一旦交换机侧配置对不上整个 team 直接断网翻车概率高。Load Balancing 算法选「Dynamic」即可系统会根据 TCP 连接数和流量动态分配比 Address Hash 更均衡。备用适配器可以留 None等 Team 创建完去适配器属性里给这个虚拟网卡配 IP原来物理网卡上的 IP 要清掉。PowerShell 下创建同一个 team 的命令是New-NetLbfoTeam -Name TEAM1 -TeamNicName TEAM1_NIC -TeamingMode SwitchIndependent -LoadBalancingAlgorithm Dynamic创建完成后用Get-NetLbfoTeam -Name TEAM1查看状态MemberAdapters 里应该能看到两块物理网卡都在 Active 状态。这里有个血泪教训不要 BIOS 里启用网卡的「唤醒和关机连线」之类的省电选项曾经遇到过 Oracle 监听器跑在三号网卡上、三号网卡是聚合里的备用成员客户端连服务时通时断最后关掉网卡节能才稳定。3. Oracle 11.2.0.4 服务端安装从 OUI 到 pacs 库建成3.1 安装包路径与启动 OUI 的注意事项Oracle 11.2.0.4 的安装介质是解压后的一整个目录里面有 setup.exe。先把安装包拷到服务器本地然后注意一个高频坑安装包所在的路径不能有中文、空格、括号。曾经遇到同事把安装包放在「D:\数据库安装包(新版)\」下双击 setup.exe 完全没反应任务管理器里能看到进程闪一下就消失。原因很简单OUI 的 Java 环境对特殊字符路径解析有隐患不是必现但出现在这个目录下就是必现。我的标准做法是把安装包解压到C:\oracle_install纯英文、无空格、无括号。启动 setup.exe 时右键选择「以管理员身份运行」不要双击。如果你在 Server 2019 上发现 setup.exe 弹了个窗口又消失、或者一直卡在白屏先别重装系统去C:\Program Files\Oracle\Inventory\logs\oraInstall\目录看日志多数情况是 OUI 自带的 JRE 和系统的 DEP 或安全策略冲突把 setup.exe 的兼容性改为 Windows 8并以管理员运行基本能过。启动正常后第一个欢迎界面会有「我希望通过 My Oracle Support 接收安全更新」的勾选框这里不需要勾去掉后点下一步会弹一个确认消息点「是」。接着会出现操作系统版本警告提示当前系统版本不在 11.2.0.4 的认证列表里忽略即可这就是 Server 2019 上装 11g 的常态不影响安装结果。软件更新那一步选「跳过软件更新」。3.2 OUI 选项安全更新、仅装软件、单实例安装选项这步是整个安装流程的分水岭。选「仅安装数据库软件」不要选「创建并配置数据库实例」。原因有两个一是我们需要对数据库的字符集、内存参数做可控配置图形向导一步建库给不了那么细二是步骤分开后软件安装失败还是建库失败排错边界清楚很多。下一个界面选「单实例数据库安装」。这里我解释一下为什么不是「Oracle Real Application Clusters」单实例就是一台机器一个实例延续 11g 传统的架构RAC 需要共享存储、多节点集群软件普通项目用不上选错到 RAC 后面配置网络会跳出一堆集群相关的报错很难收场。类型这步选「企业版」还是「标准版」要结合授权。按这个项目的规模企业版是稳妥选择它包含的分区、压缩、多线程特性在影像数据归档查询场景能用上。产品语言务必勾选「简体中文」和「英语」两项只勾英语的话后面 DBCA 建库时字符集选择范围会受限中文数据写入可能出乱码。安装目录保持默认即可Oracle Base 会在 C 盘但可以在配置界面改成你规划好的软件盘。Oracle 11g 在 Windows 上安装还会要求在下一步填写ORACLE_BASE和ORACLE_HOME的安装路径这里的套路是基础路径只写盘符和一级目录比如C:\app\oracle剩下的 product 结构 Oracle 自己创建。不要自己手工拼一个特别深的目录。3.3 环境变量与监听器配置软件安装完成后不要急着建库先把环境变量对齐。通常 OUI 会把 Oracle 的 bin 目录写进系统 PATH但路径顺序不受控制。如果这台机器之前装过别的 Oracle 客户端或数据库PATH 里可能出现多个 ORACLE_HOME 相关的 binsqlplus 输出版本不对就是这种乱序引起的。检查当前环境变量的命令echo %ORACLE_HOME% echo %PATH%如果没有设置过 ORACLE_HOME手动配置setx ORACLE_BASE C:\app\oracle /M setx ORACLE_HOME C:\app\oracle\product\11.2.0\dbhome_1 /M setx NLS_LANG SIMPLIFIED CHINESE_CHINA.ZHS16GBK /MORACLE_HOME 和 ORACLE_BASE 的作用范围是当前 PowerShell 会话还是全局区别很大。setx 加/M参数是写机器级环境变量不加只写当前用户Oracle 服务运行账号是 SYSTEM 权限时读取的是机器级变量所以/M必须带。NLS_LANG 统一在这个阶段设好避免后边客户端连上来报告乱码。监听器配置用 netca 命令启动图形界面里直接默认配置即可端口保持 1521。默认监听是动态注册的实例启动时自动把 service name 注册给监听。但如果数据库服务器上有防火墙或者应用层做了端口限制咨询公司一般要求静态注册更稳。静态注册需要在 listener.ora 里写 SID_LISTSID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DBNAME pacs) (ORACLE_HOME C:\app\oracle\product\11.2.0\dbhome_1) (SID_NAME pacs) ) )改完 listener.ora 执行lsnrctl reload重载配置不要重启监听服务reload 不会中断当前连接。Windows 防火墙的入站规则要放行 1521 端口否则客户端位于其它网段时 tnsping 会卡在超时上netsh advfirewall firewall add rule nameOracle 1521 dirin actionallow protocolTCP localport15213.4 DBCA 创建 pacs 数据库环境变量和监听就绪后打开命令行输入dbca启动建库向导。模板选「通用用途」或「自定义数据库」这步我一般选「自定义数据库」因为通用模板里边会带上大量示例表空间和示例用户清理起来麻烦。全局数据库名填pacsSID 同时保持pacs。字符集是这里最需要拿主意的点。如果历史数据是 GBK 编码聚过来的选ZHS16GBK兼容最省心如果是全新系统且后续要接外部数据选AL32UTF8更符合 Unicode 趋势。我这次选的是 ZHS16GBK原因是影像系统的老客户端和报表模块都是 GBK 编码时代写死的数据库层面迁就它们能把乱码概率压到最低。内存参数建议按物理内存比例的公式来SGA 取物理内存的 40%60%PGA 按 SGA 的 1/4 左右。这台 16 GB 内存的机器我给 SGA 配 8 GB、PGA 配 2 GB数据库跑归档查询和大表扫描时不会频繁做 PGA 自动调整。闪回区和归档模式如果日志量不大测试阶段可以先不开启等业务方确认要保留恢复窗口再开启避免归档日志把数据盘写满。DBCA 图形界面到最后一步会把建库脚本生成到某目录。推荐勾选「生成数据库创建脚本」这样以后重建、迁移都有现成模板。等进度条走完会提示数据库创建完成默认会把数据库启动到 open 状态。命令行方式建库参考dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname pacs -sid pacs -characterSet ZHS16GBK -sysPassword YourSysPass -systemPassword YourSystemPass -emConfiguration NONE -memoryPercentage 40 -datafileDestination C:\app\oracle\oradata4. Oracle 19c Client 与数据源连接64 位和 32 位分开看4.1 客户端版本选型19c、11g、10g 分别给谁用影像系统改造前的老工作站里装的是 Oracle 11g Client部分老程序甚至是 10g Client。这次操作系统升到 Server 2019 后客户端部署方案就不能再一刀切了一线的桌面机装什么版本取决于上面跑的程序是 32 位还是 64 位进程。服务端是 11.2.0.4注意 19c Client 连接 11.2.0.4 是官方支持的最低门槛低于这个版本号的 11g 库比如 11.2.0.1连 19c 就困难。所以服务端版本保持在 11.2.0.4 很重要。而反过来11g Client 连接 19c 库基本没戏认证协议版本差太远。这个单向兼容关系在选型时很关键客户端版本适合场景关键限制11g Client老应用配套连接 11g/10g 库不能连接 12c 以上版本库19c Client新装机统一安装兼容 11.2.0.4 以上所有库已经不支持 10g 及更早数据库10g Client极老的 32 位程序只有 32 位 OCIServer 2019 上安装需要兼容性设置4.2 安装 19c ClientAdministrator 完整版操作系统 64 位新工作站就直接装 64 位 19c Client。但注意同一台机器上如果还有 32 位程序只装 64 位客户端是不够的。19c Client 分为 Administrator、Runtime 和 Instant Client 三种安装类型Runtime 只提供连接驱动没有 SQL*PlusAdministrator 则含完整工具链和 ODBC 驱动。数据源配置要用到 Microsoft ODBC for Oracle 和 Oracle ODBC 驱动直接选 Administrator 完整版。启动 setup.exe 后同样要管理员运行。语言勾选简体中文和英语安装目录建议改成独立的C:\app\client不要继续用服务端的 ORACLE_BASE 路径避免以后出现 base 归属混乱的问题。安装完成确认 ORACLE_HOME 环境变量指向这新目录这一步主要防止目录不对时 OUI 自动覆盖环境变量。装完 19c Client 后命令行执行sqlplus -v能看到版本号如果显示的版本还是 11g 那一排说明 PATH 里 11g 的 bin 排在前面截胡了。这个在避坑章节进一步展开。可以先手动指定版本验证一下C:\app\client\product\19.0.0\clienthome_1\bin\sqlplus -v4.3 ODBC 数据源配置64 位和 32 位管理器Windows 上配置 ODBC 数据源最常见的迷惑点是这个系统存在两个 ODBC 管理器控制面板数据源工具打开的是 64 位管理器位于C:\Windows\System32\odbcad32.exe32 位管理器在C:\Windows\SysWOW64\odbcad32.exe。很多人配好数据源32 位程序还是连不上原因就是根本没进 32 位管理器配置过。64 位管理器里添加数据源驱动应该看到两种Oracle in OraClient19c_home1和Oracle in OraClient11g_home1。选 19c 那个并填写系统 DSN。需要注意 ODBC 驱动里填的 Service Name 是 tnsnames.ora 里定义的连接字符串名不是主机名。最常见的错误是 DSN 里只填了裸的 SID而服务端注册的是 service name会报 ORA-12514。这一步填pacs前提是 tnsnames.ora 里有对应的映射。tnsnames.ora 位置默认在%ORACLE_HOME%\network\admin19c Client 如果是默认安装配置文件路径在C:\app\client\product\19.0.0\clienthome_1\network\admin。内容模板pacs (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.10.20)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME pacs) ) )如果 tnsnames.ora 放在了别的自定义目录比如运维统一管理的D:\tns需要手工设置 TNS_ADMIN 环境变量setx TNS_ADMIN D:\tns /M设置完成后重启任何已经打开的命令行窗口再测试。配置完数据源后在 ODBC 管理器中点「测试连接」这里强烈建议用 system 账号测试而不是程序专用账号因为 system 在任何库都必然存在能排除账号被锁或者权限问题的干扰。测试连接成功后再让业务方用应用账号验证。4.4 老程序依赖 10g Client 时的兼容性处理这台服务器上有一台老工作站跑的是 32 位程序程序内嵌的 OCI 驱动是 10g 时代的。一开始想用 19c 的 32 位版替代结果程序不认只能原样装 10g Client。10g Client 的安装程序在 Server 2019 上是出了名的玄学OUI 启动经常报错或者闪退常见报错是「无法定位程序输入点」或者直接无响应。我的办法是把 setup.exe 属性里的兼容性改成 Windows 7并勾选「以管理员身份运行此程序」。这样 OUI 才能正常起来。10g Client 只有 32 位架构安装目录不能有中文安装类型选择「运行时」或「管理员」都行老程序只需要 OCI 驱动。装完以后它的 bin 目录也会被写进 PATH和 19c Client 共存在同一台机器上多个 ORACLE_HOME 一定要靠上面的sqlplus -v来验证当前解析的是哪一个 Home。注意不要试图在同一台机器上给 10g 和 19c 两个 Client 配置同一个 TNS_ADMIN。老程序多数读的是注册表里默认 Home 的 tnsnames.ora新程序读的是环境变量 TNS_ADMIN 指向的路径两套 tnsnames 要各维护一份并且主机名解析保持一致否则会出现「新程序能连、老程序连不上」的怪象。5. 安装避坑与常见问题六条踩坑记录5.1 服务端与监听相关的坑坑一安装包路径带空格括号OUI 闪退。现象将安装包拷贝到D:\数据库安装包(新版)\后双击 setup.exe弹一下窗口立即退出日志目录里报 java 路径解析失败。原因11g 的 OUI 自带 JRE 在解析含特殊字符路径时出现异常。解决把安装包统一解压到C:\oracle_install这类纯英文路径并以管理员身份运行从未再遇到闪退。坑二19c 客户端连接 11g 库报 ORA-28040 或 ORA-24960。现象新装的 19c Client 用 sqlplus 连接 pacs 库时直接报 No matching authentication protocol用 11g Client 连接却是正常的。原因11g 数据库的 sqlnet.ora 里配置了过低的登录版本限制比如曾经做等保加固时写入过SQLNET.ALLOWED_LOGON_VERSION_CLIENT1019c 的认证协议协商不上。解决在数据库服务器的 sqlnet.ora 中添加或修改这两个参数SQLNET.ALLOWED_LOGON_VERSION_CLIENT8 SQLNET.ALLOWED_LOGON_VERSION_SERVER8修改后重启监听器lsnrctl reload。这个参数值是向下兼容的改成 8 表示允许所有旧版本客户端登录不影响安全性判断因为实际登录认证还是靠账号密码和数据库权限控制。坑三NIC 聚合后监听器只监听单网卡 IP客户端时通时断。现象配好双网卡 Teaming 后服务器本机连库正常但从别的机器连接经常第一次能通第二次不通。原因Oracle 监听器默认监听主机名解析出的某个 IP如果这个 IP 恰好落在被聚合前的物理网卡上聚合完成后物理网卡 IP 失效监听就撞了墙。解决查看lsnrctl status显示的监听地址如果是旧 IP在 listener.ora 中把 HOST 改成 team 虚拟网卡对应的新 IP 或主机名然后 reload 监听。顺带确认 team 虚拟网卡的 IP 已配好且活跃物理网卡上不要留 IP 配置。5.2 客户端与驱动相关的坑坑四64 位系统里找不到 32 位 ODBC 数据源。现象ODBC 数据源在控制面板里配好了32 位业务程序启动时仍报驱动不存在或数据源名称未找到。原因控制面板「管理工具」打开的数据源默认是 64 位管理器32 位程序进程读取的是 SysWOW64 目录下的 32 位注册表视图两边数据源互相独立。解决到C:\Windows\SysWOW64\odbcad32.exe里重新添加对应 32 位驱动的 DSN并实测连接通过再让业务程序启动。坑五PATH 里多个 Oracle Home 顺序错乱sqlplus 版本不对。现象机器上装了 11g Client 和 19c Client执行sqlplus -v发现是旧版本新装的 19c 怎么调都不生效。原因两个客户端安装时的 PATH 注册顺序不同系统解析sqlplus时先找到了前面的旧 bin 目录。解决环境变量里把 19c 的%ORACLE_HOME%\bin移到 PATH 最前或者使用绝对路径调用旧程序要用老版本时再反向调整习惯做法是在命令行窗口里临时指定 PATH 前缀set PATHC:\app\client\product\19.0.0\clienthome_1\bin;%PATH%6. 安装验证从监听器到 PLSQL 的一整套检查6.1 服务与监听状态检查装完的验收顺序要固定先从服务层查起。打开服务管理器确认OracleServicePACS和OracleOraDb11g_home1TNSListener两项的状态都是「正在运行」启动类型为「自动」。然后命令行确认监听状态C:\ lsnrctl status 服务别名 LISTENER 的实例摘要: 服务 pacs 包含 1 个实例。 实例 pacs状态 UNKNOWN作为此服务的默认实例处理...这里UNKNOWN并不代表出错它是静态注册条目的正常显示如果是READY则是实例动态注册成功。两种状态都说明监听认识 pacs 服务可以接受连接。6.2 tnsping 与 sqlplus 连通性验证再从客户端视角做连通性测试tnsping pacs期望输出OK (xx msec)如果超时先查 1521 端口通信和防火墙。接下来用 sqlplus 实际登库验证sqlplus system/密码pacs select name, open_mode from v$database; select value from nls_database_parameters where parameterNLS_CHARACTERSET;第一句确认库实例名和 open 状态第二句确认字符集是 ZHS16GBK 还是 AL32UTF8这个结果要记下来客户端 NLS_LANG 必须和它对齐。6.3 ODBC 与 PLSQL 联调验收最后一步是数据源的端到端验证。在 64 位 ODBC 管理器里对 pacs_odbc 点「测试连接」输入密码后出现Connection successful就说明 ODBC 链路通。对于 32 位程序进 SysWOW64 的 odbcad32.exe 再测一次两边都通过才算真正验收完毕。PLSQL Developer 登录验证要注意它是个 32 位进程连接依赖的 OCI 库来源在「工具 → 首选项 → 连接」里可以选择 Oracle 主目录必须指向在用的客户端 Home。登录时 Database 下拉框里能列出 pacs 说明 tnsnames.ora 路径识别正常也可以绕开下拉框直接输入pacs测试。从那以后每次装完这套 Oracle 环境我都会强制自己按lsnrctl status→tnsping→sqlplus登库 → ODBC 双位数测试这个固定顺序走一遍半个小时内能排查完所有链路环节避免上线时才发现隐患。希望帮到你。本文还有配套的精品资源点击获取