Oracle 11g Data Guard
与Production DB同一台Server上建立Standby库,production db的名称为
test11g, Standby库名为teststby . 使用RMAN duplicate来创建standby
系统。 通过DBCA已经建立了一个teststby的库结构(作为standby DB)。
备注: 不同Server建立的话,可以建立相同DBNAME,SID的实例, 只是参数配置
时候db_unique_name 不同即可 。
1. 连接Produciton DB, 做RMAN 备份, 采用nocatalog方式 。
dbtest$mkdir backup
dbtest$rman target /
RMAN> backup device type disk format '/data/backup/%U' database plus archivelog ;
RMAN> backup device type disk format '/data/backup/%U' current controlfile for standby ;
2. 连接Standby DB, 拷贝备份集到相关目录,这里由于在同一个Server上,
也使用上面的备份目录 /data/backup , 所以备份文件不用拷贝。
3. 在Standby机器上tnsnames.ora中加入连接primary db的别名test11g, 用于RMAN
duplicate 在standby上恢复时候的远程连接别名 .
TEST11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.161.24.133)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test11g)
)
)
4. 注意建立Standby需要保持primary与Standby库中的sys用户密码一致,一般我们
可以拷贝orapwSID文件,也可以重建一个orapwd, 注意这里我们在同一个server上,
sid是不一样的。 这里为了方便,可以直接修改两个库的sys密码。如果sys密码不记得,
可以更改密码,也可以干脆两库都重建也行 。
$ orapwd file=orapwtest11g password=sys ignorecase=y
$ orapwd file=orapwteststby password=sys ignorecase=y
备注: 密码不一样或文件名问题可能导致后面redo传输不能成功 。
5. 由于primary及standby库中的datafile文件位置不一致,那么我们需要对Standby库
的spfile进行调整及参数配置,比如db_file_name_convert, log_file_name_convert。
Standby DB上的参数修改如下(其他相关参数在建立standby完毕后配置):
*.audit_file_dest='/u01/product/admin/teststby/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/data/teststby/control01.ctl','/u01/product/flash_recovery_area/teststby/control02.ctl'
*.db_block_size=16384
*.db_domain=''
*.db_name='test11g'
*.db_unique_name='teststby'
*.global_names=TRUE
*.db_recovery_file_dest='/u01/product/flash_recovery_area'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='/u01/product'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=teststbyXDB)'
*.log_archive_dest_1='LOCATION=/data/teststby/arch'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=209715200
*.processes=400
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=445
*.sga_target=629145600
*.undo_tablespace='UNDOTBS1'
*.standby_file_management='AUTO'
*.db_file_name_convert='/data/test11g/','/data/teststby/'
*.log_file_name_convert='/data/test11g/','/data/teststby/'
然后使之在standby库上生效:
SQL> shutdown immediate
SQL> create spfile from pfile='/u01/initstby.ora' ;
6. 在Standby上,进入到存放备份集的/data/backup目录,如果primary及
standby是同一个server, 那么需要切换ORACLE_SID到standby sid, 然后准备
开始恢复RMAN备份集到Standby 。 首先将Standby库置为nomount模式,然后
进行standby库的建立 :
SQL> startup nomount ;
dbtest$rman target sys/oracle@test11g auxiliary /
Recovery Manager: Release 11.2.0.1.0 - Production on Tue Aug 31 17:41:56 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: TEST11G (DBID=879780823)
connected to auxiliary database: TEST11G (not mounted)
RMAN> duplicate target database for standby nofilenamecheck;
7. 完成后,在Standby 上alert log或通过查询v$database中的open_mode字段
可以看到standby上的库处于mounted状态。
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
8. 我们拷贝后期的一些归档到standby对应的归档目录,手工进行恢复测试。
dbtest$cp 1_9* 1_10* /data/teststby/arch/
SQL> recover standby database;
9. 开始设置自动传输归档文件进行恢复的参数。
首先,在primary db上设置参数 (需要先在primary 上tnsnames.ora中设置连接
到standby的别名standby):
standby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = teststby)
)
)
primary下参数修改如下:
(备注: ARCH模式的归档传输在11g中不是默认方式,11g中的默认是LGWR, 所以我们需要
在 *.log_archive_dest_2 属性中加入 ARCH , 还有
*.log_archive_config='DG_CONFIG=(test11g,teststby)' 参数要么在priamry及standby
上都加上,要么都不加入,否则会有问题 。)
*.log_archive_config='DG_CONFIG=(test11g,teststby)'
-- 其中的test11g 及 teststby 分别代表primary及standby上的db_unique_name .
*.db_name='test11g'
*.db_unique_name='test11g'
*.log_archive_dest_1='location=/data/test11g/arch valid_for=(all_logfiles,all_roles) db_unique_name=test11g'
*.log_archive_dest_2='service=standby ARCH valid_for=(online_logfiles,primary_role) db_unique_name=teststby'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
/*以下部分为主机切换为备库使用,如果不需要可以不设置*/
*.fal_server=standby
*.fal_client=primary
*.standby_file_management=auto
#如果主备库文件或路径不同
*.db_file_name_convert='/data/test11g/','/data/teststby/'
*.log_file_name_convert='/data/test11g/','/data/teststby/'
重新启动DB使之生效 。
10. 然后在standby db上设置参数 (如果需要switch角色,需要先在Standby上
tnsnames.ora中设置连接到primary的别名primary):
primary =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbtest)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test11g)
)
)
Standby db上参数修改如下:
*.db_name='test11g'
*.db_unique_name='teststby'
*.log_archive_config='DG_CONFIG=(test11g,teststby)'
*.log_archive_dest_1='location=/data/teststby/arch valid_for=(all_logfiles,all_roles) db_unique_name=teststby'
*.log_archive_dest_2='service=primary ARCH valid_for=(online_logfiles,primary_role) db_unique_name=test11g'
--备库中log_archive_dest_2可以不用设置,主要用于主库备库切换
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.log_archive_min_succeed_dest=1
*.standby_file_management='AUTO'
*.fal_server='primary' -- 在tnsnames.ora 中的服务名
*.fal_client='standby' -- 在tnsnames.ora 中的服务名
--- 以下两参数是为了切换用,如果后期不需要switch, 可以不用设置
*.db_file_name_convert='/data/teststby/','/data/test11g/'
*.log_file_name_convert='/data/teststby/','/data/test11g/'
备注: 10G下的standby_archive_dest 参数在11g中已经废弃 。
11. 在Standby上是修改的参数生效,并开启为 managed standby 模式 :
SQL> create spfile from pfile='/u01/initstby.ora';
SQL> startup nomount
SQL> alter database mount standby database;
SQL> alter database recover managed standby database disconnect from session ;
测试是否APPLY LOG正常,在Primary DB上 SQL> alter system switch logfile;
查看是否在standby上log_archive_dest_1 对应的目录下有相应的归档 。然后在alert log
中查看是否已经恢复 。还可以在primary 中查看 v$archive_dest 中的状态值。
至此,常规的物理Standby配置成功。下面我们准备开始设置11g的active data guard,使
之能够open read only的同时可以进行apply log . 这里假设还是以ARCH模式传输归档。
12 . 在Standby库中,11g 以只读打开库应用日志:
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
SQL> recover managed standby database cancel;
SQL> alter database open read only;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
SQL> alter database recover managed standby database disconnect from session;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
测试在stamdby恢复的时候进行查询(可以使查询及恢复持续进行观察):
SQL> select * from tony.test2 ;
成功.....
-----------
13. 下面我们测试最大数据保护和最大可用性模式,采用lgwr异步传输归档的情况。
需要修改原来的在primary上的ARCH最大性能保护模式为现在的LGWR异步传输(ASYNC)
模式来进行 APPLY LOG . 我们在原来arch模式下进行修改。
首先要在standby上加入standby redo logfile. standby redo日志文件组数要
比primary 数据库的online redo 日志文件组数至少多一组, 且与primary db上的
online redo log大小要一致 。如果后期想主备库相互切换的话,在主库及备库上
都要加入standby redo logfile, 这里我们两边都加入。
建议:
Standby redo log 组数公式>=(每个instance日志组个数+1)*instance个数
Oracle文档原文是:
(maximum number of logfiles for each thread + 1) * maximum number of threads
14. 先在standby一端加入,由于primary db中有3组online redo, 这里standby上的
standby redo log (注意不是online redo log哦) 加入4组 (单机,不是RAC, 只有
一个实例): 注意group的编号。
SQL> recover managed standby database cancel;
alter database add standby logfile group 10 ('/data/teststby/standbyredo10.dbf') size 50m ;
alter database add standby logfile group 11 ('/data/teststby/standbyredo11.dbf') size 50m ;
alter database add standby logfile group 12 ('/data/teststby/standbyredo12.dbf') size 50m ;
alter database add standby logfile group 13 ('/data/teststby/standbyredo13.dbf') size 50m ;
在priamry DB段修改参数log_archive_dest_2 :
alter system set log_archive_dest_2='service=standby LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=teststby';
在standby DB段修改参数(如果这个可选参数有设置的话):
alter system set log_archive_dest_2='service=primary LGWR ASYNC valid_for=(online_logfiles,primary_role) db_unique_name=test11g';
然后将备库standby置于实时日志应用与查询模式。
SQL> alter database recover managed standby database using current logfile disconnect;
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY WITH APPLY
备注: 使用using current logfile 应用日志是当日志传到standby redo log的时候就去应用,
是real-time的,必须要有standby redo log。而没有using current logfile是去apply standby
archived log.
15. 最后在primary db上加入standby redo logfile, 这一步是可选步骤,主要是为
主备库相互切换。
alter database add standby logfile group 10 ('/data/test11g/standbyredo10.dbf') size 50m ;
alter database add standby logfile group 11 ('/data/test11g/standbyredo11.dbf') size 50m ;
alter database add standby logfile group 12 ('/data/test11g/standbyredo12.dbf') size 50m ;
alter database add standby logfile group 13 ('/data/test11g/standbyredo13.dbf') size 50m ;
通过V$STANDBY_LOG视图验证standby redo log文件组是否成功创建 .
16. 激活物理Standby和激活9i,10g的一样(注意激活后修改参数及temp表空间)。
SQL> recover managed standby database cancel;
SQL> alter database activate standby database;
SQL> alter database open ;
SQL> shutdown immediate ;
SQL> startup ;
备注: 监听文件一般格式如下,一旦激活standby后,如果SID与primary 库不一致,可能
导致需要更改大量客户端tnsnames.ora文件,我们可以设置激活后的standby 中的global_dbname,
使之与primary DB的SID(也就是客户端设置的SERVICE_NAME)一致 。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/product/oracle)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = teststby)
(ORACLE_HOME = /u01/product/oracle)
(GLOBAL_DBNAME = test11g) ------ 修改这里的teststby为test11g即可。
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.161.24.133)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
17. primary 及standby的swith over 用的比较少,这里简单介绍一下 。
具体切换的顺序:先从主库到备用,再从备库到主库
确保两库参数配置ok, primary是open, standby是mount状态,及没有活动会话。
在primarydb上:
SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO STANDBY
切换为standby :
SQL> alter database commit to switchover to physical standby with session shutdown;
然后shutdown, 开启为standby模式。
然后登陆standby DB, 同样select switchover_status from v$database;
SQL> alter database commit to switchover to physical primary;
SQL> alter database open ;
登陆现在的standby库:
SQL> alter database recover managed standby database disconnect from session ;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-672479/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-672479/