운영관리

CUBRID2008 파티션 테이블 삭제 시 인덱스 drop 안 되는 현상 예시

by cubebridge posted Dec 12, 2009

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 옵션으로 정상동작함을 알 수 있다.

 


Articles

4 5 6 7 8 9 10 11 12 13