
简介面向Windows平台运维与数据库管理人员这份文档完整讲解RoseHA高可用集群与Oracle 11g的集成部署方案。内容从RoseHA双节点拓扑结构出发详细列出操作系统补丁更新、心跳链路、多网卡角色划分、静态IP规划、磁盘阵列RAID等环境准备项随后梳理Oracle 11g的安装流程涵盖图形化与命令行安装方式、网格基础设施选项、版本选择、存储规划、监听配置及双节点实例创建。此外文档还给出RoseHA安装与Oracle服务配置的具体操作以及故障切换时的心跳检测与资源接管逻辑。资源打包为1个docx文件大小约1.84MB纯文档形式便于直接阅读和检索目前已有240人学习。对于正在实施Oracle双机热备、需要快速上手RoseHA的运维工程师而言这份文档既有步骤化指导也兼具规划思路参考价值且结构清晰便于按需查阅。1. 双机热备不是 RACRoseHA 接管的是整个 Oracle 实例很多从 RAC 转向第三方高可用方案的人第一个不习惯是“数据库只能有一个实例对外服务”。RoseHA 在 Windows Server 2008 R2 与 Oracle 11.2.0.4 的组合里思路是把 Oracle 安装在两台相同主机上数据文件放到双方都能看到的共享磁盘由 RoseHA 决定哪个节点联机共享盘、哪个节点启动服务。好处是 License 和管理成本远低于 RAC坏处是部署纪律非常强共享盘同一时刻只能被一个节点挂载否则文件系统会损坏。这套部署流程的关键不在安装向导本身而在共享存储的轮转、服务启动方式的收敛、资源组依赖顺序以及最后的故障注入验证。2. 共享存储与双心跳设计先定网络和磁盘再碰 Oracle2.1 拓扑两台主机、两组心跳、一个磁盘阵列RoseHA 集群中oradb1 与 oradb2 都是完整可独立运行的数据库服务器各自拥有本地系统盘和本地程序盘。磁盘阵列提供两类磁盘一块 2~10GB 的仲裁盘用于集群决策一块容量按数据库增长规划的 NTFS 共享数据盘。两台主机之间至少需要两条直连心跳线常见做法是两块物理网卡用交叉线直连不经过交换机。为什么必须是两条一条心跳线断掉时无法区分是链路故障、对端网卡故障还是对端主机宕机只有一条心跳时备用节点不敢轻易接管两条心跳同时中断才允许备用节点通过仲裁盘启动接管流程。生产环境里见过不少把心跳网卡接到交换机上的配置这本身没问题但一定不能让心跳流量和业务流量混在同一网段否则 Windows 的路由表会混乱。心跳网卡最好关闭 DNS 注册和 NetBIOS只保留 TCP/IP 协议。两组心跳地址分别规划在不同网段比如 10.10.10.0/24 和 11.11.11.0/24这样可以避免单一链路故障导致的误判。2.2 IP 规划要避免多网卡同网段一台服务器上有三块网卡规划时最容易犯的错是把心跳地址和业务地址放在同一网段。RoseHA 对心跳地址的识别依靠网卡 IP 和端口一旦同网段它可能把业务流量当成心跳流量故障切换时会出现资源抢占。参考下面的规划表。服务器网卡用途IP 地址子网掩码网关oradb1Public192.168.13.2/24255.255.255.0按业务环境填写oradb1Heartbeat110.10.10.10/24255.255.255.0不设置oradb1Heartbeat211.11.11.10/24255.255.255.0不设置oradb2Public192.168.13.3/24255.255.255.0按业务环境填写oradb2Heartbeat110.10.10.11/24255.255.255.0不设置oradb2Heartbeat211.11.11.11/24255.255.255.0不设置集群应用 IPVIP192.168.13.20/24255.255.255.0按业务环境填写两个节点的主机名必须不同且都加入同一个域文档里是 jxcc-intl.local。域环境带来的好处是 RoseHA 在验证节点身份时不用依赖本地账号坏处是域策略可能禁用某些端口后面会提到放行清单。应用 IP 也就是 VIP不静态绑定在任何一张网卡上由 RoseHA 在切换时动态绑定到当前主节点的 Public 网卡。2.3 防火墙与安全软件放行清单两台主机上运行 Windows 防火墙同时往往还有赛门铁克等杀毒软件。这些安全组件会拦截 RoseHA 的心跳和仲裁通信表现为主机明明在线GUI 里却看到对方离线或者长时间不切换。需要放行的端口如下。通信方向协议端口用途集群节点间TCP9527, 7535RoseHA 管理通道集群节点间UDP9528, 7534RoseHA 状态同步心跳链路UDP3000, 3001心跳探测客户端到数据库TCP1521Oracle 监听配置完成后用 ping 确认三张网卡的直连通路再用 telnet 验证端口是否可达。特别是心跳网卡如果 ping 通但端口不通说明防火墙规则没有覆盖到对应网卡区域。Windows Server 2008 R2 的防火墙按配置文件区分域、专用、公用心跳网卡如果被识别为“公用网络”前面配置的放行规则很可能不生效。2.4 仲裁盘与共享数据盘的初始化纪律仲裁盘必须是裸磁盘不创建分区、不格式化RoseHA 会在上面写入集群状态信息。共享数据盘需要分区成 NTFS并且两台主机看到的盘符必须一致通常固定为 E:。关键操作顺序先在 oradb1 上联机共享盘分区格式化分配 E:完成后将共享盘脱机再在 oradb2 上联机并分配 E:。严禁两个节点同时联机。下面是在 oradb1 第一次初始化共享盘时的 diskpart 操作。diskpart list disk select disk N online disk clean create partition primary format fsntfs quick assign letterE offline disk exitlist disk 用于确认磁盘编号重点看大小和总线类型避免把本地盘当成共享盘误清。clean 会删除磁盘上的所有分区和数据所以这条命令只在 oradb1 第一次初始化时执行。format 使用 NTFS分配盘符 E: 后立即 offline防止 oradb1 还挂着共享盘时 oradb2 也尝试联机。之后在 oradb2 上只需要执行select disk N、online disk、assign letterE绝对不能执行 clean否则 oradb1 建好的数据文件会被清掉。2.5 安装 Oracle 前就把服务启动方式改为手动双机环境中本机开机时共享盘往往不在线。如果 Oracle 服务是自动启动开机后数据库无法打开还会在 alert 日志里刷一堆错误。RoseHA 的资源组机制会在切换时按照依赖顺序先带卷再启动数据库服务所以 Oracle 相关服务不需要也不应该随操作系统自动启动。安装完成后执行下面的命令。sc config OracleServiceORAHA start demand sc config OracleOraDb11g_home1TNSListener start demandstart demand 表示手动启动。如果服务名有差异先用sc query | findstr Oracle把所有 Oracle 相关服务列出来再逐项修改。注意等号后面必须加一个空格否则 Windows 会拒绝执行。这一步在两个节点上都要做并且要放在共享盘脱机之前完成确保后续联机、脱机时不会触发数据库自动启动。3. Oracle 11g 双节点安装软件装本地数据放共享盘3.1 总体顺序与“先装先脱机”原则Oracle 软件全部安装到本地磁盘数据文件、控制文件、联机日志、归档日志全部放到共享盘。这样的好处是切换时备用节点只需要拉起本地软件进程数据文件路径完全一致。安装顺序必须按“节点 1 装完脱机节点 2 再联机安装”的节奏来不能两台同时操作共享盘。步骤操作节点操作内容共享盘状态1oradb1安装 Oracle 软件配置监听oradb1 联机2oradb1创建数据库实例 oraha改为手动启动oradb1 联机3oradb1停止数据库脱机共享盘双节点脱机4oradb2联机共享盘安装 Oracle 软件配置监听oradb2 联机5oradb2创建数据库实例 oraha覆盖安装改为手动启动oradb2 联机6oradb2停止数据库脱机共享盘双节点脱机7oradb1再次联机验证数据库正常启停oradb1 联机这里的核心逻辑是oradb1 先把共享盘上的数据库目录结构准备好oradb2 联机后用相同的实例名和路径覆盖安装最终两套软件环境指向同一套数据文件。oradb2 的 DBCA 在创建实例时会提示目标目录已存在选择覆盖即可不会破坏 oradb1 写入的数据。3.2 安装软件阶段的关键选项运行 Oracle 11g 安装程序 setup.exe安装选项选择“仅安装数据库软件”。不要选择“安装数据库并创建实例”因为实例创建要由我们控制在正确节点和正确时机。网格安装选项选择“单实例数据库安装”RAC 才需要选择 Oracle Grid Infrastructure。安装版本选择企业版软件位置建议放到本地磁盘比如 D:\app\oracle。整个安装过程两台主机分别执行互不依赖。数据库软件安装完成后用 netca 配置监听。netcanetca 是一个交互式命令一路确认创建默认监听 LISTENER端口 1521协议选择 TCP。监听配置完成后两台主机的 listener.ora 内容应当完全一致。如果业务环境有安全要求可以限制监听只绑定 Public 网卡但为了 HA 切换后的可达性通常绑定 all 更省事。配置完成后用lsnrctl status检查监听状态确认 LISTENER 处于 READY。3.3 节点 1 创建实例控制文件、redo 与归档全部上共享盘oradb1 联机共享盘 E: 后启动 DBCA。数据库实例名设置为 oraha数据文件目录选择 E:\oradata。这一步最容易被忽略的是控制文件位置。单实例 DBCA 默认把控制文件放在数据文件目录下也就是 E:\oradata\ORAHA\这没问题但如果你手工调整过初始化参数一定要用下面的 SQL 确认。sqlplus / as sysdba startup; show parameter control_files; show parameter db_recovery_file_dest; shutdown immediate;字符集要显式选择 UTF8不要沿用数据库默认字符集否则两节点字符集不一致切换后中文数据可能出现乱码。启用归档时把归档路径明确指定到 E:\oradata\archive不要依赖快速恢复区。快速恢复区默认在本地磁盘切换后 oradb2 找不到 oradb1 写入的归档日志恢复会失败。创建完成后在 oradb1 上测试数据库能正常启停然后执行 shutdown immediate将 Oracle 服务改为手动最后在 diskpart 中把共享盘 offline。3.4 节点 2 联机共享盘并覆盖安装oradb2 联机共享盘 E: 后运行 DBCA。实例名仍然使用 oraha数据文件目录 E:\oradata。DBCA 扫描到目录已存在并弹出覆盖确认时选择“是”。这一步是在同一套数据文件上补齐 oradb2 的本地实例配置覆盖不会删除已有数据文件。完成后同样进行启动测试确认数据库能正常 open然后 shutdown immediate修改服务为手动脱机共享盘。如果担心覆盖安装过程误操作破坏数据可以先把 E:\oradata 临时改名为 E:\oradata_bakDBCA 创建好新目录后删除并改回。但这个操作必须在 oradb1 脱机状态下完成否则两台主机同时访问共享盘会把文件系统弄坏。3.5 验证两节点数据文件路径一致最后回到 oradb1联机共享盘启动实例执行以下检查。show parameter control_files; show parameter log_archive_dest_1; show parameter db_recovery_file_dest;如果 control_files 里有任何一个路径指向本地磁盘例如 C:\app\oracle\oradata\control01.ctl必须修正。使用 ALTER SYSTEM 把控制文件参数指到 E: 盘。alter system set control_filesE:\oradata\ORAHA\control01.ctl,E:\oradata\ORAHA\control02.ctl scopespfile;注意两个节点的 spfile 各自保存在本地磁盘oradb1 改完还要在 oradb2 上执行同样的修改。归档路径同样需要两边都设置推荐写进 spfile确保实例每次启动都生效。4. RoseHA 安装与 Oracle 资源组配置4.1 安装组件每一节点都装完整RoseHA 使用 RoseHA.msi 标准安装包两个节点都要安装。安装组件时Cluster Engine 是服务端主服务必须安装Cluster Manager 是图形化管理工具Cluster Command Line Interface 是命令行管理工具建议一起装。生产环境很难保证 GUI 随时可用命令行工具在排错时非常有用。安装完成后按提示录入序列号重启系统。重启后检查 Windows 服务里是否出现了 RoseHA 相关服务。如果服务没有自动启动手动启动后使用下面的命令确认运行状态。sc queryex RoseHA如果服务名不是 RoseHA以服务管理器里显示的名称为准。常见问题包括安全软件阻止服务注册、.NET Framework 组件不完整导致 GUI 无法启动这些问题在安装日志里都能看到具体报错。4.2 创建群集的参数与心跳配对运行 RoseHA GUI选择“系统 → 创建群集”。首次打开控制中心会弹出连接群集向导直接点击创建群集进入配置。需要填写群集名称、两台服务器的主机名、序列号以及心跳地址。配置项推荐值说明群集名称rose_cluster不要与主机名重复节点 1 主机名oradb1与系统主机名一致节点 2 主机名oradb2与系统主机名一致心跳地址 110.10.10.10 / 10.10.10.11对应 Heartbeat1心跳地址 211.11.11.10 / 11.11.11.11对应 Heartbeat2集群应用 IP192.168.13.20用于对外提供服务心跳地址填错是创建群集失败最常见的原因。GUI 会校验两组心跳地址是否互通如果填成了 Public 地址或交换机网段校验会超时。心跳地址之间不需要也不应该配置网关直连链路本来就不依赖三层路由。4.3 高可用配置向导中的资源依赖创建群集后下一步是高可用配置向导。应用类型选择 Oracle 数据库如果当前版本没有明确的 Oracle 选项也可以选择“NT 服务资源 脚本探测”的方式由脚本检查本地 Oracle 服务进程和监听端口。资源组内按顺序添加以下资源。资源类型配置内容依赖关系仲裁资源指向磁盘阵列中的裸盘无最先启动卷资源共享数据盘 E:依赖仲裁资源IP 资源集群应用 IP 192.168.13.20依赖卷资源NT 服务资源OracleServiceORAHAOracleOraDb11g_home1TNSListener依赖卷资源和 IP 资源依赖顺序决定了资源组带入时的动作先把仲裁盘状态确认好然后把共享盘联机再把 VIP 绑定到当前节点网卡最后启动 Oracle 服务和监听。带出资源组时顺序相反先停服务、解绑 VIP再脱机共享盘。资源组只有在完整执行完所有步骤后才算接管成功。4.4 资源组超时参数与切换边界配置资源组时不要只关注资源本身还要关注超时时间和探测间隔。启动超时建议给 60 到 90 秒数据库实例恢复可能需要重放 redo停止超时给 90 秒确保 shutdown immediate 有足够时间完成检查点。心跳探测间隔默认值比较短但在 Windows 高负载下可能造成误判我一般会结合系统性能设置成 3 到 5 秒连续丢失三次心跳才触发切换。查看当前节点 Oracle 服务状态可以用下面的命令确认它们没有被操作系统自动拉起。sc queryex OracleServiceORAHA sc queryex OracleOraDb11g_home1TNSListener输出中的 STATE 值应该是 STOPPED。如果显示 RUNNING说明服务被手动启动过会影响 RoseHA 对资源组的状态判断需要先停止服务再让资源组接管。5. 故障注入与切换验证的实操技巧5.1 客户端验证前置条件切换测试前先在客户端确认 TNS 连接串指向 VIP 而不是某个节点 IP。命令行测试是最直接的方式。sqlplus system/password192.168.13.20:1521/oraha能正常登录说明 VIP、监听和实例都在工作。如果这一步失败先不要做故障切换定位问题来源VIP 是否已经绑定到 oradb1监听是否启动数据库是否 open5.2 故障注入测试矩阵测试项操作预期结果手动切换GUI 中选择“切换资源组”资源组转移到 oradb2VIP 漂移客户端重连成功关机测试直接关闭 oradb1 电源oradb2 在心跳超时后接管数据库完成实例恢复拔心跳线只拔一条心跳线不切换RoseHA 仅记录链路告警拔心跳线两条心跳线同时拔掉触发仲裁切换oradb2 接管杀进程任务管理器结束 oracle.exeRoseHA 探测到进程异常后切换资源组杀进程测试要小心结束的是 oracle.exe 的数据库进程不是 RoseHA 服务。如果误杀 RoseHA 的 Cluster Engine 进程整个集群可能同时失去两个节点这种测试没有意义。关机测试最能验证共享存储和仲裁逻辑但也最容易暴露共享盘文件系统损坏的风险测试前必须备份数据。5.3 查看日志定位切换失败切换失败时先看 RoseHA 日志安装目录下的 log 子目录通常保留全部运行日志。用 PowerShell 动态跟踪输出。Get-Content C:\Program Files\RoseHA\log\RoseHA*.log -Wait -Tail 100同时查看 Windows 事件日志。Get-WinEvent -LogName System -MaxEvents 50 | Where-Object { $_.ProviderName -match RoseHA }常见失败点集中在卷资源起不来、Oracle 服务启动超时、VIP 绑定失败。日志里如果出现磁盘脱机错误检查共享盘是否被其他节点占用如果出现超时检查数据库 alert 日志看实例恢复是否卡在 redo 应用阶段。5.4 验证接管后的实例状态oradb2 接管完成后在 oradb2 上执行下面的 SQL确认实例确实处于 OPEN 状态而不是 MOUNTED。select instance_name, status from v$instance; select open_mode from v$database; select name, value from v$parameter where name in (service_names,db_unique_name);如果 open_mode 显示 MOUNTED说明实例恢复没有完成等待一段时间再查。如果长时间停留在 MOUNTED立即检查 E:\oradata 目录下 redo 日志是否完整并查看 alert_ora.log 中的 ORA- 错误码。配合tnsping 192.168.13.20:1521确认监听可达整个切换验证才算闭环。本文还有配套的精品资源点击获取