ORA-03113:通信通道的文件结尾-完美解决方案

oracle 文档中对这个错误这样解释:

ORA-03113 错误就是说连接到数据库的网络中断了。有些错误由于频繁出现、原因复杂而被 Oracle DBA 们戏称之为"经典的错误"。

 

完美解决方案:

1、查看系统表空间用量:

SELECT
	a.tablespace_name,
	a.bytes total,
	b.bytes used,
	c.bytes free,
	( b.bytes * 100 ) / a.bytes "% USED ",
	( c.bytes * 100 ) / a.bytes "% FREE " 
FROM
	sys.sm$ts_avail a,
	sys.sm$ts_used b,
	sys.sm$ts_free c 
WHERE
	a.tablespace_name = b.tablespace_name 
	AND a.tablespace_name = c.tablespace_name;

2、分析ORA-03113主要原因

从图中主要分析SYSTEM、SYSAUX表空间用量,原因有两点:

       1)、SYSTEM中审计表aud$在数据库编程过程中,对SQL语句的编译过程,资源占用会较大,因此在sys账户下查看,

select count(*) sum from AUD$;

会得知,该数值会非常大。

        2)、SYSAUX则进行的是AWR快照,也会进行占用较多的空间。

        因此,出现ORA-03113,一般以上两个空间会出现严重不足情况。

3、完美解决方式

       用sys账户dba登录,两个原因一一解决:

              1)、清理AUD$审计表记录;

Truncate table AUD$;

                       清理AUD$审计表一条命令即可。

            2)、清理AWR快照步骤稍有麻烦

select dbid, retention from dba_hist_wr_control;

select min(snap_id), max(snap_id) from dba_hist_snapshot where dbid = 1673414163;

执行结果

MIN(SNAP_ID) MAX(SNAP_ID)

------------ ------------

        7689         7896

exec dbms_workload_repository.drop_snapshot_range(7689, 7896,1673414163)

执行结果:PL/SQL procedure successfully completed

select min(snap_id), max(snap_id) from dba_hist_snapshot where dbid = 1673414163;

AWR快照清理结束。

清理后,再去查看system表空间,对比前后结果会有明显变化,这是再进行数据库开发时,不会出现ORA-03113错误。

4、总结

此种解决方案,针对的是数据库开发工作较多情况下,如大量的PL/SQL的函数、包、过程的开发、编译,建议在生产环境尽量不要进行开发,或是生产环境单独将审计和快照移至专门的表空间。