日期:2014-05-16  浏览次数:20545 次

[转]删除表空间的操作

一个用户要删除数据库的表空间,首先该用户要具备drop tablespace的权限

在当前用户下执行以下语句来查询确认

?

select a2.username,a1.privilege

from dba_sys_privs a1 , user_role_privs a2

where a1.privilege = 'DROP TABLESPACE' and a1.grantee =a2.granted_role


?

SQL> conn xxx/xxx

已连接。

SQL> select a2.username,a1.privilege

2 from dba_sys_privs a1 , user_role_privs a2

3 where a1.privilege = 'DROP TABLESPACE' and a1.grantee =a2.granted_role;

?

USERNAME PRIVILEGE

------------------------------ ----------------------------------------

WULW DROP TABLESPACE


?

如果没有 drop tablespace,请先用更高级的用户(如sys)给予授权

?

SQL> conn sys/oracle@ibm as sysdba;

已连接。

SQL> grant drop tablespace to wulw;

授权成功。


?

以上前提条件确认完,下面开始实验.

确认已有的表空间

SQL> select a.TS# ,a.NAME , b.NAME

2 from v$tablespace a,v$datafile b

3 where a.TS# = b.TS#;

TS# NAME NAME

0 SYSTEM L:\ORACLE\ORADATA\IBM\SYSTEM01.DBF

1 UNDOTBS1 L:\ORACLE\ORADATA\IBM\UNDOTBS01.DBF

3 CWMLITE L:\ORACLE\ORADATA\IBM\CWMLITE01.DBF

4 DRSYS L:\ORACLE\ORADATA\IBM\DRSYS01.DBF

5 EXAMPLE L:\ORACLE\ORADATA\IBM\EXAMPLE01.DBF

6 INDX L:\ORACLE\ORADATA\IBM\INDX01.DBF

7 ODM L:\ORACLE\ORADATA\IBM\ODM01.DBF

8 TOOLS L:\ORACLE\ORADATA\IBM\TOOLS01.DBF

9 USERS L:\ORACLE\ORADATA\IBM\USERS01.DBF

10 XDB L:\ORACLE\ORADATA\IBM\XDB01.DBF

12 TDATA_01 L:\ORACLE\ORADATA\IBM\TDATA_01.ORA

14 TINDEX_01 L:\ORACLE\ORADATA\IBM\TINDEX_01.ORA

已选择12行。(为看起来直观,上面的显示作了手工格式化)


?

创建新的测试表空间:

SQL> create tablespace mytbs01

2 logging

3 datafile 'L:\ORACLE\ORADATA\IBM\mytbs01.dbf' size 10m REUSE ;

表空间已创建。

SQL> CREATE TABLESPACE "MYTBS02"

2 LOGGING

3 DATAFILE 'L:\ORACLE\ORADATA\IBM\MYTBS02.dbf' SIZE 10M REUSE ;

表空间已创建。


?

如果表空间里面没有任何数据对象,可以直接删除.


SQL> drop tablespace mytbs01;

表空间已丢弃。


?

这种删除方式相关的数据文件仍然存在于磁盘上.

(可以进入数据文件所在目录L:\ORACLE\ORADATA\IBM 进行查看 MYTBS01.DBF )


如果表空间里面含有数据对象,那么该表空间就不能像上面那样做直接删除了.

SQL> create tablespace mytbs01

2 logging

3 datafile 'L:\ORACLE\ORADATA\IBM\mytbs01.dbf' size 10m REUSE;

表空间已创建。

SQL> create table test(mobile number(13))

2 tablespace mytbs01;

表已创建。

SQL> drop tablespace mytbs01;

drop tablespace mytbs01

*

ERROR 位于第 1 行:

ORA-01549: 表空间非空,请使用 INCLUDING CONTENTS 选项


?

看到了吧,提示ora-01549错误.