开发数据库服务器碰盘空间爆满了,以致数据库都登陆不上。
又没有什么文件可以删除,就把perfstat的表空间文件给删除了。
重启数据库时,提示找不到文件,数据库无法启动。
处理:alter database datafile '/u03/data/woku/perfstat01.dbf' offline drop;
重启成功。
以sys用户登陆进去,想删除表空间perfsta:
drop tablespace perfstat including contents and datafiles;
提示错误:
drop tablespace perfstat including contents and datafiles
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 2
ORA-00376: file 28 cannot be read at this time
ORA-01110: data file 28: '/u03/data/woku/perfstat01.dbf'
ORA-06512: at line 23
搞了半天,才弄清楚,原来是perfstat用户下有一个ddl触发器,所有ddl级的事件都会触发该触发器,触发器中将这些信息又写入perfstat用户的一个ddl_log表,所以出现递归错误:
ORA-00604: error occurred at recursive SQL level 2
将该触发器删除后就OK了。
总结一下,出现此类事情的处理方法:
(1)将oracle服务停掉。
(2)将数据文件offline drop掉。
alter database datafile '/u03/data/woku/perfstat01.dbf' offline drop;
(3)以sys用户登陆
(4)检查表空间对应的用户,有没有ddl触发器之类的,如果有,就删除掉。
(5)删除表空间
drop tablespace perfstat including contents and datafiles;
(6)删除用户
drop user perfstat cascade;
本文介绍了一种解决Oracle数据库空间不足的方法,包括如何安全地删除不必要的表空间文件,处理DDL触发器导致的递归错误,并提供了一套完整的解决方案。
2万+

被折叠的 条评论
为什么被折叠?



