为什么我不能删除这个Oracle数据文件 – 即使它看起来是空的?

该系统是Oracle 11.2.0.3.0,使用ASM.我们遇到了一个似乎存在某种腐败问题的问题 – 每次尝试插入表中时,我们都会得到以下结果:

ORA-01115: IO error reading block from file  (block # )
ORA-01110: data file 23: '<filepath>'
ORA-15081: failed to submit an I/O operation to a disk

幸运的是,根据dba_extents,这是一个测试系统,数据文件23上只有一个表.我让团队放弃了表,暂时在另一个表空间中重新创建它.

但是,现在我想删除报告该问题的数据文件.
从Dba_Extents中选择count(*),其中file_id = 23;报告0 – 因此似乎没有使用该数据文件的扩展区.但是,ALTER TABLESPACE tablespaceName DROP DATAFILE’< filepath>‘;不起作用.我得到以下内容:

Error report -
SQL Error: ORA-03262: the file is non-empty
03262. 00000 -  "the file is non-empty"
*Cause:    Trying to drop a non-empty datafile
*Action:   Cannot drop a non empty datafile

我该如何删除此文件?

最佳答案
Oracle在此警告您删除数据文件,因为它包含大量数据,为了确保数据文件完全为空,请执行以下命令

col tablespace_name format A30 heading tablespace
col file_name format A40
col tot_KB format 99,999,999
col tot_freeKB format  9,999,999
col Kb_max format  9,999,999

select f.tablespace_name
      ,f.file_name
      ,f.bytes/1024 tot_KB
      ,sum(nvl(s.bytes,0)/1024) tot_freeKB
      ,max(nvl(s.bytes,0)/1024) maxextent_freeKB
      ,( (sum(nvl(s.bytes,0)/1024)) / (f.bytes/1024) )*100 Pct_available
from   sys.dba_data_files f
      ,sys.dba_free_space s
where  f.file_id = s.file_id(+)
group by f.tablespace_name, f.file_name, f.bytes/1024
order by 1,2
;

如果数据文件完全为空,那么您有两个选项之一:

1)重启数据库(有时它有帮助)

2)将所有数据从一个表空间移动到另一个表空间,然后删除表空间并重命名新表空间

转载注明原文:为什么我不能删除这个Oracle数据文件 – 即使它看起来是空的? - 代码日志