Oracle 需要一些关于以下查询的建议吗

Oracle 需要一些关于以下查询的建议吗,oracle,oracle10g,dataguard,Oracle,Oracle10g,Dataguard,我需要一些关于以下问题的建议 SQL> select value from v$dataguard_stats where name like 'apply lag'; VALUE ---------------------------------------------------------------- +00 00:21:38 其中,如果滞后时间超过24小时,+00-->增加到1。我的目标是编写一个脚本,每当延迟超过5小时时,即当值大于+0005:00:00时,发送邮件。值的数

我需要一些关于以下问题的建议

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

VALUE
----------------------------------------------------------------
+00 00:21:38
其中,如果滞后时间超过24小时,+00-->增加到1。我的目标是编写一个脚本,每当延迟超过5小时时,即当值大于+0005:00:00时,发送邮件。值的数据类型为varchar2(64)。我需要重写查询,使查询仅在值大于或等于+0005: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

该值存储为区间值的字符表示形式。您可以通过查看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');

如果应用延迟大于5小时,则返回1。

非常感谢您的查询。我真的很感激。我按照如下方式执行查询:“从v$dataguard_stats中选择1,其中名称类似于'apply lag',并选择到\u DSINTERVAL('00 05:00:00')>NUMTODSINTERVAL(5,'HOUR');”但是。。。?如果在注释中有查询,则不会得到任何结果。TO_数据间隔('00 05:00:00')不大于5小时,等于5小时。为什么在TO_DSINTERVAL调用中使用常量?你不想要价值吗?