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, event
FROM gv$session;
注意:很可能出现 enq TT - contention 的等待事件。应注意排查是否出现阻塞情况。
c.排查阻塞情况
SQL> SELECT inst_id, addr, sid, type, id1, id2, lmode, request, ctime, block
FROM gv$lock
WHERE (id1, id2, type) IN
    (SELECT id1, id2, type 
    FROM gv$lock
    WHERE request>0);
原文地址:https://www.cnblogs.com/autopenguin/p/6179892.html