在公司机器上为了挪磁盘空间,就直接把表空间的数据文件删除了(当前数据是OPEN的),结果应用程序跑的时候报错:
ORA-01116:error in opening database file 8
ORA-01110:data file 8:'*/huge01.dbf'
ORA-27041:unable to open file
刚开始是直接去执行的删除表空间及数据文件,结果报错:
SQL> DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-02429: cannot drop index used for enforcement of unique/primary key
SQL>
执行DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS或者DROP TABLESPACE HUGE_TABLESPACE,均报如上错误,
然后想到先把数据文件OFFLINE掉:
SQL> ALTER DATABASE DATAFILE '*/huge01.dbf' OFFLINE DROP;
Database altered.
SQL>
执行成功,但是这个表空间还是删除不了,依然报上述错误.
没辙了,直接关掉库,重启:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 213909504 bytes
Fixed Size 1260960 bytes
Variable Size 192938592 bytes
Database Buffers 16777216 bytes
Redo Buffers 2932736 bytes
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
SQL>
再删除表空间,还是不行.....
再回到原点,ORA-02429: cannot drop index used for enforcement of unique/primary key
那么去查数据库DBA_SEGMENTS里面那个段占用的表空间是HUGE_TABLESPACE:
SELECT * FROM DBA_SEGMENTS VV WHERE VV.tablespace_name='HUGE_TABLESPACE;
查出来是**用户下原来有个表的三个索引的存储空间是HUGE_TABLESPACE,直接把这三个索引基于的表移走(删除做备份),
发现这三个索引的SEGMENT_NAME均变成了小数:8.268,7.1,5.89,还是第一次见到这样的SEGMENT_NAME,这三个数的SEGMENT_TYPE是
TEMPORY...
这时候再去删除表空间DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS;
执行成功。
ORA-01116:error in opening database file 8
ORA-01110:data file 8:'*/huge01.dbf'
ORA-27041:unable to open file
刚开始是直接去执行的删除表空间及数据文件,结果报错:
SQL> DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;
DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-02429: cannot drop index used for enforcement of unique/primary key
SQL>
执行DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS或者DROP TABLESPACE HUGE_TABLESPACE,均报如上错误,
然后想到先把数据文件OFFLINE掉:
SQL> ALTER DATABASE DATAFILE '*/huge01.dbf' OFFLINE DROP;
Database altered.
SQL>
执行成功,但是这个表空间还是删除不了,依然报上述错误.
没辙了,直接关掉库,重启:
SQL> startup nomount
ORACLE instance started.
Total System Global Area 213909504 bytes
Fixed Size 1260960 bytes
Variable Size 192938592 bytes
Database Buffers 16777216 bytes
Redo Buffers 2932736 bytes
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
SQL>
再删除表空间,还是不行.....
再回到原点,ORA-02429: cannot drop index used for enforcement of unique/primary key
那么去查数据库DBA_SEGMENTS里面那个段占用的表空间是HUGE_TABLESPACE:
SELECT * FROM DBA_SEGMENTS VV WHERE VV.tablespace_name='HUGE_TABLESPACE;
查出来是**用户下原来有个表的三个索引的存储空间是HUGE_TABLESPACE,直接把这三个索引基于的表移走(删除做备份),
发现这三个索引的SEGMENT_NAME均变成了小数:8.268,7.1,5.89,还是第一次见到这样的SEGMENT_NAME,这三个数的SEGMENT_TYPE是
TEMPORY...
这时候再去删除表空间DROP TABLESPACE HUGE_TABLESPACE INCLUDING CONTENTS;
执行成功。