Oracle Data Guard之Snapshot Standby(快照备库)
前言
在日常工作中,有时会有一些需求,那就是需要用到生产环境的数据进行测试,如果按照常规方法,通过备份恢复到测试库进行测试的话,数据库体积越大恢复的速度越慢。在这种情况下我们可以使用Snapshot Standby(快照备库)来进行一些测试操作。
Snapshot Standby的介绍
Oracle 11g 中的 Data Guard 不仅引入了Active Data Guard实时查询特性,还提供了snapshot stadnby 数据库的功能。快照备库可以临时提供读写能力,以便线上业务系统进行测试相关场景任务。
snapshot standby database 会从主库接收和归档 redo 数据,但是不会对 redo 数据进行apply。仅当snapshot standby的角色转换回physical standby database 的时候才会应用之前接收的redo数据。 然后擦除作为snapshot standby 数据库时所有的DML和DDL操作。
Snapshot Standby的限制
Snapshot standby 数据库不能进行switchover 或者failover 操作。 在转换之前,必须先从snapshot standby 转换成physical standby 以后才可以转换
Snapshot standby 不支持最大保护模式(最大保护模式需要实时应用)
切换成Snapshot Standby
snapshot standby实际上是基于flashback database的运行机制,因此必须设置闪回区目录及大小。确保fast recovery area已经配置并确保大小合适,但不一定需要启动flashback database功能
-- 查看快速恢复闪回区
show parameter recover
-- 设置闪回区的大小和路径(如果已经配置此步骤可以忽略)
闪回区的大小根据磁盘空间设置,闪回区的目录注意权限
alter system set db_recovery_file_dest_size=200G scope=both;
alter system set db_recovery_file_dest='/oradata/flashback' scope=both;
-- 备库关闭日志应用
alter database recover managed standby database cancel;
-- 关闭job
alter system set job_queue_processes=0;
-- 一致性关库并启动到mount(只有mount状态才允许切换)
shutdown immediate
startup mount;
-- 切换为快照数据库
alter database convert to snapshot standby;
-- 启动到open
alter database open;
-- 查看状态 发现已经变为快照备库
select open_mode,name,DATABASE_ROLE,SWITCHOVER_STATUS from v$database;
此时数据库为读写状态,可以任意操作数据,后续切换回物理备库时,这段时间内的数据变更会被抹除。
切换回物理备库
-- 一致性关闭后启动到mount
shutdown immediate
startup mount
-- 切回成物理备库
alter database convert to physical standby;
-- 启动数据库
shutdown immediate
startup
-- 启动实时日志应用
alter database recover managed standby database using current logfile disconnect from session;
-- 开启job
alter system set job_queue_processes=50;
-- 查看日志应用情况
select sequence#,applied from v$archived_log order by sequence#;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?