Oracle Study之案例--Oracle 11g DataGuard Snapshot Standby

Oracle Study之案例--Oracle 11g  DataGuard Snapshot Standby

Oracle 11g的Data Guard不仅仅带给我们的是Active Data Guard实时查询特性,同时还带来了另外一个新特性,这便是Snapshot Standby数据库功能,此项功能可将备库置身于“可读写状态”用于不方便在生产环境主库中测试的内容,比如模拟上线测试等任务。当备库读写状态下任务完成后,可以非常轻松的完成Snapshot Standby数据库角色切换回备库角色,恢复与主库数据同步。在Snapshot Standby数据库状态下,备库是可以接收主库传过来的日志,但是不能对日志进行应用。

案例分析:

1、查看数据库信息

Primay DB:

14:47:09 [email protected] prod >select name,database_role,protection_mode from v$database;
NAME      DATABASE_ROLE    PROTECTION_MODE
--------- ---------------- --------------------
PROD      PRIMARY          MAXIMUM PERFORMANCE

14:46:52 [email protected] prod >select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
           536
           
Standby DB:
14:47:04 [email protected] shdb >select name,database_role,protection_mode from v$database;
NAME      DATABASE_ROLE    PROTECTION_MODE
--------- ---------------- --------------------
PROD      PHYSICAL STANDBY MAXIMUM PERFORMANCE

14:46:09 [email protected] shdb >select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
           536

2、切换备库到Snapshot Standby

1)必须终止Media Recover Process

14:48:05 [email protected] shdb >alter database convert to snapshot standby;
alter database convert to snapshot standby
*
ERROR at line 1:
ORA-38784: Cannot create restore point ‘SNAPSHOT_STANDBY_REQUIRED_11/27/2014 14:50:05‘.
ORA-01153: an incompatible media recovery is active

14:50:05 [email protected] shdb >recover managed standby database cancel;
Media recovery complete.

2)必须建立Recover Area
   snapshot standby实际上是基于flashback database的运行机制,恢复到原先的standby状态
   
14:50:44 [email protected] shdb >alter database convert to snapshot standby;
alter database convert to snapshot standby
*
ERROR at line 1:
ORA-38784: Cannot create restore point ‘SNAPSHOT_STANDBY_REQUIRED_11/27/2014 14:50:58‘.
ORA-38786: Recovery area is not enabled.

3)启用recover area
14:50:58 [email protected] shdb >show parameter recover
NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
db_recovery_file_dest                string
db_recovery_file_dest_size           big integer                      0
recovery_parallelism                 integer                          0

14:52:51 [email protected] shdb >alter system set db_recovery_file_dest_size=2g;
System altered.

14:53:12 [email protected] shdb >alter system set db_recovery_file_dest=‘/dsk4/backup‘;
System altered.

14:53:18 [email protected] shdb >show parameter recover
NAME                                 TYPE                             VALUE
------------------------------------ -------------------------------- ------------------------------
db_recovery_file_dest                string                           /dsk4/backup
db_recovery_file_dest_size           big integer                      2G
recovery_parallelism                 integer

3)转换成功
14:54:13 [email protected] shdb >alter database convert to  snapshot standby;
Database altered.
Elapsed: 00:00:03.10
14:54:41 [email protected] shdb >select status from v$instance;
STATUS
------------
MOUNTED

告警日志:
主库:
LNS: Attempting destination LOG_ARCHIVE_DEST_2 network reconnect (3135)
LNS: Destination LOG_ARCHIVE_DEST_2 network reconnect abandoned
Errors in file /u01/app/oracle/diag/rdbms/bjdb/prod/trace/prod_nsa2_2960.trc:
ORA-03135: connection lost contact
Error 3135 for archive log file 5 to ‘shdb‘
Errors in file /u01/app/oracle/diag/rdbms/bjdb/prod/trace/prod_nsa2_2960.trc:
ORA-03135: connection lost contact
LNS: Failed to archive log 5 thread 1 sequence 537 (3135)
Errors in file /u01/app/oracle/diag/rdbms/bjdb/prod/trace/prod_nsa2_2960.trc:
ORA-03135: connection lost contact

备库:
alter database convert to snapshot standby
ORA-38784 signalled during: alter database convert to snapshot standby...
Thu Nov 27 14:53:12 2014
ALTER SYSTEM SET db_recovery_file_dest_size=‘2G‘ SCOPE=MEMORY;
Using STANDBY_ARCHIVE_DEST parameter default value as USE_DB_RECOVERY_FILE_DEST
**********************************************************
WARNING: Files may exists in db_recovery_file_dest
that are not known to the database. Use the RMAN command
CATALOG RECOVERY AREA to re-catalog any such files.
If files cannot be cataloged, then manually delete them
using OS command.
One of the following events caused this:
1. A backup controlfile was restored.
2. A standby controlfile was restored.
3. The controlfile was re-created.
4. db_recovery_file_dest had previously been enabled and
   then disabled.
**********************************************************
ALTER SYSTEM SET db_recovery_file_dest=‘/dsk4/backup‘ SCOPE=MEMORY;
Thu Nov 27 14:53:18 2014
db_recovery_file_dest_size of 2048 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Thu Nov 27 14:54:38 2014
alter database convert to  snapshot standby
Starting background process RVWR
Thu Nov 27 14:54:38 2014
RVWR started with pid=21, OS id=2198
Allocated 3981204 bytes in shared pool for flashback generation buffer
Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_11/27/2014 14:54:38
krsv_proc_kill: Killing 3 processes (all RFS)
CLOSE: killing server sessions.
CLOSE: all sessions shutdown successfully.
Thu Nov 27 14:54:41 2014
SMON: disabling cache recovery
Begin: Standby Redo Logfile archival
End: Standby Redo Logfile archival
RESETLOGS after incomplete recovery UNTIL CHANGE 8596005
Resetting resetlogs activation ID 219765236 (0xd1959f4)
Online log /dsk2/oradata/shdb/redo04b.log: Thread 1 Group 4 was previously cleared
Online log /dsk1/oradata/shdb/redo04a.log: Thread 1 Group 4 was previously cleared
Online log /dsk2/oradata/shdb/redo05b.log: Thread 1 Group 5 was previously cleared
Online log /dsk1/oradata/shdb/redo05a.log: Thread 1 Group 5 was previously cleared
Standby became primary SCN: 8596003
Thu Nov 27 14:54:41 2014
Setting recovery target incarnation to 3
CONVERT TO SNAPSHOT STANDBY: Complete - Database mounted as snapshot standby
Completed: alter database convert to  snapshot standby

14:54:55 [email protected] shdb >select database_role,open_mode from v$database;
DATABASE_ROLE    OPEN_MODE
---------------- --------------------
SNAPSHOT STANDBY MOUNTED
Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_11/27/2014 14:54:38
在日志中可以看到,Database建立了restore point

3、Open Database验证

1)open database

14:57:02 [email protected] shdb >alter database open;
Database altered.

14:57:33 [email protected] shdb >select database_role,open_mode from v$database;
DATABASE_ROLE    OPEN_MODE
---------------- --------------------
SNAPSHOT STANDBY READ WRITE

2)日志切换:
主库:
14:47:31 [email protected] prod >alter system switch logfile;
System altered.

15:01:11 [email protected] prod >/
System altered.

15:01:23 [email protected] prod >select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
           539
           
告警日志:           
Thread 1 advanced to log sequence 538 (LGWR switch)
  Current log# 4 seq# 538 mem# 0: /dsk2/oradata/prod/redo04b.log
  Current log# 4 seq# 538 mem# 1: /dsk1/oradata/prod/redo04a.log
Thu Nov 27 14:59:46 2014
Archived Log entry 504 added for thread 1 sequence 537 ID 0xd1959f4 dest 1:
Thu Nov 27 15:00:53 2014
Thread 1 cannot allocate new log, sequence 539
Checkpoint not complete
  Current log# 4 seq# 538 mem# 0: /dsk2/oradata/prod/redo04b.log
  Current log# 4 seq# 538 mem# 1: /dsk1/oradata/prod/redo04a.log
Thu Nov 27 15:01:11 2014
Thread 1 advanced to log sequence 539 (LGWR switch)
  Current log# 5 seq# 539 mem# 0: /dsk2/oradata/prod/redo05b.log
  Current log# 5 seq# 539 mem# 1: /dsk1/oradata/prod/redo05a.log
Thu Nov 27 15:01:12 2014
Archived Log entry 507 added for thread 1 sequence 538 ID 0xd1959f4 dest 1:
Thread 1 cannot allocate new log, sequence 540
Checkpoint not complete
  Current log# 5 seq# 539 mem# 0: /dsk2/oradata/prod/redo05b.log
  Current log# 5 seq# 539 mem# 1: /dsk1/oradata/prod/redo05a.log
Thu Nov 27 15:01:23 2014
Thread 1 advanced to log sequence 540 (LGWR switch)
  Current log# 4 seq# 540 mem# 0: /dsk2/oradata/prod/redo04b.log
  Current log# 4 seq# 540 mem# 1: /dsk1/oradata/prod/redo04a.log
Thu Nov 27 15:01:25 2014
Archived Log entry 509 added for thread 1 sequence 539 ID 0xd1959f4 dest 1:
备库:
14:57:49 [email protected] shdb >select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
--------------
           539
告警日志:
RFS[6]: Assigned to RFS process 2254
RFS[6]: Identified database type as ‘snapshot standby‘: Client is ARCH pid 2953
Thu Nov 27 14:59:45 2014
RFS[7]: Assigned to RFS process 2256
RFS[7]: Identified database type as ‘snapshot standby‘: Client is LGWR ASYNC pid 2960
RFS[7]: Opened log for thread 1 sequence 537 dbid 219724276 branch 807885951
Archived Log entry 24 added for thread 1 sequence 537 rlc 807885951 ID 0xd1959f4 dest 2:
RFS[7]: Opened log for thread 1 sequence 538 dbid 219724276 branch 807885951
Thu Nov 27 15:01:12 2014
Archived Log entry 25 added for thread 1 sequence 538 rlc 807885951 ID 0xd1959f4 dest 2:
RFS[7]: Opened log for thread 1 sequence 539 dbid 219724276 branch 807885951
Thu Nov 27 15:01:23 2014
Archived Log entry 26 added for thread 1 sequence 539 rlc 807885951 ID 0xd1959f4 dest 2:
RFS[7]: Opened log for thread 1 sequence 540 dbid 219724276 branch 807885951
-----可以看到备库只是接收日志,并不对日志进行apply。

3)在备库做DML和压力测试:
15:03:52 [email protected] shdb >begin
15:03:59   2  for i in 1..10000 loop
15:04:06   3  insert into t2 values (i,i*10);
15:04:29   4  end loop;
15:04:34   5  commit;
15:04:35   6  end;
15:04:37   7  /
PL/SQL procedure successfully completed.
Elapsed: 00:00:04.43
15:04:42 [email protected] shdb >select count(*) from t2;
  COUNT(*)
----------
     10003

4、将数据库切回Physical Standby

1) 关闭数据库,启动到mount
15:06:10 [email protected] shdb >shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

15:06:25 [email protected] shdb >startup mount;
ORACLE instance started.
Total System Global Area  330600448 bytes
Fixed Size                  1336344 bytes
Variable Size             113249256 bytes
Database Buffers          209715200 bytes
Redo Buffers                6299648 bytes
Database mounted.

2)转换到Physical Standby
15:06:57 [email protected] shdb >alter database convert to physical standby;
Database altered.

备库告警日志:
Using STANDBY_ARCHIVE_DEST parameter default value as /dsk4/arch_shdb
RFS[1]: Assigned to RFS process 2423
RFS[1]: Identified database type as ‘snapshot standby‘: Client is ARCH pid 2953
Thu Nov 27 15:06:44 2014
RFS[2]: Assigned to RFS process 2425
RFS[2]: Identified database type as ‘snapshot standby‘: Client is LGWR ASYNC pid 2960
RFS[2]: Opened log for thread 1 sequence 540 dbid 219724276 branch 807885951
Archived Log entry 28 added for thread 1 sequence 540 rlc 807885951 ID 0xd1959f4 dest 2:
RFS[2]: Opened log for thread 1 sequence 541 dbid 219724276 branch 807885951
Thu Nov 27 15:06:53 2014
RFS[3]: Assigned to RFS process 2427
RFS[3]: Identified database type as ‘snapshot standby‘: Client is ARCH pid 2953
Thu Nov 27 15:07:09 2014
alter database convert to physical standby
ALTER DATABASE CONVERT TO PHYSICAL STANDBY (shdb)
krsv_proc_kill: Killing 2 processes (all RFS)
Flashback Restore Start
Flashback Restore Complete
Stopping background process RVWR
Deleted Oracle managed file /dsk4/backup/SHDB/flashback/o1_mf_b7flogt9_.flb
Guaranteed restore point  dropped
Clearing standby activation ID 276569850 (0x107c1efa)
The primary database controlfile was created using the
‘MAXLOGFILES 16‘ clause.
There is space for up to 14 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 4194304;
ALTER DATABASE ADD STANDBY LOGFILE ‘srl2.f‘ SIZE 4194304;
ALTER DATABASE ADD STANDBY LOGFILE ‘srl3.f‘ SIZE 4194304;
Completed: alter database convert to physical standby

3)转换后,数据库处于非mount状态
15:07:10 [email protected] shdb >select database_role,open_mode from v$database;
select database_role,open_mode from v$database
                                    *
ERROR at line 1:
ORA-01507: database not mounted

15:08:29 [email protected] shdb >alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00750: database has been previously mounted and dismounted

15:08:39 [email protected] shdb >shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.

15:09:28 [email protected] shdb >startup
ORACLE instance started.
Total System Global Area  330600448 bytes
Fixed Size                  1336344 bytes
Variable Size             113249256 bytes
Database Buffers          209715200 bytes
Redo Buffers                6299648 bytes
Database mounted.
Database opened.

4)转换成Physical Standby
15:09:39 [email protected] shdb >select database_role,open_mode from v$database;
DATABASE_ROLE    OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY

备库告警日志:
Physical standby database opened for read only access.
Completed: ALTER DATABASE OPEN
ARC2: Archival started
ARC0: STARTING ARCH PROCESSES COMPLETE
ARC0: Becoming the heartbeat ARCH
Thu Nov 27 15:09:40 2014
Using STANDBY_ARCHIVE_DEST parameter default value as /dsk4/arch_shdb
RFS[1]: Assigned to RFS process 2763
RFS[1]: Identified database type as ‘physical standby‘: Client is ARCH pid 2953
Thu Nov 27 15:09:46 2014
RFS[2]: Assigned to RFS process 2765
RFS[2]: Identified database type as ‘physical standby‘: Client is LGWR ASYNC pid 2960
Primary database is in MAXIMUM PERFORMANCE mode
RFS[2]: Opened log for thread 1 sequence 541 dbid 219724276 branch 807885951
Archived Log entry 29 added for thread 1 sequence 541 rlc 807885951 ID 0xd1959f4 dest 2:
RFS[2]: Opened log for thread 1 sequence 542 dbid 219724276 branch 807885951
Thu Nov 27 15:09:53 2014
RFS[3]: Assigned to RFS process 2768
RFS[3]: Identified database type as ‘physical standby‘: Client is ARCH pid 2953

主库告警日志:
Using STANDBY_ARCHIVE_DEST parameter default value as /dsk4/arch_prod
ALTER SYSTEM SET log_archive_dest_state_2=‘ENABLE‘ SCOPE=MEMORY SID=‘*‘;
Thu Nov 27 15:09:42 2014
Thread 1 cannot allocate new log, sequence 542
Checkpoint not complete
  Current log# 5 seq# 541 mem# 0: /dsk2/oradata/prod/redo05b.log
  Current log# 5 seq# 541 mem# 1: /dsk1/oradata/prod/redo05a.log
Thu Nov 27 15:09:46 2014
******************************************************************
LGWR: Setting ‘active‘ archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
Thread 1 advanced to log sequence 542 (LGWR switch)
  Current log# 4 seq# 542 mem# 0: /dsk2/oradata/prod/redo04b.log
  Current log# 4 seq# 542 mem# 1: /dsk1/oradata/prod/redo04a.log
Thu Nov 27 15:09:48 2014
Archived Log entry 513 added for thread 1 sequence 541 ID 0xd1959f4 dest 1

5)查看Snapshot状态下创建的数据已经被还原
15:09:50 [email protected] shdb >conn scott/tiger
Connected.

15:12:49 [email protected] shdb >select count(*) from t2;
  COUNT(*)
----------
         3

小结

  Oracle 11g DataGuar增加的Snapshot Standby数据库”功能,备库可以临时成为一个可读写的独立数据库,这极大的扩展了备库的应用场合,我们可以使用备库的这一项特殊功能将那些在生产环境中“不敢”模拟和再现的问题在备库端进行测试,测试完毕后再恢复其物理备库的身份进行日志恢复,极大的方便我们在日常生产环境中对DG的应用。


时间: 2024-10-27 11:32:41

Oracle Study之案例--Oracle 11g DataGuard Snapshot Standby的相关文章

Oracle Study之案例--Oracle ASSM管理方式下的BITMAP

Oracle Study之案例--Oracle ASSM管理方式下的Bitmap      在基于此在LMT(Extent Local Management)下Oracle建议我们使用ASSM(Automatic Segment-Space Management),看看 Oracle doc是如何来解释ASSM的: This keyword tells Oracle that you want to use bitmaps to manage the free space with in seg

Oracle Study之案例--Oracle 数据块地址(Block Address)

Oracle Study之案例--Oracle 数据块地址(Block Address) Oracle访问数据是以block为单位,本文简单介绍了如何通过Block Address在内存中获取所需要的block. DBA(data block address): A DBA is the address of an oracle data block for access purposes. RDBA (Tablespace relative database block address): R

Oracle Study之案例--异构平台传输表空间(Linux至AIX)

Oracle Study之案例--异构平台传输表空间(Linux至AIX) 系统架构: 可                   源    库               目标库 操作系统 Linux RH6    AIX 5.3-09 主机名 rh6(192.168.8.245) aix211(192.168.8.211) 数据版本 Oracle 11gR2 Oracle 11gR2 数据库名 prod orcl 表空间 test1 test1    可传输表空间概述 Oracle 的可传输表空

Oracle Study之案例--数据恢复神器Flashback(1)

Oracle Study之案例--数据恢复神器Flashback(1) Flashback: Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数.要使用flashback 的特性,必须启用自动撤销管理表空间. 在Oracle 11g里又出了一个新特性:Oracle Flashback Data Archive. FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪

Oracle Study之案例--重建数据库控制文件

Oracle Study之案例--重建数据库控制文件 系统环境: 操作系统: Linux RH6 数据库:   Oracle 11gR2    案例分析:           数据库中所有的控制文件被意外破坏,非归档的库,在有trace备份的情况下,重建控制文件. 1.控制文件trace脚本 [[email protected] ~]$ cat crctr.sql  CREATE CONTROLFILE REUSE DATABASE "TEST3" NORESETLOGS  NOARC

Oracle Study之案例--安装Oracle内核参数配置

Oracle Study之案例--安装Oracle内核参数配置 在Linux系统下,安装Oracle之前,除了检查操作系统的硬件和软件是否满足安装需要之外,一个重点就是修改内核参数,其中最主要的是和内存相关的参数设置. 案例分析: 查看当前系统的内核参数配置: [[email protected] ~]# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.acce

Oracle Study之案例--通过IPCS查看共享内存之“怪现象”

Oracle Study之案例--通过IPCS查看共享内存之"怪现象"    在Oracle 11gR2环境下,通过ipcs命令查看共享内存,竟然发现分配给Oracle的内存只有4096Bytes,而在Oracle 10g环境下从未发现这种问题! [[email protected] ~]# ipcs -a ------ Shared Memory Segments -------- key        shmid      owner      perms      bytes  

Linux Oracle 11g dataguard物理standby 配置过程

这两天研究了下oracle 11g dataguard 物理standby 功能,总体来说这个功能满足公司需求,好了,不多说了,以下是详细的配置过程. 数据库的安装可以参考之前写的六步搞定Linux Oracle 11gR2 配置安装 注意:分别在主库和备库都安装上oracle软件,不装数据库. 主库: IP:192.168.77.5 主机名:nod1 ORACLE_SID=test ORACLE_BASE=/oracle/app/oracle ORACLE_HOME=/oracle/app/o

Oracle Study之案例--RMAN ORA-19921错误

Oracle Study之案例--RMAN ORA-19921错误 系统环境: 操作系统: AIX5.3 Oracle:   Oracle 10gR2 错误现象:         数据库在通过rman连接时出现以下错误: [11:01:51 [email protected]: ~]$rman target / Recovery Manager: Release 10.2.0.1.0 - Production on Mon Jan 19 11:01:53 2015 Copyright (c) 1