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 に答える