我需要以下查询的一些建议。
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
答案 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.