迁移操作步骤:
1)检查审计表现在所在的表空间
SQL>select table_name,tablespace_name from dba_tables where table_name in ('AUD$','FAG_LOG$') order by table_name;
2)检查两个表现在的数据量
SQL>select segment_name,bytes/1024/1024 size_in_megabytes from dba_segments where segment_name in ('AUD$','FAG_LOG$');
3)创建表空间
SQL>create tablespace AUD datafile size 10m autoextend on next 100m maxsize 32767m;
在日常的数据库维护中,经常出现SYSTEM表空间被撑满,在绝大多数情况下是因为数据库登录审计的功能被启动了,此时一般建议把SYS.AUD$相关对象迁移到其它表空间,从而避免SYSTEM被用完的风险。
在Oracle 11g之前迁移方法如下所示:
ALTER TABLE SYS.AUDIT$ MOVE TABLESPACE USERS;
ALTER TABLE SYS.AUDIT_ACTIONS MOVE TABLESPACE USERS;
ALTER TABLE SYS.AUD$ MOVE TABLESPACE USERS;
ALTER TABLE SYS.AUD$ MOVE LOB(SQLBIND) STORE AS SYS_IL0000000384C00041$$ (TABLESPACE USERS);
ALTER TABLE SYS.AUD$ MOVE LOB(SQLTEXT) STORE AS SYS_IL0000000384C00041$$ (TABLESPACE USERS);
ALTER INDEX SYS.I_AUDIT REBUILD ONLINE TABLESPACE USERS;
7ALTER INDEX SYS.I_AUDIT_ACTIONS REBUILD ONLINE TABLESPACE USERS;
从Oracle 11g开始可以使用DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION进行迁移:
1EXEC DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(AUDIT_TRAIL_TYPE=> DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,AUDIT_TRAIL_LOCATION_VALUE => 'USERS');
如下示例为授予审计的一些权限:
GRANT AUDIT ANY TO LHR_TEST;
GRANT AUDIT SYSTEM TO LHR_TEST;
在Oracle 11g之前通过手工清理的方式或自定义作业来定期清理SYS.AUD$表,如下:
1TRUNCATE TABLE SYS.AUD$;
2DELETE FROM SYS.AUD$ WHERE OBJ$NAME='EMP';
需要注意的是,如果AUD$表过大,那么直接TRUNCATE AUD$表,系统要立即释放大量的EXTENTS,会严重影响系统性能。可以通过如下2个步骤逐步释放EXTENTS:
① 清空数据并且保留原来的EXTENTS:
1TRUNCATE TABLE SYS.AUD$ REUSE STORAGE;
在这里,REUSE STORAGE是TRUNCATE的一个参数,表示保持原来的存储不变。一般情况下,SQL命令“TRUNCATE TABLE TABLE_NAME;”其实就是“TRUNCATE TABLE TABLE_NAME DROP STORAGE;”。DROP STORAGE是TRUNCATE TABLE的默认参数。
② 逐步回缩EXTENTS:
ALTER TABLE SYS.AUD$ DEALLOCATE UNUSED KEEP 5000M;
ALTER TABLE SYS.AUD$ DEALLOCATE UNUSED KEEP 2000M;
……
ALTER TABLE SYS.AUD$ DEALLOCATE UNUSED KEEP 10M;
需要注意的是,在执行的时候,可以根据实际情况调整每次回缩空间的大小。
若审计在OS和XML选项下进行手动删除审计文件。在Oracle 11g中通过DBMS_AUDIT_MGMT包下的子过程进行手动或定期清理。下面的过程可以迁移审计记录到USERS表空间:
conn / as sysdba
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
AUDIT_TRAIL_LOCATION_VALUE => 'USERS');
END;
/
EXEC DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(AUDIT_TRAIL_TYPE=> DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,AUDIT_TRAIL_LOCATION_VALUE => 'USERS');
4)迁移
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_LOCATION(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,audit_trail_location_value => 'AUD');
END;
/
aud表及FGA_LOG移动到新tablespace,&AUD_TBS_NAME表示新的表空间名
迁移AUD$表
BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
audit_trail_location_value => ‘&AUD_TBS_NAME’);
END;
/
迁移FGA_LOG$表
SQL> BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
audit_trail_location_value => ‘&AUD_TBS_NAME’);
END;
/
具体要看你是想手动删除还是自己删除。手动删除应该不用说了,直接where条件中把时间带上就行。
自动删除的话,11g可设置自动清除审计记录,如:
BEGIN
DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
default_cleanup_interval => 120 /* hours */);
END;
select user_name,audit_option,success,failure from dba_stmt_audit_opts
union
select USER_NAME,privilege,success,failure from dba_priv_audit_opts;
select count(*) from DBA_AUDIT_TRAIL s WHERE s.action_name = 'CREATE USER' and s.username = 'SYSTEM';
因为第3步,这块可能会报下面的错:
ERROR at line 1:
ORA-46267: Insufficient space in AUD; tablespace, cannot complete operation
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 1576
ORA-06512: at line 2
提示我们虽然表空间设置的是自动增长,但还是显示空间不足。
所以,在创建表空间时初始值设置成步骤2中所检查出的大小,如果数据过大,征求下客户意见,是不是可以truncate,然后再创建
5)检查迁移是否成功
SQL>select table_name,tablespace_name from dba_tables where table_name in ('AUD$','FAG_LOG$') order by table_name;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




