我可以在表格被截断时插入到表格中吗?



我有一个系统表澳元,每个用户的操作都被写入其中(审计选择,插入,更新,...(。此表有 1 亿条记录。我决定截断表格(我猜这需要几分钟(,因为我们不再需要这些数据。

但是每次用户登录到数据库时,都会在此表中创建一条 AUD$ 记录。

所以我的问题是:插入(如果用户登录到数据库(在TRUNCATE表期间是否有效?

Oracle 有一个名为 DBMS_AUDIT_MGMT 的软件包,可以(并且应该(用于管理您的审计表,这是减小 AUD$ 大小的正确方法。如果要写出这些文件,它也可用于管理操作系统级别审核。下面是将 AUD$ 表移动到其自己的表空间并设置审核管理的示例。

创建专用审计表空间

CREATE TABLESPACE AUDAUX DATAFILE '/u01/oracle/oradata/<DB_NAME>/audaux01.dbf'
SIZE 25M AUTOEXTEND ON NEXT 10m MAXSIZE UNLIMITED;

将 sys.aud$ 表移动到新的表空间

SET SERVEROUTPUT ON
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, 
AUDIT_TRAIL_LOCATION_VALUE  => 'AUDAUX');
END;
/

设置所需的参数,根据需要反弹数据库

audit_trail='DB,EXTENDED'
audit_sys_operations=true

初始化清理操作

SET SERVEROUTPUT ON
BEGIN
DBMS_AUDIT_MGMT.INIT_CLEANUP(
AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
DEFAULT_CLEANUP_INTERVAL    => 12 );
END;
/

验证清理是否已初始化

SET SERVEROUTPUT ON
BEGIN
IF 
DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD)
THEN
DBMS_OUTPUT.PUT_LINE('AUD$ is initialized for clean-up');
ELSE
DBMS_OUTPUT.PUT_LINE('AUD$ is not initialized for clean-up.');
END IF;
END;
/

创建清除作业

SET SERVEROUTPUT ON
BEGIN
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, 
AUDIT_TRAIL_PURGE_INTERVAL  => 12,
AUDIT_TRAIL_PURGE_NAME      => 'Standard_Audit_Trail_Purge',
USE_LAST_ARCH_TIMESTAMP     => FALSE );
END;
/

丢弃清除作业示例

SET SERVEROUTPUT ON
BEGIN
DBMS_AUDIT_MGMT.DROP_PURGE_JOB (
AUDIT_TRAIL_PURGE_NAME      => 'DB_AUDIT_TRAIL_PURGE');
END;
/

相关内容

  • 没有找到相关文章

最新更新