服务器属性 | ip | 主机名 | db_name | db_unique_name | server_name |
主库 | 192.168.6.30 | enmotech1 | orcl |
orcl |
orcl |
备库 | 192.168.6.31 | enmotech2 | orcl | orcldg | orcldg |
[code]1.DG三种模式1.1.最大性能模式max performance-默认这种保护模式(默认)提供了可能的最高级别的数据保护,而不影响主数据库的性能。这是通过允许事务在恢复该事务所需重做数据在写到本地联机重做日志后立即提交而实现的。主数据库的重做数据流也写到至少一个备数据库,但是那个重做流相对于创建重做数据的事务是异步写的。当所用的网络连接有足够的带宽,这种模式提供了近似于最大可用性模式的数据保护级别,并且对主数据库性能的影响最小。1.2.最大可用性模式max availability这种保护模式提供了可能的最高级别的数据保护,而不用与主数据库的可用性相折中。与最大保护模式相同,在恢复事务所需的重做写到本地联机重做日志和至少一个事务一致性备数据库上的备重做日志之前,事务将不会提交。与最大保护模式不同的是,如果故障导致主数据库无法写重做流到异地备重做日志时,主数据库不会关闭。替代地,主数据库以最大性能模式运行直到故障消除,并且解决所有重做日志文件中的中断。当所有中断解决之后,主数据库自动继续以最大可用性模式运行。这种模式确保如果主数据库故障,但是只有当第二次故障没有阻止完整的重做数据集从主数据库发送到至少一个备数据库时,不发生数据丢失。1.3.最大保护模式max protection这种保护模式确保如果主数据库故障不会发生数据丢失。要提供这种级别的保护,恢复每个事务所需的重做数据必须在事务提交之前同时写到本地联机重做日志和至少一个备数据库上的备重做日志。要确保不发生数据丢失,如果故障导致主数据库无法写重做流到至少一个事务一致性备数据库的备重做日志时,主数据库会关闭。1.4.查询当前模式SYS@orcl> select protection_mode,protection_level from v$database;2.DG切换测试2.1 DG switchover 切换测试enmotech1:主库--------->备库enmotech2:备库--------->主库2.2主备库角色状态查询主备库角色状态查询enmotech1主库:set linesize 120;set pagesize 999;col SWITCHOVER_STATUS for a30;col DATABASE_ROLE for a30;col OPEN_MODE for a30;select switchover_status,database_role,open_mode from v$database;SWITCHOVER_STATUS DATABASE_ROLE OPEN_MODE------------------------------ ------------------------------ ------------------------------SESSIONS ACTIVE PRIMARY READ WRITEenmotech2备库:set linesize 120;set pagesize 999;col SWITCHOVER_STATUS for a30;col DATABASE_ROLE for a30;col OPEN_MODE for a30;SYS@orcl> select switchover_status,database_role,open_mode from v$database;SWITCHOVER_STATUS DATABASE_ROLE OPEN_MODE------------------------------ ------------------------------ ------------------------------NOT ALLOWED PHYSICAL STANDBY READ ONLY WITH APPLYenmotech1显示:TO STANDBY/PRIMARY,如果显示SESSION ACTIVE表示还有活动的会话,需要关闭会话再检查enmotech2显示:NOT ALLOWED/PHYSICAL STANDBY2.3主库切到备库(enmotech1操作)SYS@orcl> alter database commit to switchover to physical standby;SYS@orcl> alter database commit to switchover to physical standby with session shutdown;--如果状态显示SESSION ACTIVE,在切换的时候可以指定with session shutdown 子句强制关闭活动的会话。SYS@orcl> shutdown immediateSYS@orcl> startup mount2.4备库切换到主库(enmotech2操作)SYS@orcl> alter database commit to switchover to primary;SYS@orcl> alter database open;2.5新备库(enmotech1操作)执行APPLY LOG命令--启用mount状态下的APPLY LOGSYS@orcl> alter database recover managed standby database disconnect from session;--启用open状态(READ ONLY WITH APPLY)下的APPLY LOGSYS@orcl> alter database recover managed standby database cancel;SYS@orcl> alter database open;SYS@orcl> alter database recover managed standby database disconnect from session;SYS@orcl> select switchover_status,database_role,open_mode from v$database;2.5对换主备库的ip,并修改主备库的host文件,重启监听127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.6.30 enmotech1 oracle192.168.6.31 enmotech2 oracle3.1.DG failover 切换测试enmotech1:主库------>崩溃enmotech2:备库------>主库3.2主备库角色状态查询SYS@orcl> select switchover_status,database_role,open_mode from v$database;3.2.1主库(enmotech1)通过shutdown abort方式人工模拟主库崩溃,直接关闭SYS@orcl> select open_mode from v$database;SYS@orcl> shutdown abortSYS@orcl> startup mountSYS@orcl> alter system flush redo to \'orcldg\';3.2.2备库(enmotech2)执行如下操作切换为主库SYS@orcl> select thread#, low_sequence#, high_sequence# from v$archive_gap;--如果没有发现明显的gap现象,说明此次的failover不会有数据损失情况。在备库,要进行关闭apply和结束应用动作。SYS@orcl> alter database recover managed standby database cancel;SYS@orcl> alter database recover managed standby database finish;SYS@orcl> alter database commit to switchover to primary;SYS@orcl> alter database open;SYS@orcl> select open_mode, switchover_status from v$database;4.DG failover后重建DGenmotech1:崩溃------>备库enmotech2:主库------>主库(保持主库状态不变)4.1.新主库(enmotech2)角色状态查询SYS@orcl> select switchover_status,database_role,open_mode from v$database;4.2新主库(enmotech2)创建备库控制文件mkdir -p /u01/bak/SYS@orcl> alter database create standby controlfile as \'/u01/bak/control01.ctl\';4.3将备库控制文件拷贝至db11scp ezdb12:/u01/bak/control01.ctl /u01/app/oracle/oradata/orcl/control01.ctlcp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/fast_recovery_area/orcl/mv /u01/app/oracle/fast_recovery_area/orcl/control01.ctl /u01/app/oracle/fast_recovery_area/orcl/control02.ctl4.4恢复对应数据文件至db11,并启动enmotech1到mount状态,应用APPLY模式SYS@orcl> startup mount;SYS@orcl> alter database recover managed standby database disconnect from session;4.5启动enmotech1至OPEN状态,并应用APPLY REDO模式SYS@orcl> alter database recover managed standby database cancel;SYS@orcl> alter database open;SYS@orcl> alter database recover managed standby database disconnect from session;5.开启和关闭DataGuard的流程5.1.关闭关闭主库SYS@orcl> shutdown immediate5.2关闭主库监听lsnrctl stop5.3查询备库是否正在执行重做应用或实时应用。如果MRP0或MRP进程存在,则备库正在应用重做。SYS@orcl> select process, status from v$managed_standby;5.4如果重做应用程序正在运行,停止备库的Redo日志的应用SYS@orcl> alter database recover managed standby database cancel;5.5关闭备库SYS@orcl> shutdown immediate5.6关闭备库监听lsnrctl stop6.1.开启启动备库监听lsnrctl start6.2启动备库到mount状态SYS@orcl> startup mount;6.3开启备库的Redo日志应用SYS@orcl> alter database recover managed standby database using current logfile disconnect from session;6.4启动主库监听lsnrctl start6.5启动主库SYS@orcl> startup;6.6检查日志情况的SQL语句select al.thrd \"Thread\", almax \"Last Seq Received\", lhmax \"Last Seq Applied\"from (select thread# thrd, max(sequence#) almaxfrom v$archived_logwhere resetlogs_change#=(select resetlogs_change# from v$database)group by thread#) al,(select thread# thrd, max(sequence#) lhmaxfrom v$log_historywhere first_time=(select max(first_time) from v$log_history)group by thread#) lhwhere al.thrd = lh.thrd;