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
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/