常用sql如下:
备库启动归档日志应用
alter database recover managed standby database disconnect from session;
alter database recover managed standby database using current logfile; --启动实时应用
备库停止归档日志应用
alter database recover managed standby database cancel;
查询归档日志是否被应用,查询V$archived_log视图的applied列
select sequence#,dest_id,first_time,next_time,archived,applied from v$archived_log;
查看备库是否和主库同步,查询V$archive_dest_status视图
select archived_thread#,archived_seq#,applied_thread#,applied_seq# from v$archive_dest_status;
监控日志传送状态,V$archive_gap记录当前备库mrp进程恢复需要的但是还没有传到备库的日志更简单的是查看主备库的归档日志的序列号相差多少
select * from v$archive_gap;
查看当前主机的运行状态
select switchover_status,database_role,protection_mode from v$database
查看备库接收、应用redo数据的过程
select message from v$dataguard_status
备库端查看RFS(Remote File Service)接收日志情况和MRP应用日志同步主数据库的情况(Physical Standby Database Only) 记录当前备库的一些进程情况和进程ID
select process,client_process,sequence#,status,thread#,sequence#,block#,blocks from v$managed_standby;
V$STANDBY_LOG备用数据库的备用日志的数量与当前状态等信息
SELECT * FROM V$STANDBY_LOG;
启动Data Guard 后, 查看同步情况::
SQL> select error from v$archive_dest;
用SQL 查看了一下同步正常:
SQL> select sequence#,applied from v$archived_log;
主库归档:
SQL> ALTER SYSTEM SWITCH LOGFILE; --对单实例数据库或RAC中的当前实例执行日志切换
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT; --对数据库中的所有实例执行日志切换
在备库上,验证一下传过来的归档文件:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, completion_time FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
在主库上,查询待转换standby库的归档文件是否连接:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
如过上面查到存在不连续的归档,那查找sequence 对应的归档文件:
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 10;
查询主备库已归档文件最大序号是否相同:
SQL> select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
在备库上,显示备库相关进程的当前状态信息:
SQL> select process,client_process,sequence#,status from v$managed_standby;
显示归档文件路径配置信息及redo apply情况:
SQL> select dest_name,archived_thread#,archived_seq#,applied_thread#,applied_seq#,db_unique_name
from v$archive_dest_status where status='VALID';
检查应用模式(是否启用了实时应用):
如果打开了实时应用,则recovery_mode会显示为:MANAGED REAL TIME APPLY。
SQL> select dest_id,DEST_NAME,STATUS,TYPE,DATABASE_MODE, recovery_mode from v$archive_dest_status;
显示那些被自动触发写入alert.log或服务器trace文件的事件:
通常是在你不便访问到服务器查询alert.log时,可以临时访问本视图查看一些与dataguard 相关的信息。
SQL> select * from v$dataguard_status;
- 在主库中添加删除Online Redo logs
在主库中可以任意添加,删除,修改Online Redo logs,这些操作不会影响到Standby数据库,但是为了保证Standby数据库在切换为Primary数据库之后仍然能有相同的配置,因此建议在添加,删除,修改主库的Online Redo logs时也同时修改Standby库的。
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter system set STANDBY_FILE_MANAGEMENT=manual;
ALTER DATABASE ADD logfile group 5 '/oradata/NEWS/redo05a.ora' size 50m;
alter system set STANDBY_FILE_MANAGEMENT=auto;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
- 在主库中更改控制文件
在Oracle10g中,Primary数据库open resetlogs之后,standby数据库无需重新配置,根据Standyb数据库当前的情况,可以选择flashback database然后再重新apply新的redolog,或者无须任何操作直接apply新的redolog。
- 在主库中修改数据文件名称
修改数据文件名称不会被自动应用到Standby中,即使设置了STANDBY_FILE_MANAGEMENT=auto。因此需要手动在Standby中做同样操作。
在主库修改完数据文件名称之后,在Standby端执行:
SQL>SELECT NAME, SEQUENCE#, ARCHIVED, APPLIED FROM V$ARCHIVED_LOG;
确认所有收到的redolog都已经被APPLY了。
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>SHUTDOWN;
将数据文件移动到需要修改的位置,或者改名字。
SQL>STARTUP NOMOUNT;
SQL>ALTER DATABASE MOUNT STANDBY DATABASE;
SQL>ALTER DATABASE RENAME FILE .....;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
- 在主库中创建表空间,添加数据文件,删除数据文件
对于初始化参数STANDBY_FILE_MANAGEMENT=auto的DG环境,无需特殊处理,在主库中做的修改会在Standby日志切换的时候自动apply。
- 如何解决ARCHIVE LOG GAP
在正常情况下Archive Log Gap会通过FAL_SERVER和FAL_CLIENT初始化参数的配置由Oracle数据库自动完成。
如果要手工解决,则在Standby端:
SQL> select * from v$archive_gap;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
---------- ------------- --------------
1 67 67
表示现在有一个GAP归档,log sequence是67.
将该文件从Primary端手动传递到Standby机器上。
SQL> select NAME from v$archived_log where SEQUENCE#=67;
NAME
--------------------------------------------------------------------------------
/xf_arch1/log67_1.arc
scp /xf_arch1/log67_1.arc stb:/oradata/NEWS/archive/
在Standby数据库中注册该归档日志
SQL> ALTER DATABASE REGISTER LOGFILE '/oradata/NEWS/archive/log67_1.arc';
SQL> select * from v$archive_gap;
no rows selected
然后检查Standby中的归档Apply情况。
SQL>select THREAD#,SEQUENCE#,APPLIED from v$archived_log;
注意:
V$ARCHIVE_GAP 视图仅仅显示当前缺失的归档日志,当recover重新开始以后,需要再次检查该视图,确实是否还有更多的GAP,然后再按照上面的方法依次解决。