728x90
반응형
오류 원인
The class 'A테이블' 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.
이 오류는 큐브리드(CUBRID)에서 테이블이 REUSE_OID로 설정되어 있을 때 발생합니다.
REUSE_OID란?
- 테이블이 REUSE_OID로 설정되면, 객체 ID(OID)가 재사용되므로 해당 테이블을 다른 테이블에서 참조(외래키 관계)할 수 없습니다.
- 즉, 이 테이블을 다른 테이블에서 외래키(FK) 또는 참조 타입(REFERENCE) 으로 사용할 수 없습니다.
- 또한, SELECT 쿼리에서 OID를 반환할 수 없습니다.
오류 발생 상황
- 다른 테이블에서 REFERENCE 타입으로 사용하려는 경우
- ❌ A테이블이 REUSE_OID로 설정되어 있어서 REFERENCE 타입을 사용할 수 없음.
CREATE TABLE B테이블 (
id INT PRIMARY KEY,
a_ref A테이블 -- A테이블을 참조하려고 함
);
- OID를 반환하는 쿼리를 실행한 경우
- ❌ REUSE_OID 설정된 테이블에서는 OID를 직접 반환할 수 없음.
SELECT A테이블 FROM A테이블;
해결 방법
✅ 1. REUSE_OID 제거
테이블을 REUSE_OID 없이 다시 생성해야 합니다.
1) 기존 테이블 삭제 후 다시 생성
DROP TABLE A테이블;
CREATE TABLE A테이블 (
id INT PRIMARY KEY,
name VARCHAR(100)
);
📌 REUSE_OID 옵션이 없는 상태로 다시 생성하면, 다른 테이블에서 참조 가능해집니다.
✅ 2. REUSE_OID 설정을 변경하는 방법
이미 생성된 테이블에서는 REUSE_OID를 직접 변경할 수 없으므로, 기존 데이터를 백업 후 새로운 테이블로 옮기는 방식을 사용합니다.
1) 기존 데이터 백업
CREATE TABLE A테이블_백업 AS SELECT * FROM A테이블;
2) 기존 테이블 삭제
DROP TABLE A테이블;
3) REUSE_OID 없이 다시 생성
CREATE TABLE A테이블 (
id INT PRIMARY KEY,
name VARCHAR(100)
);
4) 데이터 복원
INSERT INTO A테이블 SELECT * FROM A테이블_백업;
DROP TABLE A테이블_백업;
결론
- REUSE_OID가 설정된 테이블은 다른 테이블에서 참조 불가능하며, OID를 반환할 수도 없음.
- 해결하려면 테이블을 REUSE_OID 없이 다시 생성해야 함.
- 기존 데이터를 유지하려면 백업 후 다시 생성하는 방법을 사용.
300x250
반응형