在创建表空间时通常会指定相应的数据文件,但是如果删除表空间时即便是
加上INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS; oralce的数据依然没用同时被删除,呵呵,看看我的解决方法,我的方法也许不是最好的,如果哪位能有好的解决办法欢迎讨论。
为了作测试方便,我是在WinXP上装的Oralce 10g 10.2.0.1.0.
二话不说,先看DEMO
Step 1:创建一个mydb_tbs表空间
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as SYS
SQL> create tablespace mydb_tbs datafile 'J:\oradata\orcl\mydb_tbs_001.dbf' size 50m;
Tablespace created
SQL>
看一下结果:
J:\oradata\orcl 的目录
2011-03-08 22:33 <DIR> .
2011-03-08 22:33 <DIR> ..
2011-03-08 22:24 7,061,504 CONTROL01.CTL
2011-03-08 22:24 7,061,504 CONTROL02.CTL
2011-03-08 22:24 7,061,504 CONTROL03.CTL
2011-03-08 22:24 104,865,792 EXAMPLE01.DBF
2011-03-08 22:33 52,436,992 MYDB_TBS_001.DBF
2011-03-08 22:24 52,429,312 REDO01.LOG
2011-03-08 22:24 52,429,312 REDO02.LOG
2011-03-08 22:24 52,429,312 REDO03.LOG
2011-03-08 22:24 251,666,432 SYSAUX01.DBF
2011-03-08 22:24 503,324,672 SYSTEM01.DBF
2011-03-08 22:02 20,979,712 TEMP01.DBF
2011-03-08 22:24 36,708,352 UNDOTBS01.DBF
2011-03-08 22:24 5,251,072 USERS01.DBF
13 个文件 1,153,705,472 字节
2 个目录 8,413,822,976 可用字节
可以看到MYDB_TBS_001.DBF 已经存在了
再查一下dba_data_file
SQL> select FILE_NAME from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
J:\ORADATA\ORCL\USERS01.DBF
J:\ORADATA\ORCL\SYSAUX01.DBF
J:\ORADATA\ORCL\UNDOTBS01.DBF
J:\ORADATA\ORCL\SYSTEM01.DBF
J:\ORADATA\ORCL\EXAMPLE01.DBF
J:\ORADATA\ORCL\MYDB_TBS_001.DBF
Step 2:删除mydb_tbs表空间
SQL>drop tablespace mydb_tbs including contents and datafiles cascade constraints;
Tablespace dropped
看到了,提示表空间已经被删除,
drop tablespace命令的需要加下面3个参数;
INCLUDING CONTENTS:指删除表空间中的数据段
INCLUDING CONTENTS AND DATAFILES:指删除数据段和数据文件
CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件
Step 3:在OS中删除对应的数据文件
当删除这个数据文件时,会有下面的提示:
可见该文件依然被ORACLE使用着,但是看看下面的查询
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
J:\ORADATA\ORCL\USERS01.DBF
J:\ORADATA\ORCL\SYSAUX01.DBF
J:\ORADATA\ORCL\UNDOTBS01.DBF
J:\ORADATA\ORCL\SYSTEM01.DBF
J:\ORADATA\ORCL\EXAMPLE01.DBF
SQL>
确实没有J:\ORADATA\ORCL\MYDB_TBS_001.DBF,这种情况看起来似乎很奇怪,我查了很多资料也没讲如何把表空间和数据文件一起删除,看来上面的删除的结果也只是解除了表空间和数据文件的逻辑关系,没办法只好用最后一招了---重启
Step5:重启oralce数据库
C:\>sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期二 3月 8 22:24:05 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 293601280 bytes
Fixed Size 1248600 bytes
Variable Size 100663976 bytes
Database Buffers 184549376 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
数据库已经打开。
SQL>
经过重启数据库之后,J:\ORADATA\ORCL\MYDB_TBS_001.DBF可以顺利删除。