****************** Active Data Guard 维护篇 **************************
Data Guard 启动\关闭顺序:
启动顺序:先standby ,后primary;
关闭顺序:先primary 后standby;
主库没有遗漏
SQL> select * from v$archive_gap;
查看日志是否能正确从主库同步到备用库,查看主备库
SQL> col standby_dest for a12
SQL> col archived for a10
SQL> col applied for a10
SQL> col status for a10
SQL> select sequence#,standby_dest,archived,applied,status from v$archived_log;
只需要保证2边sequence序列号一致且最新的app返回YES了,就说明备库接收到应用且恢复了。
正常操作关闭DG时,再次启动DG循序为:
1、先启动备库,再启动主库
$ sqlplus / as sysdba
SQL> startup
2、在备库执行命令:打开实时应用状态模式
SQL> alter database recover managed standby database using current logfile disconnect from session;
非正常情况下关闭DG后,重启DG时需要操作
1、检查主、备库的protection_level值,若其中一点为RESYNCHRONIZATION,说明实时同步已经有问题。
SQL> select db_unique_name,protection_mode,protection_level from v$database;
DB_UNIQUE_NAME PROTECTION_MODEPROTECTION_LEVEL
-------------------------------------------------- --------------------
ORCL_PRIMARY MAXIMUM AVAILABILITYRESYNCHRONIZATION
Oracle的data guard在主库设置为最大可用模式不能实现时,自动降级为最大性能模式。这样的结果使得日志同步不再实时。
解决方法(在主库执行):
1、根据最大可用模式的最低要求,将log_archive_dest_2调整为lgwr sync affirm。
SQL> show parameter log_archive_dest_2
若包含有lgwr sync affirm ,则执行
SQL> alter system switch logfile;
强制日志切换,不一定就归档当前的重做日志文件(若自动归档打开,就归档前的重做日志,若自动归档没有打开,就不归档当前重做日志。)
若无lgwr sync affirm ,则执行如下两句命令
SQL> alter system setlog_archive_dest_2 = 'service=orcl_standby lgwr sync affirm valid_for=(online_logfile,primary_role) db_unique_name=orcl_standby';
SQL> alter system switch logfile;
2、查看备库open_mode是否为“READ ONLY WITH APPLY”,否则执行后面一条语句,打开实时应用状态模式:
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLEDB_UNIQUE_NAME
-------------------- ----------------------------------------------
READ ONLY WITH APPLY PHYSICAL STANDBY orcl_standby
SQL> alter database recover managed standby database using current logfile disconnect from session;
****************** 主备库切换 Switchover **************************
物理Data Guard角色转换步骤
Step 1 验证主库是否能执行角色转换到备库(原主库执行):
1.查看switchover状态
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO STANDBY
附:A:switchover_status出现session active/not allowed
Step 2 开始把物理主库改变为物理备库(原主库执行)
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
注:如果有活动的session可以使用此选项,否则转换会遇到ORA-01093错误,也可以杀掉活动会话或等活动会话后进行转换
当出现session active的时候表示还有活动的session,则运行
SQL> Alter database commit to switchover tophysical standby with session shutdown;
Step 3 关闭并重启主库(原主库执行)
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
Step 4 验证备库是否能执行角色转换到主库(原备库执行)
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
Step 5 开始把物理备库转换成物理主库(原备库执行)
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
--如果报ORA-16139: mediarecovery required,可能是由于未应用日志引起,可先执行
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Step 6 打开备库,然后关闭重启.(原备库执行)
SQL> ALTER DATABASE OPEN;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
Step 7 验证是否转换成功(原备库执行)
SQL> ALTER SYSTEM SWITCH LOGFILE;
Setp 8 应用归档日志(原主库上执行)
SQL> ALTERDATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
此步若提示报错:
ORA-01153: an incompatible media recoveryis active
则先执行
SQL> alter database recover managed standby database cancel;
再执行
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
最后,重启一下数据库(原备库执行)
SQL> shutdownimmediate;
SQL> startup