您的位置:首页 > 数据库 > Oracle

oracle删除表空间和修改索引表空间

2016-03-14 15:33 501 查看
由于lob对象引起的表空间无法删除。本来是要删除DMS表空间,但是上面有LOB对象,而且表却是在别的表空间DMS4上。解决的办法就是将这些lob移动到DMS4表空间。

下面是解决过程


删除用户时报错:

drop tablespace dms

第 1 行出现错误:

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

SQL> drop tablespace dms including contents and datafiles;

drop tablespace dms including contents and datafiles

*

第 1 行出现错误:

ORA-22868: 具有 LOB 的表包含有位于不同表空间的段


检查过程

检查这个表空间上的Lob对象

SQL> select owner, table_name, column_name, tablespace_name

from dba_lobs

where tablespace_name = 'DMS';

已选择6行。

另外再检查下约束有没有问题(因为这个问题常见,所以一并检查了下)。

SQL> select 'alter table '||owner||'.'||table_name||' drop constraint '||constraint_name||' ;'

from dba_constraints

where constraint_type in ('U', 'P')

and (index_owner, index_name) in

(select owner, segment_name

from dba_segments

where tablespace_name = 'DMS');

未选定行

这是查表空间相关的索引语句:

SELECT 'ALTER INDEX PMS.' || INDEX_NAME || ' REBUILD TABLESPACE PMS_TB;' mysql

FROM DBA_INDEXES

WHERE TABLE_OWNER = 'PMS'

AND TABLESPACE_NAME = 'SCFCEB_TB';

SQL>


解决过程:

下面是我写的脚本,这个脚本可以生成要用的语句。

select 'alter table ' || xtable || ' move tablespace DMS4 lob' || '(' ||

column_name || ') store as ( tablespace DMS4);'

from (select xtable, wmsys.wm_concat(column_name) column_name

from (select owner || '.' || table_name xtable,

column_name,

tablespace_name

from dba_lobs

where tablespace_name = 'DMS')

group by xtable)

结果如下:

alter table DMS4.xxxx move tablespace DMS4 lob(ERROR_TEXT) store as ( tablespace DMS4);

^………………

取消dms4在dms表空间上的限额,防止再出类似问题。

alter user dms4 quota 0 on dms;

原文地址:http://blog.csdn.net/bamuta/article/details/12492783

如果遇到不能alter 或 drop Lob类型索引的错误,这是因为你的表中BLOB或CLOB类型字段,它会自动给这类数据增加所以,并且无法直接修改。可以用以下语句解决。

//先创建一个临时表

CREATE TABLE T_TABLE1 AS SELECT* FROMTABLE1 ;

//删除有LOB字段的表

DROP TABLE TABLE1;

//重新创建刚刚的表

CREATE TABLETABLE1 AS SELECT* FROMT_TABLE1;

//删除临时表

DROP TABLET_TABLE1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: