当前位置:  数据库>oracle

Oracle删除表空间遇到的问题及解决

    来源: 互联网  发布时间:2017-06-22

    本文导语: 问题1:删除表空间期间遭遇报错 ORA-29857 删除表空间语句:DROP TABLESPACE SAC INCLUDING CONTENTS AND DATAFILES;根据MOS文档:How To Resolve ORA-29857 During a Drop Tablespace although No Domain Index exists in This Tablespace (文档 ID 1610456.1)对于ORA-29857这个错误...

问题1:删除表空间期间遭遇报错 ORA-29857

删除表空间语句:DROP TABLESPACE SAC INCLUDING CONTENTS AND DATAFILES;
根据MOS文档:
How To Resolve ORA-29857 During a Drop Tablespace although No Domain Index exists in This Tablespace (文档 ID 1610456.1)
对于ORA-29857这个错误,文档说的很清楚:

现象:

删除表空间时,遇到报错ORA-29857,例如:
SQL> drop tablespace SAC including contents and datafiles

drop tablespace SAC including contents and datafiles
*
ERROR at line 1:
ORA-29857: domain indexes and/or secondary objects exist in the tablespace

然而,你并未在这个表空间中发现域索引:

SQL> SELECT OWNER,INDEX_NAME, TABLE_OWNER, TABLE_NAME
 FROM DBA_INDEXES WHERE INDEX_TYPE='DOMAIN'
 AND TABLESPACE_NAME ='SAC';

no rows selected
原因:

The table which is in the tablespace to be dropped has a domain index which needs to be dropped before dropping the tablespace.
Domain indexes cannot be created in a specific tablespace and the TABLESPACE_NAME column in DBA_INDEXES is always null for domain indexes.

要删除的表空间中的表有一个域索引,这个域索引在删除表空间前需要被删除掉。
域索引不能被创建在指定的表空间,对于域索引,DBA_INDEXES中的TABLESPACE_NAME列值总是空值。

解决方法:

You need to identify and drop the secondary objects:
你需要找出并删除二级对象:

1.The domain index associated with a table in the tablespace to be dropped can be identified from the following query:
要删除的与在这个表空间中的表相关的域索引可以通过下面的查询找出来:

SQL> SELECT INDEX_NAME,I.TABLE_NAME FROM DBA_INDEXES I, DBA_TABLES T 
WHERE T.TABLE_NAME=I.TABLE_NAME 
AND T.OWNER=I.OWNER
AND I.INDEX_TYPE='DOMAIN'
and t.TABLESPACE_NAME='&TABLESPACE_NAME';

2.Secondary objects associated with domain indexes, can be identified from the following query:
与域索引相关的二级对象,可以通过下面的查询找出来:

SQL> SELECT SECONDARY_OBJECT_OWNER,SECONDARY_OBJECT_NAME,SECONDARY_OBJDATA_TYPE FROM DBA_SECONDARY_OBJECTS WHERE INDEX_NAME='INDEX_NAME_From_Previous_Query';

Once you identify the secondary objects, you can drop those and then drop the tablespace.
一旦你找出这些二级对象,你就可以删除它们然后再删除表空间。

Please see the following example:
请看下面的例子:

SQL> CREATE TABLESPACE SAC DATAFILE 'C:SAC.DBF' SIZE 50M;

Tablespace created.

SQL> CREATE TABLE SAC TABLESPACE SAC AS SELECT * FROM ALL_OBJECTS;

Table created.

SQL> begin
 ctx_ddl.create_preference('SUBSTRING_PREF','BASIC_WORDLIST');
 ctx_ddl.set_attribute('SUBSTRING_PREF', 'SUBSTRING_INDEX','TRUE');
 end;
 /

PL/SQL procedure successfully completed.


-- Trying to create the domain index in specific tablespace fails with ORA-29850:

SQL> CREATE INDEX SAC_INDX ON SAC(OBJECT_TYPE) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('WORDLIST SUBSTRING_PREF MEMORY 50M') TABLESPACE SAC;
CREATE INDEX SAC_INDX ON SAC(OBJECT_TYPE) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('WORDLIST SUBSTRING_PREF MEMORY 50M') TABLESPACE SAC
*
ERROR at line 1:
ORA-29850: invalid option for creation of domain indexes

SQL> CREATE INDEX SAC_INDX ON SAC(OBJECT_TYPE) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('WORDLIST SUBSTRING_PREF MEMORY 50M');

Index created. 

SQL> drop tablespace sac including contents and datafiles;
drop tablespace sac including contents and datafiles
*
ERROR at line 1:
ORA-29857: domain indexes and/or secondary objects exist in the tablespace

-- Trying to find the domain index in this tablespace:

SQL> SELECT OWNER,INDEX_NAME, TABLE_OWNER, TABLE_NAME
 FROM DBA_INDEXES WHERE INDEX_TYPE='DOMAIN'
 AND TABLESPACE_NAME ='SAC';

no rows selected

--Trying to find segments created in this newly created tablespace:

SQL> SELECT SEGMENT_NAME,SEGMENT_TYPE FROM DBA_SEGMENTS WHERE TABLESPACE_NAME='SAC';

SEGMENT_NAME SEGMENT_TYPE
-------------------- ------------------
SAC TABLE

-- Trying to find the segment for index SAC_INDX :

SQL> SELECT TABLESPACE_NAME FROM DBA_SEGMENTS WHERE SEGMENT_NAME='SAC_INDX';

no rows selected

-- Trying to find the tablespace for index SAC_INDX from DBA_INDEXES :

SQL> set null null
SQL> select INDEX_TYPE,TABLE_TYPE,DOMIDX_STATUS,DOMIDX_OPSTATUS,SEGMENT_CREATED,TABLESPACE_NAME from DBA_INDEXES where INDEX_NAME='SAC_INDX';

INDEX_TYPE TABLE_TYPE DOMIDX_STATU DOMIDX SEG TABLESPACE_NAME
--------------------------- ----------- ------------ ------ --- ------------------------------
DOMAIN TABLE VALID VALID YES null

--To find the indexes that are causing ORA-29857 , please use the following query :

SQL> col TABLE_NAME for a30
SQL> col INDEX_NAME for a30

SQL> SELECT INDEX_NAME,I.TABLE_NAME FROM DBA_INDEXES I, DBA_TABLES T

 WHERE T.TABLE_NAME=I.TABLE_NAME
 AND T.OWNER=I.OWNER
 AND I.INDEX_TYPE='DOMAIN'
 and t.TABLESPACE_NAME='SAC';

INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
SAC_INDX SAC

SQL> DROP INDEX SAC_INDX;

Index dropped.

--confirm that no secondary objects associated with domain index still exist:

SQL> SELECT SECONDARY_OBJECT_OWNER,SECONDARY_OBJECT_NAME,SECONDARY_OBJDATA_TYPE FROM DBA_SECONDARY_OBJECTS WHERE INDEX_NAME='SAC_INDX';

no rows selected

SQL> DROP TABLESPACE SAC INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.
问题2:删除表空间期间遭遇 ORA-02429

对于ORA-02429这个错误,MOS文档的描述也很清楚:
Drop Tablespace Failed with ORA-02429: cannot drop index used for enforcement of unique/primary key (文档 ID 1918060.1)

现象:

删除表空间失败,伴随下面的错误:

SQL> DROP TABLESPACE REP_DATA INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE REP_DATA INCLUDING CONTENTS AND DATAFILES
*
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
解决方法:

Find the constraint name for the unique/primary key, disable the constraint and drop the tablespace again.
找到那些惟一/主键约束名,禁用这些约束然后再次删除表空间。

Steps:
=====
1) Execute below query to find the constraint name:
执行下面的查询来找到约束名:
SQL> select owner, constraint_name,table_name,index_owner,index_name
from dba_constraints
where (index_owner,index_name) in (select owner,index_name from dba_indexes
where tablespace_name='');
 
2) Disable the constraint:
禁用约束:
SQL> ALTER TABLE  DISABLE CONSTRAINT ;
 
3) Drop the tablespace:
删除表空间:
SQL> DROP TABLESPACE  INCLUDING CONTENTS AND DATAFILES;  
问题3:表空间删除完毕,主机磁盘空间不释放

如果等待很长时间都没有释放,那么可参考:

建议的操作方法如下:
1、下载一个lsof软件装上,google上可以搜到
2、找到正在用被删文件的进程
lsof | grep deleted
3、kill掉相应的进程空间就释放了

一般这种情况,并不建议重启数据库或主机。


    
 
 

您可能感兴趣的文章:

  • hpunix11上装oracle817时遇到了困难,请高手帮忙
  • Linux下Oracle安装时遇到的问题及解决
  • 安装Oracle中遇到的问题!
  • 在Red Hat9 上安装oracle 9.2.1.0遇到了麻烦
  • 高分求救 ld -ldl问题(安装oracle8遇到的)---拜请各位
  • 我要向oracle中插入大文本,用的是lang类型的字段,但是只能插3000字,再多就抱错,说我字符串过长。谁遇到过此问题?
  • 在Linux系统上安装64位Oracle遇到的几个问题
  • 用JDBC访问Oracle的问题,不知道大家遇到过没有
  • 我的載linux9.0下面安裝oracle8.1遇到問題﹐runInstaller的時候的問題﹐希望有知道的賜教﹗
  • 请教:为什么删除不掉?我用超级用户删除某一文件夹rm -R oracle失败。
  • 在linux 中如何删除oracle db 与卸载oracle.
  • Oracle删除表前判断表名是否存在若存在则删除
  • oracle创建删除用户示例分享(oracle删除用户命令及授权)
  • oracle 彻底删除方法
  • Oracle删除后不能重新安装的解决方法
  • ubuntu如何彻底删除oracle
  • 彻底删除Oracle数据库的方法
  • Oracle删除当前用户下所有表的方法适用于有或没有删除权限
  • shell脚本操作oracle删除表空间、创建表空间、删除用户
  • 技巧分享 删除Oracle10G中的垃圾表
  • Oracle删除带有空格的表
  • 请问怎么用jsp语句删除oracle中的一条记录?
  • Linux环境下完全删除Oracle
  • oracle怎么删除用户提供解决方案
  • linux下如何卸载oracle?直接删除就可以么??
  • oracle单库彻底删除干净的执行步骤
  • 删除Oracle中奇怪的表名称BIN$…的方法
  • linux oracle数据库删除操作指南
  • oracle数据库添加或删除一列的sql语句
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解决oracle用户连接失败的解决方法
  • Oracle Connect to Idle Instance解决方法
  • Linux下安装Tomcat后与Oracle冲突的解决
  • linux下安装oracle,出现没有权限的报警,怎么解决?
  • 安装Oracle加载数据库错误areasQueries的解决
  • Oracle 11g 相关工具netca,dbca乱码之解决
  • Linux安装Oracle 11时报错DISPLAY解决方案
  • 简单的Oracle小问题解决
  • oracle中文乱码解决的办法
  • 关于系统重装后Oracle数据库完全恢复的解决办法
  • 安装oracle9时,安装界面的字体无法正确显示,怎么解决啊???
  • Oracle安装后8080和80端口被占用的解决办法
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • oracle 实际值超过数据库某个字段指定长度报错解决
  • Linux下命令行启动oracle时报错的解决
  • 急!急!jbuilder中新建oracle数据源的问题,解决立即给分!
  • Linux系统下安装Oracle X11错误解决办法
  • Linux中安装Oracle乱码问题的解决
  • Oracle与JSDK4.0环境变量冲突,如何解决(在线等待)?
  • Linux下Oracle 10G DBCA等汉字乱码解决方法
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3