oracle数据库flashback系列--闪回数据库在dataguard中的使用

很多人在学习flashback database这个oracle技术的时候 , 都会有一个疑问 , 就是如果我只有一个数据库作为生产库的话 , 是否有这样的业务需求导致我们要把数据库闪回到以前的时间点?以及这样做是否值得(当前时间点和闪回目的时间点中间的所有操作将丢失)?

其实抛开这个问题的讨论 , 在oracle的dataguard环境配置中 , 对于故障切换后产生故障的主机从新回到dataguard环境 , 以及处于测试的目的我们人为的激活了备库 , flashback database都可以提供非常好的选择。

下面的例子描述了这样一个场景:

用户需要一个和生产系统一样或者类似的测试环境,但是单纯的搭建一个环境显然是不值得的,对于部署了dataguard环境的生产系统来说,我们可以选择把备库临时激活,以读写的方式打开,用于测试的需要,等测试结束后,把备库通过flashback database技术闪回到激活之前的时间点,从新的加入到dataguard配置环境中。

第1步 :准备 要被激活的物理备数据库。

1 . 检查数据库的flashback database模式和闪回日志存放的目录。

SQL> select flashback_on from v$database;

FLASHBACK_ON


YES

SQL> show parameter db_recovery_file

NAME TYPE VALUE


db_recovery_file_dest string /u01/app/oracle/flash_recovery_area

db_recovery_file_dest_size big integer 2G

2 . 由于备库在应用日志 , 所以要取消日志应用 , 并创建一个激活之前的还原点。

SQL> select process,status from v$managed_standby;

PROCESS STATUS


ARCH CONNECTED

ARCH CLOSING

MRP0 WAIT_FOR_LOG

RFS IDLE

RFS IDLE

RFS IDLE

6 rows selected.

SQL> recover managed standby database cancel;

SQL> create restore point test_scn guarantee flashback database;

Restore point created.

第2步 : 准备主数据库

1 . 当前 实例执行 日志 切换

在主数据库上 , 切换日志使得还原点(在步骤 1 中创建)的 SCN 将在物理备数据库上被归档:

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

当使用备重做日志文件时 , 这个步骤是必须的以确保数据库能被正确地闪回到还原点。

ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的 当前实例 执行日志切换 ,

ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的 所有实例 执行日志切换 ,

2 . 延迟指向将被激活的备 日志归档目的地。

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=DEFER;

System altered.

SQL> show parameter log_archive_dest_state_2

NAME TYPE VALUE


log_archive_dest_state_2 string DEFER

第3步 : 激活物理备数据库。

在物理备数据库上,执行下述步骤:

1 . 激活物理备数据库并打开到open状态:

SQL> ALTER DATABASE ACTIVATE STANDBY DATABASE;

2.开库

SQL> ALTER DATABASE OPEN;

第4步 : 使用激活的数据库用于报表或测试。

一旦备数据库已经被激活,你能运行报表工具或执行其它测试并激活几天甚至几周,独立于主数据库。

警告:当数据库被激活时 , 它不从主数据库接收重做数据库并不能提供灾难保护。建议至少有两个物理备数据库参与配置 , 使得主数据库保持对数据丢失的保护。

第5步 : 恢复 激活的数据库回到物理备数据库。

在你完成测试之后,你需要重新与主数据库同步激活的数据库。在激活的数据库上执行

下面语句以快速闪回它到保障的还原点并将它重新与主数据库同步:

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 314572800 bytes

Fixed Size 1219160 bytes

Variable Size 75498920 bytes

Database Buffers 234881024 bytes

Redo Buffers 2973696 bytes

Database mounted.

SQL> flashback database to restore point test_scn;

Flashback complete.

SQL> alter database convert to physical standby;

Database altered.

SQL> select status from v$instance;

STATUS


STARTED

SQL> shutdown immediate

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup mount

ORACLE instance started.

Total System Global Area 314572800 bytes

Fixed Size 1219160 bytes

Variable Size 75498920 bytes

Database Buffers 234881024 bytes

Redo Buffers 2973696 bytes

Database mounted.

SQL> recover managed standby database disconnect;

Media recovery complete.

6 : 重新允许归档到物理备数据库目的地。

在主数据库上,执行下面语句来重新允许归档到物理备数据库:

SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

第7步 : 测试dataguard环境工作正常

1.在主库删除表空间usertest , 并切换日志

SQL> select name from v$datafile;

NAME


/u01/app/oracle/oradata/db01/system01.dbf

/u01/app/oracle/oradata/db01/undotbs01.dbf

/u01/app/oracle/oradata/db01/sysaux01.dbf

/u01/app/oracle/oradata/db01/users01.dbf

/u01/app/oracle/oradata/db01/example01.dbf

/u01/app/oracle/oradata/db01/usertest01.dbf

6 rows selected.

SQL> drop tablespace usertest including contents and datafiles;

Tablespace dropped.

SQL> alter system switch logfile;

System altered.

2.在备库观察日志操作是否正确应用 , 下面的查询可以看到文件应经被删除 , 说明主库的日志应用到备库。

SQL> select name from v$datafile;

NAME


/u01/app/oracle/oradata/db01/system01.dbf

/u01/app/oracle/oradata/db01/undotbs01.dbf

/u01/app/oracle/oradata/db01/sysaux01.dbf

/u01/app/oracle/oradata/db01/users01.dbf

/u01/app/oracle/oradata/db01/example01.dbf

相关推荐
weixin_472339461 分钟前
MySQL MCP 使用案例
数据库·mysql
lqlj22331 小时前
Spark SQL 读取 CSV 文件,并将数据写入 MySQL 数据库
数据库·sql·spark
遗憾皆是温柔1 小时前
MyBatis—动态 SQL
java·数据库·ide·sql·mybatis
未来之窗软件服务2 小时前
Cacti 未经身份验证SQL注入漏洞
android·数据库·sql·服务器安全
fengye2071612 小时前
在MYSQL中导入cookbook.sql文件
数据库·mysql·adb
Ailovelearning3 小时前
neo4j框架:ubuntu系统中neo4j安装与使用教程
数据库·neo4j
_星辰大海乀3 小时前
表的设计、聚合函数
java·数据结构·数据库·sql·mysql·数据库开发
未来之窗软件服务4 小时前
solidwors插件 开发————仙盟创梦IDE
前端·javascript·数据库·ide·仙盟创梦ide
yc_12244 小时前
SqlHelper 实现类,支持多数据库,提供异步操作、自动重试、事务、存储过程、分页、缓存等功能。
数据库·c#
Leo.yuan5 小时前
基于地图的数据可视化:解锁地理数据的真正价值
大数据·数据库·信息可视化·数据挖掘·数据分析