DROP TABLESPACE

说明

删除表空间

语法

drop_tablespace ::=

参数

tablespace_name

要删除的表空间名

注解

删除表空间将删除表空间所属的所有数据文件,删除表空间是不可恢复的,如果表空间有数据,将不允许删除。

删除 undo 表空间时,可能会删除失败,失败的情况分为以下两种:

undo 表空间内仍然有回滚段被使用,无法将回滚段 offline ,那么此 undo 表空间不能被删除

回滚段仍在有效期内,无法被删除,可以手动修改 UNDO_RETENTION 参数,缩短回滚段的有效期

示例

示例1: 删除表空间

--  清理环境
DROP TABLESPACE ts1;
DROP TABLE tab1 CASCADE;

--  创建表空间
CREATE TABLESPACE ts1 DATAFILE 'ts1.dt' SIZE 5m AUTOEXTEND ON NEXT 5m;

--  创建表(指定表空间)
CREATE TABLE tab1 (a INT, b INT) TABLESPACE ts1;

--  删除表空间
--  表空间上有数据(表 tab1),删除失败
DROP TABLESPACE ts1;
ERROR, TABLESPACE有数据不能删除


--  删除表
DROP TABLE tab1;  

--  删除表空间
DROP TABLESPACE ts1;

示例2: 删除 undo 表空间,undo 表空间中不存在 online 状态的回滚段

--  清理环境
drop tablespace UNDO_TS_1;

create undo tablespace UNDO_TS_1 datafile 'UNDO_TS_1.dbf';

drop tablespace UNDO_TS_1;

示例3: 删除 undo 表空间,undo 表空间中存在 online 状态的回滚段,无法将回滚段 offline,删除表空间失败

drop table t1;
drop tablespace UNDO_TS_1;
create undo tablespace UNDO_TS_1 datafile 'UNDO_TS_1.dbf';

[1] create table t1(id int);
[1] insert into t1 values(20);
[1] begin;
[1] update t1 set id=1000;

-- 将系统 undo 表空间由 UNDO 切换到 UNDO_TS_1
[2] alter system set undo_tablespace='UNDO_TS_1';
-- 切换后删除旧的 undo 表空间
[2] drop tablespace undo; 
ERROR, DBADropTableSpace: 回滚表空间 1 存在 online 状态的回滚段,不能删除

示例4: 删除 undo 表空间,undo 表空间中的回滚段还在有效期内,删除表空间失败

-- 该用例执行时,当前系统 undo 表空间应为 UNDO_TS_1
drop table t1;
drop tablespace UNDO_TS_2;

-- 设置回滚段有效期为 1000 秒
SET undo_retention=1000;
[1]create table t1(id int);
[1]insert into t1 values(10);

[1]create undo tablespace UNDO_TS_2 datafile 'UNDO_TS_2.dbf';
[1]alter system set undo_tablespace='UNDO_TS_2';
[1]exit;
[2]drop tablespace UNDO_TS_1; 
ERROR, 回滚段 130688 仍在有效期内,不允许被删除,建议修改配置参数 UNDO_RETENTION

示例5: 删除 undo 表空间,undo 表空间中的回滚段未在有效期内,删除表空间成功

-- 该用例执行时,当前系统 undo 表空间应为 UNDO_TS_2
drop table t1;
drop tablespace UNDO_TS_3;

-- 设置回滚段有效期为 5 秒
SET undo_retention=5;
create table t1(id int);
insert into t1 values(10);

create undo tablespace UNDO_TS_3 datafile 'UNDO_TS_3.dbf';
alter system set undo_tablespace='UNDO_TS_3';


-- 等待 20 秒
select OSSLEEP(20000) from dual;
OSSLEEP(VOID)      |
-------------------
总数目:1
drop tablespace UNDO_TS_2;