Oracle 12C Dataguard
环境:centOS 6.4 64bit
主库:10.168.9.52
备库:10.168.9.53
oracle 12C 12.1.0.1.0 - 64bit
sid=bbc db_unique_name=bbc
sid=bbc db_unique_name=abc
主库配置:
1. 数据库修改为归档模式 查看:archive log list;
2. 参数 log_archive_start 已经过时,不需要设置,设置后启动数据库会报 ORA-32004: obsolete or deprecated
parameter(s) specified for RDBMS instance(有过时或废弃的参数被使用指定) 但是不影响使用
alter system reset log_archive_start 取消该参数设置
3. 数据库开启强制日志功能,即所有操作都产生日志,以便将主库所有的操作全部传给备库使用 :
alter database force logging; select name,force_logging from v$database;
4. 确认当主库添加或删除数据文件时,备库也做同样的的操作:
Alter system set standby_file_management=’AUTO’;
5. 确认参数 remote_login_passwordfile 为 exclusive 或 shared 使用密码文件做验证 此参数默
认为 exclusive,如果不是,请修改
Alter system set remote_login_passwordfile =exclusive scope=spfile;
6. 设置 db_unique_name 通常主库该值和 SID 一直,如没有该值,请设置:
Alter system set db_unique_name=bbc scope=spfile;
7. 开启闪回功能:可以使数据库闪回到以前的某一点,可以使主库闪回到故障前,然后将其转换为
备库。如果没有闪回,就必须重建库。
Alter system set db_recovey_file_dest=’快速回复区目录’ 闪回区位置
Alter system set db_recovey_file_dest_size=’300G’; 闪回区大小
Alter database flashback on ;
Select flashback_on from v$database ;
8. 配置主备库的监听,使两台服务器可以相互通信:
主库修改 listener.ora 文件 动态静态监听都要配置 (备库启动后是在 mount 状态下,不能自动
注册监听,需要静态监听 修改后监听需要重启)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=bbc)
(SID_NAME=bbc)
(ORACLE_HOME=/18_app/12c/db_base/db_home/)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.9.52)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
主库 tnsnames.ora 文件:
52_bbc =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.9.52)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = bbc)
)
)
53_abc =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.9.53)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc)
)
)
备库修改 listener.ora 动态静态监听都要配置 修改后监听需要重启
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=abc)
(SID_NAME=abc)
(ORACLE_HOME=/19_app/12c/db_base/db_home/)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.9.53)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
备库 tnsnames.ora 文件:
53_abc =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.9.53)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = abc)
)
)
52_bbc =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.168.9.52)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = bbc)
)
)
~
9. 修改归档位置:
Alter system set log_archive_dest_1=’location=/u01/app/archive/archive_bbc_loc/ val
id_for=(all_logfiles,all_roles) db_unique_name=bbc ’
指定归档位置用于所有角色所有数据库的日志文件且 db_unique_name=bbc 包括将来主转为备后
的备用日志文件(注意不是在线日志文件,是主库用日志写进程直接传过来并保存到 standby_lo
g 中的日志文件),并且如果想在备库进行备份同时备归档日志的话,必须使用 all_logfiles
Alter system set log_archive_dest_10=’service=abc arch valid_for=(online_logfiles,
primary_role) db_unique_name=abc’;
语句意思是:如果这是主库,就使用服务名为 abc 传输在线归档日志到目标库 abc (这里使用的
是归档进程同步传输的,还有其他的模式 )
不要配置 standby_archive_dest 参数,官方已经弃用,会报错
部分参数说明:online_logfiles(在线日志) satandby_logfiles(备用日志) all_logfiles(所有
日志) primary_role(主库角色) standby_role(备库角色) all_roles(所有角色)
10.
设置参数 fal_server 是指传输出现问题后,备库到哪里去找缺少的归档日志 参数 fal_cli
ent 在 11G 已经弃用,不用设置了
Alter system set fal_server = ‘abc’;
11.
打开主库的 dataguard 开关:
Alter system set log_archive_config = ‘dg_config=(bbc,abc)’
;
备库设置
1. 创建备库必要的目录,最少要建立主库所有数据文件的目录,$db_base/fast_recovery_area/bb
c/所有目录, $db_base/oradata/bbc/所有目录,$db_base/admin/bbc/adump
2. 停主库:在 mount 下生成 pfile
create pfile from spfile
生成备库控制文件 alter database create standby controlfile as ‘/路径/文件名’;
并且将新生成的参数文件,控制文件,密码文件,所有数据文件,日志文件全部拷贝到备库的响
应目录下(我也不想停库啊之前也用 rman 恢复过,备库不能 open read only,报有数据文件需要
恢复,搞不定啊—问题解决,后面有笔记)
给参数文件和密码文件改名
3. 修改参数文件:将部分 bbc 修为 abc,其中 db_name=‘bbc’和 dispatchers='(PROTOCOL=TCP) (S
ERVICE=bbcXDB)不用修改,
修改所有路径为备库的路径
如果数据文件路径有修改需要添加参数 db_file_name_convert=‘原路径 1’,‘新路径 1’,‘原
路径 2’,‘新路径 2’,‘原路径 3’,‘新路径 3’ 所有不一样的数据文件路径都要添加,
要成对出现
log_file_name_convert=‘原路径 1’,‘新路径 1’,‘原路径 2’,‘新路径 2’,‘原路径
3’,‘新路径 3’ 所有不一样的日志文件路径都要添加,要成对出现
添加 db_unique_name='abc'
4. 生成 spfile 重新启动备库监听,启动备库到 mount, 重新启动主库监听,启动主库(并确保都
是使用的 spfile)
备库启动恢复模式:alter database recover managed standby database disconnect from se
ssion
备库关闭恢复模式: alter database recover managed standby database cancel;
备库只读模式打开数据库:alter database open read only;
备库启动恢复模式:alter database recover managed standby database disconnect from se
ssion;
SQL> select log_mode,open_mode ,protection_mode, database_role from v$database;
LOG_MODE
OPEN_MODE
PROTECTION_MODE
DATABASE_ROLE
------------ -------------------- -------------------- ----------------
ARCHIVELOG
READ ONLY WITH APPLY MAXIMUM PERFORMANCE
PHYSICAL STANDBY
至此,初步的 dataguard 创建完成,测试以及模式转换待续
备库用主库 rman 备份恢复:
1. 创建备库必要的目录,最少要建立主库所有数据文件的目录,$db_base/fast_recovery_area/bb
c/所有目录, $db_base/oradata/bbc/所有目录,$db_base/admin/bbc/adump
(/19_app/12c/db_base/fast_recovery_area/bbc)
(/19_app/12c/db_base/fast_recovery_area/bbc/四个文件夹 archivelog,autobackup,flashback,
onlinelog)
(/19_app/12c/db_base/oradata/bbc/两个文件夹 orcl_pdb1,pdbseed)
(/19_app/12c/db_base/admin/bbc/adump)
2. configure channel device type disk format '/home/oracle/rmanbk/%d_%I_%s_%p_%T.bkp';
修改备份路径和名字
3. 在主库用 rman 备份:backup as compressed backupset database include current controlfi
le for standby plus archivelog; 在主库生成 pfile ,并将主库的备份,pfile,口令文件 一起
拷贝到备库相同的文件夹下。
4. 将 pfile,口令文件改名并拷贝到 dbs 下,修改参数文件
注意参数文件中的参数: MEMORY_TARGET(将其注释掉, 会报 ORA-00845 错误,主库的内存设置不
一定适合从库) 启动备库到 nomount
5. 在主库登陆 rman:rman target / auxiliary sys/bbcBBC2014@ccb
(在备库做:rman target sys/bbcBBC2014@bbc auxiliary sys/bbcBBC2014@ccb)
duplicate target database for standby
6. 起动备库到 mount 并 open read only
7. 开启恢复模式:alter database recover managed standby database
disconnect from sess
ion;
8. 查看模式及级别:SQL> select log_mode,open_mode ,protection_mode, database_role from
v$database;
LOG_MODE
OPEN_MODE
PROTECTION_MODE
DATABASE_ROLE
------------ -------------------- -------------------- ----------------
ARCHIVELOG
READ ONLY WITH APPLY MAXIMUM PERFORMANCE
PHYSICAL STANDBY
测试数据,正常!
添加另一个新想 DG:
主库添加修改:Alter system set log_archive_config ='dg_config=(orcl65,orcl66,orcl67)';
alter system set log_archive_dest_9='service=orcl67 lgwr sync affirm valid_for=(online_
logfiles,primary_role) db_unique_name=orcl67';
从库按之前操作
从库可以是新库,也可以没有库,没有库也要添加两个监听文件!!!