8.2.2버전의 디비를 8.4.0로 업그레이드 하기 위해서 unload를 받고.
해당 objects 파일을 loaddb하는 중에 발생한 에러입니다.
unloaddb 된 objects 파일의 크기는 1.7G입니다.
--------------------------------------------------------------------------------------
GC Warning: Header allocation failed: Dropping block.
GC Warning: Out of Memory! Returning NIL!
CUBRID cannot allocate main memory and must halt execution.
The current transaction has been aborted.
Data integrity has been preserved.
Line 1374058:Your transaction cannot be rolled back since logging was ignored. Your database may be corrupted.
Line 1374058:Cannot create MOP with NULL OID.
Line 1374058:Cannot create MOP with NULL OID.
Line 1374058:Accessing deleted object -1|-16410289|-1.
Line 1374058:Accessing deleted object -1|-16410289|-1.
--------------------------------------------------------------------------------------
짐작해보건데.
free명령어로 메모리를 봤을때.
--------------------------------------------------------------------------------------
total used free shared buffers cached
Mem: 4029488 3916948 112540 0 12204 739104
-/+ buffers/cache: 3165640 863848
Swap: 8385920 1178740 7207180
total used free shared buffers cached
Mem: 4029488 3915212 114276 0 11368 760688
-/+ buffers/cache: 3143156 886332
Swap: 8385920 1187136 7198784
total used free shared buffers cached
Mem: 4029488 3916896 112592 0 10832 803200
-/+ buffers/cache: 3102864 926624
Swap: 8385920 1212416 7173504
total used free shared buffers cached
Mem: 4029488 3916700 112788 0 10388 838856
-/+ buffers/cache: 3067456 962032
Swap: 8385920 1230592 7155328
--------------------------------------------------------------------------------------
와 같이 buffers의 used값이 증가하다가 한계에 달해서 스왑이 일어날때 일어나는것 같습니다.
loaddb의 명령어중에 -c명령어를 통해서 중간 중간 커밋을 하고 해보려고했으나.
사용하는 db의 oid를 통해서 서로테이블간에 연결된것들이 많아서.
-c명령어로 하는경우 전체디비를 통체로 unloaddb해서 인지.
--------------------------------------------------------------------------------------
*** Committing the transaction ***
Line 29580767:"{NULL, 0, 0}" caused unique constraint violation.
Line 29580766:"{NULL, 0, 0}" caused unique constraint violation.
--------------------------------------------------------------------------------------
와 같은 아직 뒤에 테이블들의 값이 들어오지 않아서 유니크 값에 대한 문제가 발생합니다.
해서 -c명령어를 못쓰고 그냥 하려고해보았으나.
echo 30 >/proc/sys/vm/swappiness 으로 스왑이 덜 일어나도록 조정을 해도 결국엔
잡혀있는 메모리 4G를 넘어가면서 Out of Memory! 발생하게 됩니다.
어떻게 해결을 해야할지 몰라서 문의 드립니다.
안녕하세요. 질문 감사 드립니다.
첨부해주신 오류로 보아, MOD 테이블에서 OID를 참조하는 컬럼에 NOT NULL, Unique 조건이 있는데, 해당 데이터가 삭제된 OID를 참조하여 발생하는 것으로 보입니다.
발생 한 오류는 “-c” 옵션을 사용하기 전에도 발생했던 것으로 OID를 사용하는 환경에서 “-c” 옵션을 사용한다고 하여 발생하는 것이 아닙니다.
해결 방법은 다음과 같습니다.
1. 스키마 파일 백업(cp DB_schema DB_schema.org)
2. 스키마 파일에서 MOP 테이블에 NOT NULL, Unique 조건 삭제(DB_schema 파일 수정)
3. “-c” 옵션을 추가하여 데이터 로드 수행
4. 오류 발생 테이블의 데이터 확인 후, 적절 값 입력 혹은 데이터 삭제
5. MOP 테이블에서 삭제한 NOT NULL, Unique 조건 추가