active database特性说明


在进行standby database搭建的时候,可以手工使用rman的duplicate命令搭建,或者通过全备恢复,直接通过rman duplicate自动搭建的方式比传统的手工搭建有如下的好处:

  • 直接拷贝当前在用的主库,不用备份
  • 在创建stnadyb database的过程中,不影响主库
  • 自动重命名数据文件,包括OMF和目录的结构
  • 自动恢复归档日志,保护主库的同步


传统方案:全备+归档日志

此方案搭建DG中间花费的时间都比较多,特别是当要应用比较多的归档日志的时候,不过可控性好,可以熟悉整个中间的过程。

11G R2新方案:duplicate active database

该方案采用duplicate active database方式,直接通过snap镜像的模式,可以不用备份就直接搭建Standby Database,而且减少了中间很多操作的过程,速度上也比较快,在应用归档日志,需要的时间极少。下面是实现环境:

实验环境:


DB_TYPE

IP

DB_NAME

DB_UNIQUE_NAME

Oracle Net Service Name

Primary Database

1.1.1.1

ORCL

ORCL

primary

Standby Database

1.1.1.2

ORCL

ORCL_DR

standby




测试结果:

数据传输速率:20M/s

磁盘RAID:RAID5

数据量:100G

RMAN分配并行度:2 #分配多个进程去主库拉取数据,建议不要设置太大

ORACLE 版本:11.2.0.2

完成时间:35min

使用Duplicate active database 搭建Standby Database的过程:
Primary DB上的操作
 1、primary启动为归档模式,并设置到force logging模式。
   SQL> shutdown immediate
   SQL> startup mount
   SQL> alter database archivelog;
   SQL> alter database open;
   SQL> alter database force logging;
 说明:一般主库都是归档模式,需要检查下是否强制日志,所以一般只要做alter database force logging的操作就行了。
 SQL> select log_mode,force_logging from v$database;

 LOG_MODE FOR
 ------------ ---
 ARCHIVELOG YES

 2、设置密码文件
 $cd $ORACLE_HOME/dbs
<$ORACLE_SID>
 说明:密码文件最好只保持一份
配置
   设置如下:
   $cd $ORACLE_HOME/network/admin/
   $cat listener.ora
   LISTENER =
 (DESCRIPTION_LIST =
 (DESCRIPTION =
<GamedbIP>)(PORT = 1521))
 )
 )

 SID_LIST_LISTENER =
 (SID_LIST =
 (SID_DESC =
 (ORACLE_HOME = /u/ora11g/product/11.2.0/db_1)
<$ORACLE_SID>)
 )
 )

 $cat tnsnames.ora
 STANDBY =
 (DESCRIPTION =
<GamedrIP>)(PORT = 1521))
 (CONNECT_DATA =
 (SERVER = DEDICATED)
<$ORACLE_SID>)
 )
 )

 PRIMARY =
 (DESCRIPTION =
<GamedbIP>)(PORT = 1521))
 (CONNECT_DATA =
 (SERVER = DEDICATED)
<$ORACLE_SID>)
 )
 )
 4、修改初始化参数文件
   SQL>alter system set log_archive_config='DG_CONFIG=(<$ORACLE_SID>,<DRName>)';
   SQL>alter system set log_archive_dest_2='SERVICE=standby ASYNC VALID_FO R=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=<DRName>';
   SQL> alter system set archive_lag_target=900;
 SQL> alter system set log_archive_dest_state_2=enable; #这一步等standby搭建完成再使用

Standby DB上的操作
 安装软件及主机设置步骤省略,参考相应安装指南
 1、创建相关目录
   $mkdir –p /u/ora11g/admin/<$ORACLE_SID>/adump
   $mkdir –p /test /<$ORACLE_SID>
 2、创建数据文件相关目录
   如果采用raw device,配置对应的raw,同Primary DB文件等保持一致。
<$ORACLE_SID>
 3、准备Standby DB的初始化参数。
 $cd $ORACLE_HOME/dbs
<$ORACLE_SID>.ora
 *.archive_lag_target=900
<$ORACLE_SID>/adump'
 *.audit_trail='db'
 *.compatible='11.2.0.0.0'
<$ORACLE_SID>/db_ctl01.ctl','/u/ora11g/oradata/<$ORACLE_SID>/db_ctl02.ctl','/u/ora11g/oradata/<$ORACLE_SID>/db_ctl03.ctl'#Restore Controlfile
 *.cursor_sharing='FORCE'
 *.db_block_size=8192
 *.db_domain=''
 *.db_file_multiblock_read_count=16
 *.db_files=1000
<$ORACLE_SID>'
 *.db_recovery_file_dest='/u/ora11g/fast_recovery_area'
 *.db_recovery_file_dest_size=5218762752
<DRName>'
 *.diagnostic_dest='/u/ora11g'
<$ORACLE_SID>XDB)'
 *.fal_client='STANDBY'
 *.fal_server='PRIMARY'
 *.filesystemio_options='ASYNCH'
 *.job_queue_processes=30
<$ORACLE_SID>,<DRName>)'
<$ORACLE_SID>'
<$ORACLE_SID>_%t_%s_%r.arc'
 *.log_archive_max_processes=10
 *.open_cursors=5000
 *.pga_aggregate_target=1736441856
 *.processes=1500
 *.remote_login_passwordfile='EXCLUSIVE'
 *.sec_case_sensitive_logon=FALSE
 *.session_cached_cursors=1000
 *.sessions=1655
 *.sga_max_size=40000m
 *.sga_target=40000m
 *.shared_pool_size=1258291200
 *.standby_file_management='AUTO'
 *.undo_retention=16800
 *.undo_tablespace='UNDOTBS1'
 4、配置listener.ora及tnsnames.ora文件
 参考Primary DB中的信息并修改对应Listener.ora里面的IP,然后启动Listener
   $lsnrctl start

 5、恢复数据库
 1)启动到nomount
 sqlplus / as sysdba
 SQL>create spfile from pfile;
 SQL>startup nomount;

 2)恢复数据库
 rman target sys/password @primary auxiliary sys/password@standby nocatalog
 rman>duplicate target database for standby from active database nofilenamecheck;
 说明:
 A.参数nofilenamecheck表示当主从库目录一致时要加入,否则报错
 B.该过程包括恢复控制文件,口令文件,启动到mount状态下。

 6、.添加Standby Redo Logfiles
<$ORACLE_SID>/stby
 $sqlplus / as sysdba
 alter database add standby logfile group 34 ('/test/<$ORACLE_SID>/db_stb_redo04.log') size 500m;

其它类似


8、启动Data Guard同步


说明:有可能在启动的时候报system表空间和控制文件记录的内容出现不一致,这个时候最好的方法就是,去主库拷贝最近的归档过来,同时在启用实时应用前最好先将归档拷贝过来。

SQL> alter database open read only;

SQL>recover standby database;

输入AUTO恢复

再执行上面的

SQL> alter database recover managed standby database disconnect from session using current logfile;


   此时记得执行Primary DB设置中的第6步,启动主库到备库的日志传输;

   后面根据alert_<$ORACLE_SID>.log日志确认同步的状态。


特别说明:

默认的一般都要手工拷贝Primary DB上的归档日志到Standby DB上应用到最近的时间点再开始同步,避免造成Primary Db上报归档错误,影起前端业务在线波动;


该方法适用于ORACLE 11GR2的版本,同时经过观察,对主库业务和网络影响不大。