
第一部分:官方严谨的详细阐述
一、 核心概念:什么是快照备库?
快照备库本质上是一个物理备库(Physical Standby),但在特定时间段内,它可以被打开为 READ WRITE 模式,用于执行测试、报告或其他读写操作。在此期间,它仍然持续从主库接收重做数据(Redo Data),但并不应用它们。当任务完成后,它可以快速转换回物理备库模式,追上主库的进度,重新成为合格的容灾副本。
其设计目标是:在不影响灾难恢复准备状态的前提下,充分利用备库硬件资源。
二、 内部原理与重做流管理
快照备库的实现依赖于对重做流的精细控制和闪回数据库(Flashback Database)技术。其核心在于三种状态的重做数据管理:
-
接收的重做(Received Redo): 从主库通过REDO传输服务(如LGWR ASYNC/LGWR SYNC)传送到备库的数据。这些数据被写入备库的备用重做日志(Standby Redo Logs, SRL) 中。
-
本地重做(Local Redo): 当快照备库处于读写模式时,其自身产生的DML操作所生成的重做数据。
-
临时增量重做(Temporary Incremental Redo): 这是实现该技术的最关键内部机制。它并不是一个独立的日志文件,而是一个逻辑概念,指的是在快照模式下,本地产生的重做数据被Oracle单独标记和管理,以便在转换回物理备库时能够被识别和丢弃。
三、 详细使用过程与底层切换流程
阶段一:从物理备库转换为快照备库(CONVERT TO SNAPSHOT STANDBY)
命令:
-- 在备库执行
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
内部发生的精确步骤:
- 检查点与同步: 确保备库与主库完全同步,所有已接收的重做都已应用。
- 启用闪回数据库: 这是前置条件也是核心。快照功能强烈依赖闪回数据库。Oracle会确保闪回数据库已启用(
ALTER DATABASE FLASHBACK ON;),并创建一个保证还原点(Guarded Restore Point)。这个还原点标记了转换开始时,数据库的一致状态点(SCN_A)。 - 停止管理恢复进程(MRP): 后台的
MRP进程被停止,重做应用(Redo Apply)暂停。 - 以
READ WRITE模式打开数据库: 备库现在像一个普通的读写数据库一样打开。 - 重做流切换:
- 接收的重做: 继续从主库接收重做,并写入SRL。但这些重做不会被应用,只是在SRL中堆积。
- 本地重做: 本地产生的所有更改,其重做数据被正常写入在线重做日志(ORL),但Oracle在内部会将这些重做记录标记为“临时的”或“增量的”,并记录它们是在哪个SCN之后产生的。
阶段二:快照备库运行期
- 此时,备库可执行任何DML和DDL操作。
- 主库的重做数据持续传输并在SRL中积累。备库的本地重做写入ORL。
- 这两个重做流在物理上是分开的(SRL vs. ORL),在逻辑上也被Oracle内部严格区分。数据库的核心视图(如
V$DATABASE)的DATABASE_ROLE会显示为SNAPSHOT STANDBY。
阶段三:从快照备库转换回物理备库(CONVERT TO PHYSICAL STANDBY)
命令:
-- 在快照备库执行
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
内部发生的精确步骤:
- 关闭数据库: 首先关闭已处于读写模式的快照备库。
- 启动到挂载模式: 以
MOUNT模式重新启动实例。 - 闪回数据库(丢弃本地更改): 这是最关键的一步。Oracle使用在阶段一创建的保证还原点,将数据库闪回(FLASHBACK DATABASE) 到转换开始时的那个一致状态点(SCN_A)。
- 效果: 此操作会丢弃所有在快照模式下产生的本地更改。就像一切从未发生过一样。
- 重置角色: 将数据库角色从
SNAPSHOT STANDBY重置为PHYSICAL STANDBY。 - 重启重做应用: 以
READ ONLY模式打开数据库,并重新启动MRP进程。 - 追赶主库:
MRP进程开始应用在快照模式期间堆积在SRL中的所有重做数据,最终使备库与主库重新同步。
四、 场景、争用、排查与解决
典型场景: 使用快照备库进行季度末报表测试、应用程序新版本测试、数据修补验证等,完成后需使其迅速恢复为容灾节点。
1. 主库性能影响
- 争用原因: 如果使用
SYNC(同步)传输模式,主库的提交必须等待备库的SRL写入确认。在快照模式下,虽然重做不应用,但SRL写入仍在继续。如果备库I/O性能差,会直接影响主库的提交响应时间。 - 等待事件: 在主库上可能会观察到
LGWR wait for LNS ack或类似的等待事件。 - 排查: 监控主库的日志文件同步(
log file sync)时间以及网络延迟。 - 解决:
- 在转换为快照备库期间,将重做传输模式改为
ASYNC(异步),避免对主库性能造成影响。 - 确保备库的SRL所在磁盘I/O性能良好。
- 在转换为快照备库期间,将重做传输模式改为
2. 切换回物理备库的时间过长
- 争用原因: 转换回物理备库的时间取决于两个因素:
- 闪回数据库的时间: 通常较快。
- 应用堆积重做的时间: 这取决于快照模式持续了多久(即堆积了多少重做数据)。如果快照模式运行了一周,那么MRP可能需要很长时间来追赶。
- 具体影响: 在MRP追赶期间,备库处于“落后”状态,不符合RPO(恢复点目标)要求。
- 解决:
- 规划快照窗口: 将快照模式的使用时间控制在合理的、较短的时间内(如一个周末)。
- 监控重做堆积量: 在快照模式期间,定期检查SRL的使用情况。
-- 查看备库接收但未应用的重做量(在快照备库上查询) SELECT * FROM V$DATAGUARD_STATS WHERE NAME LIKE 'apply lag'; -- 或者通过ARCHIVED_LOG视图查看已接收的日志序列号差距 SELECT MAX(SEQUENCE#) AS LAST_RECEIVED, (SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED='YES') AS LAST_APPLIED FROM V$ARCHIVED_LOG WHERE DEST_ID=1; -- 假设Dest 1是SRL
五、 常用管理SQL语句
-- 1. 检查数据库角色和模式
SELECT DATABASE_ROLE, OPEN_MODE, SWITCHOVER_STATUS, FLASHBACK_ON FROM V$DATABASE;
-- 2. 启用闪回数据库(必须在MOUNT状态下,是转换的前提)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;
-- 3. 转换为快照备库
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY;
-- 再次检查角色,此时应为 'SNAPSHOT STANDBY'
-- 4. 在快照备库上创建工作负载...
-- 5. 转换回物理备库
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
-- 检查角色,此时应变回 'PHYSICAL STANDBY'
-- 6. 启动重做应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION USING CURRENT LOGFILE;
-- 7. 监控MRP进程状态
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS
FROM V$MANAGED_STANDBY WHERE PROCESS = 'MRP';
-- 8. 查看备库的落后情况(应用延迟)
SELECT * FROM V$DATAGUARD_STATS WHERE NAME = 'apply lag';
第二部分:通俗易懂的解释
让我们用一个强大的比喻来理解整个过程。
把主库和物理备库想象成一家公司的总部和它的实时备份办公室。
-
物理备库(正常状态): 备份办公室里有一台高速传真机(重做传输),不停地接收总部发来的所有文件更改记录。办公室里有一个员工(MRP进程),每收到一页传真,就立刻照着更新自己这里的文件副本。两个办公室的文件始终保持完全一致。
-
转换为快照备库:
- 总部说:“备份办公室,暂停一下更新,我们要用你的地方做个临时项目。”
- 备份办公室的员工(MRP)停下来,不再照着传真更新文件了。
- 但是,高速传真机没关,总部发来的所有更改记录继续源源不断地打印出来,堆放在旁边的桌子上(SRL中堆积重做)。
- 备份办公室在停下时,给所有文件拍了张快照(闪回数据库/保证还原点)。
- 现在,测试团队可以进入备份办公室,在文件上进行任意修改、批注(读写操作)。他们做的所有修改,都用黄色的便签纸(临时增量重做) 记录下来,贴在文件上。
-
快照备库运行期:
- 测试团队在疯狂地修改文件(读写操作)。
- 旁边的传真机还在嘟囔嘟囔地吐纸,桌上堆的纸越来越高(重做堆积)。
-
转换回物理备库:
- 测试完成。
- 备份办公室负责人说:“好了,测试结束,我们得恢复和总部的同步了。”
- 他们做了一件非常聪明的事:把测试期间用黄色便签纸做的所有修改,全部撕下来扔掉!(闪回数据库到快照点) 所有文件瞬间恢复了测试开始前的原样。
- 然后,他们把桌上堆积如山的总部传真纸(堆积的重做)交给员工(MRP),说:“别歇着了,赶紧把这些总部真正的更改,按照顺序一笔一笔地更新到我们的文件上!”
- 员工开始疯狂地补作业,直到把堆积的传真全部处理完。
- 一旦处理完,备份办公室的文件就又和总部一模一样了。它又变回了那个合格的、实时的备份办公室。
这个机制的精妙之处在于:
- 资源充分利用: 备份办公室的场地和设备(备库的硬件)在闲置时可以被有效利用。
- 绝对安全: 无论测试团队在备份办公室搞得多么混乱,最终只需要“撕掉黄色便签纸”(闪回数据库),就能瞬间恢复秩序,绝不会污染真正的数据。
- 数据一致性: “总部的传真”(主库重做)一份都没丢,只是延迟应用了而已。
潜在问题(争用):
- 如果测试团队待得太久(快照模式太久),传真纸会堆满整个屋子(重做堆积过多),员工回来后要花非常非常长的时间才能“补完作业”(恢复同步)。
- 如果传真机很慢或者总部的传真机很忙(网络或I/O瓶颈),甚至可能会影响到总部发送文件的效率(影响主库性能)。
通过这个比喻,快照备库复杂的工作原理就变得清晰直观了。它是Oracle提供的一个极其巧妙且实用的功能,完美地平衡了数据保护与资源利用的需求。
欢迎关注我的公众号《IT小Chen》
690

被折叠的 条评论
为什么被折叠?



