본문 바로가기

ORACLE/문제해결

ora-14404 테이블스페이스 DROP 시 파티션 테이블의 위치 때문에 발생한 오류

728x90
반응형

테이블스페이스 DROP 중 아래와 같은 오류가 발생했다.

ORA-14404: 분할영역된 테이블이 다른 테이블스페이스에 분할영역것을 포함하고있습니다.

원인

삭제하려는 테이블스페이스 내에 존재하는 파티션 테이블이나 인덱스의 일부가 다른 테이블스페이스에 존재하기 때문에 발생하는 오류이다.

-- 파티션의 일부가 다른 테이블스페이스에 존재하는 파티션 찾는 명령어
select * from dba_tab_partition
where TABLE_NAME in (
	select TABLE_NAME
	from dba_tab_partitions
	where TABLESPACE_NAME = '삭제대상테이블스페이스명'
	group by TABLE_NAME
)
and TABLESPACE_NAME <> '삭제대상테이블스페이스명'
;

 


해결방법 1

해당 파티션의 테이블스페이스를 이동한다.

-- 파티션의 테이블스페이스 변경 명령어
alter table 스키마명.테이블명 move partition 파티션명 tablespace 옮길테이블스페이스명 update indexes;

-- 일부가 다른 테이블스페이스에 존재하는 파티션들의 테이블스페이스 변경 스크립트
select 'alter table ' || TABLE_OWNER || '.' || TABLE_NAME || ' move partition ' || PARTITION_NAME || 'tablespace 옮길테이블스페이스명 update indexes;'
from dba_tab_partition
where TABLE_NAME in (
	select TABLE_NAME
	from dba_tab_partitions
	where TABLESPACE_NAME = '삭제대상테이블스페이스명'
	group by TABLE_NAME
)
and TABLESPACE_NAME <> '삭제대상테이블스페이스명'
;

해결방법 2

삭제한다. (어차피 tablespace drop 예정이기 때문에)

-- 파티션 삭제 명령어
alter table 스키마명.테이블명 drop partition 파티션명;

-- 일부가 다른 테이블스페이스에 존재하는 파티션들 삭제 스크립트
select 'alter table ' || TABLE_OWNER || '.' || TABLE_NAME || ' drop partition ' || PARTITION_NAME || ';'
from dba_tab_partition
where TABLE_NAME in (
	select TABLE_NAME
	from dba_tab_partitions
	where TABLESPACE_NAME = '삭제대상테이블스페이스명'
	group by TABLE_NAME
)
and TABLESPACE_NAME <> '삭제대상테이블스페이스명'
;

 

728x90
반응형