ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows下Oracle 11g R2 Grid Infrastructure安装全解析与避坑指南

Windows下Oracle 11g R2 Grid Infrastructure安装全解析与避坑指南 简介win64_11gR2_grid.zip 是 Oracle 11g R2 网格基础架构在 Windows 64 位环境下的完整安装介质包专门面向需要部署数据库集群的数据库管理员、运维工程师以及系统学习 Oracle 高可用技术的读者。压缩包内共含 1495 个文件总大小约 682MB文件构成以 Java 归档组件1047 个、网页帮助文档191 个、图标资源88 个和动态链接库67 个为主同时还包含安装引导程序、可扩展标记语言配置、语言资源包以及批处理脚本等可以支撑在 Windows Server 平台上的集群软件与自动存储管理ASM的完整安装与配置。资源包内携带安装向导、响应文件模板和集群验证工具便于读者按照官方推荐流程完成集群注册表与表决磁盘的设置、ASM 磁盘组的创建、网络监听器配置并结合附带文档深入理解高可用环境的设计与部署要点。目前已有 373 人学习关注适合需要系统掌握 Oracle 11g R2 网格基础架构安装、配置、验证与故障排查的进阶读者。1. 拿到 win64_11gR2_grid.zip 之后先想清楚它装的是什么Oracle 11g R2 Grid Infrastructure 不是什么数据库双机热备软件它是 Oracle 数据库集群的地基。解压后的 win64_11gR2_grid.zip 里装的是 Clusterware 和 ASM 两套东西——Clusterware 管节点心跳、资源切换和服务可用性ASM 管磁盘空间和文件分布。很多人把这包当成数据库安装包双击 setup.exe 一路下一步最后发现装出来的是一堆集群进程数据库实例还得单独装。这篇笔记就把整个安装路径捋一遍准备环境、响应文件、集群配置、OCR 与 Voting Disk、ASM 磁盘组、验证方法以及 Windows 专属的坑。适合正在给 Windows Server 部署 Oracle RAC 的 DBA 和系统工程师也适合第一次摸 Grid Infrastructure、想少走弯路的人。2. 安装前的地基硬件检查与依赖组件一件不能少2.1 硬件与操作系统要求不达标的服务器先别开工Oracle 11g R2 Grid Infrastructure 在 Windows 64 位环境下对硬件的要求不是写了就能跑而是少了就装不上。常见做法是先打开解压目录里的 doc 文档核对版本兼容矩阵再把服务器的 CPU、内存、磁盘、交换分区逐项过一遍。检查项最低要求生产环境建议操作系统Windows Server 2008 R2 及以上Windows Server 2012 R2 / 2016CPU2 核以上4 核以上注意超线程不影响 Oracle 校验内存4 GB8 GB 起步节点越多内存越要留余量交换文件系统自动管理即可固定大小设为物理内存的 1.5 倍临时空间C 盘 8 GB 以上安装目录所在盘留 30 GB另备 10 GB 给 ORACLE_HOME静态 IP每节点至少一个固定 IP公网/私网各一个禁用 DHCP我见过一台内存 4 GB 的 Windows Server 2008 硬跑 Grid Infrastructure安装界面过了crs_stat -t 里 oc4j 资源反复由 ONLINE 掉成 OFFLINE。后来把内存加到 8 GB问题就消失了。Oracle 的检查脚本只保证安装能走完不保证集群跑得稳。操作系统版本这一项特别容易翻车。Windows 11 和 Windows Server 2022 不在 11gR2 官方支持列表里虽然能通过一些兼容方式强制安装但 crsctl 命令的行为和 2008 R2 时期的表现有明显差异尤其是权限校验部分。如果手头机器版本过新建议用虚拟机装一个 Server 2012 R2 专门跑这个包省下的排查时间远超装系统的时间。2.2 装完依赖再谈安装.NET Framework 与 Visual C 运行库Oracle 的 OUI 在 Windows 上依赖两个基础组件.NET Framework 和 Visual C Redistributable。前者用于安装向导的界面渲染后者用于集群底层本地库的加载。缺一个setup.exe 的进度条可能在某个阶段卡住然后毫无征兆地回滚。检查方法是打开「控制面板 → 程序和功能」确认系统里已有 .NET Framework 3.5 SP1 或 4.x以及 Visual C 2008/2010/2013 对应的 vc redist x64 版本。老系统最容易缺的是 .NET 3.5——Windows Server 2008 R2 默认装的是 2.03.5 需要从「启用或关闭 Windows 功能」里单独勾选或者用 dism 命令安装dism /online /enable-feature /featurename:NetFX3 /source:D:\sources\sxs /limitaccess这条命令的作用是从 Windows 安装介质加载 .NET 3.5 功能文件/source 参数指向安装 ISO 里的 sources\sxs 目录/limitaccess 禁止从 Windows Update 拉包适合内网环境。装完后用下面的方式确认Get-WindowsOptionalFeature -Online -FeatureName NetFX3 | Select StateState 返回 Enabled 就说明就绪。Visual C 运行库则直接去微软官网下载对应的 x64 版本安装装完重启一次再开始 Grid 安装。这里强调一下Oracle 的安装前检查会检测一些依赖但不会检测这两个硬件项以外的 Windows 组件缺了它照样把界面给你弹出来等跑到 45% 左右才炸。2.3 用 runcluvfy.bat 做预检把环境问题暴露在安装前Grid 安装包根目录带了一个 runcluvfy.bat这是 Oracle 官方的集群环境校验脚本作用是提前把节点互信、网络接口、域名解析、内存参数、共享盘状态一类的问题扫出来而不是等 setup.exe 跑到一半才报错。单节点环境下最简单的校验命令是这样runcluvfy.bat stage -pre crsinst -n localhost -fixup -verbose-n 参数填本机主机名-fixup 表示让脚本尝试自动修复部分可修复项-verbose 输出详细日志。脚本执行完会给出每一检查项的 PASS/FAIL/ERROR 状态。我一般重点看三个地方网络接口是否绑定静态 IP脚本会检测网卡的 IP 地址是否由 DHCP 分配时间同步是否由 Windows Time 服务管理Oracle 要求集群内节点时间差不超过 1 秒物理内存和交换分区是否满足 11.2.0.1 的阈值runcluvfy.bat 输出的 FAIL 不一定都会阻止安装但提交给生产环境之前要把所有 FAIL 项处理干净。比如它常报「Check for DNS response timeout」——如果 DNS 解析超过 5 秒脚本就标 FAIL。解决办法是把节点自身的 hostname 映射写进 C:\Windows\System32\drivers\etc\hosts让主机名不经 DNS 也能解析回本机 IP。这个动作在所有 Windows 节点上都要做否则后续集群配置阶段节点间的公网通信会超时。3. 走通安装主流程从解压 zip 到集群资源全部上线3.1 解压与响应文件准备setup.exe 的静默安装解压 win64_11gR2_grid.zip 安装包得到的目录结构里有 setup.exe、runcluvfy.bat、exectask.bat、access_setup.bat 一类文件还有个 doc 子目录放官方文档。需要强调的是安装文件所在路径不要带中文和空格Oracle 的 OUI 碰到非 ASCII 字符有时会直接报错而且报错的提示非常笼统。图形界面安装虽然直观但重复部署多个节点时效率太低。响应文件方式更适合生产批量部署。安装包内有一个模板文件它定义了整个安装过程中会出现的所有配置项。我一般会通过响应文件把集群名称、节点列表、OCR 磁盘组、ASM 密码这些参数一次性写死再执行静默安装。一个简化后的响应文件核心片段如下oracle.install.responseFileVersion/oracle/install/rspfmt_crsinstall_response_schema_v11_2_0 CLUSTER_NODES{node1,node2} CLUSTER_NAMEGYCluster ORACLE_HOSTNAMEnode1 ORACLE_BASED:\app\oracle ORACLE_HOMED:\app\oracle\product\11.2.0\grid SCAN_NAMEgy-cluster-scan SCAN_PORT1521 oracle.install.crs.config.clusterNameGYCluster oracle.install.crs.config.rac.installTypeCRS_CONFIG oracle.install.crs.config.gpnp.configureGNSfalse oracle.install.crs.config.storageOptionFLEX_ASM_STORAGE oracle.install.asm.adminPasswordAsmPassw0rd oracle.install.asm.diskGroup.nameDATA oracle.install.asm.diskGroup.redundancyEXTERNAL oracle.install.asm.diskGroup.disks/dev/sdb,/dev/sdc这段文件最重要的是几个物理路径ORACLE_HOME 指向 Grid Infrastructure 本体安装位置CLUSTER_NODES 用花括号把所有节点列出来oracle.install.asm.diskGroup.redundancy 定义冗余级别。SCAN_NAME 是 11gR2 引入的集群扫描域名客户端第一次连数据库时只接触这一个名字它把连接请求分流到集群内的各个实例。如果网络环境不支持 DNS 解析 SCAN可以跳过 SCAN 配置直接用节点 IP 连接。执行静默安装的命令是setup.exe -silent -responseFile D:\grid_setup.rsp -nowait-silent 表示全程无界面-responseFile 指定响应文件路径-nowait 让命令执行完后直接返回而不弹出安装日志窗口。安装日志写入 %TEMP% 目录下的 oraInstall 子目录文件名以 installActions 开头。发现响应文件某个参数值不合法时OUI 会提前退出并把具体的报错原因写进日志比如「Value for oracle.install.asm.diskGroup.disks is not a valid file」这一类这时候去日志里定位比看弹窗快得多。3.2 创建集群与节点信息选择集群类型并确认节点角色响应文件方式跑完安装向导的软件装载阶段后下一步是进入「创建和配置新集群」环节。选择集群类型这一步11.2.0.1 提供的是标准集群配置——所有节点地位对等每个节点都运行 Clusterware 服务并能够接管资源。12c 才引入 Flex Cluster 的节点分区概念所以这版不需要考虑 Hub 节点和 Leaf 节点的划分。节点信息配置处要确认两件事节点名与其实际主机名完全一致不能带域名后缀否则运行 crsctl 检查时会出现资源归属混乱私网网卡Interconnect选择的网段不能和公网网卡重叠否则节点间心跳通信会走到公网造成脑裂判定异常我接触的生产库上私网往往走独立的万兆网卡只承载 Cache Fusion 流量。11gR2 安装过程中 OUI 会要求把每块网卡的用途指定为「Public」「Private」或「Do Not Use」。这里最常见的低级错误是服务器有两块网卡但都接了同一交换机结果私网和公网处于同一广播域集群心跳会频繁出现 timeout。指定完网卡用途后安装进程会在节点间做 ping 测试和远程命令测试也就是通过远程执行命令在各节点启动 agent 进程。测试失败的原因大致有三类Windows 防火墙阻挡了 Oracle 的进程间通信端口、远程注册表服务未启动、节点间使用的账户权限不一致。3.3 OCR 与 Voting Disk 存储选择 ASM 而不是裸设备Oracle Clusterware 在工作过程中要持久化两类状态文件OCR 保存集群内所有资源的定义和配置信息比如监听器、ASM 实例、服务名这些资源分别跑在哪个节点Voting Disk 用于脑裂仲裁节点间心跳中断时大家投票决定谁能继续持有资源。11gR2 允许把这两类文件放在共享磁盘上存储方式有两种裸设备分区或 ASM 磁盘组。新装系统时我强烈建议直接选 ASM理由很实际——裸设备分区划分和管理太依赖操作系统的磁盘分区工具Windows 上扩展裸设备分区要重新分区再改权限ASM 这边只需要往磁盘组里添加一块新磁盘Oracle 自动完成 rebalance。在 OUI 的「Specify Oracle Cluster Registry (OCR) Location」页面把「Use Oracle Automatic Storage Management」勾上然后指定 OCR 和 Voting Disk 使用的磁盘组名称。11.2.0.1 要求 OCR 与 Voting Disk 不能放在同一个磁盘组里所以至少建立两个磁盘组一个是专门的投票磁盘组另一个给 OCR 与数据用。磁盘组可以由同一组物理磁盘划分但逻辑上必须分离。Voting Disk 的数量有说法奇数个至少 3 个。原因在脑裂仲裁机制集群三个投票盘两个节点分区后各自只能看到一部分盘拿到多数票的一方才能继续服务。少于 3 个时一个盘的故障就可能导致整个集群无法仲裁。生产环境中我把 Voting Disk 的数量配成 3 或 5放在独立的磁盘组里和 OCR 物理隔离保险起见。3.4 ASM 实例与磁盘组冗余级别和 AU 大小怎么给Grid Infrastructure 的 ASM 组件在安装完成后会自动启动一个 ASM 实例这个实例不承载用户数据专门管理磁盘组。集群中所有节点共享同一个 ASM 实例的元数据任意节点发起磁盘组挂载操作其他节点的 ASM 实例都能感知到变化。磁盘组创建时的关键参数有三个冗余级别、AU 大小和磁盘发现路径。冗余级别最常用的是 EXTERNAL 和 NORMAL冗余级别数据镜像容错能力适用场景EXTERNAL无镜像一块盘损坏即丢失数据底层有 SAN 存储 RAID 保护时NORMAL每份数据写两处可坏一组磁盘无 RAID 或存储可靠性要求高HIGH每份数据写三处可坏两组磁盘关键业务成本允许如果底层存储是 SAN 上的 RAID10 或 RAID5选 EXTERNAL 就够了镜像由存储层负责ASM 层不做冗余节省一半空间。如果数据库文件直接放在本地磁盘选 NORMAL——它会自动把数据的副本分布到不同物理盘上比如 4 块盘建一个 NORMAL 冗余的磁盘组可用空间是总容量的一半。AUAllocation Unit大小决定 ASM 分配空间的最小粒度11gR2 默认 1 MB对 OLTP 型数据库够用。如果数据库要承载大文件表空间或数据仓库类的顺序扫描把 AU 设成 4 MB 会减少元数据开销。AU 大小在磁盘组创建后不可修改所以创建前就要想清楚。磁盘发现路径在 Windows 上是一个过滤器字符串它告诉 ASM 实例去哪些磁盘设备上找候选盘CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK \\?\PhysicalDrive2 NAME DATA1, \\?\PhysicalDrive3 NAME DATA2 ATTRIBUTE au_size4M;这条 SQL 建了一个名为 DATA 的外部冗余磁盘组把系统里两块物理盘以名字 DATA1、DATA2 的方式纳入其中AU 大小设为 4 MB。\?\PhysicalDrive2 是 Windows 上 PhysicalDrive 编号的固定格式编号可以在磁盘管理里核对选错盘会直接清空盘上数据。属性参数里如果同时写了 compatible.rdbms 会限制数据库版本对磁盘组的兼容性11gR2 环境没必要设。4. Windows 上的 Grid 安装避坑与常见问题排查4.1 现象runcluvfy.bat 报网络接口不可用一台新装好的 Windows Server节点直连交换机IP 已配好运行 runcluvfy.bat 时脚本输出 NETWORK Interface 状态为 FAIL并在日志里标注「Interface is down or not properly configured」。检查网卡属性IP 地址和掩码都正常ping 网关也通。原因出在 Windows 的网卡电源管理策略上。默认情况下系统允许网卡在空闲时进入节能状态Oracle 校验脚本检测到驱动报告的接口状态不是「Up」就直接判 FAIL。解决方法是在网卡属性 → 配置 → 电源管理里取消「允许计算机关闭此设备以节约电源」的勾选。这一步做完了再跑一遍 runcluvfy.bat网络接口检查项就会变绿。顺带把同一台机器上所有网卡都改一遍因为安装过程中节点间的通信是全时段进行的任何空闲降速都可能引发集群心跳超时。4.2 现象集群资源起不来且没有 ORA- 错误码setup.exe 装完 Grid Infrastructurecrs_stat -t 显示大多数资源正常但 ora.LISTENER.lsnr 始终在 UNKNOWN 和 OFFLINE 状态来回切。查看日志路径 D:\app\oracle\diag\crs\节点名\crs\trace\alert.log只有一句「Listener failed to start」级别的描述没有具体的端口或地址冲突信息。这种没有明确错误码的情况在 Windows 上十有八九是监听器的配置和防火墙互相打架。Windows 防火墙默认拒绝未放行的入站连接Oracle 在安装阶段会尝试自动添加防火墙规则如果安装时用的是精简模式或系统策略禁止自动放行监听器进程起来后绑定端口就会失败。解决分两步先用 netstat -ano 确认 1521 端口没有被其他进程占用再检查防火墙入站规则里有没有名为 OracleOraDb11g_home1TNSListener 的放行规则。没有就手动新增一条netsh advfirewall firewall add rule nameOracle TNS Listener dirin actionallow protocolTCP localport1521这条命令只放行 TCP 1521 端口的入站连接监听器在这个端口上接受客户端的连接请求。执行完重启一下集群监听器资源状态就能稳定下来。4.3 现象安装界面卡在 45% 然后回滚OUI 执行到 45% 附近进度条长时间不动然后整体回滚日志中能找到「Error in invoking target install of makefile」字样。这类报错看起来像编译出了问题实际上多数和磁盘空间或临时目录权限有关。11gR2 的安装程序会把中间文件写到临时目录如果临时目录所在盘剩余空间不足或者 Oracle 用户对临时目录没有写权限make 过程就会失败。解决是先清理系统盘无用文件然后把 ORACLE_BASE 目录和临时目录改用专门的 NTFS 分区并给安装账户赋予完全控制权限。检查临时目录剩余空间用Get-PSDrive C | Select Used, FreeFree 字段如果小于 10 GB就得清理或换盘。这个阶段还要注意杀毒软件部分企业版安全软件会锁定正在写入的 exe 文件导致文件句柄占用而回滚。我习惯在安装窗口期内临时禁用实时防护装完再打开。4.4 现象ASM 磁盘组挂载后空间显示不对磁盘组创建成功通过 ASMCMD 查看空间时发现可用空间只有预期的一半。比如两块 1 TB 物理盘建了 NORMAL 冗余的磁盘组显示可用空间约 932 GB符合 NORMAL 冗余减半的规则。如果实际显示只有容量的四分之一需要检查磁盘组创建时的候选盘是不是选多了——NORMAL 冗余下每块盘只会保存一份数据镜像但单个候选盘的容量会被计入两次配额选盘时误把同一块盘的不同分区当成了两块独立盘空间计算就会出错。排查方式是用 ASMCMD 查看候选盘的物理信息asmcmd lsdsk -k -p DATA输出结果里 Total_MB 和 Free_MB 会标出每块盘的容量和状态。如果出现两条记录的 Header_Status 都是 MEMBER 但 Disk_Repair_Time 相同的情况很可能就是同一块盘被重复发现。解决的方法是先把磁盘组卸载清理 Windows 磁盘签名和分区表残留再用 diskpart 清盘后重新加入。Disk 0 和 Disk 1 在同一个物理磁盘上被分成了两个卷的情况在 Windows 上尤其常见因为系统会自动给卷分配不同的 PhysicalDrive 编号。5. 验证与收尾crs_stat -t 之外别忘了监听器5.1 crs_start 与 crs_stat -t看资源状态比看日志快安装完成后浏览器打开 EM 界面能看集群概览但命令行才是核对资源状态的快速通道。启动集群服务的标准动作是crsctl start has crs_start --all第一条命令启动本机的高可用服务进程第二条启动所有注册到 Clusterware 的资源。Windows 上如果 crsctl 提示命令不存在需要先执行 c:\app\oracle\product\11.2.0\grid\bin 下的环境脚本把 PATH 加载进去。资源全部上线后用下面这条查看状态crs_stat -t输出的表格里每一行代表一个资源。Type 列为 ora....typeTarget 列显示 ONLINEState 列显示 ONLINE 的资源是正常状态。State 列出现 OFFLINE 或 UNKNOWN 时用 crsctl stat res 资源名 -t 查看详细状态再翻日志。我自己的习惯是从 crs_stat -t 输出里先盯三类资源ora.gsd 类、ora.ons 类和 ora.LISTENER 类。这三个起不来后面安装数据库实例时大概率会报「无法连接到集群」类错误。每次装完 Grid我都会把 crs_stat -t 的完整输出存一份到文本文件里后面排查问题时能做前后对比——这个习惯帮我在很多次集群故障里快速定位到是哪一份资源状态发生了漂移。5.2 listener.ora 与 tnsnames.ora让数据库能被网络访问Grid Infrastructure 装好之后监听器和命名服务并不会自动指向数据库实例。数据库装的还是单实例的话要先在 Grid 环境下跑 netca 向导配置监听器。监听器的核心参数文件是 listener.ora位于 ORACLE_HOME\network\admin 下。最常见的是如下结构LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST node1)(PORT 1521)) ) )这个配置的含义是监听器名为 LISTENER监听地址为 node1 的 1521 端口。HOST 参数必须能解析到本机实际 IP写成 localhost 虽然也能启动但远程客户端连接时解析会出歧义。客户端的连接配置则在 tnsnames.ora 里定义服务名ORCL (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST gy-cluster-scan)(PORT 1521)) ) (CONNECT_DATA (SERVICE_NAME orcl) ) )服务名 orcl 要和数据库实例的 service_names 参数一致否则 tnsping 通过但连接报 ORA-12514。第一次配置网络文件我建议先在一台客户端机器上跑通从 tnsnames 到数据库的完整链路再批量复制到其他机器。这个验证动作不能省——Windows 下数据库实例的 hostname 解析方式和 DNS 缓存行为在 Linux 上有明显差异出错时连报错文案都对不上。那以后我每次给 Windows 环境部署 Grid都会强制走一遍上述全流程先跑 runcluvfy.bat 预检再确认防火墙和电源管理静默装完立刻做资源快照最后验证监听器和 tnsnames。这套流程看起来繁琐但它能提前拦截掉八成以上的部署期翻车点。希望帮到你。本文还有配套的精品资源点击获取
返回列表