Oracle-11g 从表空间删除数据文件
从表空间删除数据文件前提条件
如果欲从表空间中删除数据文件,那么该数据文件必须为空,否则将报出"ORA-03262: the file is non-empty"的错误。
从表空间删除数据文件步骤
1.确定数据文件为空
根据数据文件名称及表空间确定文件为空
SQL> SELECT distinct b.owner, b.segment_name
FROM dba_data_files a,
dba_extents b
WHERE a.file_id = b.file_id
AND a.tablespace_name ='tablespace_name'
AND a.file_name ='datafile_name';
其中,tablespace_name 为数据文件所属表空间名称;datafile_name 为数据文件名称。
注意:确保该语句查询结果为空。否则需将该数据文件内对象移除该数据文件。
2.确保对应表空间无回收对象:
SQL> SELECT original_name, type, ts_name, can_purge
FROM dba_recyclebin
WHERE ts_name='tablespace_name';
其中,tablespace_name 为回收对象所属表空间名称。
注意:确保该语句查询结果为空。否则需使用 PURGE TABLE 等命令清理回收对象。
3.从表空间删除数据文件
登录数据库服务器,进入 sqlplus 环境,运行如下语句。
SQL> ALTER TABLESPACE tablespace_name DROP DATAFILE 'datafile_name';
其中,tablespace_name 为数据文件所属表空间名称;datafile_name 为数据文件名称。
注意:切勿执行中取消操作,谨记!
4.监控执行过程
执行过程中,可能发生长时间卡死的情况,此时应多方位排查故障。
a.查看 alert.log在执行的数据库服务器上查看对应实例的 alert.log 文件。b.查看会话等待事件SQL> SELECT inst_id, sid, serial#, username, sql_id, eventFROM gv$session;注意:很可能出现 enq TT - contention 的等待事件。应注意排查是否出现阻塞情况。c.排查阻塞情况SQL> SELECT inst_id, addr, sid, type, id1, id2, lmode, request, ctime, blockFROM gv$lockWHERE (id1, id2, type) IN(SELECT id1, id2, typeFROM gv$lockWHERE request>0);