Oracle11gR2 Active DataGuard

明天是最后一次oracle 培训课程,课程中会涉及到oracle Oracle Data Guard搭建过程,今天
上午做了一个实验,一起和大家分享下,我实验使用的是Oracle 11R2 .2版本的。
采用RMAN做duplicate。
实验实现的是物理备数据库。
Oracle11gR2 Active DataGuard_第1张图片
先简单介绍下Oracle Data Guard概念,可以参考我上篇写的《Oracle Data Guard 介绍
http://blog.itpub.net/12798004/viewspace-1144122/
Oracle Data Guard
确保企业数据的高可用性、数据保护以及灾难恢复。 Data Guard 提供
了一套全面的服务来创建、维护、管理和监控一个或多个备数据库,使得生产数据
库从灾难和数据损坏中得以幸存。 Data Guard 维护这些备数据库作为生产数据库的事务一致
性拷贝。然后,如果生产数据库因为计划的或计划外的中断而变得不可用。 Data Guard 能切
换任何备数据为生产角色,从而最小化中断引起的宕机时间。 Data Guard 能与传统的备份、
恢复和 cluster 技术一起使用,以提供高级别的数据保护和数据可用性。
使用 Data Guard ,管理员能通过将资源密集的备份和报表操作转移到备系统上,来提高
生产数据库的性能。
Data Guard
11G 中有了很大的改进,最典型的两个新特性就是 Active Data Guard Advanced Compression 引入。
Active Data Guard
技术: oracle 10g Physical Standby 节点在进行 Redo Apply 过程中,是不能够打开数据库读取数据的。
如果需要进行读取,则必须先将其终止 Apply 过程,才能支持读取。 Active Data Guard 特性就是支持 Standby 节点在 Apply 的同时支持只读数据库。
Advanced Compression
高级压缩技术:远程灾备使用 Data Guard 的一种重要瓶颈就是传输带宽限制。
所有的 Redo Log 数据都要通过 Primary Standby 之间的连接都是通过 Oracle Net 连进行传递的, Redo Log 随着业务的增加而加大。
Advanced Compression
可以将 Redo Log 进行一定程度压缩传递。

实验步骤如下:
1.先配置Primary Database(主库)
检查是否归档数据库
SQL>archive log list;
如果不是归档数据库先设置归档数据库
先停止主库
SQL>shutdown immediate
启动数据库到mount状态
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list;
设置数据为强制写日志。
SQL>alter database force logging;
SQL>select force_logging from v$database;--查看状态
为了能实现主备库双向切换,配置SRL。
SQL> alter database add standby logfile '/u01/oracle/oradata/devdb/sredo01.log' size 10M;

查看v$logfile(文件的位置)、v$standby_log(standby log的信息)来确认。

SQL> select group#,type,member from v$logfile;

SQL> select group#,dbid,thread#,sequence#,status from v$standby_log

添加多组日志文件:
SQL>alter database add standby logfile member '/u01/oracle/oradata/devdb/sredo02.log' to group 4;

SQL> select group#, member from v$logfile where type='STANDBY';
SQL> select group#, dbid, bytes from v$standby_log;

SRL文件是为了解决下列两个主要问题
数据保护 如果没有使用SRL文件,而且与数据库的连接中断,将无法保留传入的重做数据--例如如果主数据库出现故障,然后进行故障转移,那么连接中断时正在发送的数据就会丢失。 如果

将重做数据写入SRL,故障转移时已经永久保存了重做数据并可供使用。

性能目标
当LNS连接到备用数据库时,仅当在备用数据库上的RFS进程创建和初始化了归档日志,LNS/ARCH才能开始发送重做数据。如果日志文件很大,这会导致暂停时间过长。 该事件在日志切换时发

生,因而对主数据库的吞吐量影响很大。
配置了SRL,实时应用成为可能。
2.配置Primary Database(主库)SPFILE参数
2. 1.
log_archive_config
该参数通过DG_CONFIG 属性罗列同一个Data Guard 中所有DB_UNIQUE_NAME(含primary db 及standby db),以逗号分隔
primary端和standby端相同
SQL>show parameter log_archive_config
SQL>alter system set log_archive_config='DG_CONFIG=(devdb,dgdevdb)' scope=spfile;
2.2
log_archive_dest_2
添加归档日志传输位置,archive_dest参数包括两种类型位置,location和service。
Location参数表示本地目录归档日志存放,而service表示通过Oracle NET服务传输过去。要实现Dataguard组件,需要将日志指定到service里面。
SQL> alter system set
log_archive_dest_2='SERVICE=dgdevdb valid_for=(online_logfiles,primary_role) db_unique_name=dgdevdb'
scope=spfile;
SQL> alter system set log_archive_dest_state_2=enable;
注意:Online_logfiles和Primary_role表示当前实例为Primary角色的时候,才传递日志。
2.3
db_file_name_convert:主数据库和备用数据库的数据文件转换目录对映(如果两数据库的目录结构不一样),如果有多个对映,逐一指明对映关系
格式:*.db_file_name_convert=主数据库数据文件目录,备用数据库数据文件目录
primary端(主库进行设置,是为了在切换后主备角色互换):
SQL> alter system set db_file_name_convert='devdb','dgdevdb' scope=spfile;
log_file_name_convert:指明主数据库和备用数据库的log文件转换目录对映
格式:*. log_file_name_convert=主数据库log目录,备用数据库目录
primary端(主库进行设置,是为了在切换后主备角色互换):
SQL> alter system set log_file_name_convert='devdb','dgdevdb' scope=spfile;
2.4
standby_file_management参数,默认是manual。该参数用于控制Primary与Standby之间文件创建的方式。标准的DG环境下,在Primary DB下添加数据文件,会自动在Standby中增加文件。
SQL> show parameter standby_file_management
SQL> alter system set standby_file_management=auto;
SQL> show parameter standby_file_management;
OK ,主数据库相关的参数都已经配置完成,很简单吧。就几个参数。
下面来配置网络环境
配置网络Oracle Net内容

1.配置网络服务名:添加主库,备库的服务名
tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

DEVDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DEVDB)
    )
  )

DGDEVDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DGDEVDB)
    )
  )

2.添加静态注册。
listener.ora

# listener.ora Network Configuration File: /u01/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = devdb)
      (ORACLE_HOME = /u01/oracle/product/11.2.0/db_1)
      (SID_NAME = devdb)
    )
   (SID_DESC =
      (GLOBAL_DBNAME =dgdevdb)
      (ORACLE_HOME = /u01/oracle/product/11.2.0/db_1)
      (SID_NAME = dgdevdb)
    )

  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.128.120)(PORT = 1522))
    )
  )

ADR_BASE_LISTENER = /u01/oracle

 

密码文件设置,在使用RMAN复制数据库时要使用管理员密码,为了方便,保持密码一样,因此我拷贝了主库的密码文件。

[oracle@pxboracle dbs]$ cp orapwdevdb orapwdgdevdb
[oracle@pxboracle dbs]$ ls -l | grep orapw
创建备库需要的目录
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/admin/dgdevdb/adump
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/flash_recovery_area/dgdevdb
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/oradata/dgdevdb
[oracle@pxboracle dbs]$mkdir -p /u01/oracle/diag/rdbms/dgdevdb
到此为止,所有的参数文件都已经配置完毕!
下面启动备库的实例

启动standby实例

1.
在/u01/oracle/product/11.2.0/db_1/dbs下新创建一个initdgdevdb.ora 参数文件
[oracle@pxboracle dbs]$ vi initdgdevdb.ora
db_name=dgdevdb
[oracle@pxboracle dbs]$ export ORACLE_SID=dgdevdb
[oracle@pxboracle dbs]$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup nomount pfile='/u01/oracle/product/11.2.0/db_1/dbs/initdgdevdb.ora';
[oracle@pxboracle dbs]$ ps -ef | grep pmon
注:在启动备库的实例过程中,我遇到了如下错误:

ORA-00845: MEMORY_TARGET not supported on this system

如果您也遇到了,请参考我写的《ORA-00845: MEMORY_TARGET not supported on this system报错解决
http://blog.itpub.net/12798004/viewspace-1144633/

RMAN进行duplicate操作
1.编写复制数据库脚本
[oracle@pxboracle]# vi standby_sql
run {
  duplicate target database for standby from active database
  spfile
     parameter_value_convert 'devdb','dgdevdb'
     set db_unique_name='dgdevdb'
     set control_files='/u01/oracle/oradata/dgdevdb/control01.ctl'
     set db_file_name_convert='devdb','dgdevdb'
     set log_file_name_convert='devdb','dgdevdb'
     set log_archive_max_processes='5'
     set fal_client='dgdevdb'
     set fal_server='devdb'
     set standby_file_management='AUTO'
     set log_archive_config='dg_config=(devdb,dgdevdb)'
     set log_archive_dest_2='service=devdb async valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=devdb';
}
[oracle@pxboracle]# chmod 755 standby_sql

启动RMAN进行duplicate,连接target和auxiliary。
 
[oracle@pxboracle dbs]$ rman nocatalog
RMAN>connect target sys/devdb@devdb
RMAN>connect auxiliary sys/devdb@dgdevdb
RMAN>@/u01/standby_sql 
出现 **end-of-file**

脚本没有报错,执行成功。

对DG进行测试
主库
由于我们修改主库数据参数是通过命令来修改的,参数都是保存在spfile中的(scope=spfile)
因此需要重启主库使参数生效。
SQL> startup force (生产数据库千万别使用force重新启动,一定要一致性关闭数据库)
SQL> conn scott/tiger@devdb
SQL>create table dg_test as select * from user_tables;
SQL> select count(*) from dg_test;
SQL> atler system switch logfile;--手工切换日志,让日志传递到备库上。
备库上:
SQL> conn / as sysdba
SQL> alter database recover managed standby database cancel; 
SQL> alter database open; 
SQL> conn scott/tiger@dgdevdb
SQL> select count(*) from dg_test;
主库数据表添加数据,进行修改。
主库上执行
SQL> insert into dg_test select * from user_tables;
SQL> commit;
SQL> select count(*) from dg_test;
SQL>alter system switch logfile;
此时备(standby)库,并没有同步。因为我们刚刚关闭cancel同步。下面启动同步过程,接受新的数据。
备库上执行
SQL> alter database recover managed standby database using current logfile disconnect from session;
SQL> select open_mode from v$database;

OPEN_MODE

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

READ ONLY WITH APPLY
SQL> select count(*) from scott.dg_test;

同步成功!
注意:在
11g中,READ ONLY WITH APPLY状态表示在同步同时,也可以应用数据库的Redo Log。如果是之前的版本,备库需要恢复到mount状态。





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12798004/viewspace-1144677/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12798004/viewspace-1144677/

你可能感兴趣的:(Oracle11gR2 Active DataGuard)