有个数据库,奇怪的是一建表就hang了,oracle也不报错,alert日志也没有任何告警和ora-的错误产生!
非常奇怪,重启数据库很多次,都是这种现象,搞得很郁闷!
跟踪了建表的session,发现处于死循环状态;等待事件是"control file seq... wait";搞得人相当的郁闷!
然后我查看表空间是否充足,结果看不到建表所在的表空间的大小!
非常奇怪!
数据库正常启动,该表空间的数据也能正常查询!
我查了下dba_data_files,发现该表空间的数据文件都存在,但是发现一处,有个数据文件的状态处于recover状态(后问了下,原来该数据文件曾经坏过,offline and drop了该数据文件),bytes字段是空,我发现了不能查询该表空间大小的原因了,因为bytes为空,sun(bytes)自然也是空,所以不能获取!
然后将查询语句改为:
select a.tablespace_name,total,free,total-free used from
( select tablespace_name,sum(bytes)/1024/1024 total from dba_data_files where bytes is not nullgroup by tablespace_name) a,
(select tablespace_name,sum(bytes)/1024/1024 free from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name;
加上bytes is not null就可以获取了!
查询结果发现该表空间已被使用完了,给该表空间添加一个数据文件,然后建表,成功!
我奇怪的是,表空间用完了,oracle也不告警,难道oracle在统计表空间大小的时候也忘记加入bytes is not null条件,所以不会因此告警?这个有待查证!
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7916042/viewspace-1034107/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7916042/viewspace-1034107/