트랜잭션 지원 및 복구

설명

LOB 데이터 변경에 대한 커밋/롤백을 지원한다. 즉, 트랜잭션 내에서 LOB Locator와 실제 LOB 데이터의 매핑(mapping)에 대한 유효성을 보장하고, 데이터베이스 장애 시 회복(recovery)을 지원한다. 트랜잭션 수행 도중 데이터베이스가 종료되어 해당 트랜잭션이 롤백 처리됨에 따라 LOB Locator와 LOB 데이터 간 매핑이 일치하지 않으면 에러를 출력한다. 아래의 예를 참고한다.

예제

;AUTOCOMMIT OFF

 

CREATE TABLE doc_t (doc_id VARCHAR(64) PRIMARY KEY, content CLOB);

INSERT INTO doc_t VALUES ('doc-10', CHAR_TO_CLOB('This is content'));

COMMIT;

UPDATE doc_t SET content = CHAR_TO_CLOB('This is content 2') where doc_id = 'doc-10';

ROLLBACK;

SELECT doc_id, CLOB_TO_CHAR(content) FROM doc_t WHERE doc_id = 'doc-10';

  doc_id   content                  

=========================================================

  'doc-10'  'This is content '

 

INSERT INTO doc_t VALUES ('doc-11', CHAR_TO_CLOB ('This is content'));

COMMIT;

UPDATE doc_t SET content = CHAR_TO_CLOB('This is content 3') WHERE doc_id = 'doc-11';

 

//system crash occurred and then restart server

SELECT doc_id, CLOB_TO_CHAR(content) FROM doc_t WHERE doc_id = 'doc-11'; -- Error : LOB Locator references to the previous LOB data because only LOB Locator is rollbacked.

참고 사항

주의 CUBRID 2008 R3.0 이하 버전에서는 glo(Generalized Large Object) 클래스를 사용하여 Large Object를 처리했으나, CUBRID 2008 R3.1 버전부터는 glo 클래스를 제거하고 BLOB/CLOB 데이터 타입을 지원한다. 따라서, 이전 버전의 glo 클래스를 사용하는 환경에서는 CUBRID 버전 업그레이드를 수행할 때 DB 스키마 및 애플리케이션을 수정해야 한다.