Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 



테이블 옵션(REUSE_OID)

설명

테이블 생성 시 REUSE_OID 옵션을 명시하면, 레코드 삭제(DELETE)로 인해 삭제된 OID를 새로운 레코드 삽입(INSERT) 시 재사용할 수 있다. REUSE_OID 옵션을 명시하여 생성된 테이블을 OID 재사용 테이블 또는 참조 불가능(non-referable)한 테이블이라고 한다.

OID(Object Identifier)는 볼륨 번호, 페이지 번호, 슬롯 번호와 같은 물리적 위치 정보로 표현되는 객체 식별자이다. CUBRID는 OID를 이용하여 객체의 참조 관계를 관리하고, 객체 조회, 저장, 삭제를 수행한다. OID를 이용하면 테이블을 참조하지 않고도 힙 파일 내의 해당 오브젝트에 직접 접근할 수 있어 접근성이 향상되지만, 객체가 삭제되더라도 참조 관계를 유지하기 위해 해당 객체의 OID를 보존하기 때문에 DELETE/INSERT 연산이 많은 경우 저장 공간 재사용률이 저하되는 문제가 있다.

테이블 생성 시 REUSE_OID 옵션을 명시하면, 해당 테이블 내의 데이터 삭제 시 해당 OID가 함께 삭제되며, INSERT된 다른 데이터가 해당 OID를 재사용할 수 있다. 단, OID 재사용 테이블을 다른 테이블이 참조할 수 없고, OID 재사용 테이블 내 객체들의 OID 값을 조회할 수 없다.

예제

--creating table with REUSE_OID option specified

CREATE TABLE reuse_tbl (a INT PRIMARY KEY) REUSE_OID;

INSERT INTO reuse_tbl VALUES (1);

INSERT INTO reuse_tbl VALUES (2);

INSERT INTO reuse_tbl VALUES (3);

 

--an error occurs when column type is a OID reusable table itself

CREATE TABLE tbl_1 ( a reuse_tbl);

 

ERROR: The class 'reuse_tbl' is marked as REUSE_OID and is non-referable. Non-referable classes can't be the domain of an attribute and their instances' OIDs cannot be returned.

 

--an error occurs when a table references a OID reusable table

CREATE TABLE tbl_2

(b int, FOREIGN KEY(b) REFERENCES reuse_tbl(a) ON CACHE OBJECT oid_value);

INSERT INTO tbl_2(b) VALUES(1);

SELECT oid_value.a FROM tbl_2;

 

ERROR: The class 'reuse_tbl' is marked as REUSE_OID and is non-referable. Non-referable classes can't be the domain of an attribute and their instances' OIDs cannot be returned.

주의 사항
  • 다른 테이블이 OID 재사용 테이블을 참조할 수 없다.
  • OID 재사용 테이블에 대해 갱신 가능한(updatable) 뷰를 생성할 수 없다.
  • 다른 테이블의 테이블 속성(class attribute) 도메인으로 OID 재사용 테이블을 지정할 수 없다.
  • OID 재사용 테이블 객체들의 OID 값을 읽을 수 없다.
  • OID 재사용 테이블에서 인스턴스 메소드를 호출할 수 없다. 메소드가 정의된 클래스를 상속받은 서브클래스가 OID 재사용 테이블로 정의되어도 마찬가지로 인스턴스 메소드를 호출할 수 없다.
  • OID 재사용 테이블은 CUBRID 2008 R2.2 버전 이상에서만 지원되며, 하위 호환성을 보장하지 않는다. 즉, 더 낮은 버전의 데이터베이스 서버에서 OID 재사용 테이블이 존재하는 데이터베이스에 접근할 수 없다.
  • OID 재사용 테이블은 분할 테이블로 관리될 수 있으며, 복제될 수 있다.