1

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

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)

谢谢并恭祝安康

卡提克 M

4

1 回答 1

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。

于 2011-12-14T16:59:31.943 回答