현상
add partition 수행 시 ERROR_TCCF_NO_SUCH_TS(-24012) 오류가 발생합니다.
예시 1) drop tablespace - table
SQL> create tablespace ts1;
SQL> create table t1(c1 number) tablespace ts1
partition by range(c1)
(partition p1 values less than (10) tablespace usr,
partition p2 values less than (20) tablespace usr);
SQL> alter table t1 modify default attributes tablespace ts1;
SQL> select tablespace_name from dba_tables where table_name = 'T1';
-- 패치 전/후 : TS1
SQL> select def_tablespace_name from dba_part_tables where table_name = 'T1';
-- 패치 전/후 : TS1
SQL> drop tablespace ts1;
SQL> alter table t1 add partition p3 values less than (30);
-- 패치 전 : TBR-24012: No such tablespace 5. (5는 ts_id라 다를 수 있음)
-- 패치 후 : Table 'T1' altered.
SQL> select tablespace_name from dba_tables where table_name = 'T1';
-- 패치 전 : TS1
-- 패치 후 : USR
SQL> select def_tablespace_name from dba_part_tables where table_name = 'T1';
-- 패치 전 : TS1
-- 패치 후 : USR
SQL
복사
예시 2) drop tablespace - index
SQL> create tablespace ts1;
SQL> create table t1(c1 number)
partition by range(c1)
(partition p1 values less than (10),
partition p2 values less than (20));
SQL> create index i1 on t1(c1) local;
SQL> alter index i1 modify default attributes tablespace ts1;
SQL> select tablespace_name from dba_indexes where index_name = 'I1';
-- 패치 전/후 : TS1
SQL> select def_tablespace_name from dba_part_indexes where index_name = 'I1';
-- 패치 전/후 : TS1
SQL> drop tablespace ts1;
SQL> alter table t1 add partition p3 values less than (30);
-- 패치 전 : TBR-24012: No such tablespace 5. (5는 ts_id라 다를 수 있음)
-- 패치 후 : Table 'T1' altered.
SQL> select tablespace_name from dba_indexes where index_name = 'I1';
-- 패치 전 : TS1
-- 패치 후 : USR
SQL> select def_tablespace_name from dba_part_indexes where index_name = 'I1';
-- 패치 전 : TS1
-- 패치 후 : USR
SQL
복사
원인
drop tablespace를 수행 시, partition object(_dd_partobj)의 defts_id 컬럼 값이 dba_tablespace 뷰의 ts_id 컬럼 값과 동일한 경우에도 해당 값을 변경하지 않고 있었습니다.
그 결과, 이후 add partition 수행 시 defts_id에 partition을 생성하려 하지만 해당 tablespace가 존재하지 않아 오류가 발생하였습니다.
관련 딕셔너리
SQL> desc _dd_partobj
COLUMN_NAME TYPE CONSTRAINT
---------------------------------------- ------------------ --------------------
OBJ_ID NUMBER
PARTTYPE NUMBER
PARTCNT NUMBER
PARTKEYCOLS NUMBER
FLAGS NUMBER
DEFTS_ID NUMBER
DEFPCTFREE NUMBER
DEFPCTFREE_BYTES NUMBER
DEFINITRANS NUMBER
DEFEXTSIZE NUMBER
DEFMAXEXTS NUMBER
DEFBUFPOOL NUMBER
SUBPARTTYPE NUMBER
SUBPARTCNT NUMBER
SUBPARTCOLCNT NUMBER
BOUND_TOTAL_SIZE NUMBER
INTERVAL VARCHAR(128)
SQL> desc dba_tablespaces;
COLUMN_NAME TYPE CONSTRAINT
---------------------------------------- ------------------ --------------------
TABLESPACE_NAME VARCHAR(128)
TS_ID NUMBER
DATAFILE_COUNT NUMBER
BLOCK_SIZE NUMBER
NEXT_EXTENT NUMBER
STATUS VARCHAR(9)
CONTENTS VARCHAR(9)
LOGGING VARCHAR(9)
FORCE_LOGGING VARCHAR(3)
ALLOCATION_TYPE VARCHAR(7)
ENCRYPTED VARCHAR(3)
INITIAL_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
EXTENT_MANAGEMENT VARCHAR(5)
SEGMENT_SPACE_MANAGEMENT VARCHAR(4)
SQL
복사
해결
패치 적용
FS07PS_337253a : drop tablespace 수행 시, 해당 tablespace를 default tablespace로 가지고 있는 table, index, lob 객체들의 default tablespace를 해당 user의 기본 tablespace 정보로 변경하도록 수정되었습니다.
주의
티맥스티베로에서 제공하는 기술지원을 통해 패치를 적용합니다.
우회방안
add partition 시 테이블스페이스를 명시하거나, 삭제된 테이블스페이스를 다시 생성하여 처리할 수 있습니다.
예시 1) add partition 시 테이블스페이스 지정
SQL > ALTER TABLE (table명) ADD PARTITION (partition명) VALUES LESS THEN (value) TABLESPACE (tablespace명);
SQL
복사
예시 2) TABLESPACE 생성
SQL > ALTER TABLESPACE [tablespace 명] ADD DATAFILE ('데이터파일 경로') SIZE 150M AUTOEXTEND ON;
SQL
복사