我编写了一个将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;
/
答案 0 :(得分:1)
这实际上是非常复杂的问题。检查此Oracle支持节点: DBMS_SCHEDULER或DBMS_JOB和DST /时区解释(文档ID 467722.1)
" sysdate和systimestamp"看到"作业可能与您连接时的作业不同,使用的时区是数据库(!)启动时设置的时区。"