【问题标题】:Need some suggestions with the following query需要以下查询的一些建议
【发布时间】:2012-01-19 23:43:41
【问题描述】:

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

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

【问题讨论】:

    标签: oracle oracle10g dataguard


    【解决方案1】:

    该值存储为 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。

    【讨论】:

    • 非常感谢您的询问。对此,我真的非常感激。我执行如下查询“SELECT 1 FROM v$dataguard_stats WHERE name LIKE 'apply lag' AND TO_DSINTERVAL('00 05:00:00') > NUMTODSINTERVAL(5,'HOUR');”但是
    • 但是...?使用评论中的查询,您不应该得到任何结果。 TO_DSINTERVAL('00 05:00:00') 不大于 5 小时,等于 5 小时。为什么在 TO_DSINTERVAL 调用中使用常量?你不想要VALUE吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2017-09-28
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多