在Oracle中,如何正确的删除表空间数据文件?

0    105    2

👉 本文共约1555个字,系统预计阅读时间或需6分钟。

DROP DATAFILE

可以使用如下的命令删除一个表空间里的数据文件:

关于该命令需要注意以下几点:

① 该语句会删除磁盘上的文件并更新控制文件和数据字典中的信息,删除之后的原数据文件序列号可以重用。

② 该语句只能是在相关数据文件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.xmmup.com/oraclesuoxiaobiaokongjiandefangfa.html

Unable to Drop a Datafile From the Tablespace Using Alter Tablespace Command (文档 ID 1050261.1)

OFFLINE和OFFLINE DROP的区别

与删除数据文件相似的还有如下的命令(其中的“'FILE_NAME'”也可以用文件号替代):

需要注意的是,该命令不会删除数据文件,只是将数据文件的状态更改为RECOVER。OFFLINE FOR DROP命令相当于把一个数据文件置于离线状态,并且需要恢复,并非删除数据文件。数据文件的相关信息还会存在数据字典和控制文件中。

对于归档模式而言,“OFFLINE FOR DROP”和“OFFLINE”没有什么区别,因为Oracle会忽略FOR DROP选项。因为OFFLINE之后还需要进行RECOVER才可以ONLINE。

对于非归档模式而言,只能执行“OFFLINE FOR DROP”。若不加FOR DROP选项,则会报错“ORA-01145: offline immediate disallowed unless media recovery enabled”。因为非归档模式没有归档文件来进行RECOVER操作。如果OFFLINE之后,速度足够快,联机Redo日志文件里的数据还没有被覆盖掉,那么在这种情况下,还是可以进行RECOVER操作的。

OS级别删除了数据文件后的恢复

若使用了“ALTER DATABASE DATAFILE N OFFLINE DROP;”命令,则并不会删除数据文件,这个时候可以先ONLINE后再用“ALTER TABLESPACE XXX DROP DATAFILE N;”删除。如果执行“ALTER DATABASE DATAFILE N OFFLINE DROP;”后并在OS级别删除了数据文件,那么首先需要使用“ALTER DATABASE CREATE DATAFILE N AS '/tmp/ts_dd_lhr02.dbf';”来添加一个数据文件,然后再执行RECOVER并ONLINE后再用“ALTER TABLESPACE XXX DROP DATAFILE N;”命令删除。如果产生的日志文件以及丢失,那么目标文件就不能再恢复了,这个时候只能删除表空间了,命令为:“DROP TABLESPACE XXX INCLUDING CONTENTS AND DATAFILES;”。

10g示例如下:

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

11g操作:

数据文件中含有数据的处理办法

如果数据文件中有数据,需要先迁移,重建索引。

另外,若不再需要数据,那么可以考虑删除相关的schema,请参考:https://www.xmmup.com/oraclesuoxiaobiaokongjiandefangfa.html

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

7 − 2 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部