1、开启force logging模式
SQL> alter database forcelogging;
SQL> select open_mode,log_mode,force_logging,flashback_on from v$database;
OPEN_MODE LOG_MODE FOR FLASHBACK_ON
---------- ------------ ---------------------------- ------------ --- ------
READ WRITE ARCHIVELOG YES NO
作用:不管什么操作都会生成redo日志,应该看到 force_logging 列为 YES。
特点:1.在数据库mount状态和open状态都可以启动forcelogging模式
2.临时表空间和临时回滚段动作不会生成redo日志
3. alter database noforce logging;关闭forcelogging
2、设置 db_unique_name参数
主、备库都必须设置为唯一,这个是DG里的标识,如果没有,使用 alter system 进行设置:
SQL> show parameter db_unique_name;
SQL> alter system set db_unique_name=orcl_primaryscope=spfile;
主库设置名为orcl_primary,备库设置为orcl_standby
3、让主库知道 Data Guard配置里的另外一个备库的名字
SQL> alter system set log_archive_config = 'dg_config=(orcl_primary,orcl_standby)';
4、配置归档位置和重做日志传输
SQL> alter system set log_archive_dest_1 = 'location=use_db_recovery_file_destvalid_for=(all_logfiles, all_roles) db_unique_name=orcl_primary';
这个命令指定快速恢复区作为归档位置,此归档位置用于在所有数据库角色下归档所有的日志文件。官方文档里说使用 valid_for=(online_logfiles, all_roles),这将导致备库无法归档备用日志文件,因为它们不是在线日志。但如果使用 all_logfiles 选项,主备库将都能归档在线以及备用日志。如果你想在备库进行备份,并同时备份归档日志的话,必须使用 all_logfiles。
5、配置重做日志传输到备库:
SQL> alter system set log_archive_dest_2 = 'service=orcl_standby lgwr sync valid_for=(online_logfile,primary_role)db_unique_name=orcl_standby';
这条语句说,如果这是主库,就使用服务名orcl_standby 传输在线日志,目标库名叫 orcl_standby 。
要注意STANDBY_ARCHIVE_DEST 参数不需要,已经被官方弃用。当调试时,不少人好心建议我设置此参数,但设置此参数后启动数据库,只会报 ORA-32004: obsolete or deprecated parameter(s) specified for RDBMSinstance错。
6、设置参数 FAL_SERVER。
指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。设置了这个参数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。
SQL> alter system set fal_server='orcl_standby';
注意 FAL_CLIENT 参数在11g里已经弃用。
7、当主库添加或删除数据文件时,这些文件也会在备库添加或删除。
启用此功能的方法如下:
SQL> alter system set standby_file_management=auto;
8、添加备用日志(standby redo)
再次,我们要确认主库有备用日志文件(StandbyLog Files)。备库使用备用日志文件来来保存从主库接收到的重做日志。
主库上也建立备用日志文件有两个原因:一是主库可能转换成备库,备库需要备用日志,二是如果主库建了备用日志,备库会自动建。
备用日志应该跟在线日志一样大,组数应该至少跟在线日志一样多,或者更多。我喜欢给备用日志一个跟在线日志不同范围的编号,比如在线日志组是1到6,备用日志就是11到16。
SQL> alter database add standby logfilegroup 11 ('/data/Oracle/app/oracle/oradata/orcl/std_redo11.log') size100M;
SQL> alter database add standby logfilegroup 12 ('/data/oracle/app/oracle/oradata/orcl/std_redo12.log') size100M;
SQL> alter database add standby logfilegroup 13 ('/data/oracle/app/oracle/oradata/orcl/std_redo13.log') size100M;
查看redo 信息
SQL> select group#,type, member fromv$logfile;
9、重启数据库
SQL> shutdown immediate
SQL> startup
10、其它
SQL> alter system setlocal_listener='for_db';
11、创建主库主库pfile参数文件
SQL> createpfile='/home/oracle/initdg.ora' from spfile;
12、创建好了主库的 pfile后,将其复制到备库服务器
$ scp /home/oracle/initdg.ora 192.168.10.206:/home/oracle/