v$dataguard_stats
在一套Dataguard环境下,如果需要做failover Role Transition的话,建议先在备库上通过查询V$DATAGUARD_STATS视图来估算failover切换需要的时间
(failover time=apply finish time+estimated startup time)。
SQL> desc v$dataguard_stats
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
NAME VARCHAR2(32)
VALUE VARCHAR2(64)
UNIT VARCHAR2(30)
TIME_COMPUTED VARCHAR2(30)
DATUM_TIME VARCHAR2(30)
在官方文档上,关于V$DATAGUARD_STATS是这样描述的:
该动态性能视图显示出在主库上产生了多少重做日志数据,但是还没有被备库所应用。所以,通过查询该视图可以基本确定如果万一主库出现崩溃的话,备库上将丢失多少重做日志数据。我们可以在一套Dataguard环境下的任一备库的实例上从该视图里获取相关信息,然而,在主库的实例上查询该视图返回的信息都将是空。
也就是说,只可以从备库的实例上查询V$DATAGUARD_STATS,从主库实例上是看不到任何有用信息的。
表1
字段名 | 说明 |
---|---|
NAME | 记录的名称,详见 表2 |
VALUE | 给出各个参数的值 |
UNIT | 各个参数的时间单元 |
TIME_COMPUTED | 物理备库上估算各个参数的本地时间 |
DATUM_TIME | 在物理备库上获取元数据来估算 APPLY LAG 和 TRANSPORT LAG 这两个参数值的本地时间。 如果从多次查询中看到该时间值对应的APPLY LAG 和 TRANSPORT LAG 这两个参数值保持不变的话,那么就说明该物理备库已经停止从主库接收到重做数据! 该字段是11g中新出现的 |
表2 name字段的值
字段值 | 说明 |
---|---|
apply lag | 该值表示在通过在备库上应用主库传递过来的重做日志与主库同步所延迟的时间。 |
transport lag | 该值表示在单位时间内主库上产生的重做日志还没有传输到备库上,或者主库上产生的重做日志还没有被备库所应用。 |
apply finish time | 该值表示在备库上完成应用重做日志所需要的时间。 |
estimated startup time | 该值表示启动和打开物理备库所需要的时间,该字段不适用于逻辑备库。 |
standby has been open | 该值表示物理备库自从上次启动以来,是否以OPEN READ ONLY方式打开过? 该参数值如果是Y,现在需要做FAILOVER,那么就需要先将该物理备库shutdown然后以OPEN READ WRITE方式打开。 |
SQL> select * from v$dataguard_stats;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
---------------------- ------------ ---------------------------- ------------------- -------------------
transport lag +00 00:00:00 day(2) to second(0) interval 01/04/2024 21:14:48 01/04/2024 21:14:46
apply lag +00 00:30:25 day(2) to second(0) interval 01/04/2024 21:14:48 01/04/2024 21:14:46
apply finish time day(2) to second(3) interval 01/04/2024 21:14:48
estimated startup time 10 second 01/04/2024 21:14:48
参考资料
https://docs.oracle.com/cd/E18283_01/server.112/e17110/dynviews_1103.htm