ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Windows Server 2019下Oracle 11g与19c安装部署及客户端配置实践

Windows Server 2019下Oracle 11g与19c安装部署及客户端配置实践 简介Windows Server 2019 环境下 Oracle 数据库的部署常让不少运维新手头疼这份图文文档正好补上了从零到可用的关键环节。与常见仅讲解 Linux 平台的教程不同它完整走通了 Windows Server 2019 系统安装、磁盘分区、管理员初始化等前置环节再逐步展开 Oracle 11.2.0.4 服务端安装与 pacs 数据库创建流程同时覆盖 Oracle 19c 及 19c Client 的对接配置并专门列出 NIC 网络聚合配置说明解决多网卡场景下的网络瓶颈。文档还深入讲解了 Oracle 19c Client 数据源连接原理针对客户端无法连接数据库的常见场景给出排查思路对 Windows 平台上部署数据库的 DBA、运维人员很有实操价值。资源为 1 个 PDF 文件压缩包大小 5.13MB目前已有 1853 人学习下载。1. Windows Server 2019 下 Oracle 11g、19c 安装部署从系统到客户端的一次完整落地医院 PACS 系统上线那天我拿到一台预装 Windows Server 2019 的物理机要在上面同时完成 Oracle 11g、19c 的安装部署。这套组合在医疗影像行业太常见了业务库用 11g11.2.0.4跑稳定工作站端用 19c Client 解决新协议下部分客户端连不上老库的问题。整套 Windows Server 2019 下 Oracle 11g、19c 安装部署走下来最耗时间的不是点下一步而是系统版本选择、磁盘规划、客户端兼容性这几个没人明说的环节。这篇图文笔记把当时的步骤和踩过的坑原样整理出来适合做医疗、政务、制造行业系统集成的工程师也适合需要在 Server 2019 上建 Oracle 单实例库的运维照着复现。2. 系统底座Windows Server 2019 安装、磁盘划分与初始化系统底座直接决定 Oracle 装得顺不顺。Server 2019 跟老系统不一样默认行为里藏着好几个会坑到后边数据库安装的点。这一章把系统层面的三件事讲透装哪个版本、磁盘怎么分、装完先做什么。2.1 选对安装版本桌面体验与 Core 的取舍装 Windows Server 2019 时第一个决定性选择是版本。我选的是 Standard桌面体验不是 Server Core。原因很实在Oracle 11g 的图形安装器 OUI、DBCA 建库工具、PLSQL Developer 全是 GUI 程序在 Server Core 上虽然也能通过远程 PowerShell 或从别的机器调图形界面跑但步骤绕、报错不好定位现场根本耗不起这个时间。做系统集成的机器宁可多占 10G 磁盘也要桌面体验版。安装过程中注意几个入口。启动安装后直接点「我没有产品密钥」不要卡在密钥输入上操作系统的激活等进系统再说。版本选择界面选 Windows Server 2019 Standard桌面体验。之后安装类型选「自定义仅安装 Windows高级」不要选升级干净安装比什么都强。我见过不少人在密钥界面纠结半天其实评估期 180 天足够完成部署和验收。这里有个容易被忽略的坑安装过程中系统会自动重启、自动进入「准备系统」阶段这个过程不要人为干预也不要断电。等它走到「为 administrator 设置密码」的界面输入符合复杂度要求的密码至少要大写小写数字长度 8 位以上密码强度不过关进不了下一步。2.2 磁盘管理C 盘与业务盘的分区规划系统安装界面的分区阶段我只对 C 盘做分区其余磁盘全部等进入系统以后再用磁盘管理去分配。为什么不在安装界面一次性分完因为安装界面的分区工具功能简陋误选磁盘可能导致整块盘数据被清空系统装完以后在磁盘管理里操作界面直观、可调整也方便按业务需求随时改。Oracle 部署场景下我给的分区建议是下面这张表。数字不绝对重点逻辑是数据文件、归档日志、备份不要跟系统挤在同一个分区。分区大小用途说明C 盘120G 起系统 Oracle 软件 客户端工具至少留 40G 空闲给 Oracle 软件和日志D 盘按业务量11g 数据文件、控制文件、redo 日志影像数据增长快按两年增量估算E 盘按备份策略RMAN 备份、归档日志、安装包备份与数据物理隔离F 盘可选业务交换区、临时文件留给后续扩容不用就空着磁盘管理进法右键「此电脑」→「管理」→「磁盘管理」。对未分配空间右键选「新建简单卷」一路下一步指定卷大小、分配驱动器号、文件系统选 NTFS、卷标按用途写清楚。格式化时我习惯对数据盘做一次完整格式化不做快速格式化这样坏道能提前暴露出来省得数据写进去了才发现盘有问题。2.3 系统初始化三件事主机名、静态 IP、防火墙放行进系统之后先别急着拷 Oracle 安装包把这三件事做完再动手。第一是改主机名第二是配静态 IP第三是放行 Oracle 监听端口。主机名和 IP 必须提前规划好因为后面 Oracle 监听器默认用主机名做绑定主机名解析出错会直接导致客户端连不上。用 PowerShell 做这三件事最省事命令如下# 设置主机名改成规划好的服务器名别用默认随机名重启生效 Rename-Computer -NewName PACS-DB-01 -Restart # 配置静态 IP以网卡名以太网为例PrefixLength 24 对应 255.255.255.0 New-NetIPAddress -InterfaceAlias 以太网 -IPAddress 192.168.10.20 -PrefixLength 24 -DefaultGateway 192.168.10.1 # 放行 Oracle 监听端口不建议直接关防火墙 New-NetFirewallRule -DisplayName Oracle1521 -Direction Inbound -Protocol TCP -LocalPort 1521 -Action Allow三条命令的用途说明第一条把随机主机名改成规划名Oracle 监听器和 tnsnames 都依赖这个名称第二条配静态 IPPrefixLength 24 就是传统掩码 255.255.255.0现场根据实际网段改第三条只放行 1521 端口比整网关闭防火墙安全得多数据库服务器在内网也不要裸奔装完以后如果要用 PLSQL 远程连接这个规则必须存在。还有一个容易忽略的点把服务器时间同步到 NTP。数据库时间戳、证书有效性、告警日志排序全都依赖系统时间时间偏差大后面排查问题会非常痛苦。在「控制面板 → 日期和时间 → Internet 时间」里选一个内网 NTP 源同步后确认时区正确。3. Oracle 11.2.0.4 服务端安装与建库从 SETUP 到 pacs 库系统底座就绪后进入核心环节。Oracle 11g 选 11.2.0.4 这个版本是有讲究的它是 11g 最后一个 PSU 版本bug 修复最全也是 Windows 上最稳的 11g 版本。这一章从安装包准备讲到 DBCA 建库把每一步背后的原因说清楚。3.1 安装前的环境检查与安装包准备拷贝安装包到服务器前先说三个前置条件。第一安装包路径和目录不能含中文纯英文路径能避免一堆编码问题我一般直接建 D:\oracle_install 放安装包第二安装包对应的是 11.2.0.4 的两个 zip解压后注意database目录下的setup.exe第三确认当前登录账号有管理员权限OUI 要写注册表权限不足会在安装中期报错回滚。另外Oracle 11g 的 OUI 会做环境检查在 Server 2019 上经常会弹两个警告一个是「物理内存不足」一个是「操作系统版本未知」。这俩都是因为 11g 的 cvu 检查文件太老不认识 Server 2019 导致的。处理方式是编辑解压目录下的database\stage\cvu\cvu_prereq.xml在里面补上 Windows Server 2019 的操作系统条目或者直接点「忽略」继续。我当时选择忽略并继续后续安装没有任何问题。3.2 安装界面上的四个关键选择双击setup.exe进入图形界面记住有四个关键选择点每个都决定了后续流程走向。第一安全更新界面不要勾选「我希望通过 My Oracle Support 接收安全更新」。没有 Oracle 账号或者在内网环境勾了反而卡住即使有账号也不建议在安装阶段连外网。不勾直接下一步系统会弹确认框「确实不提供邮箱地址吗」点是继续。第二选择「跳过软件更新」。11g 在 Server 2019 上检查更新非常慢等待时间不可控现场部署直接跳过。第三选择「仅安装数据库软件」。这是我最推荐的部署方式数据库软件先装好再单独用 DBCA 建库。比同时建库更可控字符集、内存参数、密码策略都能单独定制不需要在安装向导里仓促定案。第四选择「单实例数据库安装」。对应单机部署场景不选 RAC。之后一路下一步等待软件安装完成即可。安装完成后 Oracle 的sqlplus等基础工具就会出现在C:\app\Administrator\product\11.2.0\dbhome_1下。3.3 DBCA 建库内存、字符集与监听器参数软件装完建库命令行输入dbca会弹出图形向导。建库阶段我把 pacs 库作为示例几个关键参数按下面这张表设定。项目里创建的 pacs 数据库是给影像系统专用的库这类库的特点是数据量增长快、并发事务中等、以存储和检索为主。参数项推荐值说明Global Database Namepacs与 SID 保持一致方便后续维护SIDpacs连接字符串和运维脚本都基于它字符集ZHS16GBK业务只存中文时选这个要存多语言选 AL32UTF8SGA6144 MB16G 物理内存的典型值OLTP 够用PGA2048 MB排序和 hash 操作空间2G 起步示例方案不创建省空间也省维护成本连接模式专用服务器模式默认选项避免共享服务器模式的连接排队内存参数说明11g 虽然支持 AMM自动内存管理但 Windows 平台上 AMM 的粒度问题偶尔会触发奇怪报错我一般手动分配 SGA 和 PGA。物理内存 16G 的时候SGA 给 6G、PGA 给 2G 是安全起点留足系统和其他进程的内存余量避免操作系统层的内存压力反过来拖垮 Oracle。监听器在安装软件时已经生成了 Windows 服务OracleOraDb11g_home1TNSListenerDBCA 建库过程中会默认注册到监听确认界面勾选即可。数据库创建完成后会显示生成了服务OracleServicePACS这两个 Windows 服务就是后面最常打交道的东西。3.4 验证安装lsnrctl、tnsping 与 sqlplus建库完成不要急着装客户端先用三个命令把服务端验证一遍。这组命令我在每个 Oracle 环境都会跑三分钟确认数据库可用# 查看监听器状态确认 pacs 服务已注册 lsnrctl status # 测试客户端到监听器的连接服务名写 pacs tnsping pacs # 用 sysdba 登录并查看数据库状态 sqlplus / as sysdba select name, open_mode from v$database;每条命令都有明确的验证目标。lsnrctl status的输出里应该能看到Services Summary段pacs服务状态为 READY 才说明监听注册成功tnsping pacs能通说明网络、主机名解析、监听地址都没问题最后一条 SQL 如果返回READ WRITE说明数据库处于正常的读写状态。如果open_mode显示MOUNTED或READ ONLY说明数据库处于特殊阶段需要检查是不是在恢复或者只读模式。4. 客户端组合方案11g Client、10g Client 与 PLSQL 的连接配置数据库建好只是第一步真正让业务跑起来的是客户端连得上。这一章讲客户端的组合方案为什么机器上可能要同时装 11g Client 和 10g Client以及 PLSQL Developer 怎么配才不报错。4.1 11g Client 安装与 netca 配置11g Client 的安装包独立于服务端在客户端工具机上运行安装向导。安装类型有三档管理员、运行时、自定义。我的选择标准很明确工具机和管理员机器装「管理员」类型它自带 Oracle ODBC/OLE DB 驱动和管理工具PLSQL Developer 需要的部件全都有应用服务器只装「运行时」类型体积小、够用。装完以后配连接串用netca命令启动配置向导走「本地 NET 服务名配置」添加 → 输入服务名pacs→ 选 TCP/IP → 输入数据库服务器的 IP 或主机名 → 端口 1521 → 测试连接。测试通过说明客户端和服务端的通路已经建立。这里有个关键细节一台机器装了多个 Oracle 客户端比如 11g Client 和 19c Client 共存环境变量ORACLE_HOME和PATH的顺序决定 PLSQL 用哪个连接配置。我吃过亏PLSQL 报找不到网络服务名结果是因为ORACLE_HOME指向了 19c 的 home读的是 19c 的 tnsnames。处理方式是打开「系统属性 → 环境变量」把实际要用的ORACLE_HOME值改对并把对应的bin目录挪到PATH最前面。4.2 10g Client 的兼容性定位项目里还涉及 Oracle 10g Client 的安装乍看很奇怪但这是现场常见需求。有些老 HIS/RIS 应用程序是用 OCI 10.2 版本编译的11g Client 的 OCI 接口不认驱动版本一升级程序就报错。这类场景只能给那台机器单独装 10g Client保留老接口。在 Server 2019 上装 10g Client 有两个注意点。第一右键setup.exe选「属性 → 兼容性 → 以兼容模式运行Windows 7」不然安装向导可能无响应第二安装路径选独立目录不要和 11g 的 home 混在一起比如C:\oracle\product\10.2.0\client_1。两个版本的 client 是可以共存的但 tnsnames.ora 一定不要改错位置否则后面排查会让你怀疑人生。4.3 PLSQL Developer 连接配置与常见报错PLSQL Developer 的连接窗口有四个关键输入用户名、密码、数据库下拉框选择网络服务名、连接身份Normal 或 Sysdba。下拉框里的网络服务名来自tnsnames.ora所以配置顺序一定是先配好网络服务名再打开 PLSQL 连接。tnsnames.ora的位置在客户端 home 目录下的network\admin11g 的典型路径是C:\oracle\product\11.2.0\client_1\network\admin\tnsnames.ora。文件内容里常用的字段就几个HOST填服务器 IP 或主机名PORT填 1521SERVICE_NAME填pacs。PLSQL 常见报错典型原因排查方向ORA-12154TNS 无法解析指定连接标识符网络服务名没写对或 tnsnames 文件没被读进去检查 ORACLE_HOME 指向、文件里名称是否一致ORA-12541无监听程序监听没启动或客户端连错了 IP/端口服务端执行 lsnrctl status 看监听状态ORA-12514监听无法识别请求的服务服务名与注册名不一致服务端执行 lsnrctl services 查实际注册名PLSQL 本身不参与网络协议转换它完全依赖 Oracle Client 的驱动也就是说客户端版本选错了PLSQL 配置再正确也白搭。这也是为什么我建议先装好 Client、验证tnsping通了再打开 PLSQL 排查图形界面问题。5. 常见问题排查19c Client 数据源、网络聚合与连接失败的坑这一章解决两个高频需求网络聚合配置、19c Client 数据源连接同时把最容易翻车的几个问题按「现象→原因→解决」拆开写。这些都是项目资料里明确标注过的补充内容也是现场最值钱的部分。5.1 NIC 网络聚合配置方法与模式选择数据库服务器的网络可靠性直接决定业务连续性单网卡故障恢复一次要几分钟网络聚合后切换是秒级。Server 2019 自带的 NIC Teaming服务器管理器 → 本地服务器 → NIC 组 → 新建团队就能做不需要额外装驱动。创建聚合组之前先看模式两种主流的选法模式交换机要求适用场景交换机无关Switch Independent普通接入交换机即可大多数机房场景推荐静态成组Static Teaming交换机需支持静态链路聚合华为/华三核心交换机场景LACP 802.3ad交换机需开启 LACP高性能核心网络负载均衡算法也要选对。通用场景选「地址哈希Address Hash」它会按源/目的 MAC 和 IP 做负载分配这台机器如果跑虚拟机或者容器选「虚拟机端口Hyper-V Port」更合适。用 PowerShell 创建网络聚合组的命令如下# 查看当前物理网卡名称确认哪两块网卡参与聚合 Get-NetAdapter # 创建名为 TEAM1 的聚合组交换机无关模式 地址哈希 New-NetLbfoTeam -Name TEAM1 -TeamMembers 以太网 2,以太网 3 -TeamingMode SwitchIndependent -LoadBalancingAlgorithm AddressHash参数说明TeamMembers必须写Get-NetAdapter查到的准确网卡名写错会直接报错TeamingMode选 SwitchIndependent 说明不需要交换机配合LoadBalancingAlgorithm选 AddressHash 是通用性最好的方案。配置完成后原来网卡上的 IP 会消失需要在聚合组 TEAM1 上重新配置 IP。物理机上操作时先插好两根网线再创建避免聚合组建成单腿状态。5.2 19c Client 数据源连接详解19c Client 在这套方案里的定位很特殊解决部分情况下客户端不能连接数据库的问题。所谓「部分情况」绝大多数是 11g 老库的密码协议不被新版客户端接受导致的。Oracle 11g 早期默认的密码版本是 10G 格式19c Client 默认要求更严格的认证协议两边对不上连接就失败。在 19c Client 的机器上网络服务名配置方式和老客户端一样用netcatnsnames.ora 格式不变。关键是 11g 服务端要放开认证协议限制在服务端的sqlnet.ora里追加两行提示编辑%ORACLE_HOME%\network\admin\sqlnet.ora追加下面两行后执行lsnrctl reload生效。SQLNET.ALLOW_LOGON_VERSION_CLIENT8 SQLNET.ALLOW_LOGON_VERSION_SERVER8参数说明ALLOW_LOGON_VERSION_CLIENT控制客户端允许的最低登录版本值设为 8 表示允许 Oracle 11g 及以上版本的客户端登录如果设成 1211g 客户端会被拒绝所以老环境千万别手滑改成 12。改完后重启监听再用 19c Client 的tnsping测试连通性最后通过 ODBC 数据源管理器创建系统 DSN驱动选 Oracle ODBC Driver填入服务名pacs就能建好数据源。5.3 四条典型踩坑记录下面四条是项目执行中最常遇到的坑每条都是真实现场按现象、原因、解决三段拆开。坑一19c Client 连 11g 报 ORA-28040现象客户端用 19c 驱动连接 11g 数据库登录时报ORA-28040: No matching authentication protocol应用日志里也是同样的错误。原因11g 数据库使用的密码版本默认 10G 格式在 19c 客户端看来是旧协议认证不通过。本质是服务端的密码版本落后于客户端的默认要求。解决在 11g 服务端sqlnet.ora追加 5.2 节那两行参数lsnrctl reload后重置一次该用户的密码alter user 用户名 identified by 新密码;再测试连接立刻恢复。坑二监听服务无法启动现象Windows 服务里OracleOraDb11g_home1TNSListener点击启动后立即停止事件查看器里记录监听启动失败Oracle 服务端无法被客户端访问。原因监听器启动时绑定主机名失败或者端口被占用常见于服务器改了主机名但 hosts 文件没同步或者 1521 端口被其他进程占住。解决打开C:\Windows\System32\drivers\etc\hosts确认新主机名和 IP 的映射存在再执行netstat -ano | findstr 1521看端口占用情况有进程占用就杀掉或换端口。修完执行lsnrctl start看到The command completed successfully才算恢复。坑三ORA-12514 服务名不识别现象客户端tnsping能通但 PLSQL 连接时报ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。原因监听器起来了但请求的服务名没有注册上去。这跟数据库实例没起来、动态注册失败、或者 tnsnames 里的 SERVICE_NAME 拼写不对都有关。解决服务端执行lsnrctl services看实际注册的 SERVICE_NAME 是什么把客户端 tnsnames 里的 SERVICE_NAME 改成一致的如果实例没注册确认数据库实例是否已启动sqlplus / as sysdba查open_mode再执行alter system register;手动触发注册。坑四10g Client 在 Server 2019 上安装无响应现象双击 10g Client 的 setup.exe界面弹不出来或卡在初始化等了十分钟还是没动静。原因10g 的安装程序太老不认 Server 2019 的系统版本和 UAC 机制被系统安全策略拦住了。解决右键 setup.exe → 属性 → 兼容性 → 勾选「以兼容模式运行这个程序」并选 Windows 7同时右键选择「以管理员身份运行」。装的时候路径选独立目录不要覆盖 11g 的 home。6. 安装完之后的验证技巧三分钟检查清单与日常巡检习惯每次部署完 Oracle我都会强制走一遍三分钟验证清单确认无误才算交付。这套清单能覆盖 80% 的初始故障比事后翻日志高效得多。先跑服务端的三个基础检查。执行lsnrctl status确认输出里Services Summary段下能看到 pacs 服务且状态为 READY执行tnsping pacs确认返回中耗时正常且有 OK 字样然后sqlplus / as sysdba登录查select name, open_mode from v$database;正常应该返回READ WRITE。这三条连着过一遍数据库本体就没问题了。再检查 Windows 服务。services.msc里确认OracleServicePACS和OracleOraDb11g_home1TNSListener两个服务状态为「正在运行」启动类型为「自动」。服务没设自动的话服务器重启后数据库不会跟着起来现场就会收到「数据库连不上」的告警这属于交付前必须排掉的隐患。最后看一眼数据库的告警日志开头部分确认初始化阶段没有 ORA- 报错。路径在%ORACLE_BASE%\diag\rdbms\pacs\pacs\trace\alert_pacs.log直接看最后 30 行即可。交付时我会把这个清单和输出贴到验收报告里让甲方知道哪些是验证过的。巡检习惯方面我每台库都会固定做两件事每周看一次归档目录和告警日志每月跑一次表空间使用率查询。归档目录写满会导致数据库直接挂起恢复动作是先清归档再alter database open;这种故障完全可以提前预防没必要等它发生。有一年一台库跑着跑着归档满了业务全停那次之后我每次部署都把归档路径和告警日志当作正式交付项检查连客户端工具机的 tnsnames 解析也要当场tnsping一遍再签字。希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

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