Oracle审计篇 —— 系统审计表表空间迁移问题小结

9 篇文章 0 订阅

一、 迁移中的阻塞

DBMS_AUDIT_MGMT.set_audit_trail_location 根据网上资料是一种在线迁移方法,但在迁移过程中发现有大量会话等待enq: ZA - add std audit table partition事件,如果时间过长,实际对业务还是会有影响。

SQL> select sid,blocking_session,final_blocking_session,event from v$session where blocking_session is not null;

SID BLOCKING_SESSION FINAL_BLOCKING_SESSION
---------- ---------------- ----------------------
EVENT
----------------------------------------------------------------
5 198 575
enq: ZA - add std audit table partition

6 198 575
enq: ZA - add std audit table partition

8 198 575
enq: ZA - add std audit table partition

...

1346 198 575
enq: ZA - add std audit table partition

1347 198 575
enq: ZA - add std audit table partition

 

解决方法:

如果审计表很大并且存储性能不佳,迁移期间大量会话可能会被enq: ZA - add std audit table partition等待事件阻塞。由于迁移速度非常慢,最好可以先导出该表数据、truncate之后再进行迁移,以免影响业务。

 

导出脚本exp.sh

userid='/ as sysdba'
file=audit.dmp 
tables=sys.aud$
compress=y

导出命令

nohup exp parfile=exp.sh &

 

二、 迁移途中取消操作会怎么样

由于迁移过程中出现了大量阻塞,在迁移途中取消(Ctrl+C)掉了set_audit_trail_location操作,可以看到数据库中的阻塞很快全部消失,但当再次执行set_audit_trail_location操作时就会遇到问题。

SQL> BEGIN
  2  DBMS_AUDIT_MGMT.set_audit_trail_location(
  3  audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
  4  audit_trail_location_value => 'TBAUDIT');
  5  END;
  6  /
^C
BEGIN
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 2932
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 1586
ORA-06512: at line 2

再次执行

SQL> BEGIN
  DBMS_AUDIT_MGMT.set_audit_trail_location(
    audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    audit_trail_location_value => 'TABS_DATA');
END;
/    2    3    4    5    6
BEGIN
*
ERROR at line 1:
ORA-46268: Conflicting operation on audit table(s)
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 61
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 1530
ORA-06512: at line 2

解决方法:

其实这个并没有什么影响,只需要把原来执行该语句的会话关掉,等一段时间再执行即可。

参考  https://nazim-dba.blogspot.com/2018/06/error-sql-begin-dbmsauditmgmt.html

 

三、 SYSAUX空间不足

在执行init_cleanup时报错

SQL>BEGIN
  DBMS_AUDIT_MGMT.init_cleanup(
    audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
    default_cleanup_interval => 168 );
END;
/    2    3    4    5    6

BEGIN
*
ERROR at line 1:
ORA-46267: Insufficient space in 'SYSAUX' tablespace, cannot complete operation
ORA-06512: at "SYS.DBMS_AUDIT_MGMT", line 1035
ORA-06512: at line 2

由官方文档可以知道,如果审计表在SYSTEM表空间中,init_cleanup会将其迁到SYSAUX表空间,但是如果审计表已被迁到特定表空间,init_cleanup则不会将其迁到SYSAUX表空间。

https://docs.oracle.com/database/121/ARPLS/d_audit_mgmt.htm#ARPLS65423

而MOS文档1508787.1中提到

  • INIT_CLEANUP会对SYSAUX剩余空间进行检查,这个检查不看SYSAUX是否能扩展,只看当前剩余大小
  • 即使已经将审计表移动到特定表空间,这个检查也会进行
     

解决方法:

除了文档中提到的修改系统表,如果审计表不大,更简单的方法是直接给sysaux表空间加个数据文件。

 

四、 并发收集统计信息报错

SQL> BEGIN
  2    DBMS_AUDIT_MGMT.init_cleanup(
  3      audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
  4      default_cleanup_interval => 168 );
  5  END;
  6  /
BEGIN
*
ERROR at line 1:
ORA-20000: Unable to gather statistics concurrently: Resource manager plan is
not active or is not managing CPU usage
ORA-06512: 在 "SYS.DBMS_AUDIT_MGMT", line 2333
ORA-06512: 在 "SYS.DBMS_AUDIT_MGMT", line 617
ORA-06512: 在 line 2

2049013.1文档中报错原因如下

查看concurrent设置

查看resource_manager_plan

 

所以这个问题有两个解决方法:

要么Enable Resource Manager(需要重启DB)

SQL> alter system set resource_manager_plan = 'DEFAULT_PLAN' scope=spfile;

要么关闭并发统计信息收集(方便)

SQL> exec dbms_stats.set_global_prefs('CONCURRENT', 'FALSE');

 

 

 

五、 PDB中如何重编译失效对象

如果有PDB,迁移操作需要在pdb中也执行,执行完之后会产生失效对象,但是直接在pdb里执行alter complile语句会报错 

SQL> alter view sys.DBA_FGA_AUDIT_TRAIL       compile;
alter view sys.DBA_COMMON_AUDIT_TRAIL    compile;alter view sys.DBA_FGA_AUDIT_TRAIL   compile
*
ERROR at line 1:
ORA-65040: operation not allowed from within a pluggable database

解决方法:

在pdb中需要利用dbms_pdb.exec_as_oracle_script来执行编译语句。

exec dbms_pdb.exec_as_oracle_script ('alter view sys.FGA_LOG$FOR_EXPORT compile');
exec dbms_pdb.exec_as_oracle_script ('alter public synonym DBA_FGA_AUDIT_TRAIL compile');
exec dbms_pdb.exec_as_oracle_script ('alter package MDSYS.SDO_NET compile body');

参考: 文档 ID 2350934.1

其他:Known Issues When Using: DBMS_AUDIT_MGMT (文档 ID 804624.1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值