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

2023-02-28,,,,

很多人在学习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;
当使用备重做日志文件时,这个步骤是必须的以确保数据库能被正确地闪回到还原点。
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;
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

oracle数据库flashback系列--闪回数据库在dataguard中的使用的相关教程结束。