Oracle10G(DataGuard灾备配置)

ORACLE DATA GUARD 容灾恢复解决方案

一、 环境

Windows 20003 server Oracle 10.2.0.1

主机:10.168.198.8(primary) 备机:10.168.198.9(standby)

二、 准备条件

分别在primary、standby上安装数据库,并自动创建实例;安装路径、数据库实例名(cz2013)和密码都设置成一样

三、 Primary操作

1、 设置主数据库为force logging 模式

SQL>sqlplus \SQL>alter database force logging;

2、 设置主数据库为归档模式,并以mount 启动数据库

SQL>archive log list SQL>shutdown immediate SQL>startup mount

SQL>alter database archivelog; SQL>archive log list

3、 添加\备用联机日志文件\

SQL>select * from v$logfile;

再添加:

alter database add standby logfile group 4 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo04.log') size 50m;

alter database add standby logfile group 5 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo05.log') size 50m;

alter database add standby logfile group 6 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo06.log') size 50m;

alter database add standby logfile group 7 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo07.log') size 50m;

4、 创建主库的初始化参数给备库用

SQL>Create pfile from spfile;

产生的文件名为initcz2013.ora 存放目录默认放在$ORACLE_HOME/database下

5、 在主库创建监听和配置tnsnams.ora

listener.ora配置如下: SID_LIST_LISTENER中添加:

(SID_DESC =

(GLOBAL_DBNAME = cz2013)

(ORACLE_HOME = D:\\oracle\\product\\10.2.0\\db_1)

1

ORACLE DATA GUARD 容灾恢复解决方案

(SID_NAME = cz2013) )

tnsnames.ora配置如下: 添加:

primary =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.198.8)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cz2013) ) ) standby =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.198.9)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cz2013) ) )

6、 在initcz2013.ora中添加以下内容:

*.log_archive_format='%T%S%r.ARC' *.DB_UNIQUE_NAME='primary'

*.log_archive_config='DG_CONFIG=(primary,standby)'

*.log_archive_dest_1='location=D:\\oracle\\product\\10.2.0\\oradata\\arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary'

*.log_archive_dest_2='SERVICE=standby arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'

*.STANDBY_FILE_MANAGEMENT=AUTO *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.FAL_SERVER='standby' *.FAL_CLIENT='primary'

关闭数据库,在用initcz2013.ora重启

SQL>startup pfile='D:\\oracle\\product\\10.2.0\\db_1\\database\\initcz2013.ora';

7、 用Rman备份,不用停机

$ rman target /

RMAN>backup full format 'D:/FULL_%d_%T_%s.bak' database include current controlfile for standby; RMAN>sql 'alter system archive log current';

RMAN>Backup ArchiveLog all format='D:/arch_%d_%T_%s.bak';

备份完后将备份文件拷到standby上同样的目录,强调:同样的目录(D盘),在standby进行rman 恢复即可

8、 启动主数据库

2

ORACLE DATA GUARD 容灾恢复解决方案

SQL>startup

四、 Standby操作

1、 以mount 启动备库,添加\备用联机日志文件\

SQL>sqlplus \SQL>shutdown immediate SQL>startup mount

先查看日志文件位置:

SQL>select * from v$logfile;

再添加:

alter database add standby logfile group 4 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo04.log') size 50m;

alter database add standby logfile group 5 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo05.log') size 50m;

alter database add standby logfile group 6 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo06.log') size 50m;

alter database add standby logfile group 7 ('D:\\ORACLE\\PRODUCT\\10.2.0\\ORADATA\\CZ2013\\redo07.log') size 50m;

2、 在备库创建监听和配置tnsnams.ora (同主库) 3、 测试主备之间网络连通

Primary:

C:>lsnrctl start C:>tnsping standby

Standby:

C:>lsnrctl start C:>tnsping primary

4、 配置备库初始化参数 recover

编辑$ORACLE_HOME/database目录下的initcz2013.ora添加以下内容

*.log_archive_format='%T%S%r.ARC' *.DB_UNIQUE_NAME='standby'

*.log_archive_config='DG_CONFIG=(primary,standby)'

*.log_archive_dest_1='location=D:\\oracle\\product\\10.2.0\\oradata\\arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'

*.log_archive_dest_2='SERVICE=primary arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary'

*.STANDBY_FILE_MANAGEMENT=AUTO *.LOG_ARCHIVE_DEST_STATE_1=ENABLE *.LOG_ARCHIVE_DEST_STATE_2=ENABLE *.FAL_SERVER='primary' *.FAL_CLIENT='standby'

5、 启动备用数据库

3

ORACLE DATA GUARD 容灾恢复解决方案

SQL>sqlplus \

SQL>startup nomount pfile='D:\\oracle\\product\\10.2.0\\db_1\\database\\initcz2013.ora';

重启主、备库监听,用Rman还原数据库

$rman target sys/admin@primary auxiliary /

RMAN>duplicate target database for standby dorecover nofilenamecheck; SQL>alter database mount standby database;

--该语句如果报错可忽略

SQL>alter database recover managed standby database disconnect from session;

五、 测试

注意Data Guard 启动顺序:

? 启动顺序:先standby ,后primary; ? 关闭顺序:先primary 后standby;

1、 在备库将实例启动到mount 状态:

SQL>startup nomount;

SQL>alter database mount standby database;

SQL>alter database recover managed standby database cancel;--该语句如果报错,可忽略 SQL>alter database recover managed standby database disconnect from session;

#如果有需要应用的日志并想手工应用,可以运行如下命令 SQL>recover automatic standby database;

2、 在主库启动实例:

SQL>startup;

3、 在主库验证日志:

SQL>alter system switch logfile;

SQL>select max(sequence#) from v$archived_log;

4、 在备库检查日志是否和主库一致

SQL>select max(sequence#) from v$archived_log;

注:主备查询结果一致,Data Guard 搭建结束。

六、 备库standby和read only切换

1、 主库创建一个表,用于备库打开时验证数据

SQL>create table test02 as select * from v$parameter; SQL>commit;

SQL>alter system switch logfile;

2、 将备库启动到read only状态

1) 如果standby db处于mount状态,则可以通过下面的命令启动到read-only状态

SQL>select open_mode,database_role from v$database; OPEN_MODE DATABASE_ROLE

-------[oracle@standbydb ~]$ sqlplus / as sysdba --- ----------------

MOUNTED PHYSICAL STANDBY

4

ORACLE DATA GUARD 容灾恢复解决方案

SQL>alter database recover managed standby database cancel; SQL>alter database open;

2) 如果standby db数据库处于关闭状态,则执行下面的命令启动到read-only状态

SQL>startup

3、 切换回standby状态.

断开所有链接,执行以下语句

SQL>alter database recover managed standby database disconnect from session; SQL>select open_mode,database_role from v$database; OPEN_MODE DATABASE_ROLE ---------- ----------------

MOUNTED PHYSICAL STANDBY

注:在standby db打开的过程中,主库的日志文件还是传递过来,只不过不做日志的应用。所以standby db打开的时间越长,以后做日志应用的时间就越长,如果主库故障,则启用备库到正常状态的时间就越长,这是需要您来权衡的。

注:如果切换后发现日志不能同步,重新切换一下即可

七、 主/备库切换

一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATA GUARD环境不会被破坏,原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。 在进行DATA GUARD的物理STANDBY切换前需要注意: ? 确认主库和从库间网络连接通畅; ? 确认没有活动的会话连接在数据库中;

? PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态; ? 确保STANDBY数据库处于ARCHIVELOG模式;

? 如果设置了REDO应用的延迟,那么将这个设置去掉;

? 确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。

1、 主库切换成备库

1) 查看switchover 状态

SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;

如果返回to standby

SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;

否则

SQL>Alter database commit to switchover to physical standby with session shutdown;

2) 启动到mount和应用日志状态

SQL>shutdown immediate SQL>startup nomount

SQL>alter database mount standby database;

SQL>alter database recover managed standby database disconnect from session;

查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; SQL>select status,database_mode from v$archive_dest_status;

2、 备库切换成主库

1) 查看switchover状态

5

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4