oracle计划作业中的时间戳问题

时间:2014-07-31 08:09:48

标签: oracle timestamp jobs

我编写了一个将dba_audit_trail信息转储到平面文件的过程,一旦完成清除sys.audit表。手动执行该过程,将数据正确转储到平面文件。但它作为计划工作执行TIMESTAMP不正确。 TIMESTAMP比dba_audit_trail表中的TIMESTAMP小6小时。


Table content
------------------------
31-07-2014 07:26:08,EOMCBOFD,CFNET\CBOEDPS5,Administrator,CBOEDPS5,LOGON,,
31-07-2014 07:26:24,EOMCBOFD,CFNET\CBOEDPS5,Administrator,CBOEDPS5,LOGOFF BY CLEANUP,,

Flat file content
-------------------
31-07-2014 01:26:08,EOMCBOFD,CFNET\CBOEDPS5,Administrator,CBOEDPS5,LOGON,,
31-07-2014 01:26:24,EOMCBOFD,CFNET\CBOEDPS5,Administrator,CBOEDPS5,LOGOFF BY CLEANUP,,

CREATE OR REPLACE PROCEDURE SYS.ddl_audit_log_purge AS
 CURSOR cur_date IS`enter code here`
     SELECT sysdate FROM dual;

     rec1 cur_date%ROWTYPE;
     created_file_name VARCHAR2(100);
     file_name UTL_FILE.FILE_TYPE;

     BEGIN
      OPEN cur_date;
  LOOP
  FETCH cur_date INTO rec1;
  EXIT WHEN cur_date%NOTFOUND;
  created_file_name:=rec1.sysdate;
  file_name:=UTL_FILE.FOPEN('AUD_DIR','cfcbo_'||created_file_name||'.exp','W');

        FOR rec in(
           SELECT to_char(TIMESTAMP, 'dd-mm-yyyy HH24:MI:SS') 
           ||','||username
           ||','||userhost
           ||','||os_username
           ||','||terminal
           ||','||action_name
           ||','||owner                
           ||','||obj_name
           out_line
           FROM dba_audit_trail)
        LOOP
             UTL_FILE.PUTF(file_name,'%s\n',rec.out_line);
             UTL_FILE.FFLUSH(file_name);
        END LOOP;
       UTL_FILE.FCLOSE(file_name);
  END LOOP;
  CLOSE cur_date;
  insert into aud_log_job (now,task) values(sysdate,'exported audit table');  
  execute immediate 'truncate table sys.aud$';  
  insert into aud_log_job(now,task) values(sysdate,'truncate audit table');  
  END;
  /

1 个答案:

答案 0 :(得分:1)

这实际上是非常复杂的问题。检查此Oracle支持节点: DBMS_SCHEDULER或DBMS_JOB和DST /时区解释(文档ID 467722.1)

" sysdate和systimestamp"看到"作业可能与您连接时的作业不同,使用的时区是数据库(!)启动时设置的时区。"