Oracle Data Guard 19c physical standby(使用 Broker;单实例、Oracle Restart、RAC)
Oracle难度: 高级耗时: 2–4 小时(取决于数据量)为运行中的 19c primary 数据库,使用 RMAN DUPLICATE … FROM ACTIVE DATABASE 创建 physical standby,并将其加入 Data Guard Broker。最终得到:实时接收并应用 redo 的 standby、状态为 SUCCESS 的 broker 配置、经过验证的 switchover(可选 failover/reinstate 测试以及 Fast-Start Failover + observer)。primary 和 standby 均可为单实例、Oracle Restart 或 RAC;已有配置的日常运维和故障处理请使用 Data Guard 运维指南。
架构: Primary(单实例 / Oracle Restart / RAC 2–8 节点)+ physical standby(单实例 / Oracle Restart / RAC)+ 可选 observer
开始之前
- …所有 standby 节点上…Standby 服务器上…已安装与 primary 版本相同、RU 相同的 Oracle Database 软件(仅软件,无数据库),ORACLE_HOME 路径相同(…)。操作系统系列和字节序(endian)相同。… Standby 上已安装并运行 RU 相同或更新的 Grid Infrastructure(…集群…Oracle Restart…)。…
- Primary 数据库为 Enterprise Edition。Data Guard 包含在 EE 中;在 apply 运行时以 read only 打开 standby 需要 Active Data Guard 许可。
- 所有服务器上 oracle 用户的 profile 中已定义 ORACLE_HOME=…、ORACLE_SID 和 PATH(…primary 节点上为 …1、…2 ……primary 上为 ……;standby 的 profile 在本指南中编写)。… 有 Grid 的一端,grid 用户的 profile 中已定义 ORACLE_HOME=… 和 ORACLE_SID=+ASM…(RAC 上为 +ASM1、+ASM2 …)…;asmcmd 和 lsnrctl 使用该 profile 运行。…
- 所有服务器均可按名称互相解析(DNS 或 /etc/hosts)…;SCAN 名称(…………、…………)在 DNS 中解析为 3 个地址…,且 …/tcp 双向开放。网络带宽能够承载 redo 生成量…;SYNC 模式下往返延迟最好低于 1–2 ms…。
- Standby 上已 mount 与 primary 同名的 ASM 磁盘组(…、…),且有足够的可用空间。
- Standby 上 Clusterware/Oracle Restart 状态正常…;所有 standby 节点都在集群中(olsnodes)…。
- Primary 上每个实例的 redo thread 均已启用(v$thread ENABLED = PUBLIC),且各 thread 的 online redo 组数量和大小相同。
- Standby 上为数据文件、FRA(… GB)和归档日志准备了与 primary 相当的磁盘空间。
- 时钟已通过 NTP/chrony 同步;时区相同。
- Primary 上存在口令文件(REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE),且已知 SYS 口令。口令中不得包含 @、/、" 和空格(会破坏 RMAN/DGMGRL 连接串)。
- 如果 primary 未处于 ARCHIVELOG 模式,需要重启一次…(所有实例都会关闭)…;已为此批准维护窗口。Primary 有一份最新的 RMAN 备份。
- Observer 服务器上已安装 Oracle Client(Administrator 安装类型,包含 dgmgrl 和 mkstore)或 Database 软件;可通过 …/tcp 访问 primary 和 standby。
指南阶段
- 预检查 — 检查 primary 的当前状态
- Primary 准备 — 定义 FRA(如未定义) · 启用 ARCHIVELOG 模式(如需要) · 启用 force logging 和 Flashback Database · 设置 Data Guard 参数 · 创建 standby redo log · 验证口令文件
- Oracle Net(tnsnames、静态 listener) — 添加 tnsnames.ora 条目(primary…,每个节点…) · 添加静态 listener 注册(primary) · 添加静态 listener 注册(primary 节点 …:…) · 在防火墙中开放 listener 端口…(所有节点)…
- Standby 服务器准备 — 在 primary 上导出目录列表并发送到 standby · 将口令文件复制到 standby · 将口令文件复制到 standby(根据 Clusterware 注册信息) · 准备 oratab 和环境文件(standby) · 准备 oratab 和环境文件(standby 节点 …:…) · 创建目录(standby…,每个节点…) …
- 创建 standby(RMAN DUPLICATE)与 Redo Apply — 创建 standby:RMAN DUPLICATE FROM ACTIVE DATABASE · 验证 standby 的状态 · 如缺少 standby redo log 则创建(standby) · 删除临时 pfile(standby) · RAC standby:将集群参数写入 spfile · RAC standby:将 spfile 和口令文件移入 ASM …
- Data Guard Broker 与保护模式 — 将 broker 配置文件移到共享位置(primary RAC) · 启动 broker(primary) · 将 broker 配置文件移到共享位置(standby RAC) · 启动 broker(standby) · 创建 broker 配置 · 设置 apply instance(RAC standby) …
- Switchover 测试 — Switchover 测试:将 standby 切换为 primary · 检查 switchover 后的状态 · Switchback:恢复原角色
- Standby 上的 flashback — 在 standby 上启用 Flashback Database
- Failover 与 reinstate 测试 — Failover 测试 1/4:模拟 primary 崩溃 · Failover 测试 2/4:failover 到 standby · Failover 测试 3/4:以 MOUNT 方式启动旧 primary · Failover 测试 4/4:将旧 primary 恢复为 standby(REINSTATE) · failover 后恢复原角色
- Fast-Start Failover 与 observer — 写入 tnsnames.ora(observer) · 为 observer 创建 wallet · 在 sqlnet.ora 中定义 wallet(observer) · 使用 wallet 测试连接(observer) · 设置 Fast-Start Failover 属性 · 编写 observer 启动脚本(observer) …
- 安装后 — 设置归档日志删除策略(primary) · 设置归档日志删除策略(standby) · 编写归档清理脚本(standby…,每个节点…) · 使用 cron 环境手动测试脚本(standby…,每个节点…) · 定义 cron 作业(standby…,每个节点…) · 验证 cron 文件权限 …