Oracle 数据库data guard 容灾配置方案 方案设计者:巩利民 2009年4月15日
一、data guard简单介绍
Data Guard 是一个集合,由一个primary 数据库(生产数据库)及一个或多个standby 数据库(最多9 个)组成。组成Data Guard 的数据库通过Oracle Net 连接,并且有可能分布于不同地域。Data Guard与操作系统没有任何关系(但操作系统的类型必须是一样的,版本可以不同),只要oracle数据库能够连通就可以了。
Standby又可以分为物理Standby和逻辑Standby,二者是有区别的,区别主要体现在对数据的真实性的写照上。物理Standby就像我们照镜子一样的,完全真实的呈现,逻辑Standby就像一位画家给我们素描。根据两种standby的不同特点,我们这里采用物理Standby来实现容灾。
Data Guard的要求是数据库版本必须是企业版的数据库,标准版数据库不支持DG操作。 二、Data Guard的配置方法 1、准备工作
不管物理standby 还是逻辑standby,其初始创建都是要依赖primary 数据库,因此这个准备工作中最重要的一部分,就是对primary 数据库的配置。 1)打开Forced Logging 模式
将primary 数据库置为FORCE LOGGING 模式。通过下列语句:
SQL> alter database force logging;
注:这个操作在后期的standby数据库创建完成后也要执行这个操作此命令是设置切换后日志能够正常传送 2)创建备份
shutdown冷备(主要是数据库的数据文件、日志文件、控制文件等).
3)将primary置为archive log 状态:(现在的数据库已经在归档模式下了,所以这一步就可以省略了) C:>sqlplus/nolog
Sql>conn sys/ennoracle as sysdba 再执行以下命令 Sql>shutdown immediate
Sql>Startup mount(只能在mount格式下,不能再open下) Sql>alter database archivelog; Sql>alter system archive log start 修改primary 库的配置文件。 2、创建步骤
1)创建备份(手工复制数据文件或通过RMAN) ---primary 库操作 2)创建控制文件--primary 库操作
通过下列语句为standby 数据库创建控制文件
SQL> alter database create standby controlfile as 'd:\\backup\\jsspdg01.ctl';
注:控制文件通常需要有多份,要么手工将上述文件复制几份,要么用命令多创建几个出来。另外,创建完控制文件之后到standby 数据库创建完成这段时间内,要保证primary 数据库不再有结构性的变化(比如增加表空间等等),不然primary 和standby 同步时会有问题。 3)创建初始化参数文件 ? 创建客户端初始化参数文件
SQL> create pfile='d:\\backup\\inite3suite.ora' from spfile; 4)修改初始化参数文件中的参数
根据实际情况修改,注意primary 和standby 不同角色的属性配置,注意文件路径。 然后要重建spfile文件 通过pfile 重建spfile SQL> shutdown immediate SQL>startup pfile=‘’;
SQL> create spfile from pfile='inite3suite.ora'; SQL> shutdown immediate SQL>startup
5)配置standby 数据库 拷贝文件到standby服务器 a.创建服务器端的初始化文件
b.创建新的OracleService(windows 环境下需要)。 c.创建密码文件,注意保持密码与primary 数据库一致。
d.配置监听并启动
e.修改primary 和standby 的tnsnames.ora,各自增加对应的Net Service Name。 6)启动standby
注意,物理standby 极少情况下可以以read-write 模式打开,某些情况下可以以readonly模式打开,所以默认情况下,加载到mount 状态即可。
SQL> STARTUP MOUNT; 启动redo 应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 启动实时应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
提示:disconnect from session 子句并非必须,该子句用于指定启动完应用后自动退出到命令操作符前,如果不指定的话,当前session 就会一直停留处理redo 应用,如果想做其它操作,就只能新建一个连接。 7)停止standby
正常情况下,我们停止也应该是先停止redo 应用,可以通过下列语句:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CALCEL;
然后再停止standby 数据库 SQL> SHUTDOWN IMMEDIATE;
当然你非要直接shutdown 也没问题,dg 本来就是用于容灾的,别说你生停standby,就是直接拔电源也不怕。 三、创建实例
1、配置primary 的pfile 即 init.ora ########################################### # Cache and I/O
########################################### 初始化参数文件增加如下内容: DB_UNIQUE_NAME=e3suite
LOG_ARCHIVE_CONFIG='DG_CONFIG=(e3suite, e3suiteb)’ LOG_ARCHIVE_DEST_1='LOCATION=
R:\\ORADATA\\admin\\E3SUITE\\ArchiveLogs\\
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME= e3suite’ LOG_ARCHIVE_DEST_2='SERVICE= E3SUITEB LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME= E3SUITEb'
LOG_ARCHIVE_DEST_STATE_1=ENABLE LOG_ARCHIVE_DEST_STATE_2=ENABLE REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE log_archive_min_succeed_dest=1