1. 首页
  2. IT资讯

Oracle11gR2 Active DataGuard

明天是最后一次oracle 培训课程,课程中会涉及到oracle Oracle Data Guard搭建过程,今天 上午做了一个实验,一起和大家分享下,我实验使用的是Oracle 11R2 .2版本的。 采用RMAN做duplicate。 实验实现的是物理备数据库。 Oracle11gR2 Active DataGuard 先简单介绍下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 Guard11G中有了很大的改进,最典型的两个新特性就是Active Data GuardAdvanced Compression引入。 Active Data Guard技术:oracle 10gPhysical Standby节点在进行Redo Apply过程中,是不能够打开数据库读取数据的。 如果需要进行读取,则必须先将其终止Apply过程,才能支持读取。Active Data Guard特性就是支持Standby节点在Apply的同时支持只读数据库。 Advanced Compression高级压缩技术:远程灾备使用Data Guard的一种重要瓶颈就是传输带宽限制。 所有的Redo Log数据都要通过PrimaryStandby之间的连接都是通过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/29578568/viewspace-2137271/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:布吉卡,转转请注明出处:http://www.cxybcw.com/195131.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code