1. 내용
파티션 테이블을 생성한 상태에서 인덱스를 생성하고,
생성된 파티션 테이블을 alter를 거쳐 일부 파티션을 삭제하면 INDEX도 같이 삭제되어야 하나 그렇지 않은 현상이 발생한다.
* cubrid diagdb 를 통해 보면 파티션 된 해당 인덱스는 삭제되지 않고 남아 있음을 알 수 있다.
이 부분은 사용되지 않는 부분으로 동작 자체에는 관여하지 않으나 디스크 공간을 계속 차지한다는 것을 감안해야 한다.
* cubrid checkdb 시 이 부분으로 인해 오류가 발생할 수 있다. 그러나 데이터 자체는 정상이다.
* cubrid backupdb 시 역시 이 부분으로 오류가 발생할 수 있다. cubrid checkdb 때와 같은 원인으로, cubrid backupdb 시 기본적으로 check를 우선 수행하기 때문이다. --no-check 옵션을 주어 cubrid backupdb 명령을 수행할 수 있다.
2. 예시
예시 1 - 테이블 및 인덱스 생성 csql > CREATE TABLE participant2 (host_year INT, nation CHAR(3), gold INT, silver INT, bronze INT) PARTITION BY RANGE (host_year) (PARTITION before_1996 VALUES LESS THAN (1996), PARTITION before_2008 VALUES LESS THAN (2008) );
INSERT INTO participant2 VALUES (1988, 'NZL', 3, 2, 8); INSERT INTO participant2 VALUES (1988, 'CAN', 3, 2, 5); INSERT INTO participant2 VALUES (1996, 'KOR', 7, 15, 5); INSERT INTO participant2 VALUES (2000, 'RUS', 32, 28, 28); INSERT INTO participant2 VALUES (2004, 'JPN', 16, 9, 12);
create index participant2_idx on participant2(host_year);
csql > ;exit |
예시 2. 데이터베이스 저장상태 확인 $ cubrid server stop
$ cubrid diagdb -d2 demodb --------------------------------------------------------------------------- 0|1557 1 HEAP CLASS_OID: 0| 505| 2 (participant2) 0|1558 1 HEAP CLASS_OID: 0| 505| 3 (participant2__p__before_1996) 0|1559 1 HEAP CLASS_OID: 0| 504| 2 (participant2__p__before_2008) 0|1563 2 BTREE CLASS_OID: 0| 505| 3 (participant2__p__before_1996), ATTRID: 4 0|1564 2 BTREE CLASS_OID: 0| 504| 2 (participant2__p__before_2008), ATTRID: 4 0|1565 1 BTREE CLASS_OID: 0| 505| 2 (participant2), ATTRID: 4 --------------------------------------------------------------------------- |
예시 3. 파티션 일부 삭제 $ cubrid server start csql > alter table participant2 drop partition before_1996; ;x |
예시 4. 파티션 일부 삭제 후 데이터베이스 저장 상태 확인 $ cubrid server stop $ cubrid diagdb -d2 demodb ---------------------------------------------------------------------------
0|1557 1 HEAP CLASS_OID: 0| 505| 2 (participant2) 0|1558 1 HEAP Marked as deleted...CLASS_OID: 0| 505| 3 (*UNKNOWN-CLASS*) 0|1559 1 HEAP CLASS_OID: 0| 504| 2 (participant2__p__before_2008) 0|1563 2 BTREE CLASS_OID: 0| 505| 3 (*UNKNOWN-CLASS*), ATTRID: 4 0|1564 2 BTREE CLASS_OID: 0| 504| 2 (participant2__p__before_2008), ATTRID: 4 0|1565 1 BTREE CLASS_OID: 0| 505| 2 (participant2), ATTRID: 4 --------------------------------------------------------------------------- è HEAP 파일은 삭제 마킹 되고 BTREE 파일은 삭제되어야 하나, 삭제된 클래스(UNKNOWN-CLASS로 표시됨)에 대한 BTREE 파일이 여전히 존재한다. |
예시 5. checkdb 수행 시 오류 발생 $ cubrid checkdb -S testdb
CUBRID 2008 R1.4
Some inconsistencies were detected in your database. Please consult error_log_file /home1/brightest/CUBRID/log/server/testdb_20090304_1529.err for additional information. |
예시 6. backupdb 수행 시 오류 발생 [brightest@cdbs006 testdb]$ cubrid backupdb -S testdb
CUBRID 2008 R1.4
Some inconsistencies were detected in your database. Please consult error_log_file /home1/brightest/CUBRID/log/server/testdb_20090304_1529.err for additional information. |
예시 7. backupdb 수행 시 --no-check 옵션 추가 $ cubrid backupdb -S --no-check testdb
CUBRID 2008 R1.4
Backup Volume Label: Level: 0, Unit: 0, Database testdb, Backup Time: Wed Mar 4 15:29:49 2009 è --no-check 옵션으로 정상동작함을 알 수 있다. |
