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的版本,同时经过观察,对主库业务和网络影响不大。