
简介这份图文教程面向需要在 Windows Server 2019 上部署 Oracle 数据库的运维与开发人员覆盖从操作系统安装到数据库客户端连接的全流程。内容包含 Windows Server 2019 系统安装与磁盘分区、Oracle 11g 服务端部署及 pacs 数据库创建、Oracle 11g 与 10g 客户端安装、PLSQL 连接配置并延伸至 Oracle 19c 客户端数据源连接详解针对部分场景下客户端无法连接数据库的问题给出排查思路同时附带 NIC 网络聚合配置说明适合初中级 DBA 与系统集成人员参考。资源为 1 个 PDF 文件压缩包约 5.13MB以图文步骤形式呈现便于对照操作。目前已有 1854 人学习下载可帮助读者快速搭建测试环境、理解多版本 Oracle 共存部署要点并掌握客户端连接异常的定位方法。1. 从一台裸机到 PACS 库这套 Oracle 11g/19c 部署笔记到底值不值得存上周帮一个做医疗影像的团队收拾烂摊子他们的 PACS 归档库跑在一台三年没重启的 Windows Server 2019 上Oracle 11g 的监听器莫名其妙挂了客户端连不上影像调阅直接卡死。翻他们当初的部署文档只有一句“按默认下一步”。这种场景我见得太多了——Oracle 在 Windows Server 上的安装部署从来不是点几下鼠标的事它涉及操作系统分区策略、服务端与客户端的版本匹配、网络聚合配置、以及 19c Client 连 11g 服务端时那个经典的“连不上”玄学。这份《Windows Server 2019 下 Oracle 11g、19c 安装部署-图文》笔记恰好把从裸机装系统到 PLSQL 连库的完整链路拆了一遍还额外覆盖了 NIC 网络聚合和 19c Client 数据源连接这两个容易被忽略的环节。如果你手头正好有 Windows Server 2019 的物理机或虚拟机需要部署 Oracle 11g 或 19c 作为业务库或者你正被“客户端连不上数据库”折磨这份笔记里的步骤和参数值得你对着走一遍。它不是官方文档的复读而是一份带现场判断的实操记录下面我按自己的理解把它拆开讲透。2. Windows Server 2019 基础环境分区策略与磁盘管理里的隐藏门槛2.1 为什么系统盘只分一个 C 盘反而是对的笔记里有一个细节容易被跳过安装 Windows Server 2019 时作者建议“新建 C 盘分区其余磁盘分区待操作系统安装完毕后在磁盘管理中进行分区操作”。这个做法和很多“一步到位”的教程相反但恰恰是血泪经验。Oracle 的安装对磁盘 I/O 和空间有硬性要求尤其是 11g 的SYSTEM表空间和SYSAUX表空间如果和操作系统混在一个分区里后期归档日志暴涨时会把 C 盘撑爆直接导致数据库挂起。把系统盘控制在 100GB 到 150GB剩余空间留给数据文件、归档日志和备份是更稳妥的策略。安装过程中的关键选择项如下步骤选择项说明版本选择Windows Server 2019 Standard桌面体验必须选桌面体验否则没有 GUIOracle 图形化安装会报错安装类型自定义仅安装 Windows高级不要选升级避免旧配置残留分区新建 C 盘建议 100GB 以上剩余空间留白进系统后用磁盘管理分配产品密钥点击“我没有产品密钥”装完再激活不影响安装系统装完后第一件事是进“计算机管理 → 磁盘管理”把未分配空间新建简单卷。这里有个参数要注意分配驱动器号时建议把数据盘固定为 D 或 E不要用自动分配的盘符因为 Oracle 的oradata目录路径一旦确定后期改盘符会导致控制文件找不到数据文件。新建卷时文件系统选 NTFS分配单元大小保持默认的 4096 字节这个值对 Oracle 数据块通常 8KB的读写对齐最友好。2.2 安装前的系统层配置别急着点 setup.exe很多人拿到安装包直接双击setup.exe结果卡在“先决条件检查”过不去。笔记里虽然没展开但按 Oracle 在 Windows 上的惯例装之前必须做三件事第一关闭 Windows 防火墙或放行 1521 端口。Oracle 监听器默认监听 TCP 1521如果防火墙拦截服务端本机可以sqlplus / as sysdba登录但客户端永远连不上。我一般直接关掉域网络和专用网络的防火墙装完再按需加规则。第二设置静态 IP。数据库服务器的 IP 如果由 DHCP 分配重启后 IP 变了客户端配置的tnsnames.ora里的 HOST 就失效了。在“网络和共享中心 → 更改适配器设置”里把 IPv4 地址设为静态子网掩码和网关按实际网络填。第三修改计算机名。默认的随机名如 WIN-XXXXXX在 Oracle 安装时会被写入listener.ora和tnsnames.ora后期改机器名会导致监听器起不来。装系统时就改成有意义的名称比如DB-SERVER-01改完重启一次。第四如果你需要做 NIC 网络聚合笔记摘要里提到的第二点要在装 Oracle 之前配好。Windows Server 2019 自带 NIC Teaming 功能在“服务器管理器 → 本地服务器 → NIC 组合”里把两块物理网卡加成一组模式选“交换机独立”负载均衡选“动态”。聚合后的虚拟网卡会得到一个统一 IPOracle 监听器绑定这个 IP 即可。注意不要用“静态成组”模式除非交换机做了对应的端口聚合配置否则会断网。# 检查当前网卡状态和 IP 配置 Get-NetAdapter | Format-Table Name, Status, LinkSpeed Get-NetIPAddress -AddressFamily IPv4 | Format-Table InterfaceAlias, IPAddress, PrefixLength # 创建 NIC 组合示例将以太网 2 和以太网 3 聚合 New-NetLbfoTeam -Name Team-Oracle -TeamMembers 以太网 2,以太网 3 -TeamingMode SwitchIndependent -LoadBalancingAlgorithm Dynamic # 查看组合状态 Get-NetLbfoTeam这段 PowerShell 先确认物理网卡识别正常然后创建名为Team-Oracle的组合。SwitchIndependent模式不需要交换机配合Dynamic负载均衡会根据流量动态分配。组合成功后在“网络连接”里会出现一个新的虚拟网卡给它配静态 IP后续 Oracle 监听器就绑这个 IP。如果组合后网络不通先检查两块网卡是否都插在同一个交换机上且交换机端口没有做端口安全限制。3. Oracle 11g 服务端安装从先决条件检查到监听器配置3.1 安装包解压与 setup.exe 的正确打开方式Oracle 11.2.0.4 的 Windows 版安装包通常是两个 zip 文件解压时必须解压到同一个目录否则setup.exe会提示找不到stage目录。解压后右键setup.exe选择“以管理员身份运行”。如果直接双击UAC 可能会拦截部分注册表写入导致安装到一半报权限错误。安装向导启动后第一个关键选择是“配置安全更新”。笔记里明确写了“不要勾选‘我希望通过 My Oracle Support 接收安全更新’”然后点下一步会弹出一个警告框点“是”继续。这个步骤跳过的是 Oracle 的在线更新检查在内网环境里根本连不上外网勾了反而卡住。接下来选择“跳过软件更新”然后进入安装选项。这里必须选“仅安装数据库软件”不要选“创建和配置数据库”。为什么因为创建数据库这一步在安装向导里做一旦出错很难回退而且默认的数据库模板会装一堆你用不到的功能。正确的做法是先装软件再用dbca单独建库这样参数可控出问题也好排查。3.2 单实例安装与先决条件检查的绕过技巧选择“单实例数据库安装”后安装程序会做先决条件检查。在 Windows Server 2019 上装 11g大概率会碰到两个检查失败操作系统版本检查11g 发布时还没 Windows Server 2019安装程序会认为系统版本过高。解决办法是修改stage\cvu\cvu_prereq.xml在OPERATING_SYSTEM RELEASE6.2后面加一段RELEASE10.0的配置或者直接忽略这个检查。物理内存检查如果虚拟机内存小于 2GB会报内存不足。11g 最低要求 1GB但实际跑 PACS 库建议至少 8GB否则 SGA 和 PGA 抢内存查询影像列表时卡到怀疑人生。先决条件检查页面有个“全部忽略”的勾选框勾上之后点下一步安装程序会继续。但注意忽略检查不等于问题不存在内存和磁盘空间要自己心里有数。安装类型选“企业版”安装路径默认C:\app\Administrator\product\11.2.0\dbhome_1。如果 C 盘空间紧张可以改到 D 盘但路径里不要有中文和空格。安装过程中会提示运行orainstRoot.sh和root.shWindows 下这两个脚本在%ORACLE_HOME%\bin里用管理员权限的 cmd 执行即可。安装完成后监听器默认已经配好但需要手动启动。在服务里找到OracleOraDb11g_home1TNSListener启动类型设为“自动”然后启动。如果启动失败检查listener.ora里的 HOST 是不是计算机名以及 1521 端口是否被占用。# 以 sysdba 身份登录检查数据库状态 sqlplus / as sysdba # 查看实例状态 SELECT instance_name, status FROM v$instance; # 查看监听器状态 lsnrctl status # 如果监听器没起来手动启动 lsnrctl startsqlplus / as sysdba是操作系统认证登录不需要密码前提是当前用户属于ORA_DBA组。v$instance返回OPEN才说明数据库正常。lsnrctl status会显示监听器监听的端口和已注册的服务如果Service pacs has 1 instance(s)这类信息没出现说明数据库还没向监听器注册需要ALTER SYSTEM REGISTER;。3.3 用 dbca 创建 pacs 数据库字符集与内存参数怎么定笔记里提到“创建 pacs 数据库”这是 PACS 系统的业务库。用dbca建库时几个参数直接决定后期性能字符集PACS 系统通常存中文患者姓名和英文影像描述字符集选ZHS16GBK还是AL32UTF8如果客户端是 PLSQL 且老版本ZHS16GBK兼容性更好如果考虑未来迁移到 19cAL32UTF8是趋势。我一般建议新库直接上AL32UTF8避免后期转码的麻烦。内存如果服务器 16GB 内存SGA 给 4GBPGA 给 2GB剩余留给操作系统和客户端连接。不要用自动内存管理AMM在 Windows 上 AMM 有时会和lock_page冲突手动设sga_target和pga_aggregate_target更稳。归档模式PACS 库必须开归档否则一旦磁盘故障影像数据全丢。建库时勾选“启用归档”归档路径指向数据盘不要放 C 盘。建库过程大约 20 到 40 分钟取决于磁盘性能。建完后用sqlplus连一下pacs库确认能正常查询。4. Oracle 客户端安装与 19c Client 连接 11g 服务端的排错4.1 11g Client 与 10g Client 的共存安装顺序笔记里提到了 11g Client 和 10g Client 的安装。为什么要在同一台机器上装两个版本的客户端因为有些老旧的 PACS 客户端软件只认 10g 的 OCI 库而新的 PLSQL 版本又需要 11g 的客户端。共存安装的关键是顺序先装低版本再装高版本。先装 10g Client装完后不要配置tnsnames.ora再装 11g Client安装时选择“自定义”把ORACLE_HOME设成不同路径比如C:\app\Administrator\product\10.2.0\client_1和C:\app\Administrator\product\11.2.0\client_1。装完后环境变量PATH里会同时存在两个客户端的bin目录。哪个在前默认就用哪个。如果 PLSQL 连不上先cmd里执行sqlplus -v看当前用的是哪个版本。要切换版本调整PATH顺序即可。4.2 19c Client 连 11g 服务端为什么 TNS 能通但登录报错摘要里专门提到“Oracle 19c Client 数据源连接详解解决部分情况下客户端不能连接数据库问题”这个点非常关键。19c Client 默认使用sqlnet.ora里的SQLNET.ALLOWED_LOGON_VERSION_SERVER和SQLNET.ALLOWED_LOGON_VERSION_CLIENT参数默认值是 12而 11g 服务端的密码认证协议版本较低导致 19c Client 连 11g 时TNS 能 ping 通但sqlplus登录报ORA-28040: No matching authentication protocol。解决办法是在 19c Client 的sqlnet.ora里加两行SQLNET.ALLOWED_LOGON_VERSION_SERVER8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT8改完后重启客户端工具。这个参数的意思是允许的最低认证协议版本降到 8兼容 11g 的密码哈希。注意降低版本会削弱安全性但在内网隔离环境里这是让 19c Client 连 11g 最直接的办法。如果服务端也能改在 11g 的sqlnet.ora里加SQLNET.ALLOWED_LOGON_VERSION8同样有效。另一个常见问题是 19c Client 的tnsnames.ora路径。19c 默认不生成tnsnames.ora需要手动在%ORACLE_HOME%\network\admin下创建。内容格式和 11g 一样PACS (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 192.168.1.100)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME pacs) ) )HOST填服务端静态 IPSERVICE_NAME填dbca建库时设的服务名。配完后用tnsping PACS测试返回OK说明网络和监听器都通。如果tnsping不通检查服务端防火墙和监听器状态如果tnsping通但登录报错就是上面说的认证协议问题。4.3 PLSQL 连接配置与常见报错PLSQL 本身不带 Oracle 客户端它依赖已安装的 Oracle Client。在 PLSQL 的“首选项 → 连接”里Oracle Home填 11g Client 的路径OCI library填%ORACLE_HOME%\bin\oci.dll。如果 PLSQL 启动时报Initialization error通常是oci.dll位数不匹配——64 位的 PLSQL 必须配 64 位的 Oracle Client32 位的配 32 位。查位数的方法任务管理器里看 PLSQL 进程有没有*32后缀。登录时数据库填PACS即tnsnames.ora里的别名用户名system密码是建库时设的。如果报ORA-12541: TNS:no listener说明监听器没起或端口不对报ORA-12514: TNS:listener does not currently know of service说明数据库没注册到监听器在服务端执行ALTER SYSTEM REGISTER;后等几秒再试。5. 避坑与排查这五个坑我替你踩过了5.1 现象安装 11g 时先决条件检查卡在“操作系统版本”原因Windows Server 2019 的内核版本号是 10.0而 11g 的cvu_prereq.xml里最高只认到 6.2Windows Server 2012 R2。解决找到安装包解压目录下的stage\cvu\cvu_prereq.xml用文本编辑器打开在OPERATING_SYSTEM RELEASE6.2那一行后面复制一段把RELEASE改成10.0VERSION改成10.0保存后重新运行setup.exe。或者直接在检查页面勾“全部忽略”但改文件更彻底。5.2 现象监听器启动后客户端tnsping通但sqlplus登录报ORA-28040原因19c Client 默认认证协议版本高于 11g 服务端支持的版本。解决在 19c Client 的sqlnet.ora里加SQLNET.ALLOWED_LOGON_VERSION_CLIENT8和SQLNET.ALLOWED_LOGON_VERSION_SERVER8。如果客户端是 11g 连 19c 服务端反过来在服务端加SQLNET.ALLOWED_LOGON_VERSION8。改完重启监听器和客户端工具。5.3 现象dbca建库到 80% 卡住日志报ORA-27102: out of memory原因SGA 设得太大超过了 Windows 的共享内存限制或者MEMORY_TARGET和SGA_TARGET同时设了导致冲突。解决建库时不要用自动内存管理手动设sga_target4G、pga_aggregate_target2G。如果已经卡住杀掉dbca进程删除%ORACLE_BASE%\admin\pacs和%ORACLE_BASE%\oradata\pacs目录重新建库。Windows 上 Oracle 的 SGA 上限受%ORACLE_HOME%\database\init.ora里的_ksmg_granule_size影响一般不用动控制 SGA 不超过物理内存的 60% 即可。5.4 现象PLSQL 登录报ORA-12154: TNS:could not resolve the connect identifier specified原因PLSQL 找的tnsnames.ora不在当前ORACLE_HOME下或者TNS_ADMIN环境变量指向了错误的目录。解决在 PLSQL 首选项里确认Oracle Home和OCI library指向同一个客户端目录。然后检查该目录下network\admin\tnsnames.ora是否存在内容里的别名和登录时填的是否一致。如果装了多个客户端设一个TNS_ADMIN环境变量指向统一的tnsnames.ora目录避免每个客户端各配一份。5.5 现象NIC 聚合后网络时通时断Oracle 监听器频繁掉线原因NIC Teaming 的负载均衡模式选了“静态成组”但交换机没做端口聚合导致部分数据包被丢弃。解决把 Teaming 模式改成“交换机独立”负载均衡算法改成“动态”。如果交换机支持 LACP可以用“LACP”模式但需要交换机侧配合配置。改完后在服务端ping网关长包测试ping -t -l 1472 网关IP观察有没有丢包。稳定后再启动 Oracle 监听器。6. 从 11g 到 19c 的迁移验证一个脚本确认客户端兼容性装完 11g 和 19c 客户端后怎么确认哪个客户端能连哪个服务端我一般写一个批处理把sqlplus的版本和连接测试串起来避免手工切换PATH的混乱。echo off REM 切换到 11g 客户端并测试连接 set ORACLE_HOMEC:\app\Administrator\product\11.2.0\client_1 set PATH%ORACLE_HOME%\bin;%PATH% echo [11g Client] sqlplus version: sqlplus -v echo [11g Client] test connection to PACS: echo exit | sqlplus -L system/your_passwordPACS REM 切换到 19c 客户端并测试连接 set ORACLE_HOMEC:\app\Administrator\product\19.0.0\client_1 set PATH%ORACLE_HOME%\bin;%PATH% echo [19c Client] sqlplus version: sqlplus -v echo [19c Client] test connection to PACS: echo exit | sqlplus -L system/your_passwordPACS这个脚本先切到 11g 客户端打印版本然后用-L参数尝试登录一次-L表示只尝试一次不重试。echo exit |是为了登录成功后立即退出避免卡在 SQL 提示符。然后切到 19c 客户端重复。如果 11g 能连、19c 报ORA-28040就按第 4 章的方案改sqlnet.ora。如果两个都连不上检查tnsnames.ora和监听器。验证通过后把常用的客户端路径加到系统PATH里但只加一个避免版本冲突。PLSQL 里配的OCI library要和PATH里的客户端版本一致。我习惯把 11g 客户端作为默认因为 PACS 厂商的工具有时只认 11g 的 OCI。从那以后我每次部署 Oracle不管多急都会先把sqlnet.ora的认证版本参数、tnsnames.ora的路径、以及 NIC 聚合模式这三项检查一遍再开始装库。这三处任何一个出问题后期排查的时间都够重装两遍。希望帮到你。本文还有配套的精品资源点击获取