이번에 개발 장비의 Oracle DBMS를 9.2.0.4 버전에서 9.2.0.8로 패치했습니다. 패치 과정도 만만치 않았습니다. 패치후 Post patch 과정을 진행하는데, 운영하던 DB라서 그런건지, 일반 PC에 Linux를 설치해서 운영하는 서버라 성능이 좋지 않아서 인지, 예전에 IBM P 시리즈에서 패치하던때랑은 달리 시간이 많이 걸리더군요.
 암튼 이런 과정을 거친후에 문제가 발생했습니다. Pro*C로 서버 데몬을 개발하시던 분이 갑자기 오류가 발생한다고 하시더군요. 이런... 이제 문제 해결에 들어가야 겠죠.

 오류 메세지는 아래와 같았습니다.
PCC-02081: CMD-LINE: Unterminated option value list or value list was truncated.

 관련 문서를 찾아보니 아래와 같은 내용이 나왔습니다.
PCC-02081: CMD-LINE: Unterminated option value list or value list was truncated.
    Cause: An option that takes a list of values was entered. The value list did not have a closing parenthesis. This error may also occur if the list of values entered on a single line was too long and Pro*C truncated it.
    Action: Ensure that all value lists are terminated with a closing parenthesis. Split long value lists into individual entries.

내용인 즉슨... 옵션 값이 길어서 잘라서 읽어들였다... 뭐... 이런것 같네요. 그래서
/opt/oracle/product/9.2.0.4/precomp/admin/pcscfg.cfg 파일을 열어서는 지난번과는 달리 옵션으로 넘기는 데릭토리 이름중에서 현재 서버에는 존재하지 않는 디렉토리(예를 들어 CentOS인데 SUSE리눅스의 디렉토리 경로가 설정되어 있더군요.)들을 삭제해줬더니 컴파일 오류가 사라지더군요.
아... 겨우... 해결했네요. ^^

 Linux에 Oracle DBMS를 설치하고, Client를 설치하면서 Pro*C까지 설치를 했는데 막상 make 파일을 돌려보면 컴파일 오류가 발생하는 경우가 많죠. 저희 개발자분이 새로 설치한 개발 장비에서 설정이 안되어 있다고해서 거의 하루를 헤메다가 해결을 했습니다.
 저희 개발 장비의 문제는 기존에 설치된 GCC 버전이 Pro*C에 설정된 버전과 틀려서 헤더 파일들의 위치(디렉토리 이름)를 새로 설정해서 해결을 했습니다.

 [오라클 설치 위치/precomp/admin/pcscfg.cfg] 파일을 vi로 열어보면 아래와 같은 내용이 나옵니다.
[oracle@Test2 /opt/oracle/product/10g/precomp/admin]$ cat pcscfg.cfg
sys_include=(/ade_autofs/ade_linux/RDBMS_10.2.0.4.0_LINUX.rdd/080216/precomp/public,/usr/include,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/gcc/i386-redhat-linux/3.4.5/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc/i586-suse-linux/4.1.0/include)
ltype=short

 여기에 자신의 PC와 맞는 gcc-lib 관련 디렉토리가 설정되어 있는지 확인을 하고 없다면 추가해주면 됩니다.
# cat /proc/cpuinfo
이렇게 입력하면

processor    : 3
vendor_id    : GenuineIntel
cpu family    : 15
model        : 6
model name    : Intel(R) Xeon(TM) CPU 3.00GHz
stepping    : 4
cpu MHz        : 2992.850
cache size    : 2048 KB
physical id    : 0
siblings    : 4
core id        : 1
cpu cores    : 2
fdiv_bug    : no
hlt_bug        : no
f00f_bug    : no
coma_bug    : no
fpu        : yes
fpu_exception    : yes
cpuid level    : 6
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm constant_tsc pni monitor ds_cpl est cid xtpr
bogomips    : 5985.04
대략 이런 형식의 정보를 얻을 수 있습니다.
이를 바탕으로 대략 분석해본 결과 아래와 같은 결론을 얻었습니다.

physical id : 물리적인 CPU 번호
siblings : 해당 physical CPU의 코어수
core id : 해당 논리 CPU core 번호. Dual core이면 core 번호가 틀리고, Hyperthreading이면 core 번호가 같다.
cpu cores : 논리 core 갯수. siblings와 cpu cores의 값이 같으면 그 수치대로 Dual/Quad core라고하면 되는 것 같다. 아니면 Hyperthreading인가??

결론.

physical id 갯수 : 물리적인 CPU 갯수
siblings 값 : 개별 CPU의 코어수
siblings 값 / cpu cores 값 : 이 결과값이 2이면 Hyperthreading, 1이면 Dual/Quad core... 뭐 이 정도...


참고 자료
Linux: /proc/cpuinfo 에서 Dual(Quad) Core와 Hyper Theading 구분하기

+ Recent posts