需要以下查询的一些建议

时间:2011-12-14 06:42:18

标签: oracle oracle10g dataguard

我需要以下查询的一些建议。

SQL> select value from v$dataguard_stats where name like 'apply lag';

VALUE
----------------------------------------------------------------
+00 00:21:38

其中+00 - >如果滞后超过24小时,则增加到1。我的目标是编写一个脚本,当滞后超过5小时时,即每当值大于+00 05:00:00时发送邮件。 Value的数据类型是varchar2(64)。我需要以这样的方式重写查询:只有当值大于或等于+00 05:00:00时,查询才会显示输出。我不知道如何比较这个值。任何帮助/建议都非常感谢。

请查看视图v $ dataguard_stats的说明。

SQL> desc v$dataguard_stats;
 Name                                                                                      Null?    Type
 ----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
 NAME                                                                                               VARCHAR2(32)
 VALUE                                                                                              VARCHAR2(64)
 UNIT                                                                                               VARCHAR2(30)
 TIME_COMPUTED                                                                                      VARCHAR2(30)

谢谢和问候

Karthik M

1 个答案:

答案 0 :(得分:3)

该值存储为INTERVAL值的字符表示形式。您可以通过查看v $ dataguard_stats视图中的UNIT列来查看:

SQL> SELECT name, value, unit
  2    FROM v$dataguard_stats
  3   WHERE name = 'apply lag';

NAME            VALUE           UNIT
--------------- --------------- ------------------------------
apply lag       +00 00:00:21    day(2) to second(0) interval

SQL>

这可以让你接近你想要的东西:

SELECT 1
  FROM v$dataguard_stats
 WHERE name LIKE 'apply lag'
   AND TO_DSINTERVAL(value) > NUMTODSINTERVAL(5,'HOUR');

如果apply_lag大于5小时,则返回1.