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

相关推荐
阳冬园21 分钟前
mysql数据库 主从同步
数据库·主从同步
Mr.131 小时前
数据库的三范式是什么?
数据库
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Python之栈2 小时前
【无标题】
数据库·python·mysql
风_流沙2 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
亽仒凣凣2 小时前
Windows安装Redis图文教程
数据库·windows·redis
亦世凡华、2 小时前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
YashanDB2 小时前
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
数据库·yashandb·崖山数据库
ProtonBase2 小时前
如何从 0 到 1 ,打造全新一代分布式数据架构
java·网络·数据库·数据仓库·分布式·云原生·架构
云和数据.ChenGuang8 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite