合 在Oracle中,如何正确的删除表空间数据文件?
Tags: Oracle重命名删除数据文件移动ORA-03262
DROP DATAFILE
可以使用如下的命令删除一个表空间里的数据文件:
1 2 | ALTER TABLESPACE TS_DD_LHR DROP DATAFILE n; --n为数据文件号 ALTER TABLESPACE TS_DD_LHR DROP DATAFILE '/tmp/ts_dd_lhr01.dbf'; |
关于该命令需要注意以下几点:
① 该语句会删除磁盘上的文件并更新控制文件和数据字典中的信息,删除之后的原数据文件序列号可以重用。
② 该语句只能是在相关数据文件ONLINE的时候才可以使用。如果说对应的数据文件已经是OFFLINE,那么仅针对字典管理表空间(Dictionary-Managed Tablespace,DMT)可用,而对于本地管理表空间(Locally Managed Tablespace,LMT)不能使用,否则会报错“ORA-03264: cannot drop offline datafile of locally managed tablespace”。如果数据文件是RECOVER状态,那么该命令依然不能使用。
③ 不能删除一个表空间中第一个添加的数据文件,否则会报错,形如“ORA-03263: cannot drop the first file of tablespace TS_DD_LHR”。
④ 若一个表空间只包含1个数据文件,则不能删除该数据文件,否则会报错,形如“ORA-03261: the tablespace TS_DD_LHR has only one file”。
⑤ 数据文件必须为空,否则会报:ORA-03262: the file is non-empty。需要注意的是,non-empty的含义是有EXTENT被分配给了TABLE,而不是该TABLE中有无ROWS,此时若是使用“DROP TABLE XXX;”是不行的,必须使用“DROP TABLE XXX PURGE;”或者在已经使用了“DROP TABLE XXX;”的情况下,再使用“PURGE TABLE "XXX表在回收站中的名称";”来删除回收站中的该表,否则空间还是不释放,数据文件仍然不能DROP。
⑥ 不能删除SYSTEM表空间的数据文件,否则报错“ORA-01541: system tablespace cannot be brought offline; shut down if necessary”。
需要注意的是,据官方文档介绍说,处于READ ONLY状态的表空间数据文件也不能删除,但经过实验证明,其实是可以删除的。
删除数据文件可以参考:https://www.dbaup.com/oraclesuoxiaobiaokongjiandefangfa.html
Unable to Drop a Datafile From the Tablespace Using Alter Tablespace Command (文档 ID 1050261.1)
OFFLINE和OFFLINE DROP的区别
与删除数据文件相似的还有如下的命令(其中的“'FILE_NAME'”也可以用文件号替代):