天天看点

Implement Oracle snapshot database with Dataguard

11g的DataGuard提供了一个快照数据库(snapshot standby)的功能,也就是可以将物理备库临时以读写的方式打开,主库的归档日志会继续传输到备库,但备库不应用,等到将备库重新切换为physical standby的时候继续应用,从而实现主库和备库的数据一致,值得一提的是这个功能不需要开启主备库的闪回数据库功能,先前在这里存在误区,这个功能还是比较赞的,可以直接拿物理备库做下临时测试数据库!

一:确定主备库均为打开闪回数据库功能,本例中主库为dg1,备库为dg2

SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;  

OPEN_MODE            DATABASE_ROLE    DB_UNIQUE_NAME       FLASHBACK_ON  

-------------------- ---------------- -------------------- ------------------  

READ WRITE           PRIMARY          dg1                  NO  

READ ONLY WITH APPLY PHYSICAL STANDBY dg2                  NO 

二:重新启动备库到mount状态,进行转换操作,转换完成后可以看到闪回的进程rvwr已经自动启动

SQL> alter database recover managed standby database cancel;  

Database altered.  

READ ONLY            PHYSICAL STANDBY dg2                  NO  

SQL> shutdown immediate  

Database closed.  

Database dismounted.  

ORACLE instance shut down.  

SQL> startup mount  

ORACLE instance started.  

Total System Global Area  417546240 bytes  

Fixed Size                  2228944 bytes  

Variable Size             343936304 bytes  

Database Buffers           62914560 bytes  

Redo Buffers                8466432 bytes  

Database mounted.  

SQL> alter database convert to snapshot standby;  

SQL> !ps -ef |grep rvwr  

oracle   14767     1  0 15:20 ?        00:00:00 ora_rvwr_dg  

oracle   14788 14756  0 15:24 pts/4    00:00:00 /bin/bash -c ps -ef |grep rvwr  

oracle   14790 14788  0 15:24 pts/4    00:00:00 grep rvwr 

四:打开数据库,期间观察切换过程日志如下,注意红色字体部分,实际上是产生了一个闪回数据库的保障点

MOUNTED              SNAPSHOT STANDBY dg2                  RESTORE POINT ONLY  

SQL> alter database open;  

READ WRITE           SNAPSHOT STANDBY dg2                  RESTORE POINT ONLY  

[oracle@dg2 ~]$ tail -f /u01/app/oracle/diag/rdbms/dg2/dg/trace/alert_dg.log   

Sat May 05 15:16:55 2012  

alter database recover managed standby database cancel  

MRP0: Background Media Recovery cancelled with status 16037  

Errors in file /u01/app/oracle/diag/rdbms/dg2/dg/trace/dg_pr00_14678.trc:  

ORA-16037: user requested cancel of managed recovery operation  

Managed Standby Recovery not using Real Time Apply  

Recovery interrupted!  

Recovered data files to a consistent state at change 1107151  

Sat May 05 15:16:56 2012  

MRP0: Background Media Recovery process shutdown (dg)  

Managed Standby Recovery Canceled (dg)  

Completed: alter database recover managed standby database cancel  

Sat May 05 15:20:03 2012  

alter database convert to snapshot standby  

Starting background process RVWR  

RVWR started with pid=33, OS id=14767   

Allocated 3981120 bytes in shared pool for flashback generation buffer  

Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_05/05/2012 15:20:03  

krsv_proc_kill: Killing 4 processes (all RFS)  

All dispatchers and shared servers shutdown  

CLOSE: killing server sessions.  

CLOSE: all sessions shutdown successfully.  

Sat May 05 15:20:09 2012  

SMON: disabling cache recovery  

Begin: Standby Redo Logfile archival  

End: Standby Redo Logfile archival  

RESETLOGS after incomplete recovery UNTIL CHANGE 1107151  

Waiting for all non-current ORLs to be archived...  

All non-current ORLs have been archived.  

Resetting resetlogs activation ID 1695253094 (0x650b8266)  

Online log /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_1_7s76q5w1_.log: Thread 1 Group 1 was   

previously cleared  

Online log /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_2_7s76q94s_.log: Thread 1 Group 2 was   

Online log /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_3_7s76qbhq_.log: Thread 1 Group 3 was   

Standby became primary SCN: 1107149  

Sat May 05 15:20:11 2012  

Setting recovery target incarnation to 3  

AUDIT_TRAIL initialization parameter is changed back to its original value as specified in the parameter file.  

CONVERT TO SNAPSHOT STANDBY: Complete - Database mounted as snapshot standby  

Completed: alter database convert to snapshot standby 

五:对快照数据库进行写数据操作

SQL> create user test identified by test;  

User created.  

SQL> grant connect,resource to test;  

Grant succeeded.  

[oracle@dg1 ~]$ sqlplus test/test@dg2  

SQL*Plus: Release 11.2.0.3.0 Production on Sat May 5 15:28:42 2012  

Copyright (c) 1982, 2011, Oracle.  All rights reserved.  

Connected to:  

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production  

With the Partitioning, OLAP, Data Mining and Real Application Testing options  

SQL> create table t1 (id number);  

Table created.  

SQL> insert into t1 values (1);  

1 row created.  

SQL> commit;  

Commit complete.  

SQL> exit  

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production  

With the Partitioning, OLAP, Data Mining and Real Application Testing options 

六:主库上执行日志切换,观察主库的日志输入,红色字体部分说明日志有继续传输到dg2

SQL> archive log list  

Database log mode              Archive Mode  

Automatic archival             Enabled  

Archive destination            /u01/app/oracle/standbylog  

Oldest online log sequence     42  

Next log sequence to archive   44  

Current log sequence           44  

SQL> alter system switch logfile;  

System altered.  

[oracle@dg1 ~]$ tail -f /u01/app/oracle/diag/rdbms/dg1/dg/trace/alert_dg.log  

Sat May 05 15:34:10 2012  

LGWR: Standby redo logfile selected to archive thread 1 sequence 45  

LGWR: Standby redo logfile selected for thread 1 sequence 45 for destination LOG_ARCHIVE_DEST_2  

Thread 1 advanced to log sequence 45 (LGWR switch)  

  Current log# 2 seq# 45 mem# 0: /u01/app/oracle/oradata/dg/redo02.log  

Sat May 05 15:34:11 2012  

Archived Log entry 72 added for thread 1 sequence 44 ID 0x650b8266 dest 1: 

七:查看快照数据库,已经多了一个incarnation,日志序列号从1开始

SQL> archive log list;  

Oldest online log sequence     1  

Next log sequence to archive   1  

Current log sequence           1  

[oracle@dg2 ~]$ rman target /  

Recovery Manager: Release 11.2.0.3.0 - Production on Sat May 5 15:35:43 2012  

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.  

connected to target database: DG (DBID=1694605607)  

RMAN> list incarnation;  

using target database control file instead of recovery catalog  

List of Database Incarnations  

DB Key  Inc Key DB Name  DB ID            STATUS  Reset SCN  Reset Time  

------- ------- -------- ---------------- --- ---------- ----------  

1       1       DG       1694605607       PARENT  1          2011-09-17-09:46:04  

2       2       DG       1694605607       PARENT  995548     2012-04-22-12:43:25  

3       3       DG       1694605607       CURRENT 1107152    2012-05-05-15:20:09 

八:重新转换快照数据库到物理备库状态,查看相关的日志信息

Variable Size             348130608 bytes  

Database Buffers           58720256 bytes  

SQL> alter database convert to physical standby;  

Sat May 05 15:40:10 2012  

alter database convert to physical standby  

ALTER DATABASE CONVERT TO PHYSICAL STANDBY (dg)  

krsv_proc_kill: Killing 3 processes (all RFS)  

Flashback Restore Start  

Flashback Restore Complete  

Drop guaranteed restore point   

Stopping background process RVWR  

Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/DG2/flashback/o1_mf_7t9o53gj_.flb  

Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/DG2/flashback/o1_mf_7t9o57qv_.flb  

Guaranteed restore point  dropped  

Clearing standby activation ID 1695816619 (0x65141bab)  

The primary database controlfile was created using the  

'MAXLOGFILES 16' clause.  

There is space for up to 13 standby redo logfiles  

Use the following SQL commands on the standby database to create  

standby redo logfiles that match the primary database:  

ALTER DATABASE ADD STANDBY LOGFILE 'srl1.f' SIZE 52428800;  

ALTER DATABASE ADD STANDBY LOGFILE 'srl2.f' SIZE 52428800;  

ALTER DATABASE ADD STANDBY LOGFILE 'srl3.f' SIZE 52428800;  

ALTER DATABASE ADD STANDBY LOGFILE 'srl4.f' SIZE 52428800;  

Shutting down archive processes  

Archiving is disabled  

Sat May 05 15:40:19 2012  

ARCH shutting down  

ARC3: Archival stopped  

ARC2: Archival stopped  

ARCH shutting downSat May 05 15:40:19 2012  

ARC0: Archival stopped  

ARC1: Archival stopped  

Sat May 05 15:40:20 2012  

Completed: alter database convert to physical standby 

九:重新将备库置于ADG模式下,之前的测试数据已经不存在

select open_mode,database_role,db_unique_name,flashback_on from v$database  

*  

ERROR at line 1:  

ORA-01507: database not mounted  

SQL> startup  

Database opened.  

READ ONLY WITH APPLY PHYSICAL STANDBY dg2                  NO  

SQL> select * from test.t1;  

select * from test.t1  

                   *  

ORA-00942: table or view does not exist  

SQL> select * from dba_users where username='TEST';  

no rows selected 

 本文转自斩月博客51CTO博客,原文链接http://blog.51cto.com/ylw6006/857363如需转载请自行联系原作者

ylw6006