创建10g Data Guard(物理standby)

1、对primary database的配置
1)将数据库置于archivelog、force logging模式
SQL> archive log list
数据库日志模式            存档模式
自动存档             启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     7
下一个存档日志序列   9
当前日志序列           9
SQL> select force_logging from v$database;

FOR
---
YES

2)最好将主库也配置为可以接收redo日志,即配置standby redo log,在必要时,可以快速地将主库切换为备库(本次暂不配置)

3)修改主库的参数文件(主库是orcl,备库是orcldg)
db_name=orcl --主库和备库的db_name是相同的,但是有不同的db_unique_name
db_unique_name=orcl

log_archive_config='dg_config=(ORCL,ORCLDG)' --设置成data guard环境中所有数据库的db_unique_name

control_files='E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL','E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL','E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL'

log_archive_dest_1='location=E:\oracle\product\10.2.0\arch valid_for=(all_logfiles,all_roles) db_unique_name=ORCL'
log_archive_dest_2='service=7502 async valid_for=(online_logfiles,primary_role) db_unique_name=ORCLDG'
(
db_unique_name的意思目前不太理解,现在就理解为需要将它设置为location或service对应的数据库的db_unique_name;
valid_for中的第一个参数有三个值:all_logfiles/online_logfile/standby_logfile
valid_for中的第二个参数有三个值:all_roles/primary_role/standby_role
比如log_archive_dest_2中valid_for=(online_logfiles,primary_role)表示log_archive_dest_2这个参数仅在当前实例为primary_role,且归档的是online redo log,而非standby redo log时有效。
)
log_archive_dest_state_1=enable
log_archive_dest_state_2=enable

log_archive_format='ARC%S_%R.%T'  --%T:thread number;%S:sequence number;%R:resetlogs id
remote_login_passwordfile='EXCLUSIVE'

这些参数只是跟data guard相关的primary database的参数,其他像trace所在目录等都还是需要根据实际情况修改的。

根据上述修改pfile参数,并创建spfile,启动主库,确认各参数都是对的

2、使用RMAN连接到主库,创建主库数据文件的镜像副本(联机创建),并拷贝到备库上
rman target sys/oracle@7501 nocatalog
RMAN> backup as copy db_file_name_convert=('E:\oracle\product\10.2.0\oradata\ORCL\','E:\oracle\product\10.2.0\oradata\ORCLDG\') database;
启动 backup 于 2014-03-03 15:43:28
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00002 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\UNDOTBS01.DBF 标记 = TAG20140303T154328 recid = 15 时间戳 = 841247048
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:45
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00001 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\SYSTEM01.DBF 标记 = TAG20140303T154328 recid = 16 时间戳 = 841247079
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:35
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00003 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\SYSAUX01.DBF 标记 = TAG20140303T154328 recid = 17 时间戳 = 841247124
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:45
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00005 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\EXAMPLE01.DBF 标记 = TAG20140303T154328 recid = 18 时间戳 = 841247138
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00004 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\USERS01.DBF 标记 = TAG20140303T154328 recid = 19 时间戳 = 841247144
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:07
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00006 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TTS01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\TTS01.DBF 标记 = TAG20140303T154328 recid = 20 时间戳 = 841247149
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件 fno=00007 name=E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TS01.DBF
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\TS01.DBF 标记 = TAG20140303T154328 recid = 21 时间戳 = 841247150
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
通道 ORA_DISK_1: 启动数据文件副本
复制当前控制文件
输出文件名 = E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\CONTROLFILE\O1_MF_TAG20140303T154328_9K8DSGNJ_.CTL 标记 = 

TAG20140303T154328 recid = 22
 时间戳 = 841247151
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
通道 ORA_DISK_1: 启动全部数据文件备份集
通道 ORA_DISK_1: 正在指定备份集中的数据文件
在备份集中包含当前的 SPFILE
通道 ORA_DISK_1: 正在启动段 1 于 2014-03-03 15:45:52
通道 ORA_DISK_1: 已完成段 1 于 2014-03-03 15:45:53
段句柄=E:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\BACKUPSET\2014_03_03\O1_MF_NNSNF_TAG20140303T154328_9K8DSJPY_.BKP 标记=TAG20140303T154328 注
释=NONE
通道 ORA_DISK_1: 备份集已完成, 经过时间:00:00:02
完成 backup 于 2014-03-03 15:45:53

--通过这个参数db_file_name_convert的转换,直接把数据文件的镜像副本放到E:\oracle\product\10.2.0\oradata\ORCLDG\(这个是存放备库数据文件的路径)下了,这样就省略了拷贝的过程

3、在主库上为备库创建控制文件(联机创建),并拷贝到备库上
alter database create standby controlfile as 'c:\control01dg.ctl';
并手工拷贝2份control02dg.ctl、control03dg.ctl,然后把control01dg.ctl、control02dg.ctl、control01dg.ctl移动到E:\oracle\product\10.2.0\oradata\ORCLDG下

4、为备库创建一个初始化参数文件,可从主库创建而来create pfile from spfile,修改后,拷贝到备库上
db_name=orcl --db_name与主库一致
db_unique_name=orcldg --db_unique_name区别于主库

log_archive_config='dg_config=(ORCL,ORCLDG)' 

control_files='E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\CONTROL01DG.CTL','E:\ORACLE\PRODUCT\10.2.0

\ORADATA\ORCLDG\CONTROL02DG.CTL','E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\CONTROL03DG.CTL' 

log_archive_dest_1='location=E:\oracle\product\10.2.0\arch2 valid_for=(all_logfiles,all_roles) db_unique_name=ORCLDG' --这个参数设置的是从主库接收过来的redo日志产生的归档存放路径
log_archive_dest_2='service=7501 async valid_for=(online_logfiles,primary_role) db_unique_name=ORCL' --这个参数目前是忽略的,因为只有在primary_role的情况下才生效,现在是standby_role

log_archive_dest_state_1=enable
log_archive_dest_state_2=enable

log_archive_format='ARC%S_%R.%T'

remote_login_passwordfile='EXCLUSIVE'

fal_server=7501 --如果备库归档日志有缺失的话,将从fal_server指定的库取过来

db_file_name_convert='E:\oracle\product\10.2.0\oradata\ORCL\','E:\oracle\product\10.2.0\oradata\ORCLDG\' --前面是主库的数据文件的路径,后面是备库的数据文件的路径,因为我们会将主库的数据文件拷贝到备库的相关路径下,但是oracle并不知道啊,我们就需要这个方式来通知他

log_file_name_convert='E:\oracle\product\10.2.0\oradata\ORCL\','E:\oracle\product\10.2.0\oradata\ORCLDG\' --主备库联机重做日志文件的路径切换

standby_file_management=auto --设置为auto表示,在主库上添加和删除数据文件后,备库上将会有相应的变化

确保主库和备库上COMPATIBLE参数是一致的,如果不一致的话,可能会导致redo不能正常传送

5、备库的口令文件必须与主库的口令文件一致,可直接拷贝过去,以后如果主库的口令文件有任何变化的话,都需要重新拷贝

6、如果备库是在window上,先创建一个oracle服务
oradim -new -sid orcldg -startmode manual

7、为备库配置一个监听,并配置本地网络服务名,确保主库和备库之间网络是互通的
listener.ora : --为主库和配置都配置了静态注册
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
      (SID_NAME = PLSExtProc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL1)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
      (SID_NAME = ORCL)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCLDG1)
      (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
      (SID_NAME = ORCLDG)
    )
  )

LISTENER =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.75)(PORT = 1521))
  )

tnsnames.ora如下:
7501 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.75)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL1)
    )
  )

7502 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.75)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCLDG1)
    )
  )

8、根据上述的初始化参数文件为备库创建spfile,启动standby database到mount状态

9、为备库创建standby redo log(oracle建议备库的standby redo log与主库上的redo log都是同一个大小,并且备库上的日志组数比主库上的日志组数多一组)

主库上有3个日志组,每组中有一个日志文件,每个日志文件的大小为50M,现为备库创建4个standby redo日志组

alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCLDG\DGREDO01.log' size 50M;--不指定日志组号,都会作为新增的日志组
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCLDG\DGREDO02.log' size 50M;
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCLDG\DGREDO03.log' size 50M;
alter database add standby logfile 'E:\oracle\product\10.2.0\oradata\ORCLDG\DGREDO04.log' size 50M;

SQL> select t.group#,t.thread#,t.sequence#,t.bytes,t.status from v$log t;--这些是从主库中转换过来的联机重组日志,备库磁盘上并没有创建相应的联机重组日志
 
    GROUP#    THREAD#  SEQUENCE#      BYTES STATUS
---------- ---------- ---------- ---------- ----------------
         1          1          8   52428800 INACTIVE
         3          1          7   52428800 INACTIVE
         2          1          9   52428800 CURRENT
 
SQL> select t.group#,t.status,t.type,t.member from v$logfile t;--包含online redo log和standby redo log的信息
 
    GROUP# STATUS  TYPE    MEMBER
---------- ------- ------- --------------------------------------------------------------------------------
         3         ONLINE  E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO03.LOG
         2         ONLINE  E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO02.LOG
         1         ONLINE  E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\REDO01.LOG
         4         STANDBY E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\DGREDO01.LOG
         5         STANDBY E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\DGREDO02.LOG
         6         STANDBY E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\DGREDO03.LOG
         7         STANDBY E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCLDG\DGREDO04.LOG
 
7 rows selected
 
SQL> select t.group#,t.dbid,t.thread#,t.sequence#,t.bytes,t.status from v$standby_log t;--新创建的standby redo log相关信息
 
    GROUP# DBID                                        THREAD#  SEQUENCE#      BYTES STATUS
---------- ---------------------------------------- ---------- ---------- ---------- ----------
         4 UNASSIGNED                                        0          0   52428800 UNASSIGNED
         5 UNASSIGNED                                        0          0   52428800 UNASSIGNED
         6 UNASSIGNED                                        0          0   52428800 UNASSIGNED
         7 UNASSIGNED                                        0          0   52428800 UNASSIGNED

11、为备库创建online redo log,虽然这步是可选的,但是最好创建一下,这样备库就可以在必要时迅速转换为主库,而最好在主库上也创建standby redo log(本次暂不考虑)

12、开始redo应用
alter database recover managed standby database using current logfile disconnect from session;
--disconnect from session表示运行在后台
--using current logfile表示实时应用

13、验证刚创建的物理standby是否能正常运作
主库上往表中插入一些记录,提交,切换日志,可在主库(E:\oracle\product\10.2.0\arch)和备库(E:\oracle\product\10.2.0\arch2)上看到都产生了归档日志,可在备库的v$archived_log查看是否有相应的记录,根据applied字段查看是否已应用。
可暂时停止备库的recover操作:alter database recover managed standby database cancel;打开备库,查看主库上的变更是否已经同步到备库上。



参考资料:
oracle联机文档:Oracle Data Guard Concepts and Administration.pdf
三思笔记:一步一步学DataGuard

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26524307/viewspace-1101045/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26524307/viewspace-1101045/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值