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;