반응형
블로그 이미지
> 희망은 인간의 고통을 연장시키는 가장 사악한 것이다 > 죽음에 이르지 않는 고통은 우리를 더욱 강하게 만든다. -니체 integer

카테고리

분류 전체보기 (348)
여행 (45)
신변잡기(身邊雜記) (179)
신변잡기(身邊雜器) (21)
신변잡기(身邊雜技) (63)
신변잡기(身邊雜奇) (39)
Total
Today
Yesterday

'시스템운영'에 해당되는 글 6건

  1. 2009.12.31 유닉스: cut 과 uniq 를 아시나요? #2
  2. 2009.12.31 유닉스: cut 과 uniq 를 아시나요?
  3. 2009.11.04 tmax 관리명령어
  4. 2009.09.29 유닉스
  5. 2007.11.15 [펌]턱시도 오류
  6. 2006.10.15 ORACLE vs MS-SQL Server

(오후에 졸린 관계로 아깐 쓰던것을 마저 쓰기로... ㅡ.ㅡ)

앞서 포스팅에 사용된 예제는 특정할 컬럼을 떼어내어, 중복을 제거를 해보았다.
그럼 이번에는 어느넘이 사고를 많이 쳤는지 카운팅을 해보자.

앞서 사용한 명령을 기억하는가?

발생자만을 따로 떼어내어 중복을 제거했다.
test:/user1] cut -d \| -f 3 a.txt | sort | uniq

여기에 카운팅은?
uniq 명령에 "-c" 옵션을 사용해 보자

test:/user1] cut -d \| -f 3 a.txt | sort | uniq -c
   5 aaa
   2 bbb
   2 ccc
   2 ddd
   1 eee
   1 fff

자! 위와 같이 해당 데이터의 출현횟수가 찍혀서 나온다.

그럼 어느날이 사고를 많이 쳤을까? 간단하다.
대상 컬럼만 바꾸어보자.

test:/user1] cut -d \| -f 2 a.txt | sort | uniq -c

   6 2009-12-31
   1 2010-1-1
   1 2010-1-2
   1 2010-1-3
   4 2010-1-4

어떤가? 쓸만하지 않나?

Posted by integer
, |

유닉스를 사용하다보면 텍스트 데이터를 짜집기 할 일이 생길것이다.
그럴때마다 pc로 내려서 엑셀 및 울트라 에디터에서 작업을 하는 이들을 종종 보는데
그럴때마다 cut 과 uniq 라는 유닉스 명령어를 권해주고 싶다.

일단 샘플 데이터 a.txt 라는 파일의 내용을 보자.

1|2009-12-31|aaa
2|2009-12-31|bbb
3|2009-12-31|aaa
4|2009-12-31|aaa
5|2009-12-31|ccc
6|2009-12-31|ddd
7|2010-1-1|aaa
8|2010-1-2|aaa
9|2010-1-3|bbb
10|2010-1-4|ccc
11|2010-1-4|eee
12|2010-1-4|fff
13|2010-1-4|ddd

'|' 라는 것을 구분자로 하여 첫번째 항목은 순번, 두번째 항목은 발생일, 세번째 항목은 발생자(사고친 넘?)라고 하자.

자! 나는 사고친넘의 명단만 필요하다. 어떻게 할 것인가?
구분자가 있고, 몇 번째 나오는지만 알면 게임이 끝난것이다. <cut> 이라는 명령어를 이용해 보자.

test:/user1] cut -d \| -f 3 a.txt

aaa
bbb
aaa
aaa
ccc
ddd
aaa
aaa
bbb
ccc
eee
fff
ddd

자! 사고친 놈들의 명단은 나왔다.
그런데 뭔가 부족하다. 중복된 넘들이 나와 보기가 힘들다....
그럴때 uniq 라는 명령어를 이용해 보자. (파이프 '|' 와 함께 사용을 해야 한다.)

test:/user1] cut -d \| -f 3 a.txt | uniq    
aaa
bbb
aaa
ccc
ddd
aaa
bbb
ccc
eee
fff
ddd

그런데 중복이 제거가 되다만듯한 느낌이다. 왜일까?
uniq 명령어의 메카니즘이 순차적 데이터에 대해 중복을 제거하다 보니 그럴수 밖에 없다.
즉, a a a 이렇게 들어오면 a 로 정리가 되지만 a a b a 로 들어오면 a b a 로 밖에 정리가 안된다.

그럼 어떻게 하면 될까?
sort 명령어 투입이다. 이렇게....

test:/user1] cut -d \| -f 3 a.txt | sort | uniq
aaa
bbb
ccc
ddd
eee
fff

이해가 됐는가?
조금 더 확장된 사용은 나중에... ^^

Posted by integer
, |

* 티맥스관리툴 정리

 

티맥스는 X/OPEN DTP 표준을 준수하는 TP-Monitor입니다.

비지니스 로직를 개발자가 작성을 하고, 이를 원할하게 이용이 가능하도록 하는 것이 주요용도입니다.

 

다음은 티맥스의 관리툴에 대하여 정리를 해보았습니다.

기준 버젼은 Tmax 4.X 입니다.

 

1. tmboot: 티맥스를 기동하는 명령으로 전체 노드 또는 특정 서버그룹, 특정 서버를 기동할수 있습니다.

Usage: tmboot [-hbfknow] [-c|g|q|S|s|T|t|A|e|R|V] [-vx]
            -h: show command line help
            -b: boot backup servers also
            -f config_file: use config_file
                instead of the default tmconfig
            -k number: used with -s,-t flag,
                specifies the number of servers to boot
            -n node_name: boot servers at the node
            -d wait_factor: boot servers gracefully
            -c: boot another CLient Handler(CLH)
            -g svg_name: boot a server group
            -o clopt_string: add a CLOPT string
            -q RQ svg_name: boot RQS
            -S svr_name: boot servers(해당 서버의 전체)
            -s svr_name: boot server(해당서버의 한개)
            -T: boot only the Tmax engine
            -t tms_name: boot tms servers
            -A: boot all AP servers
            -e engine name: boot a engine process
            -R: exec in shell environment
            -V: show version information
            -v/-x: for internal use

 

2. tmdown: 티맥스를 종료하는 명령으로, 전체 노드, 특정 서버그룹 또는 서버를 종료할수 있습니다.

Usage: tmdown [-ahfiknw] [-A|g|q|S|s|t|p]
            -h: show command line help
            -f config_file: use config_file
                instead of the default tmconfig
            -i: down immediately
            -k number: used with -s,-t flag,
                specifies the number of servers
            -n node_name: tmdown only one node
            -A: down all AP servers
            -g svg_name: down a server group
            -q RQ svg_name: down RQS
            -S svr_name: down servers
            -s svr_name: down servers
            -t tms_name: down tms servers
            -w wait_sec: down after wait_sec seconds
            -p spid: down by server process id

 

3. tmadmin: 티맥스의 관리툴로 설정정보 조회, 서버/서비스/client 정보등의 모니터링과, 동적설정 변경 등의 기능을 제공합니다.

Usage: tmadmin [-hfilnpV] [-m|s]
            -h: show command line help
            -f config_file: use config_file
                instead of the default tmconfig
            -i lic_file: show license file info
            -l: admin local node only
            -n node_name: admin only one node
            -p: display one screenful at a time
            -V: display version info.
            -m: admin with full capability
            -s: admin with monitoring-only capability (default)

 

4. cfl: 티맥스 설정파일(텍스트)을 바이너리로 컴파일하는 명령어(기본적으로 tmconfig 이름으로 생성합니다.)

Usage: cfl [-hnaop] [-v num] -i file_name
            -h: show command line help
            -n node_name: cfl for only one node
            -i file_name: source configuration file
            -a file_name: source configuration file to add
            -o file_name: output configuration file (default = tmconfig)
            -v num: binary configuration file version (default = -v 1)
            -A: deploy ACL file

 

5. gst: 서버/서비스 매핑 테이블 생성 명령어입니다. 생성되는 파일은 c 소스로 $TMAXDIR/svct안에 생성이 됩니다. 이 서비스 테이블은 서버 컴파일시에 참조되어지므로, 서버 컴파일 전에는 반드시 실행하여야 합니다.

Usage: gst [-hf]
            -h: show command line help
            -n node: generate svc table for the specified node
            -v svrname: generate svc table for the specified server
            -f config_file: use config_file
                instead of the default tmconfig

 

6. racd: 여러 노드의 티맥스를 하나의 도메인으로 묶은 경우, 이를 중앙집중 관리를 위한 프로세스로 stand-alone 프로세스입니다.(티맥스가 관리하지 않는 프로세스입니다.)

Usage: racd [-hfdk]
            -h: show command line help
            -f config_file: use config_file
                instead of the default tmconfig
            -n node_name: set nodename
            -d: debug mode
            -k: passive listen mode
            -i: env_file: use env_file
            -f: label

 

7. uncfl: 바이너리 설정 파일을 다시 텍스트 파일로 생성해 주는 명령어입니다. 사용자의 실수로 텍스트 파일을 지웠을때 설정파일 복구시에 많이 사용합니다.

Usage: uncfl [-h] [-i binary_config] -o text_config
            -h: show command line help
            -i binary_config: binary configuration file (default = tmconfig)
            -o text_config: text configuration file

 

8. tperr: 티맥스 오류 번호 메세지를 조회하는 명령어 입니다.

Usage: tperr [-h] -t type -e errnum [-f filename]
        type : TPE - tperrno type
        type : COM - common error type
        type : ADM - tmadmin error type
        type : CAS - CAS error type
        type : CFL - cfl error type
        type : CLH - CLH error type
        type : CLI - client error type
        type : CLL - CLL error type
        type : DWN - tmdown error type
        type : FDL - fdlc error type
        type : SDL - sdlc error type
        type : SVR - server error type
        type : TMD - tmd error type
        type : TGW - tmax gateway error type
        type : TMM - TMM error type
        type : TMS - TMS error type

 

9. fdlc: FDL 버퍼 사용시 바이너리 버퍼 파일을 생성하기 위한 명령어 입니다.

fdlc ( -c ) {- a|c|d|u} [-f] [-h 헤더 파일 이름] { -i 필드키 테이블 파일 이름 } [-jc|ji] [-o 결과물 이름] [-u] [-p 패키지 이름] [-x] {-V}

 

10. sdlc: 구조체 버퍼 사용시 바이너리 버퍼 파일을 생성하기 위한 명령어 입니다.

sdlc [-c] [-h 해더 파일 이름] { -i 구조체 파일 이름 } [-o 결과물이름] [-s] [-v VIEW 정의 파일] [-32] {-V}

 

11. mkcli: 클라이언트 생성 명령어 입니다.

Usage :
        mkcli   {-f { @filename | firstfile[,firstfile...]}}
                {-o execname}
                [-l [ @filename | lastfile[,lastfile...]]]
                [-v] [-C] [(-32)/-64]

 

12. mksvr: 서버 생성 명령어 입니다.

Usage :
        mksvr   {-s { @filename | service[,service...][:func]}}
                {-f { @filename | firstfile[,firstfile...]}}
                {-o server}
                [-l [ @filename | lastfile[,lastfile...]]]
                [-t server_type] [-S sdl_object] [-r rmname]
                [-v] [-C] [(-32)/-64]

 

13. mkgrp: 티맥스 사용자 그룹 생성 명령어입니다.

Usage: mkgrp [-a|d] -g GroupID -G GroupName
         -a: Add a user
         -d: Delete a user
         -g GroupID: Group ID
         -G GroupName: Group Name
         -h: help

 

14. mkacl: ACL(Access Control List)를 생성하는 명령어입니다.

Usage: mkacl [-a|d] -G GroupName -t AclType -s ServiceName
         -a: Add ACL
         -d: Delete ACL
         -G GroupName: Group Name
         -t [SERVICE]: ACL type
         -s ServiceName: Service Name
         -h: help

 

15. mkpw: 티맥스 사용자 암호 관리 명령어입니다.

Usage: mkpw [-f filename] [-a|d|i|n|p] [-G GroupName] [-u uid]
         -a: Add a user
         -d: Delete a user
         -h: help
         -i: change user Information
         -n: create a New passwd file
         -p: change a Password
         -f filename: specifies a passwd file
         Default is: mkpw -f $TMAXDIR/config/passwd -p
         -G groupname: specifies a group name
         -u uid: specifies a user id

 

16. svcrpt: 서버/서비스 수행결과를 로그에서 조회하는 명령어입니다.

Usage :
        svcrpt  [-T|-N] [-S] [-x] [-s svcname] [-v svrname] [-d mm:dd]
                [-f hh:mm:ss] [-t hh:mm:ss] [-c num_cols] -i logfile

 

17. tmd: 서버 프로그램 테스트 명령어입니다.  티맥스 서버를 작성 후, 클라이언트가 없는 경우 사용하는 툴로 서비스명/버퍼타입/데이터를 파일로 만들어서 서버를 실행할수 있습니다.

Usage: tmd [-h] [-i infile] [-t sec] [-X] [-T sec] [-s]
            -h: show command line help
            -i infile: use input file
            -t sec: use timeout
            -X: use global transaction
            -T sec: use transaction timeout
            -s: use security check

 

Posted by integer
, |

특정파일을 찾아서 복사할때

find . -name *.txt -exec cp {} ./t \;    

특정파일에서 특정문자찾기

find . -name "*.txt" | xargs grep abcde
Posted by integer
, |

1 : TPEABORT - transaction cannot commit

트랜젝션이 commit 될 수 없는 상태입니다. 서비스가 timeout 이 난 경우가 해당되구요.. 만일 서비스가 정상 수행을 했는데 이런 메시지가 나왔다면 tpbegin 에서 주는 timeout 수치가 너무 짧은 것은 아닌지 검토해 보실 필요도 있으며, 일단은 Query tuning이 우선이지요.. ^^ (TPED_SVCTIMEOUT)

2 : TPEBADDESC - bad communication descriptor

async mode 또는 conversation mode의 communication model에서 발생할 수 있는 에러입니다. async나 conversation은 communication handle 을 사용하지요? 동기적으로 호출이 이루어지는 것이 아니므로, client와 서비스를 이어줄 수 있는 handle이 필요한데, 그것이 expire 된 경우입니다. 대표적으로, communication이 이미 tpgetrply나 tpdiscon 등으로 종료가 된 후에 해당 cd (communication descriptor) 변수를 쓰려고 했을 때에 발생합니다.

3. TPEBLOCK - blocking condition found

이 에러는 보통 service call의 결과로 떨어집니다. 이를테면 call 하려는 서비스의 모든 queue가 몽땅 다 full이다.. 이런 경우, 우리는 "blocking condition이 존재(exist)한다"고 얘기 합니다. blocking condition이 존재할 때, 원래는 disk로 queue를 내려서 file transfer를 시도하게 되지만, 만일 call 옵션이 TPNOBLOCK 이었다면, 이러한 blocking condition을 만났을 경우, 막바로 error로 빠지게 됩니다. 이때 나오는 에러가 TPEBLOCK 입니다. reply queue도 마찬가지여셔, tpgetrply 함수를 call 할 때에도 이 에러 메시지를 만날 수 있습니다.

4. TPEINVAL - invalid arguments given

atmi 함수에 input 값을 잘못 넣었을때 발생합니다. 예를들면, tpinit을 해야 하는데, WSNADDR 환경변수 값을, //192.168.1.10:3333 으로 해야 할 것을 "//192.168.1.10:3333" 처럼.. (quotation mark 문제입니다 -_-;) 좀 엄하게 잘못 했을 경우 이런 에러가 발생하기도 합니다. 혹은, tpcall에서 서비스명에 null 이 들어갔다거나.. ^^; 갖가지 atmi 함수에서 input 값이 이상한 경우에 발생합니다.

5. TPELIMIT - a system limit has been reached

가장 많이 발생하는 경우는 license binary user count를 넘어설 경우겠지요.. 그래서 tpinit 이 실패하는 경우인데, 그것 말고도 쉽게 reach될 system limit가 더 있습니다.

먼저, MAXACCESSORS 입니다. 해당 node에서 BB에 붙을 수 있는 프로세스 수를 몽땅 합한게 MAXACCESSORS 값인데, 이걸 초과 할 경우.. 즉, 서버 프로세스가 많이 떠 있고, tmadmin도 몇개씩 떠 있는 와중에 native client로 돌아가는 batch program까지 다수 붙어서 돌고 있는 상황이면, 새로운 client가 붙지를 못하는 현상이 벌어집니다.

또 있습니다. conversation mode는 MAXCONV 값 이내에서 이루어질 수 있지요? MAXCONV 값 제한에 걸려서 conversation mode의 connection을 맺을 수 없는 경우에도 이 에러가 떨어집니다.

좌우간 시스템 제한에 걸려서 뭘 못하는 경우에, 이 에러가 발생합니다. ^^

6. TPENOENT - no entry found

대표적으로 서비스가 없을때 발생합니다. call 하려는 서비스의 이름으로 열심히 찾아봤는데, 그 서비스 이름이 잘못된건지, 아니면 서비스가 내려가 있는 건지, 좌우간 찾을 수가 없을 때 이 에러가 떨어집니다.
그런데, 꼭 서비스가 아니라도 이 에러는 떨어집니다. 즉, '찾으려는 무언가가 없을 때' 무조건 떨어집니다. 심지어는 FML의 field table을 못찾을 때에도 발생합니다.

유형별로 보시면...
    tpalloc 에서는, alloc하려는 buffer type이 정의되어있지 않을 때..
    tpinit 에서는 BB에 더이상 공간이 없어서 connection을 맺을 수 없을 때,
    tpcall/tpacall/tpconnect 에서는 call 하려는 service가 없을 때, (또는 tpconnect 로 call한 서비스가 conversation 서비스가 아닐 때..)
    tpenqueue / tpdequeue 에서 queue space에 접근을 못할 때... 등등의 조건에서 일어납니다.

7. TPEOS - operating system error

OS error라고 되어있습니다. 자기가 판단하기에 OS에서 벌어진 에러 같으면 무조건 이놈으로 떨어집니다.

8. TPEPERM - bad permissions

permission 관련 에러는 모두 이걸로 나옵니다. 대부분은 TUXEDO 자체의 보안기능을 잘 이용하지 않으므로, 만날 일이 별로 없으리라고 봅니다. ^^;

9. TPEPROTO - protocol error

protocol 문제로 발생합니다. 대표적인 경우가.. XA transaction을 이용하고 있는데, 감히 무엄하게도 transaction의 participant가 tpcommit을 call 한 경우입니다.
쉽게 말해서 tpbegin을 걸지도 않은 놈이 tpcommit을 날렸을 때라고 보면 되겠군요. 혹은, transaction이 진행중이어서 XA mode의 일부로 아직 진행중인 상황인데, tpterm을 날려버린 경우, tpterm 호출이 실패하면서 발생하는 에러가 이겁니다. 그 외에도 protocol 문제는 전부 이걸로 나옵니다. -_-

10. TPSVCERR - server error while handling request

글자 그대로 해석하시면 됩니다. 서버가 돌다가 에러가 났다... 이 얘기지요. 그런데 여기서 나오는 에러는 application level의 에러가 아닙니다.
즉, 서버가 죽는다거나 뭐 이런 류의 에러입니다. (십중 팔구, 서버가 죽었을 겁니다.. -_-) 따라서, 이 경우라면 반드시 디버깅을 하셔야 하겠습니다.

11. TPESVCFAIL - application level service failure

에러지만 에러같지 않은 에러입니다. 어떤 관점에서 볼 때엔 에러가 아니라고 간주해도 무방하지요. 이건 application이 정상적으로 수행되고 tpreturn이 TPFAIL로 넘어온 경우가 여기에 해당됩니다. 뭐가 죽거나 한건 아니고, 단지 return 값이 TPFAIL 이었다는 소리입니다. 에러라고 보지 않으셔도 무방하겠죠?

12. TPESYSTEM - internal system error

TPEOS가 OS 에러를 통칭한다면 TPESYSTEM은 'tuxedo error'를 통칭합니다. -_-; TUXEDO 시스템 자체 에러 메시지인데, 뭐 매우 단순한 경우에도 발생합니다. 이를테면 tpinit을 않고, 막바로 tpcall을 시도했을 때에도 발생합니다. 일단은 시스템 에러로 간주하고 admin 부터 불러와야 할 경우이기는 합니다. 흔히 이 에러가 발생할 경우에는 log file 등에 부가적인 정보가 남습니다.

13. TPETIME - timeout occurred

간단하죠? 타임아웃이래요.. ^^;;

14. TPETRAN - error starting transaction

transaction이 issue되지 않는 경우입니다. XA transaction을 하나 issue 하려면 Global Transaction Table (GTT) 에 공간이 최소한 하나 있어야 하겠지요? 만일, 그 시스템의 MAXGTT로 정해놓은 수치만큼.. 이를테면 MAXGTT=100 인데, 현재 100개의 XA transaction이 진행중인 경우, 새로운 transaction을 start 하려고 하면 이 에러가 나옵니다.
또는 이와 비슷한 여러가지 경우로 transaction starting이 죽어도 될 수 없는 경우가 있는지를 찾아보세요. 이를테면 TMS가 없다거나 (이건 TPENOENT와 함께 발생하겠군요) DB가 죽었다거나 (ulog를 보면, XAER_RMERR 이 함께 발생할겁니다.).... ^^

15. TPGOTSIG - signal received and TPSIGRSTRT not specified

보기 힘든 error 입니다. 사실상 거의 쓰지 않는 tpcall / tpenqueue flag 값 중에서 TPSIGRSTRT 라는 옵션이 있습니다. 이것은 뭐냐 하면, 실행중인 system call이 signal을 맞아서 interrupt가 걸렸을 때, 그 system call을 'restart' 시킨다.. 즉, 다시 실행한다.. 뭐 이런 소리입니다.
즉, TPSIGRSTRT flag가 on 상태이면, 이 에러는 안납니다.

16. TPERMERR - resource manager error

DB에 error가 발생했다고 여겨지는 경우입니다. 대표적으로, tpopen 이나 tpclose를 써서 RM(=DB 입니다.)을 open 하려고 시도했을 경우에 DB에 에러가 나서 접근이 안되거나 정상처리가 안될 경우에 이 에러가 발생하죠.. 그러나 tpopen/tpclose는 쓸 일이 거의 없죠? 거의 non-XA에서는 EXEC SQL CONNECT 를 직접 써서 연결하니까요...
XA transaction 모드의 서버를 구성할 때, tpsvrinit / done 함수에 사용하는 tx_open / tx_close의 경우에는 TPERMERR 이 발생하는게 아니라, (당연하죠.. TP계열이 아니라 TX 계열 함수이므로..) TX_ERROR / TX_FAIL 등의 에러가 발생합니다.

17. TPEITYPE - type and/or subtype do not match service's

이것이 무엇이냐.... tpcall 로 call 한 communication buffer 가 service에서 처리를 할 수 없는 type인 경우입니다. 이를테면, client에서 FML로 보냈는데, server 쪽에는 아예 field table도 없고 FML을 쓸 준비가 전혀 안되어있다거나 하는 경우가 여기에 해당됩니다.

18. TPEOTYPE - type and/or subtype do not match buffer's or unknown

이것도 비슷합니다. type이 안맞는건데요.. 예를 들면, view type buffer를 쓸 때, 전송에 사용할 view type을 정해놓지 않습니까? 그런데.. 같은 view type은 맞는데 (그래서 TPEITYPE은 피했는데..) 넘어온 data의 view가, 원래 예정되어있던 그 view가 아닌 엉뚱한 view일 경우에 발생합니다.

19. TPERELEASE - invalid release

말그대로입니다.

20. TPEHAZARD - hazard exists that transaction heuristically completed
21. TPEHEURISTIC - transaction heuristically completed

두 놈 다 무서운 (또, 맘에 안드는) 에러입니다. -_-; 이것들을 설명하기 전에 transaction control 설정을 먼저 거론해야 하겠군요..

XA transaction을 control 하는 변수 중, TP_COMMIT_CONTROL 이라는 변수가 있습니다. 이 속성은 ubbconfig 파일에서 CMTRET 라는 parameter를 뭘로 주느냐를 갖고 default setting을 하구요.. 나중에 transaction coordinator (흔히 client) 측에서 tpscmt 라는 함수를 호출하여 재설정 할 수 있습니다.

TP_COMMIT_CONTROL의 값.. 즉, ubb에서의 CMTRET 값은 두 가지가 있습니다. 하나는 LOGGED 이고, 또 하나는 COMPLETE 입니다. default는 COMPLETE 입니다. (LOGGED : tpcommit 을 호출하면, 각 transaction participant가 "precommit"이 확실히 되면 그때 return 됩니다. COMPLETE : 모든 participant가 "commit"이 다 되어야 tpcommit이 return 됩니다.)

LOGGED가 퍼포먼스는 더 좋지만, transaction 처리의 신뢰도는 COMPLETE가 당연히 뛰어나겠지요?
이 속성이 LOGGED로 되어있을 때는, one-phase commit이 되면 곧바로 AP로 제어권이 넘어갑니다.
즉, two-phase commit 이 모두 일어날때까지 기다리는 것이 아니란 소린데, 그렇다면 첫번째 phase commit이 되고 나서도, 두번째 phase를 만날때까지 TM은 RM과 작업을 할게 더 남아있습니다만, 어쨌거나 AP에서는 one-phase 정보만을 얻을 수 있을 뿐이지요. 그래서 LOGGED일때 이 에러메시지는 one-phase commit에 관한 얘기입니다. 첫번째 phase에서 에러가 났다는 얘기구요... one-phase 이므로, 당연히 관여된 RM이 하나뿐일때만 알 수 있습니다. (복수 node에 걸친 transaction인 경우엔 LOGGED 옵션에서는 에러 여부가 나오지 않습니다.)

COMPLETE 일 경우에는 two-phase commit이 모두 일어난 후에 AP로 제어가 넘어오므로, one-phase 뿐만 아니라 two-phase commit 에서도 heuristic decision이 발생했거나 hazard condition이 발생한 경우에 이 에러 메시지를 볼 수 있습니다. 물론 복수 RM이 관여된 경우에도 마찬가지겠죠.. ^^

TPEHAZARD는, hazard condition이 발생하여.. 즉, 뭔가 알 수 없는 종류의 에러 또는 실패가 발생해서, transaction을 heuristic 하게 처리할 수 밖에 없게 되었다는 의미입니다. 말이 좀 어렵죠? -_-; heuristic 이라는 말이 '발견적인, 우연히 발견한, 스스로 발견한' 뭐 이따위의 뜻이 있습니다. -_- 매우 황당한 경우가 아닐 수가 없습니다.

"일단은 hazard 가 발생을 해서 heuritstic 하게 transaction을 처리해야 할텐데, 잘 되기를 빌어달라.." 뭐 이런 메시지라고 보시면 되겠습니다.

TPEHEURISTIC은 heuristic decision을 내려야 할 경우에 빠져들었는데, 하필 또 그것마저도 이상하게 꼬이는 바람에, transaction이 일부는 commit 되고 또 일부는 rollback이 되는 엽기적인 상황이 발생했다는 에러 코드입니다. -_-;

"heuristic 하게 잘 해 보려고 최선은 다했는데, 어라? 이게 뭐꼬?" 하는 메시지입니다;;

엽기적인 에러죠? -_-; 이 에러 겪어본 사람들은 환장합니다.. -_-; 저도 겪어봤거든요..

22. TPEEVENT - event occurred

EVENT가 발생했답니다. 어떤 event 인지는 revent 변수에 남구요.. conversation mode인 경우 tprecv / tpsend 를 사용하는데 event가 발생해버리면 conversation 처리가 불가능하게 되고 이 에러가 발생합니다.

23. TPEMATCH - service name cannot be advertised due to matching conflict

tpadvertise를 써서, 서비스를 advertise 하려고 할 때, 이미 advertise 된 서비스를 또 하려고 하면 이 에러가 발생합니다.

24. TPEDIAGNOSTIC - function failed - check diagnostic value

tpenqueue/tpdequeue 등에서 function call이 실패한 경우, 이 에러가 뜨면 diagnostic 이라는 long 형태의 변수 값을 참고하면 되겠습니다.

25. TPEMIB - Management Information Base access error

TUXEDO에서 admin 기능을 구현하기 위해서는, MIB 라는 것에 붙어서 작업하는 tool등을 만들게 되는데, MIB access에 문제가 생긴 경우입니다. tpadmcall 호출시, outbuf 값에 FML32 버퍼 타입으로 에러 정보가 기록됩니다. MIB에 대해 알려면 매뉴얼에서 TM_MIB, MIB 절을 잘 읽어보시면 되구요.. 기회가 되면 여기에도 한 번 올려보죠

                                   

출처:
http://adrian.pe.kr/ 의 adrian님의 글


 

Posted by integer
, |
ORACLE vs MS-SQL Server


ORACLE 과 SQL Server를 대비시켜놓은 문서이다.
어느것이 성능이 좋은것이냐를 대비해 놓은것이 아닌, 대응 기능을 기술한 것이니 오라클 플젝을 하다가 SQL Server를 써야하는 개발자에게 유용한 문서가 될것이다.


[Flash] http://shield3.tistory.com/attachment/ck93.swf

Posted by integer
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함