本文将介绍怎么样快速的完成Oracle Physical Standby Database的搭建,其他关于DG的原理及更多的配置请参考Oracle Data Guard Concepts And Administration,当然在之后的博客中我也会给出其介绍。在创建之前的准备工作请参考如下博客:
Oracle数据库服务器搭建:http://blog.youkuaiyun.com/huang_tg/archive/2010/06/04/5647467.aspx
Oracle数据库安装:http://blog.youkuaiyun.com/huang_tg/archive/2010/06/03/5645131.aspx
Oracle升级:http://blog.youkuaiyun.com/huang_tg/archive/2010/06/08/5656329.aspx
以上工作完成以后根据业务创建相关的数据库,并将生产数据通过EXP/IMP导入数据库中。EXP/IMP使用注意事项请参考博客:http://blog.youkuaiyun.com/huang_tg/archive/2010/06/07/5652154.aspx ,数据导入完成以后先将数据库更改为Archive Mode,具体方法参考博客:http://blog.youkuaiyun.com/huang_tg/archive/2010/06/05/5649461.aspx ,接下来通过以下步骤完成Primary Database的设置。
一. 主数据库(primary database)
1. 通过以下语句启用FORCE LOGGING模式:
SQL> alter database force logging;
数据库在FORCE LOGGING模式下将不再允许nologging的方法直接向数据库插入数据,这会对我们大量插入数据造成影响,不过保证了Primary Database的所有数据更新都能反映到Standby Database中。在使用上面语句的时候可能需要等待较长的时间以便数据库完成所有unlogged direct write I/O。
2. 创建密码文件(可选)
如果$ORACLE_HOME/dbs/orapwsid文件存在的话就不需要另外创建,如果不存在则需要使用orapwd命令创建密码文件。Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n> nosysdba=<y/n> 其中file和password参数为必选,其他的为可选,具体参数含义查看帮助。
3. 配置standby redo log(可选)
如果DG配置为maximum protection,maximum availability及使用LGWR ASYNC日志传输模式的话需要配置,使用以下语句创建:alter database add standby logfile group 10('/u01/oradata/orcl/sdredo01.log','/u01/oradata/orcl/sdredo02.log') size 50m;在创建standby redo log的规则限制与创建redo log类似(多路复用,SIZE等等),MAXLOGFILES和MAXLOGMEMBERS两个参数同样对standby redo log组与成员的限制起作用。当然我们可以通重建control file来修改此限制。通过语句SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;查询创建了的standby redo log。具体需要创建多少个standby redo log group可以根据公式:(maximum number of logfiles for each thread + 1) * maximum number of threads计算出来。
4. 修改相关参数
DG相关的参数大致可以分为两部分,一部分是控制redo传输的,另外一部分是声明role的。具体参数的含义请参考官方文档,这里就不做过多解释。以下将分别给出两部分参数的例子(primary role:chicago;physical standby role:boston),只供参考,具体的参数设置根据实际情况来定。
控制redo传输的参数:
DB_NAME=chicago
DB_UNIQUE_NAME=chicago
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
声明role的参数:
FAL_SERVER=boston
FAL_CLIENT=chicago
DB_FILE_NAME_CONVERT='boston','chicago'
LOG_FILE_NAME_CONVERT='/arch1/boston/','/arch1/chicago/','/arch2/boston/','/arch2/chicago/'
STANDBY_FILE_MANAGEMENT=AUTO
由于LOG_ARCHIVE_DEST_n参数有10个,所以我们最多可以配置9个standby database。而DB_FILE_NAME_CONVERT及LOG_FILE_NAME_CONVERT参数为可选,当standby database的文件结构或文件名与primary database的不一样的时候就需要了。STANDBY_FILE_MANAGEMENT设置为AUTO是为了保证主库的增加或删除datafile的时候备库能自动进行。
5. 配置监听
通过修改tnsname.ora的方式为physical standby database 增加一个监听。此监听名要与LOG_ARCHIVE_DEST_2='SERVICE=监听名的设置相同。
6. 创建primary database备份集
使用上面修改的pfile将数据库启动到mount状态,使用rman备份全库,rman的使用请参考官方文档,例子如下:
connect target /
run {
allocate channel c1 type disk;
backup format '/u01/temp/primary_%t' full database;
release channel c1;
}
创建standby controlfile
SQL> alter database create standby controfile as '/u01/temp/control01.ctl';
完成以后将之前的参数文件pfile,监听文件tnsname,rman备份集,standby控制文件,口令文件等文件拷贝到physical standby的服务器上。
完成了primary database上的配置以后,接下来就要进行physical standby database上的配置了。
二. 备用数据库(physical standby database)
1. 创建文件结构
physical standby database的文件结构可以与primary database相同也可以不同,主要取决于实际需求。如果文件结构不同则需要配置参数DB_FILE_NAME_CONVERT及LOG_FILE_NAME_CONVERT。创建好文件结构以后将相关的文件拷贝到相应的位置上。
2. 设置参数文件
直接编辑从primary database拷贝过来的pfile,对里面的部分参数进行修改就可以了。这些参数分别是DB_UNIQUE_NAME,DB_FILE_NAME_CONVERT(可选),LOG_FILE_NAME_CONVERT(可选),LOG_ARCHIVE_DEST_1,LOG_ARCHIVE_DEST_2,FAL_SERVER,FAL_CLIENT。以下是与之前的例子相对应的physical standby database的参数配置(primary role:chicago;physical standby role:boston),其中红色部分为需要修改的部分:
控制redo传输的参数:
DB_NAME=chicago
DB_UNIQUE_NAME=boston
LOG_ARCHIVE_CONFIG='DG_CONFIG=(chicago,boston)'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/boston/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
声明role的参数:
DB_FILE_NAME_CONVERT='chicago','boston'
LOG_FILE_NAME_CONVERT='/arch1/chicago/','/arch1/boston/','/arch2/chicago/','/arch2/boston/'
FAL_SERVER=chicago
FAL_CLIENT=boston
3. 配置监听
将primary database拷贝过来的tnsname.ora文件替换相对应位置的tnsname.ora文件完成physical standby database监听的配置,当然也可以通过NETCA配置。配置完成以后在主备库使用TNSPING相互测试监听。
4. 启动standby database
在之前已经将从primary database传输过来的文件拷贝到了相应的位置,并完成了参数文件及监听的配置,到这一步physical standby database的搭建基本完成了,接下来就是通过修改后的pfile完成启动physical standby database以及启用redo应用。使用如下语句:
SQL> STARTUP MOUNT PFILE='/u01/pfile';
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
三. 验证
验证就很简单了,在primary database强制切换日志,然后查询physical standby database的V$ARCHIVED_LOG,看归档日志是否传输到了physical standby database所指定的日志归档位置及是否被应用。查询语句如下:
standby: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2 FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
3 rows selected.
primary: SQL> ALTER SYSTEM SWITCH LOGFILE;
standby: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2 FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
11 11-JUL-02 17:51:03 11-JUL-02 18:34:11
4 rows selected.
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG
2 ORDER BY SEQUENCE#;
SEQUENCE# APP
--------- ---
8 YES
9 YES
10 YES
11 YES
4 rows selected.
如果顺利的话道这一步physical standby database的搭建基本就完成了,当然还有一些工作需要做,比如创建spfile等。