ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 11g AUDIT的TIMESTAMP时间戳

11g AUDIT的TIMESTAMP时间戳

原创 Linux操作系统 作者:yangtingkun 时间:2010-04-14 23:57:41 0 删除 编辑

在11g中AUDIT记录中的TIMESTAMP时间戳使用的是0时区的时间。

 

 

利用YANGTK用户登陆,引发AUDIT记录:

SQL> CONN YANGTK
输入口令:
已连接。

SQL> SELECT SESSIONID, USERID, TO_CHAR(NTIMESTAMP#, 'YYYY-MM-DD HH24:MI:SS.FF')
  2  FROM SYS.AUD$
  3  WHERE USERID = USER;

 SESSIONID USERID                         TO_CHAR(NTIMESTAMP#,'YYYY-MM-
---------- ------------------------------ -----------------------------
    153091 YANGTK                         2010-04-15 00:04:41.197504

SQL> SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

TO_CHAR(SYSDATE,'YY
-------------------
2010-04-15 08:05:44

可以看到,当前的时间是8点,而对应的0时区的时间是0点。当设置归档时间戳时:

SQL> CONN / AS SYSDBA
已连接。
SQL> BEGIN
  2  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
  3  DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
  4  SYSTIMESTAMP);
  5  END;
  6  /

PL/SQL 过程已成功完成。

SQL> SELECT AUDIT_TRAIL,
  2     TO_CHAR(LAST_ARCHIVE_TS, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
  3  FROM DBA_AUDIT_MGMT_LAST_ARCH_TS;

AUDIT_TRAIL          TO_CHAR(LAST_ARCHIVE_TS,'YYYY-MM-DDH
-------------------- ------------------------------------
STANDARD AUDIT TRAIL 2010-04-15 08:13:05.373926 +00:00

SQL> SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') FROM DUAL;

TO_CHAR(SYSTIMESTAMP,'YYYY-MM-DDHH24
------------------------------------
2010-04-15 08:15:36.618316 +08:00

即使SYSTIMESTAMP包括时区时间,在赋值的时候,并没有转化为0时区的时间,而是直接将8时区的时间作为0时区的时间进行的赋值。

这也就导致了归档时间戳和预计要设置的时间相差了8个小时。

SQL> SELECT TO_CHAR(SYSTIMESTAMP AT TIME ZONE 'GMT',
  2  'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
  3  FROM DUAL;

TO_CHAR(SYSTIMESTAMPATTIMEZONE'GMT',
------------------------------------
2010-04-15 00:21:14.529442 +00:00

SQL> BEGIN
  2  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
  3  DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
  4  SYSTIMESTAMP AT TIME ZONE 'GMT');
  5  END;
  6  /

PL/SQL 过程已成功完成。

SQL> SELECT AUDIT_TRAIL,
  2     TO_CHAR(LAST_ARCHIVE_TS, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')
  3  FROM DBA_AUDIT_MGMT_LAST_ARCH_TS;

AUDIT_TRAIL          TO_CHAR(LAST_ARCHIVE_TS,'YYYY-MM-DDH
-------------------- ------------------------------------
STANDARD AUDIT TRAIL 2010-04-15 00:21:50.626241 +00:00

为了避免错误的产生,使用SET_LAST_ARCHIVE_TIMESTAMP输入时间戳的时候,就需要指定0时区的时间输入,而不能直接输入SYSTIMESTAMP或SYSDATE等当前时区的时间。

 

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4227/viewspace-659766/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11074768