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

彻底删除ORALCE数据文件
在创建表空间时通常会指定相应的数据文件,但是如果删除表空间时即便是
加上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可以顺利删除。