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
- SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME FLASHBACK_ON
- -------------------- ---------------- -------------------- ------------------
- READ ONLY WITH APPLY PHYSICAL STANDBY dg2 NO
二:重新启动备库到mount状态,进行转换操作,转换完成后可以看到闪回的进程rvwr已经自动启动
- SQL> alter database recover managed standby database cancel;
- Database altered.
- SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME FLASHBACK_ON
- -------------------- ---------------- -------------------- ------------------
- 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;
- Database altered.
- 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
四:打开数据库,期间观察切换过程日志如下,注意红色字体部分,实际上是产生了一个闪回数据库的保障点
- SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME FLASHBACK_ON
- -------------------- ---------------- -------------------- ------------------
- MOUNTED SNAPSHOT STANDBY dg2 RESTORE POINT ONLY
- SQL> alter database open;
- Database altered.
- 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 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
- Sat May 05 15:16:55 2012
- 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
- Sat May 05 15:20:03 2012
- 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
- previously cleared
- Online log /u01/app/oracle/fast_recovery_area/DG2/onlinelog/o1_mf_3_7s76qbhq_.log: Thread 1 Group 3 was
- previously cleared
- 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> 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
- 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> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME FLASHBACK_ON
- -------------------- ---------------- -------------------- ------------------
- READ WRITE SNAPSHOT STANDBY dg2 RESTORE POINT ONLY
- SQL> archive log list;
- Database log mode Archive Mode
- Automatic archival Enabled
- Archive destination /u01/app/oracle/standbylog
- 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
八:重新转换快照数据库到物理备库状态,查看相关的日志信息
- 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 348130608 bytes
- Database Buffers 58720256 bytes
- Redo Buffers 8466432 bytes
- Database mounted.
- SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME FLASHBACK_ON
- -------------------- ---------------- -------------------- ------------------
- MOUNTED SNAPSHOT STANDBY dg2 RESTORE POINT ONLY
- SQL> alter database convert to physical standby;
- Database altered.
- [oracle@dg2 ~]$ tail -f /u01/app/oracle/diag/rdbms/dg2/dg/trace/alert_dg.log
- 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
- Sat May 05 15:40:19 2012
- ARCH shutting down
- ARC2: Archival stopped
- Sat May 05 15:40:19 2012
- ARCH shutting downSat May 05 15:40:19 2012
- ARCH shutting down
- ARC0: Archival stopped
- ARC1: Archival stopped
- Sat May 05 15:40:20 2012
- Completed: alter database convert to physical standby
九:重新将备库置于ADG模式下,之前的测试数据已经不存在
- SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- select open_mode,database_role,db_unique_name,flashback_on from v$database
- *
- ERROR at line 1:
- ORA-01507: database not mounted
- SQL> shutdown immediate
- ORA-01507: database not mounted
- ORACLE instance shut down.
- SQL> startup
- ORACLE instance started.
- Total System Global Area 417546240 bytes
- Fixed Size 2228944 bytes
- Variable Size 348130608 bytes
- Database Buffers 58720256 bytes
- Redo Buffers 8466432 bytes
- Database mounted.
- Database opened.
- SQL> select open_mode,database_role,db_unique_name,flashback_on from v$database;
- OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME FLASHBACK_ON
- -------------------- ---------------- -------------------- ------------------
- READ ONLY WITH APPLY PHYSICAL STANDBY dg2 NO
- SQL> select * from test.t1;
- select * from test.t1
- *
- ERROR at line 1:
- 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