728x90

[proframe@dev03:/userdir/proframe/proframe4.0/logging/dbio]$ proc

Pro*C/C++: Release 10.2.0.2.0 - Production on 화 2월 27 09:44:42 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

시스템 기본 옵션 값이 가지고 온 곳: /oracle/app/oracle10g/product/1020/precomp/admin/pcscfg.cfg

옵션 이름      현재 값        기술
-------------------------------------------------------------------------------
auto_connect   아니오          ops$ 계정으로 자동 연결할 수 있도록 합니다
char_map       charz          문자 배열과 문자열을 대응합니다
close_on_commit아니오          COMMIT에 모든 커서를 닫습니다
cmax           100            접속 풀에 대한 CMAX 값
cmin           2              접속 풀에 대한 CMIN 값
cincr          1              접속 풀에 대한 CINCR 값
ctimeout       0              접속 풀에 대한 CTIMEOUT 값
cnowait        0              접속 풀에 대한 CNOWAIT 값
code           kr_c           생성될 코드 유형
comp_charset   multi_byte     C 컴파일러가 지원하는 문자 집합 유형
config         default        다른 파일로 시스템 구성 파일 무효화
cpool          아니오          접속 풀링 지원
cpp_suffix     *none*         기본 C++ 파일 이름 접미어 무효화
dbms           native         v6/v7/v8 호환성 모드
def_sqlcode    아니오         '#define SQLCODE sqlca.sqlcode' 매크로 생성
define         _LONG_LONG     선행 프로세서 기호 정의
               _IBM_C
               __64BIT__
               *none*
duration       transaction    캐시에 있는 객체에 대한 핀 기간 설정
dynamic        oracle         Oracle 또는 ANSI 동적 SQL 의미 지정
errors         예             오류 메시지가 터미널에 전송될지 여부
errtype        *none*         intype 파일 오류에 대한 목록 파일 이름
events         아니오          등록/가입 이벤트 통지가 지원됩니다.
fips           none           ANSI 비호환 사용의 FIPS 플래그 처리
header         *none*         이전에 컴파일된 헤더에 대한 파일 확장자 지정
hold_cursor    아니오          커서 캐시에서 커서 유지 제어
iname          *none*         입력 파일 이름
include        *none*         포함된 파일에 대한 디렉토리 경로
intype         *none*         유형 정보에 대한 입력 파일 이름
lines          아니오          생성된 코드에 #line 지시어 추가
lname          *none*         기본 목록 파일 이름 무효화
ltype          short          목록 파일에 생성된 데이터 양
maxliteral     1024           생성된 문자열 리터럴의 최대 길이
maxopencursors 10             캐시에 저장된 열린 커서의 최대 수
mode           oracle         Oracle 또는 ANSI 규칙에 대한 코드 일치
native_types   아니오          고유 float/double에 대한 지원
nls_char       *none*         국가별 언어 문자 변수 지정
nls_local      아니오          NLS 문자 의미가 수행되는 방법 제어
objects        예             객체 유형 지원
oname          *none*         출력 파일 이름
oraca          아니오          ORACA 사용 제어
pagelen        80             목록 파일의 페이지 길이
parse          full           비SQL 코드의 구문 분석 제어
prefetch       1              커서 OPEN 시 미리 인출된 행 수
release_cursor 아니오          커서 캐시에서 커서 해제 제어
select_error   예             선택 오류의 플래그 제어
sqlcheck       syntax         SQL 확인 시 컴파일 시간의 양
sys_include    /usr/include   시스템 헤더 파일이 있는 디렉토리
threads        아니오          다중 스레드 응용 프로그램을 나타냄
type_code      oracle         동적 SQL에 대한 Oracle 또는 ANSI 유형 사용
unsafe_null    아니오          지시자 변수 없이 널 인출 허용
userid         *none*         사용자 이름/암호 [@dbname] 접속 문자열
utf16_charset  nchar_charset  UTF16 변수에 의해 사용된 문자 집합 형식
varchar        아니오          암시적 varchar 구조 사용 허용
version        recent         반환될 객체의 버전
PCC-F-02135, CMD-LINE:  사용자가 도움을 요청했습니다
[proframe@dev03:/userdir/proframe/proframe4.0/logging/dbio]$


이것을 영문으로 다시 보면

[cbssvd01@e9812978:/logs/proframe/cbs/dbio_log]proc

Pro*C/C++: Release 10.2.0.3.0 - Production on Wed Jul 2 18:24:14 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /oracle/app/oracle/product/10.2.0/precomp/admin/pcscfg.cfg

Option Name    Current Value  Description
-------------------------------------------------------------------------------
auto_connect   no             Allow automatic connection to ops$ account
char_map       charz          Mapping of character arrays and strings
close_on_commitno             Close all cursors on COMMIT
cmax           100            CMAX Value for connection pool
cmin           2              CMIN Value for connection pool
cincr          1              CINCR Value for connection pool
ctimeout       0              CTIMEOUT Value for connection pool
cnowait        0              CNOWAIT Value for connection pool
code           kr_c           The type of code to be generated
comp_charset   multi_byte     The character set type the C compiler supports
config         default        Override system configuration file with another
cpool          no             Support connection pooling
cpp_suffix     *none*         Override the default C++ filename suffix
dbms           native         v6/v7/v8 compatibility mode
def_sqlcode    no             Generate '#define SQLCODE sqlca.sqlcode' macro
define         _LONG_LONG     Define a preprocessor symbol
               _IBM_C
               __64BIT__
               *none*
duration       transaction    Set pin duration for objects in the cache
dynamic        oracle         Specify Oracle or ANSI Dynamic SQL Semantics
errors         yes            Whether error messages are sent to the terminal
errtype        *none*         Name of the list file for intype file errors
events         no             Support publish-subscribe event notifications
fips           none           FIPS flagging of ANSI noncompliant usage
header         *none*         Specify file extension for Precompiled Headers
hold_cursor    no             Control holding of cursors in the cursor cache
iname          *none*         The name of the input file
include        *none*         Directory paths for included files
intype         *none*         The name of the input file for type information
lines          no             Add #line directives to the generated code
lname          *none*         Override default list file name
ltype          short          The amount of data generated in the list file
maxliteral     1024           Maximum length of a generated string literal
maxopencursors 10             Maximum number of cached open cursors
mode           oracle         Code conformance to Oracle or ANSI rules
native_types   no             Support for native float/double
nls_char       *none*         Specify National Language character variables
nls_local      no             Control how NLS character semantics are done
objects        yes            Support object types
oname          *none*         The name of the output file
oraca          no             Control the use of the ORACA
pagelen        80             The page length of the list file
parse          full           Control which non-SQL code is parsed
prefetch       1              Number of rows pre-fetched at cursor OPEN time
release_cursor no             Control release of cursors from cursor cache
select_error   yes            Control flagging of select errors
sqlcheck       syntax         Amount of compile-time SQL checking
sys_include    /usr/include   Directory where system header files are found
threads        no             Indicates a multi-threaded application
type_code      oracle         Use Oracle or ANSI type codes for Dynamic SQL
unsafe_null    no             Allow a NULL fetch without indicator variable
userid         *none*         A username/password [@dbname] connect string
utf16_charset  nchar_charset  The character set form used by UTF16 variables
varchar        no             Allow the use of implicit varchar structures
version        recent         Which version of an object is to be returned
PCC-F-02135, CMD-LINE:  User asked for help
[cbssvd01@e9812978:/logs/proframe/cbs/dbio_log]



실제 컴파일 되는 모양을 본다면

proc lines=YES mode=ORACLE dbms=V8 unsafe_null=YES hold_cursor=YES             code=ANSI_C ltype=NONE define=DEBUG define=ORA_PROC define=PDB_TRACE define=GLOBALCB define=FRAME_DEV include=/tmax/proframe/cbs/pfm/inc include=/tmax/proframe/
cbs/release/dbio/inc include=/tmax/proframe/cbs/release/pmap/inc         include=/tmax/tmax/cbs include=/tmax/tmax/cbs/usrinc   include=/oracle/app/oracle/product/10.2.0/precomp/public  include=/oracle/app/oracle/product/10.2.0/rdbms/public  include=/tmax/npfm2/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/dbio/inc  include=/tmax/npfm2/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel
/pmap/inc  -I/oracle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/public   sqlcheck=SYNTAX iname=pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PS0000_1_03.pc oname=pfmDbioAFTS_TRMS_PRG
R_FILE_PTCL_PS0000.c

Pro*C/C++: Release 10.2.0.3.0 - Production on Wed Jul 2 17:36:43 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

System default option values taken from: /oracle/app/oracle/product/10.2.0/precomp/admin/pcscfg.cfg

>>> to compile c file
cc -q64 -btl -DORACLE  -qlanglvl=extc99 -g -q64 -qinfo=pro -brtl -O0 -qcpluscmt       -DUSE_TCACHE -DTCACHE_ON -DGLOBALCB -DAUTOFREECB -DTRACE -DDEBUG -D__PTHREAD_STATIC__ -D_PFM_SHORTNAME_WRAPPER -I/tmax/proframe/cbs/release/dbio/inc -I/oracle/app/oracle/product/10.2.0/rdbms/public  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/
dbio/inc  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/pmap/inc    -I/tmax/proframe/cbs/pfm/inc     -I/tmax/proframe/cbs/release/inc  -I/tmax/proframe/cbs/release/pmap/inc    -I/tmax/prof
rame/cbs/release/pmap/src    -I/tmax/proframe/cbs/release/dbio/inc     -I/tmax/tmax/cbs/usrinc -I/tmax/tmax/cbs   -I/oracle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/p
ublic     -c pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PS0000.c

"pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PS0000_1_03.pc", line 208.16: 1506-304 (I) No function prototype given for "func".

뭐 이렇게 되겠죠. 먼저 ~.pc 프로그램을 proc 컴파일러를 이용하여 ~.c 로 만든다음 다시  cc 컴파일러로 ~.c 를 ~.o 로 컴파일 하게 됩니다. 물론 이 ~.o 를 ~.a 나 ~.so, ~.sl 로 묶으려면  cc 를 한번 더 돌려야 하겠지요..

-----> 4. Compile entry-function source and link object files
    cc -q64 -btl        -DORACLE  -qlanglvl=extc99 -g -q64 -qinfo=pro -brtl -O0 -qcpluscmt       -DUSE_TCACHE       -DTCACHE_ON        -DGLOBALCB         -DAUTOFREECB       -DTRACE            -DDEBUG
     -D__PTHREAD_STATIC__ -D_PFM_SHORTNAME_WRAPPER    -I/tmax/proframe/cbs/release/dbio/inc -I/oracle/app/oracle/product/10.2.0/rdbms/public  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/
dbio/inc  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/pmap/inc    -I/tmax/proframe/cbs/pfm/inc     -I/tmax/proframe/cbs/release/inc  -I/tmax/proframe/cbs/release/pmap/inc    -I/tmax/prof
rame/cbs/release/pmap/src    -I/tmax/proframe/cbs/release/dbio/inc     -I/tmax/tmax/cbs/usrinc -I/tmax/tmax/cbs   -I/oracle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/p
ublic     -c pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.c
"pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.c", line 34.16: 1506-304 (I) No function prototype given for "func".
    /sw/openmcm/bin/McmMBL /sw/openmcm/config/mcm_mbl.opt pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.c cc -q64 -btl        -DORACLE  -qlanglvl=extc99 -g -q64 -qinfo=pro -brtl -O0 -qcpluscmt       -DUSE_TCACHE       -DTC
ACHE_ON        -DGLOBALCB         -DAUTOFREECB       -DTRACE            -DDEBUG              -D__PTHREAD_STATIC__ -D_PFM_SHORTNAME_WRAPPER    -I/tmax/proframe/cbs/release/dbio/inc -I/oracle/app/oracle/product
/10.2.0/rdbms/public  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/dbio/inc  -I/tmax/npfm3/package/proframe/pfm_dev/src/ccut_test/ccut_src/rel/pmap/inc    -I/tmax/proframe/cbs/pfm/inc
 -I/tmax/proframe/cbs/release/inc  -I/tmax/proframe/cbs/release/pmap/inc    -I/tmax/proframe/cbs/release/pmap/src    -I/tmax/proframe/cbs/release/dbio/inc     -I/tmax/tmax/cbs/usrinc -I/tmax/tmax/cbs   -I/ora
cle/app/oracle/product/10.2.0/precomp/public -I/oracle/app/oracle/product/10.2.0/rdbms/public     -c
    cc -G -bshared -q64 -o libpfmDbioAFTS_TRMS_PRGR_FILE_PTCL.so  pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PD0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PF0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PI0000.o pfmDbioAFTS_TRMS_PR
GR_FILE_PTCL_PS0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL_PU0000.o pfmDbioAFTS_TRMS_PRGR_FILE_PTCL.o  -G -bshared -q64 -qlanglvl=extc99 -brtl  -L/tmax/proframe/cbs/pfm/lib     -L/tmax/proframe/cbs/release/lib  -L
/tmax/proframe/cbs/release/pmap/lib    -L/tmax/proframe/cbs/release/dbio/lib -L/tmax/tmax/cbs/lib64 -L/oracle/app/oracle/product/10.2.0/lib   -L/sw/openmcm/lib -lMcmMblTM -lMcmMatTP
목표 "all"은(는) 최근의 것입니다.
>>> [make] DBIO library linked 5 out of 5 modules successfully.

출처 : http://pangate.com/99

728x90

프로프레임에서 다른 사람이 나의 프로그램을 OPEN 해서 보다가 실수로 저장해 버리는 것을 막을 방법이 없는 것인가?

과거에 프로프레임 스튜디오에는 체크인/체크아웃 기능이 있었다. 그러나 패치 34 부터인가 HOLD 기능이 나오기 시작하였고 이 체크인/체크아웃 기능과 hold 기능을 프로젝트별로 선택하여 사용하도록 가이드되고 있다. 이 두가지 기능을 동시에 사용할 수 있다면 금상첨화겠으나 하나만 사용해야 하는 제약이 있다. 

1. 체크인/체크아웃기능 ( CHECK IN / CHECK OUT )

메뉴에서 체크아웃을 선택하면 해당 프로그램은 체크아웃 시킨 사람만 수정이 가능하다. 같은 그룹에 있는 팀원이라도 수정이 불가능하게 된다. 다시 체크인 한 후에는 같은 그룹내의 팀원까지만 수정이 가능하게 된다.

2. 홀드(HOLD) 기능

누군가가 프로그램을 OPEN 하면 자동적으로 편집  LOCK 이 걸리게 된다. 다시 OPEN한 프로그램을 닫으면 자동적으로 이 LOCK 이 해제된다.

3. 대책 (피해가는 방법)

이 두가지 기능은 상호 배타적으로 사용될 수 없음에도 불구하고 배타적으로 사용하도록 개발되어 있다. 이것은 별개의 기능이기 때문에 동시에 지원되어야 하는 기능이 상식이나 티맥스 연구소에서 아직은 경황이 없어서 여기까지는 지원이 안 되는 모양이다.

체크인/체크아웃을 기본 LOCK 정책으로 채택한 프로젝트에서는 자기소유의 모든 프로그램은 미리  체크아웃을 시켜 놓아 버리는 것이 안전하다.
만약 프로젝트에서 HOLD 기능을 기본 LOCK 정책으로 채택하고 있다면 다음의 꼼수를 이용하는 것을 추천한다. 퇴근할 때나 중간에 수시로 다음의 SQL을 돌려 준다면 자동적으로 LOCK 이 걸리게 되어 OWNER 만이 프로그램을 수정할 수 있도록 편집 LOCK 이 걸리게 되므로 프로그램을 OPEN 해서 보다가 본의아니게 실수로 프로그램을 수정한 후 저장해 버리는 경우를 예방할 수 있다.

INSERT INTO DEV_LOCK_STATUS
SELECT RESOURCE_ID, OWNER, 'Y', '', SYSDATE
FROM DEV_RESOURCE
WHERE
OWNER IN ('9812978','9812087') -- 이부분을 빼면 모든 프로그램이 대상이 되겠죠.
AND RESOURCE_TYPE IN ('PERSIST', 'VIEW', 'EXECSQL', 'DYNAMICSQL' ,
                      'BIZ_MODULE', 'SERVICE_MODULE', 'BATCH_MODULE',
                      'STRUCTURE' );

COMMIT;


LOCK 이 정상적으로 걸린 경우 네비게이터의 아이콘에 자물쇠모양이 붙게 된다.

사용자 삽입 이미지












출처 : http://pangate.com/98
728x90
프로프레임 스튜디오는 eclipse 기반으로 만들어져 있어 환경 설정도 eclipse 의 것과 아주 유사하다.

1. 탭사이즈 설정

프로그램에서 탭문자를 쳤을 때 탭문자 대신에 스페이스 4자가 입력되도록 하는 것이 대부분의 프로젝트 표준이다. 탭문자를 쳤을 때 4 byte 스페이스 문자가 입력되도록 설정하는 메뉴의 위치를 몰라서 설정하지 못 하는 분들은 다음 그림에서 4 라고 탭너비를 지정하고 아랫쪽 그림에서와 같이  insert space for tab 을 체크해야 한다. 그래서 프로그램에서 세로줄이 일사불란 하게 맞게 된다. indentation 이 들쑥날쑥 하면 프로그램 코드의 질을 떨어트리고 결국 코드의 신뢰성 마저 의심가게 만드는 악영향이 있다.

사용자 삽입 이미지
사용자 삽입 이미지

탭을 사용했더라도 저장할 때 자동으로 탭을 스페이스로 변환되도록 설정할 수도 있다.  물론 이 경우 저장하는데 약간의 시간이 더 걸리 수 있으나 오히려 이 설정을 추천하는 바이다.
환경설정 -> 일반 -> 편집기 -> AnyEdit Tools 메뉴에서 Remove trailing whitespace 를 선택한다. 이 기능은 라인 끝에 있는 불필요한 스페이스 문자를 자동 trim 시켜주는 옵션이다.  그리고 Convert tabs <-> spaces 옵션이 바로 저장시 tab 문자를 스페이스 문자로 자동 변환해 주는 옵션이다.  


이 tab문자가 space문자로 자동 변환되도록 하는 기능이 제대로 작동되기 위해서는 Misc 탭에서 Tab width/number of spaces for tab 에 4로 지정한다. 즉 탭문자하나를 스페이스문자 4개로 바꾸겠다는 지정이다. 물론 그 아래에 있는 Use *current* tab width to calculate spaces on ~ 도 체크를 해 줘야 하겠다.



2. 행 번호 표시

프로프레임 코드 에디터에서 행번호를 표시해 준다면 디버그할 때 여러모로 도움이 된다.  행번호를 보일 지 말지를 선택하는 것이 위의 그림에 있다. 행번호를 선택하게 되면 다음과 같이 라인 앞에 행번호가 보이게 된다.  

사용자 삽입 이미지

3. 에디터 폰트설정

에디터의 폰트 설정도 가지런한 indentation 을 위해서 매우 중요하다. 굴림, 돋음, 바탕, 고딕 체는 스페이스가 반각이라 다른 글자에 비하여 글자의 폭이 좁다. 이것은 가독성을 위해서는 좋으나 가지런하게 indentation 을 위해서는 쥐약이다. 따라서 코딩에서는 스페이스문자 등이 다른 글자와 폭이 동일한 굴림체, 돋음체, 바탕체, 고딕체 와 같이 ~체 인 폰트를 사용해야 한다. 기본적으로 굴림으로 되어 있는 폰트를 개발자가 ~체의 폰트로 바꾸는 작업을 아래의 메뉴에서 해 줘야 한다.  나는 개인적으로 Courier New 폰트를 이용한다. 이것은  폰트도 이쁘고 indentation 로 잘 맞기 때문이다.
사용자 삽입 이미지


5. 자동 Update

스튜디오가 패치되면 자동 update 되는 기능을 제공한다. 이것은 eclipse 에서 제공하는 기능을 그대로 사용하고 있다. 프로프레임 스튜디오는 client 에서만 동작되는 것이 아니라 개발서버에도 version 이 맞는 서버용 프로그램이 있고 상호간에 짝이 맞아야 정상적으로 동작된다. 따라서 정확한 시점에 적절히 스튜디오가 갱신되어 줘야 한다.  갱신된 jar 파일들은 프로프레임 스튜디오 홈디렉토리 아래에  plugins 라는 디렉토리에 저장되게 된다.
사용자 삽입 이미지


6. 기타 설정

나머지 프로프레임 설정 기능은 프로프레임 개발자 매뉴얼을 참고하여 설정하면 되므로 따로 여기서 언급하지 않겠다. 사이트별 매뉴얼 참고하세요.
사용자 삽입 이미지

출처 : http://pangate.com/97

+ Recent posts