98
Tmax 4.0 릴리즈 노트

Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

Page 2: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

1

TMAX TP MONITOR Version 4.0

Copyright © 2000 Tmax Soft Inc., All Rights Reserved.

Page 3: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 2

Copyright Notice Copyright©2000 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국 서울시 강남구 대치동 946-1 글라스타워 18 층 우)135-708 Restricted Rights Legend This software and documents are made available only under the terms of the Tmax Soft License

Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of Tmax Soft Co., Ltd.

소프트웨어 및 문서는 오직 TmaxSoft Co., Ltd.와의 사용권 계약 하에서만 이용이 가능하며, 사용권 계약에 따라서 사용하거나 복사 할 수 있습니다. 또한 이 매뉴얼에서 언급하지 않은 정보에 대해서는 보증 및 책임을 지지 않습니다.이 매뉴얼에 대한 권리는 저작권에 보호되므로 발행자의 허가 없이 전체 또는 일부를 어떤 형식이나, 사진 녹화, 기록, 정보 저장 및 검색 시스템과 같은 그래픽이나 전자적, 기계적 수단으로 복제하거나 사용할 수 없습니다.

Trademarks Tmax, WebtoB, WebT, and JEUS are registered trademarks of Tmax Soft Co., Ltd. All other product names may be trademarks of the respective companies with which they are

associated. Tmax, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd.의 등록 상표입니다. 기타 모든 제품들과 회사 이름은 각각 해당 소유주의 상표로서 참조용으로만

사용됩니다. Tmax 4.0 릴리즈 노트

Document Edition Date Version

TMUG-1130-01 November 30, 2005 Tmax 4.0

About This Guide 본 지침서는 Tmax 4.0 과 관련된 추가 기능에 대해서 설명하고 있습니다..

Page 4: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

3

차례

차례 ..............................................................................................................................................................3

1 서비스 접근 제어...............................................................................................................................8

1.1 개요 ..............................................................................................................................................8

1.2 환경 설정 ....................................................................................................................................8

1.2.1 도메인 절 ............................................................................................................................9

1.3 GROUP 파일 만들기 ....................................................................................................................9

1.3.1 이름 ......................................................................................................................................9

1.3.2 사용 방법 ..........................................................................................................................10

1.3.3 설명 ....................................................................................................................................10

1.3.4 결과물 ................................................................................................................................10

1.4 USER 파일 만들기..................................................................................................................... 11

1.4.1 이름 .................................................................................................................................... 11

1.4.2 사용 방법 ..........................................................................................................................12

1.4.3 설명 ....................................................................................................................................12

1.4.4 결과물 ................................................................................................................................12

1.5 ACL 파일 만들기.......................................................................................................................13

1.5.1 이름 ....................................................................................................................................13

1.5.2 사용 방법 ..........................................................................................................................13

1.5.3 설명 ....................................................................................................................................14

1.5.4 결과물 ................................................................................................................................14

1.6 멀티 노드 환경에서의 3단계 보안 사용 ..............................................................................15

1.6.1 cfl -A ...................................................................................................................................15

1.6.2 사용 방법 ..........................................................................................................................15

1.7 TMAX 클라이언트에서 시작하지 않은 CALL 에 대한 UID 설정 ........................................15

1.7.1 SERVER 절의 CLOPT=” –u user_id” 설정...................................................................15

1.8 3단계 보안 설정 사용 예제 ....................................................................................................16

1.8.1 환경 파일 ..........................................................................................................................16

1.8.2 group file.............................................................................................................................17

1.8.3 user file ...............................................................................................................................17

1.8.4 acl file .................................................................................................................................18

1.8.5 환경 파일 컴파일 ............................................................................................................18

1.8.6 클라이언트 프로그램 ......................................................................................................18

2 로그 레벨 실시간 변경 ...................................................................................................................20

2.1 개요 ............................................................................................................................................20

Page 5: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 4

2.2 환경 파일에서 로그 레벨 설정 ..............................................................................................20

2.2.1 DOMAIN 절.......................................................................................................................20

2.2.2 NODE 절 (재정의 가능 항목).......................................................................................21

2.2.3 SVRGROUP 절 (재정의 가능 항목) .............................................................................21

2.2.4 SERVER 절 (재정의 가능 항목)....................................................................................21

2.3 TMADMIN 에서 동적 로그 레벨 변경 ....................................................................................21

2.3.1 로그 레벨별 내용 ............................................................................................................21

3 암호화 ................................................................................................................................................23

3.1 개요 ............................................................................................................................................23

3.2 클라이언트 암호화...................................................................................................................23

3.2.1 환경 설정 ..........................................................................................................................23

3.3 TMAX 엔진 암호화 ...................................................................................................................23

3.3.1 환경 설정 ..........................................................................................................................23

3.4 주의 사항 ..................................................................................................................................24

4 TRANSACTION RECOVERY 기능 추가....................................................................................25

4.1 개요 ............................................................................................................................................25

4.2 환경 설정 ..................................................................................................................................25

4.3 TMDOWN 에 옵션 추가.............................................................................................................26

4.3.1 –k 옵션 추가 ....................................................................................................................26

4.4 주의 사항 ..................................................................................................................................27

4.4.1 ORACLE 8.1.7 Database Server ........................................................................................27

4.4.2 ORACLE 9i Database Server .............................................................................................27

5 MULTI THREADED TMS..............................................................................................................28

5.1 개요 ............................................................................................................................................28

5.2 환경 설정 ..................................................................................................................................28

5.3 주의 사항 ..................................................................................................................................29

6 EXTERN SVR 의 지원...................................................................................................................30

6.1 개요 ............................................................................................................................................30

6.2 환경 파일 ..................................................................................................................................30

6.3 환경 파일 예제 .........................................................................................................................30

7 SYSMASTER 지원 기능 추가 ......................................................................................................32

7.1 SYSMASTER 이벤트 핸들러 (EVENT HANDLER) ..................................................................32

7.1.1 라이브러리 명 ..................................................................................................................32

7.1.2 사용자 함수 ......................................................................................................................32

7.1.3 설명 ....................................................................................................................................32

7.1.4 환경 변수 (NODE 절).....................................................................................................32

7.1.5 예제 ....................................................................................................................................33

7.2 SYSMASTER TRACE .....................................................................................................................36

7.2.1 GID 구조 (12byte)............................................................................................................36

Page 6: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

5

7.2.2 환경 파일 추가 ................................................................................................................36

7.2.3 Tmadmin 기능 추가 (smtrc)............................................................................................37

7.2.4 Tmadmin API 추가 (서버 라이브러리)..........................................................................38

7.3 TMGETSMGID...............................................................................................................................39

7.3.1 이름 ....................................................................................................................................39

7.3.2 사용 방법 ..........................................................................................................................39

7.3.3 설명 ....................................................................................................................................39

7.3.4 사용 예제 ..........................................................................................................................40

8 TMADMIN 의 명령어 추가 ..........................................................................................................45

8.1 DS –A 옵션 추가 .......................................................................................................................45

8.1.1 ds (Disconnect Session) ......................................................................................................45

8.2 CLHSINFO, TMMSINFO 명령어 추가 ...........................................................................................46

8.2.1 clhsinfo ...............................................................................................................................46

8.2.2 tmmsinfo .............................................................................................................................47

8.3 CHLOG 명령어 추가 (동적 로그 레벨 변경) .........................................................................48

8.3.1 설명 ....................................................................................................................................48

8.3.2 변경 확인 ..........................................................................................................................49

8.3.3 예제 ....................................................................................................................................49

8.4 ST –T 에 –X 옵션 추가 .............................................................................................................51

8.4.1 TMS 에 대한 보다 자세한 정보 제공 .........................................................................51

8.5 SMTRC 명령어 추가 ..................................................................................................................52

8.5.1 사용법 ................................................................................................................................52

8.6 CHTRC 의 사용 방법 변경 .......................................................................................................52

8.6.1 chtrc ....................................................................................................................................52

9 LOCAL RECURSIVE CALL..........................................................................................................54

9.1 개요 ............................................................................................................................................54

9.2 주의 사항 ..................................................................................................................................54

9.3 예제 ............................................................................................................................................54

10 TIP 에 기능 추가 ........................................................................................................................58

10.1 개요 ............................................................................................................................................58

10.2 TIP 구조.....................................................................................................................................58

10.2.1 조작 ....................................................................................................................................58

10.2.2 세그먼트 (TIP_SEGMENT)..............................................................................................58

10.2.3 절 (TIP_SECTION) ...........................................................................................................58

10.2.4 명령어 (TIP_CMD)...........................................................................................................59

10.3 추가된 항목 ..............................................................................................................................59

10.3.1 Configuration segment .......................................................................................................59

10.3.2 STATISTICS segment ..........................................................................................................65

10.3.3 ADMINISTRATION segment ..............................................................................................71

11 DB 정보 조회 API 추가 ................................................................................................................79

Page 7: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 6

11.1 TMAX_GET_DB_USRNAME ..........................................................................................................79

11.1.1 이름 ....................................................................................................................................79

11.1.2 사용 방법 ..........................................................................................................................79

11.1.3 설명 ....................................................................................................................................79

11.1.4 반환값 ................................................................................................................................80

11.1.5 오류 ....................................................................................................................................80

11.1.6 참조 ....................................................................................................................................80

11.1.7 예제 ....................................................................................................................................80

11.2 TMAX_GET_DB_PASSWD .............................................................................................................82

11.2.1 이름 ....................................................................................................................................82

11.2.2 사용 방법 ..........................................................................................................................82

11.2.3 설명 ....................................................................................................................................82

11.2.4 반환값 ................................................................................................................................82

11.2.5 오류 ....................................................................................................................................83

11.2.6 참조 ....................................................................................................................................83

11.2.7 예제 ....................................................................................................................................83

11.3 TMAX_GET_DB_TNSNAME...........................................................................................................85

11.3.1 이름 ....................................................................................................................................85

11.3.2 사용 방법 ..........................................................................................................................85

11.3.3 설명 ....................................................................................................................................85

11.3.4 반환값 ................................................................................................................................85

11.3.5 오류 ....................................................................................................................................86

11.3.6 참조 ....................................................................................................................................86

11.3.7 예제 ....................................................................................................................................86

11.4 TMAX_IS_XA ...............................................................................................................................87

11.4.1 이름 ....................................................................................................................................87

11.4.2 사용 방법 ..........................................................................................................................87

11.4.3 설명 ....................................................................................................................................87

11.4.4 리턴 값 ..............................................................................................................................87

11.4.5 예제 ....................................................................................................................................88

12 서비스 이름 확장 (16 -> 32 BYTE)...........................................................................................89

12.1 설명 ............................................................................................................................................89

13 TMAX 헤더의 변경 ....................................................................................................................90

13.1 개요 ............................................................................................................................................90

13.2 클라이언트 헤더 호환 .............................................................................................................90

13.3 DOMAIN GATEWAY 헤더 호환 ...................................................................................................90

13.3.1 환경 설정 ..........................................................................................................................90

14 장애 대책 기능 변화...................................................................................................................92

14.1 서버 RESTART 횟수 변화 ......................................................................................................92

14.1.1 환경 설정 ..........................................................................................................................92

Page 8: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

7

15 TCP/IP GATEWAY 사용방법의 변경 .......................................................................................94

15.1 새로운 라이브러리의 추가 .....................................................................................................94

15.1.1 추가된 라이브러리 ..........................................................................................................94

15.1.2 설명 ....................................................................................................................................94

16 DYNAMIC DB 의 세션 복구 기능...........................................................................................95

16.1 설명 ............................................................................................................................................95

17 TPRETURN 의 FLAG 추가......................................................................................................96

18 압축 라이브러리의 이름 변경 ...................................................................................................97

Page 9: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 8

1 서비스 접근 제어

1.1 개요

서비스 접근 제어 기능은 제 3 단계 보안 기능으로써, Tmax 시스템에 접속한 사용자들 중에서 서비스별로 사용자 접근을 제한할 수 있는 기능이다.

서비스 접근 권한 제어는 사용자 그룹별로 이루어진다. 즉, 하나의 서비스는 그 서비스에 대해 접근 권한이 허용된 그룹에 해당되는 user 만이 접근이 가능하다. 따라서 이 기능을 사용하기 위해서는 group 파일을 만들어 주어야 하며, 해당 group 에 속하는 user 파일이 있어야 한다.

그리고 서비스 별 접근 가능한 사용자 그룹을 지정해 주는 acl 이라고 불리는 파일도 있어야 한다.

해당 기능을 사용하기 위해서는 도메인 절의 SECURITY 항목에 ACL 또는 MANDATORY 라는 값을 설정해 주어야 한다. 3 단계 보안 기능은 1 단계 시스템 접속 제어, 2 단계 사용자 인증 기능까지 모두 포함하고 있다.

따라서, SECURITY 항목이 ACL(또는 MANDATORY) 로 설정되어 있는 경우 TPSTART_T 구조체에 dompwd, usrname, usrpwd 필드를 사용하여 1, 2 단계 인증을 거쳐 Tmax 시스템에 접속 성공한 경우에만 서비스 접근 권한이 가능해진다.

다음은 지금까지 설명한 부분에 대한 환경 설정 방법, group, acl, user 파일을 생성하는 과정을 소개한다.

1.2 환경 설정

환경 설정 도메인 절에 다음과 같이 설정해 준다.

Page 10: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

9

1.2.1 도메인 절

SECURITY = string

3 단계 보안 설정을 위해서는 ACL or MANDATORY 라고 설정한다.

ACL : acl 파일에 지정된 서비스는 지정된 하나의 그룹에 속하는 user 만이 접근할 수 있으며, acl 에 지정되지 않은 서비스는 Tmax 시스템에 접속되어 있는 모든 user 가 접근할 수 있다.

MANDATORY : acl 파일에 지정된 서비스는 지정된 하나의 그룹에 속하는 user 만이 접근할 수 있다는 점은 ACL 과 동일하나, acl 파일에 지정되지 않은 서비스는 Tmax 시스템에 접속되어 있는 모든 user 에게 접근이 허용되지 않는다. (중요)

OWNER = string

이전과 동일

1.3 group 파일 만들기

ACL 서비스에 접근 권한이 가능한 단위는 사용자 그룹이므로 그룹을 생성해 주어야 한다.

사용자 그룹은 mkgrp 라는 유틸리티를 사용하여 만들 수 있으며 결과물로 $TMAXDIR/config/group 라는 파일이 만들어 진다.

사용자 그룹들을 모두 이 하나의 파일 안에 정의된다. 따라서 모든 사용자 그룹은 반드시 하나의 group 파일에 등록되어 있어야 한다.

사용 방법은 아래와 같다.

1.3.1 이름

mkgrp : 사용자 그룹 생성 유틸리티

Page 11: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 10

1.3.2 사용 방법

$ mkgrp { –a }

{ -G group_name }

{ -g group_id}

[ -d ]

[ -h ]

[ -V ]

1.3.3 설명

{ -a } : 이 옵션은 기존의 group 파일에 새로운 하나의 사용자 그룹을 추가하기 위한 옵션이다. 기존의 group 파일이 존재할 경우, 파일의 맨 끝에 새로운 그룹이 추가되며, 존재하지 않을 경우 새로운 group 파일이 만들어 진 후 추가된다.

{ -G group_name } : 생성하려는 그룹의 이름을 지정한다. 다른 그룹과 중복되지 않도록 지정해야 한다.

{ -g group_id } : 생성하려는 그룹의 id 를 지정한다. 이 옵션 또한 다른 그룹과 중복되지 않도록 지정해야 한다.

[ -d ] : 기존에 생성된 그룹을 삭제하기 위한 옵션이다. –g, -G 옵션과 함께 지정해 주어야 하며 –g 옵션으로 지정해 준 id 를 가진 사용자 그룹을 삭제한다.

[ -h ] : 명령어 도움말 옵션이다.

[ -V ] : 해당 유틸리티의 Tmax 버전에 대한 정보를 알려준다.

1.3.4 결과물

$TMAXDIR/config/group 파일이 생성이 된다. 내용은 아래와 같다.

Group_name:x:Group_id

Page 12: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

11

grp1:x:1

grp2:x:2

grp3:x:3

grp4:x:4

grp5:x:5

grp6:x:6

grp7:x:7

grp8:x:8

grp9:x:9

grp10:x:10

1.4 user 파일 만들기

group 파일을 만든 후에는 해당 group 에 속하는 유저가 있어야 한다.

따라서 user 파일을 만들어 주어야 한다.

user 파일은 mkpw 유틸리티를 이용하여 passwd 파일을 만들 경우 함께 만들어 진다.

단 passwd 파일을 만들 경우, -G 옵션을 사용하여 이전 버전과는 다른 방식으로 만들어 주어야 한다. ACL 로 지정된 서비스를 호출하기 위해서는 하나의 그룹에 속해야 하기 때문이다.

물론 3 단계 보안을 사용하지 않고 1, 2 단계 보안만을 사용하거나 3 단계 보안 설정이 되어 있어도 ACL 로 지정되지 않은 서비스를 호출할 경우에는 기존과 동일한 방법(-G 옵션을 사용하지 않는 방법)으로 passwd 파일에 user/passwd 를 만들면 된다.

다음은 ACL 서비스를 사용하기 위해 mkpw 를 이용해서 passwd 파일을 만드는 방법을 설명한다.

1.4.1 이름

mkpw : 사용자 생성 유틸리티

Page 13: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 12

1.4.2 사용 방법

$ mkpw [ -G group_name]

[ -u uid]

1.4.3 설명

[ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해 준다. 반드시 group 파일에 지정된 그룹 중 하나를 선택해서 지정해야 한다.

[ -u uid ] 해당 유저의 unique 한 id 를 지정해 준다.

1.4.4 결과물

$TMAXDIR/config/passwd, $TMAXDIR/config/user 파일이 생성된다.

내용은 아래와 같다.

passwd 파일 : username:passwd:user_id:group_id:Description:x:x

starbj1:UnQGcdDkNqXNc:1:1:starbj1:x:x

starbj2:mPLY7VZtNvRXs:2:2:starbj2:x:x

starbj3:aiu6Mt36rqwe6:3:3:starbj3:x:x

starbj4:vVdS9naV02jA.:4:4:starbj4:x:x

starbj5:568kCzyzYXriQ:5:5:starbj5:x:x

starbj6:ouKrHf/89QMW6:6:6:starbj6:x:x

starbj7:Mx8PaESrqWR4I:7:7:starbj7:x:x

starbj8:LL59popHJp59U:8:8:starbj8:x:x

starbj9:RG/S5BetAPeFs:9:9:starbj9:x:x

starbj10:Ebbzv1Ecx0abE:10:10:starbj10:x:x

user 파일 : username:user_id:group_id

starbj1:1:1

starbj2:2:2

starbj3:3:3

starbj4:4:4

Page 14: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

13

starbj5:5:5

starbj6:6:6

starbj7:7:7

starbj8:8:8

starbj9:9:9

starbj10:10:10

1.5 acl 파일 만들기

사용자 그룹을 만든 후, 해당 그룹이 접근할 수 있는 서비스를 지정해 주어야 한다. acl 파일에서는 서비스별 접근할 수 있는 사용자 그룹을 지정해 준다. 이 기능은 mkacl 이라는 유틸리티를 이용하여 만들 수 있다. 단, 하나의 서비스는 하나의 사용자 그룹만이 접근 가능하다. 따라서 mkacl 을 이용하여 acl 을 추가할 때 기존 acl 파일에 이미 등록되어 있는 서비스 이름을 사용할 경우, 기존의 서비스명에 새로 지정해 준 그룹 이름으로 바뀌게 되므로 주의해야 한다.

mkacl 사용 방법은 아래와 같다.

1.5.1 이름

mkacl : acl (access control list) 생성 유틸리티

1.5.2 사용 방법

$ mkacl [ -a ]

[ -d ]

{ -G group_name }

{ -t type }

{ -s service_name }

[ -h ]

Page 15: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 14

[ -V ]

1.5.3 설명

[ -a ] : 이 옵션은 기존의 acl 파일에 새로운 하나의 ACL 서비스를 추가하기 위한 옵션이다. 기존의 acl 파일이 존재할 경우, 파일의 맨 끝에 새로운 서비스가 추가되며, 존재하지 않을 경우 새로운 acl 파일이 만들어 진 후 추가된다.

[ -d ] : 기존에 생성된 ACL 서비스를 삭제하기 위한 옵션이다. –G, -s, -t 옵션과 함께 지정해 주어야 하며 acl 파일에서 –s 옵션으로 지정해 준 ACL 서비스를 삭제하며, -G 옵션은 해당 서비스와 반드시 일치해야 한다.

[ -G group_name ] : -s 로 지정해 준 서비스에 대하여 접근이 허용된 그룹 이름을 지정한다. 반드시 $TMAXDIR/config/group 에 지정된 이름을 사용해야 한다.

[ -t type ] : ACL 의 type 을 지정한다. 현재 SERVICE 만을 지원한다.

[ -s service_name ] : ACL 을 적용할 서비스 명을 지정한다. 이 옵션으로 지정된 서비스는 –G 옵션으로 지정된 하나의 서버 그룹에 속한 user 만이 접근 가능하다.

[ -h ] : 명령어 도움말 옵션이다.

[ -V ] : 해당 유틸리티의 Tmax 버전에 대한 정보를 알려준다.

1.5.4 결과물

$TMAXDIR/config/acl 파일이 생성된다.

내용은 아래와 같다.

acl 파일 : service_name:type:group_id

TOUPPER1:SERVICE:1

TOUPPER5:SERVICE:5

TOUPPER7:SERVICE:7

TOUPPER9:SERVICE:9

Page 16: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

15

1.6 멀티 노드 환경에서의 3 단계 보안 사용

하나의 도메인 내에 있는 ACL 서비스에 대한 접근 권한은 모든 노드에서 동일하게 적용되어야 하므로, 멀티 노드를 사용할 경우에는 mkgrp 의 생성 파일인 group, mkacl 의 생성 파일인 acl, mkpw 의 생성 파일인 user 가 다른 노드에도 배포되어야 한다.

따라서 멀티 노드를 사용할 경우에는 이전과는 다른 방법으로 Tmax 환경 파일을 컴파일 해 주어야 한다.

1.6.1 cfl -A

ACL 을 같은 domain 안의 다른 node 로 배포할 때 사용하는 유틸리티

1.6.2 사용 방법

[ -A ] : 현재 노드의 $TMAXDIR/config/group, acl, user 파일을 같은 도메인에 속해 있는 다른 노드들의 $TMAXDIR/config 에 배포해 주기 위한 옵션이다. 따라서 이 옵션을 사용하여 환경 파일을 컴파일 할 경우에는 미리 mkgrp, mkpw, mkacl 을 이용하여 group, acl, user 파일이 생성되어 있어야 하며 위의 파일들은 하나의 도메인 내에 있는 모든 노드들이 공용으로 사용하기 때문에 위의 파일들을 만들 경우 해당 도메인에 속하는 노드의 모든 user 를 고려하여 만들어 주어야 한다.

따라서 group_name, group_id, user_name, user_id 는 한 도메인을 통틀어서 unique 하게 만들어야 한다.

주의점 : passwd 파일은 복사되지 않으므로 노드별로 따로 만들어 주거나, 따로 복사해 주어야 한다.

1.7 Tmax 클라이언트에서 시작하지 않은 call 에 대한 uid 설정

1.7.1 SERVER 절의 CLOPT=” –u user_id” 설정

UCS 의 usermain 이나 Gateway 같이 Tmax 클라이언트에서 시작되지 않은 곳에서 ACL 서비스로 요청이 온 경우, Tmax 환경 파일의 SERVER

Page 17: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 16

절의 CLOPT 옵션에 user_id 를 설정해 줌으로써, ACL 서비스에 대한 접근이 가능하다.

예를 들어 svr_ucs 의 usermain 내에서 ACL 서비스 (SVC_ACL) 를 호출할 경우, Tmax 환경 파일의 SERVER 절에 svr_ucs 의 CLOPT 항목에 CLOPT=“-u user_id” 를 설정해 줄 수 있다.

1.8 3 단계 보안 설정 사용 예제

1.8.1 환경 파일

*DOMAIN

tmax1 SHMKEY=78350,

TPORTNO=8350, SECURITY=ACL, OWNER=starbj0,

RACPORT=3155

*NODE

tmaxh4 TMAXDIR = "/EMC01/starbj81/tmax",

APPDIR = "/EMC01/starbj81/tmax/appbin"

tmaxh2 TMAXDIR = "/data1/starbj81/tmax",

APPDIR = "/data1/starbj81/tmax/appbin",

*SVRGROUP

svg1 NODENAME = "tmaxh4", COUSIN = "svg2", LOAD = 1

svg2 NODENAME = "tmaxh2", LOAD = 5

svg3 NODENAME = "tmaxh4"

*SERVER

svr01001 SVGNAME = svg1

svr_ucs1 SVGNAME = svg3, CLOPT = "-u 35", SVRTYPE=UCS, MIN=1,

MAX=2

svr_ucs2 SVGNAME = svg3, CLOPT = "-u 37", SVRTYPE=UCS, MIN=1,

MAX=2

Page 18: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

17

*SERVICE

TOUPPER1 SVRNAME = svr01001

TOUPPER2 SVRNAME = svr01001

LOGIN1 SVRNAME = svr_ucs1

LOGIN2 SVRNAME = svr_ucs2

1.8.2 group file

1.8.2.1 사용 방법

$ mkgrp -a -g 1 -G grp1

1.8.2.2 결과 예제 ($TMAXDIR/config/group)

grp0:x:1001

grp1:x:1

grp2:x:2

grp3:x:3

grp4:x:4

grp5:x:5

1.8.3 user file

1.8.3.1 사용 방법

$ mkpw -G grp1 –u 1

1.8.3.2 결과 예제 ($TMAXDIR/config/user)

starbj0:1002:1

starbj1:1:1

starbj2:2:2

starbj3:3:3

starbj4:4:4

starbj5:5:5

Page 19: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 18

1.8.4 acl file

1.8.4.1 사용 방법

$ mkacl -a -G grp1 -t SERVICE -s TOUPPER1

1.8.4.2 결과 예제 ($TMAXDIR/config/acl)

TOUPPER1:SERVICE:1

TOUPPER3:SERVICE:5

TOUPPER5:SERVICE:5

1.8.5 환경 파일 컴파일

tmaxh4@starbj81:/EMC01/starbj81>cfl -i cfg00001.m -A

CFL is done successfully for node(tmaxh4)

CFL: rcfl start for rnode (tmaxh2)

CFL is done successfully for node(tmaxh2)

1.8.6 클라이언트 프로그램

<cli1.c>

int main()

{

...

strcpy(tpinfo->usrname, "starbj1");

strcpy(tpinfo->dompwd, "starbj0");

strcpy(tpinfo->usrpwd, "starbj1");

...

if(tpcall("TOUPPER1", sndbuf, 0, &rcvbuf, &rcvlen, 0)==-1){

error routine..

}

Page 20: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

19

결과 : starbj1 은 grpname = grp1 , gid = 1 이며, gid = 1 은 TOUPPER1 에 대한 접근이 허용되므로 서비스의 결과를 정상적으로 받아온다.

<cli2.c>

int main()

{

...

strcpy(tpinfo->usrname, "starbj5");

strcpy(tpinfo->dompwd, "starbj0");

strcpy(tpinfo->usrpwd, "starbj5");

...

if(tpcall("TOUPPER1", sndbuf, 0, &rcvbuf, &rcvlen, 0)==-1){

error routine..

}

결과 : starbj5 은 grpname = grp5 , gid = 5 이며, gid = 5 은 TOUPPER1 에 대한 접근이 허용되지 않으므로 서비스의 결과를 정상적으로 받아올 수 없다. 따라서 tpcall 시 TPESYSTEM 에러를 받게 된다.

Page 21: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 20

2 로그 레벨 실시간 변경

2.1 개요

Tmax 4.0 버전에서는 에러 상황에 보다 신속하게 대응할 수 있도록 log level 을 실시간으로 변경할 수 있는 기능이 추가되었다.

로그 레벨 조절 기능은 Tmax 환경 파일에서의 설정 및 tmadmin 툴에서의 동적 변경을 지원한다.

2.2 환경 파일에서 로그 레벨 설정

2.2.1 DOMAIN 절

DOMAIN 이름 [TMMLOGLVL=string],

[CLHLOGLVL=string]

[TMSLOGLVL=string]

[LOGLVL=string]

TMMLOGLVL = string

TMM 의 로그 레벨을 설정한다. (COMPACT, BASIC, DETAIL, DEBUG1, DEBUG2, DEBUG3, DEBUG4 중 한 가지를 선택하여 지정한다)

CLHLOGLVL = string

CLH 의 로그 레벨을 설정한다. 범위는 TMM 과 동일

TMSLOGLVL = string

Page 22: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

21

TMS 의 로그 레벨을 설정한다. 범위는 TMM 과 동일

LOGLVL = string

서버의 로그 레벨을 설정한다.

2.2.2 NODE 절 (재정의 가능 항목)

NODE 이름 [TMMLOGLVL=string],

[CLHLOGLVL=string]

[TMSLOGLVL=string]

[LOGLVL=string]

내용은 DOMAIN 절과 동일함

2.2.3 SVRGROUP 절 (재정의 가능 항목)

SVRGROUP 이름 [TMSLOGLVL=string]

[LOGLVL=string]

내용은 DOMAIN 절과 동일함

2.2.4 SERVER 절 (재정의 가능 항목)

SERVER 이름 [LOGLVL=string]

내용은 DOMAIN 절과 동일함

2.3 Tmadmin 에서 동적 로그 레벨 변경

6.3 항목 참조

2.3.1 로그 레벨별 내용

COMPACT : E + F

Page 23: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 22

BASIC : E + F +W

DETAIL : E + F + W + I (default)

DEBUG1, DEBUG2, DEBUG3, DEBUG4 : 내부적인 디버그 로그의 상세 정도 (DEBUG4 가 가장 상세함) DEBUG1 ~ DEBUG4 까지는 디버그용 바이너리 및 라이브러리 (clh.dbg, tmm.dbg, libsvrd, libtmsd, libtmsthrd) 에서만 유효하다.

Page 24: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

23

3 암호화

3.1 개요

Tmax 4.0 에서는 클라이언트와 Tmax 서버 사이의 송수신 데이터를 보다 안정적으로 전달할 수 있도록 암호화 기능을 제공한다.

암호화 기능을 사용하기 위해서는 클라이언트와 서버 모두 암호화 기능이 설정되어 있어야 하며, 환경 설정 방법은 아래와 같다.

3.2 클라이언트 암호화

3.2.1 환경 설정

환경 변수로 사용 시

TMAX_SEMANTICS=”CRYPT_SW=Y”

tmaxreadenv 에서 사용되는 파일에서 사용 시

TMAX_SEMANTICS=”CRYPT_SW:Y”

3.3 Tmax 엔진 암호화

3.3.1 환경 설정

도메인이름 [,CRYPT=Y|(N)]

CRYPT

Page 25: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 24

암호화 기능을 사용하기 위해서는 CRYPT 항목을 Y 로 설정한다. 사용하지 않으려면 N 으로 설정한다. 디폴트는 N 이다.

3.4 주의 사항

초기 시스템 연결 시점에 암호화 키 교환이 이루어지며, 서비스 호출시마다 encryption / decryption 이 이루어지기 때문에 성능상 오버헤더가 발생할 수 있다.

암호화 기능의 사용을 위해서는 사용하는 시스템에 /dev/random 이 설치되어야 한다. 암호화 기능을 사용하게 되면 최초 시스템 연결 시에 암호화 키 교환이 이루어지게 되는데 이 때 커널에서 제공하는 /dev/random 이라는 문자 장치를 이용하여, 랜덤키 값을 만들어 낸다. 따라서 현재 사용하고 있는 시스템에 /dev/random 의 설치여부를 확인해야 한다. 확인 방법은 ls 명령어를 통해서 확인할 수 있다. 미설치 시 각 시스템의 매뉴얼을 참조하여 설치하도록 한다.

노드 간 통신에서의 암호화는 지원하지 않는다.

클라이언트가 $PATHDIR 을 통해서 접속하는 경우는 암호화 하지 않는다.

암호화가 설정되지 않은 클라이언트가 암호화 설정 엔진에 접속할 경우 TPECLOSE 에러가 발생한다

암호화가 설정된 클라이언트가 암호화가 설정되지 않은 엔진에 접속할 경우 클라이언트는 BLOCK 된다.

Page 26: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

25

4 Transaction Recovery 기능 추가

4.1 개요

Tmax 4.0 에서는 X/OPEN DTP 에 정의된 Transaction Recovery 기능을 지원한다.

Recovery 기능을 사용하게 되면 tms 가 재기동될 때, RM 으로부터 pending 되어 있는 트랜잭션들에 대한 XID list 를 얻어오며, 이 결과물들에 대하여 트랜잭션을 복구한다.

Tmax 에서는 단일노드, 멀티 노드, Tmax Domain Gateway 를 이용한 멀티 도메인 환경에서의 Transaction recovery 를 지원한다.

TMS Recovery 기능을 사용하기 위해서는 아래와 같이 환경 설정을 해 주어야 한다.

4.2 환경 설정

SVRGROUP 이름 [TMSRECOVERY=(Y)|N]

[TMSDEP=”tms_name,...”]

[TMSRANGE=(DOMAIN)|NODE]

TMSRECOVERY = (Y) | N

Transaction Recovery 기능을 사용할 지 여부를 결정한다. 사용할 경우 Y, 사용하지 않을 경우 N 이라고 설정한다. 디폴트는 Y 이다.

TMSDEP = “tmsname1,…”

같은 노드에서 서로 다른 서버 그룹이 DB 를 공유하는 경우, TMS 가 운영 중에 Recovery 가 일어나지 않도록 의 존관계를 맺을 수 있다. 예를 들어 아래와 같이 설정하여 서버 그룹 세

Page 27: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 26

개가 하나의 DB 를 공유할 경우, tms1 이 tms2 와 tms3 의 Recovery 를 모두 수행함으로써, Recovery 가 중복 수행되는 것을 사전에 막을 수 있다. 또한 이렇게 의존 관계를 맺을 경우 tms2 나 tms3 가 운영 중에는 Recovery 를 수행하지 않도록 하여, 보다 안정적인 Recovery 를 지원한다. svg1 TMSNAME = tms1, TMSDEP=”tms2, tms3” svg2 TMSNAME = tms2, TMSRECOVERY = N svg3 TMSNAME = tms3, TMSRECOVERY = N

TMSRANGE = (DOMAIN) | NODE

서로 다른 노드에 있는 서버 그룹이 DB 를 공유하는 경우, TMSRANGE 를 NODE 로 하여, 각각 자신의 노드의 Recovery 를 수행하도록 함으로써 노드간 Recovery 메시지 트래픽을 줄일 수 있으며, 보다 안정적인 Recovery 를 수행한다.

4.3 tmdown 에 옵션 추가

4.3.1 –k 옵션 추가

Recovery 는 TMS Group 단위로 가능하다. (그룹 전체를 내렸다 올릴 경우 Recovery 가 수행되기 때문)

따라서, 특정 이름을 가진 tms 전체를 기동/종료시키는 옵션이 추가 되었다.

$ tmdown –t tms_name –k all

위와 같이 지정해 준 경우 tms_name 으로 이름 지어진 모든 tms 가 종료된다.

$ tmboot –t tms_name –k all

위와 같이 지정해 준 경우 tms_name 으로 이름지어진 모든 tms 가 기동된다.

만일 서로 다른 서버 그룹에서 tms_name 을 동일하게 사용하는 경우, $ tmdown –t tms_name –k all –g svgname

Page 28: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

27

$ tmboot –t tms_name –k all –g svgname

와 같이 –g 옵션으로 해당 tms 가 속해있는 서버 그룹 이름을 지정해 준다. 그렇지 않으면, 해당 tms 이름을 가진 제일 첫번째 서버 그룹의 tms 가 기동/종료된다.

4.4 주의 사항

하나의 장비에 여러 개의 Tmax 를 운영할 경우, 반드시 DOMAIN ID 를 다르게 지정해 주어야 한다.

Recovery 를 위해서는 DBMS 내에서 pending list 조회를 위한 권한 조정이 필요하다.

오라클의 경우는 아래와 같이 설정해 줄 수 있다.

4.4.1 ORACLE 8.1.7 Database Server

$sqlplus sys/sys_password@TNSNAME

SQL> grant select on DBA_PENDING_TRANSACTIONS to public;

4.4.2 ORACLE 9i Database Server

$sqlplus /nolog

SQL> connect sys/sys_password@TNSNAME as sysdba

SQL> grant select on DBA_PENDING_TRANSACTIONS to public

Page 29: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 28

5 Multi threaded TMS

5.1 개요

Tmax 4.0 버전에서는, Multi Thread 방식의 트랜잭션 매니저를 제공함으로써, 적은 자원을 이용하여 보다 효율적으로 트랜잭션 처리가 가능하다.

5.2 환경 설정

*DOMAIN

DOMAIN 이름 [MAXTHREAD = number]

MAXTHREAD = number (1~MAXINT)

Multi threaded tms 의 최대 thread 개수를 지정한다.

*SVRGROUP

SVRGROUP 이름 [TMSTYPE = (STD) | STD_MT]

[TMSTHREAD = number]

[TMSOPT = “arguments”]

TMSTYPE = STD | STD_MT

일반 TMS 를 사용하기 위해서는 TMSTYPE 을 STD 로 설정하며 (디폴트임) libtms.so 라이브러리를 사용한다. Multi threaded TMS 를 사용하기 위해서는 TMSTYPE 을 STD_MT 로 설정해 주어야 하며, libtmsthr.so 라이브러리를 사용해야 한다.

TMSTHREAD = number

TMS Process 한 개당 working Thread 개수를 설정한다.

Page 30: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

29

TMSOPT = “arguments”

TMS 로그가 저장될 디렉토리와 파일명을 지정할 수 있다. 사용 방법은 TMMOPT, CLHOPT 와 동일하다.

5.3 주의 사항

DBMS 가 Multithread 를 지원해야 함 (현재 오라클이 지원)

오라클의 경우, 환경 파일 서버 그룹절의 OPENINFO 항목에 “Thread=true” 를 추가해야 함 ex) OPENINFO=”Oracle_XA+Acc=P/scott/tiger+SesTm=60+Thread=true”

Multi threaded TMS 생성 시, 반드시 libtms 대신 libtmsthr, libpthread 라이브러리를 링크해서 컴파일해 주어야 한다.

Page 31: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 30

6 EXTERN SVR 의 지원

6.1 개요

EXTERN SERVER 는 Tmax 환경파일에 등록된 서버의 기능을 티맥스 이외의 프로세스에서 처리하기 위한 기능으로 서버 프로세스의 TYPE 을 EXTSVR 이라고 지정한다.

6.2 환경 파일

*NODE

NODE 이름 [ EXTPORT = port number ],

[ EXTCLHPORT = clh port number ]

EXTPORT

TMM 의 Listen Port number

EXTCLHPORT

CLH 의 Listen Port number

지정하지 않을 경우 시스템에서 자동적으로 할당해 준다.

6.3 환경 파일 예제

*NODE

tmaxh3 ... EXTPORT = 9000, EXTCLHPORT = 9010

*SERVER

alinkjmapp SVGNAME = svg1, MIN = 1, MAX = 1, CPC = 10,

SVRTYPE=EXTSVR

Page 32: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

31

*SERVICE

JMAPPER SVRNAME = alinkjmapp, SVCTIME = 30

Page 33: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 32

7 SYSMASTER 지원 기능 추가

7.1 SYSMASTER 이벤트 핸들러 (Event Handler)

7.1.1 라이브러리 명

libsvrevt.a, libsvrevt.so

7.1.2 사용자 함수

int _tmax_event_handler(char *progname, int pid, int tid, char

*msg, int flags);

7.1.3 설명

_tmax_event_handler 함수는 SVRTYPE 이 EVT_SVR 인 경우, SLOG 발생 시 호출되는 콜백함수이다.

*progname : 이벤트를 발생시킨 프로그램 이름

*pid : process id

*tid : thread id (예비)

*msg : 이벤트 메시지

*flags: (예비용)

return 값은 현재 사용되지 않음 (예비용)

7.1.4 환경 변수 (NODE 절)

*NODE 절 : TMMOPT 에 –h 옵션을 통해 이벤트 핸들러 로그 레벨을 설정

Page 34: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

33

TMMOPT = “-h i | w | e | f” (default: e)

- i : fatal, error, warn, info

- w : fatal, error, warn

- e : fatal, error

- f : fatal

*SERVER 절 : SVRTYPE 을 EVT_SVR 로 설정, MIN/MAX 는 모두 1, 노드당 하나의 EVT_SVR, SVRTYPE=EVT_SVR 을 사용할 수 있다.

7.1.5 예제

<환경 파일>

*DOMAIN

tmax1 SHMKEY =@SHMEMKY@, MINCLH=1, MAXCLH=3,

TPORTNO=@TPORTNO@, BLOCKTIME=30

*NODE

@HOSTNAME@ TMAXDIR = "@TMAXDIR@",

APPDIR = "@TMAXDIR@/appbin",

PATHDIR = "@TMAXDIR@/path",

TLOGDIR = "@TMAXDIR@/log/tlog",

ULOGDIR = "@TMAXDIR@/log/ulog",

SLOGDIR = "@TMAXDIR@/log/slog",

TMMOPT = "-h i", SMSUPPORT = Y, SMTBLSIZE = 1000

*SVRGROUP

svg1 NODENAME = "@HOSTNAME@"

*SERVER

evtsvr SVGNAME = svg1, SVRTYPE = EVT_SVR

Page 35: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 34

<서버 프로그램>

#include <stdio.h>

#include <stdlib.h>

#include <usrinc/atmi.h>

#include <time.h>

int

tpsvrinit(int argc, char *argv[])

{

printf("[EVTHND] started\n");

return 1;

}

int

svrdone()

{

printf("[EVTHND stopped\n");

return 1;

}

int

_tmax_event_handler(char *program, int pid, int tid, char *msg, int

flags)

{

time_t t1;

struct tm *tm;

time(&t1);

tm = localtime(&t1);

printf("[EVTHND] %s.%d.%02d%02d%02d:%s\n", program, pid, tm-

>tm_hour, tm->tm_min, tm->tm_sec, msg);

return 0;

}

Page 36: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

35

<Makefile.evt>

# Server makefile

TARGET = $(COMP_TARGET)

APOBJS = $(TARGET).o

NSDLOBJ = $(TMAXDIR)/lib64/sdl.o

LIBS = -lsvrevt -lnodb

OBJS = $(APOBJS) $(SVCTOBJ)

SVCTOBJ = $(TARGET)_svctab.o

CFLAGS = -Ae +DA2.0W +DD64 +DS2.0 -O -I$(TMAXDIR)

APPDIR = $(TMAXDIR)/appbin

SVCTDIR = $(TMAXDIR)/svct

LIBDIR = $(TMAXDIR)/lib64

#

.SUFFIXES : .c

.c.o:

$(CC) $(CFLAGS) -c $<

#

# server compile

#

$(TARGET): $(OBJS)

$(CC) $(CFLAGS) -L$(LIBDIR) -o $(TARGET) $(OBJS) $(LIBS)

$(NSDLOBJ)

mv $(TARGET) $(APPDIR)/.

rm -f $(OBJS)

$(APOBJS): $(TARGET).c

$(CC) $(CFLAGS) -c $(TARGET).c

Page 37: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 36

$(SVCTOBJ):

cp -f $(SVCTDIR)/$(TARGET)_svctab.c .

touch ./$(TARGET)_svctab.c

$(CC) $(CFLAGS) -c ./$(TARGET)_svctab.c

#

clean:

-rm -f *.o core $(APPDIR)/$(TARGET)

7.2 Sysmaster Trace

7.2.1 GID 구조 (12byte)

GID0 (4bytes)

제품 내의 클라이언트 별 고유 번호 (웹투비의 경우 cli id) domain id, node id, hth #, slot id 등으로 제품에 접속한 클라이언트를 구별하기 위한 번호임

GID1 (4bytes)

부분으로 구성, 상위 3byte 는 seq #, 하위 1byte 는 제품 고유 ID

SEQNO (4bytes)

상위 2 byte 는 비동기 호출 시의 branch # 로 사용

하위 2 byte 는 모든 호출 시의 seq # 로 사용

7.2.2 환경 파일 추가

*NODE

node 이름 SMSUPPORT = Y | (N)

SMTBUFSIZE = num

SMSUPPORT = Y | N

Page 38: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

37

Sysmaster Trace 기능 지원 여부를 선택하는 옵션으로 Y 일 경우 Trace 기능을 지원하며, N 일 경우 지원하지 않는다.

SMTBLSIZE = num

CLH 별 SysMaster Trace 최대 저장 건수 (default : 50000)

7.2.3 Tmadmin 기능 추가 (smtrc)

사용법

$$ node0 (tmadm) : smtrc GID0 GID1

- GID0 : SysMaster 의 GID 상위 4byte 를 Hexa decimal 로 표기

- GID1 : SysMaster 의 GID 하위 4byte 를 Hexa decimal 로 표기

st –p –x 를 실행할 경우, 서비스가 수행 중이면 해당 GID 를 출력

사용예

$$1 tmaxh4 (tmadm):

CLH 0:

--------------------------------------------------------------

svr_name svgname spr_no status count avg svc

PID fail_cnt err_cnt min_time max_time

SysMaster_GID

--------------------------------------------------------------

evtsvr svg1 36 RDY 0 0.000 -1

17980 0 0 0.000 0.000

00000000-00000000-00000000

svr1 svg1 37 RUN 0 0.000 SDLTOUPPER

17981 0 0 0.000 0.000

00000000-00000101-00000000

svr2 svg1 38 RUN 0 0.000 SDLTOUPPER2

17982 0 0 0.000 0.000

00000000-00080101-00000000

svr3 svg1 39 RUN 0 0.000 SDLTOUPPER3

Page 39: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 38

17983 0 0 0.000 0.000

00000000-00100101-00000000

svr_sys svg1 40 RDY 3 0.000 -1

17984 0 0 0.000 0.000

00000000-00000000-00000000

----------------------------------------------------------------

TOTAL COUNT = 3

TOTAL SVCFAIL COUNT = 0

TOTAL ERROR COUNT = 0

TOTAL AVG = 0.000

TOTAL RUNNING COUNT = 3

$$1 tmaxh4 (tmadm): smtrc 0 0101

CLH 0:

-------------------------------------------------------------

sysmaster_global_id status svc_name

-------------------------------------------------------------

00000000:00000101:00000000 SVC_RUNNING SDLTOUPPER2

7.2.4 Tmadmin API 추가 (서버 라이브러리)

#include <usrinc/tmadmin.h>

/* TMADM_SMTRC return structures */

struct tmadm_smtrc_body {

int seqno;

int clhno;

char status[TMAX_NAME_SIZE];

char name[TMAX_NAME_SIZE];

};

struct tmadm_smtrc {

/* fixed header */

struct tmadm_header header;

Page 40: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

39

/* fixed body */

struct tmadm_smtrc_body trc[1];

};

typedef struct {

int gid1;

int gid2;

int seqno;

} tmax_smgid_t;

int tmadmin(int cmd, void *arg, int opt, long flags);

TMADM_SMTRC cmd 추가

결과를 이어서 가져오기 지원하지 않음 (offset 미지원)

결과를 가져오기 위한 공간을 충분히 할당한 후 호출해야 함

- opt, flags 는 미사용

7.3 tmgetsmgid

7.3.1 이름

tmgetsmgid : 자기 자신의 GID 를 얻어오기 위한 함수 (서버)

7.3.2 사용 방법

#include <usrinc/tmadmin.h>

int tmgetsmgid(tmax_smgid_t *gid);

7.3.3 설명

tmgetsmgid 함수는 현재 자신의 gid 를 얻어오기 위한 함수이다.

Page 41: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 40

7.3.4 사용 예제

<svr02.c>

#include <stdio.h>

#include <stdlib.h>

#include <usrinc/atmi.h>

#include <usrinc/tmadmin.h>

#include "../sdl/demo.s"

GETGID(TPSVCINFO *msg)

{

tmax_smgid_t smgid;

int ret;

char *buf;

buf = (char *)tpalloc("STRING", NULL, 0);

if(buf == NULL)

tpreturn(TPFAIL, -1, NULL, 0, 0);

ret = tmgetsmgid(&smgid);

memcpy(buf, (char *)&smgid.gid1, 4);

memcpy(buf+4, (char *)&smgid.gid2, 4);

memcpy(buf+8, smgid.seqno, 4);

tpreturn(TPSUCCESS, 0, (char *)buf, strlen(buf), 0);

}

SMTRACE(TPSVCINFO *msg)

{

struct tmadm_smtrc *smtrc;

int max = 10, size;

int gid1, gid2, n, i;

struct smtrace *ptr;

char *buf;

buf = (char *)tpalloc("CARRAY", NULL, 0);

Page 42: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

41

if(buf == NULL)

tpreturn(TPFAIL, -1, NULL, 0, 0);

ptr = (struct smtrace *)msg->data;

gid1 = ptr->gid1;

gid2 = ptr->gid2;

/*

printf("SMTRACE start: %x %x\n", gid1, gid2);

*/

size = sizeof(struct tmadm_smtrc) + (max-1) * sizeof(struct

tmadm_smtrc_body

);

smtrc = (struct tmadm_smtrc *)malloc(size);

if(smtrc == NULL)

{

printf("smtrc is null\n");

tpreturn(TPFAIL, -1, NULL, 0, 0);

}

memset(smtrc, 0x00, size);

smtrc->header.version = _TMADMIN_VERSION;

smtrc->header.size = size;

smtrc->header.reserve_int[0] = gid1;

smtrc->header.reserve_int[1] = gid2;

n = tmadmin(TMADM_SMTRC, smtrc, TPNOFLAGS, TPNOFLAGS);

if(n < 0)

{

free(smtrc);

tpreturn(TPFAIL, -1, NULL, 0, 0);

}

/*

Page 43: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 42

printf("smtrc->header.num_entry = %d\n", smtrc-

>header.num_entry);

*/

for(i=0; i<smtrc->header.num_entry; i++)

{

sprintf(buf, "SMTRACE[%d] : gid[%x-%x-%x] seqno[%x]

clhno[%x] status

[%s] name[%s]\n",

i, gid1, gid2, ptr->seqno,

smtrc->trc[i].seqno,

smtrc->trc[i].clhno,

smtrc->trc[i].status,

smtrc->trc[i].name);

}

free(smtrc);

tpreturn(TPSUCCESS, 0, (char *)buf, strlen(buf), 0);

}

<svr01.c>

#include <stdio.h>

#include <usrinc/atmi.h>

#include <usrinc/tmadmin.h>

#include "../sdl/demo_sdl.h"

SDLTOUPPER(TPSVCINFO *msg)

{

int i, ret, cd;

struct smtrace *stdata;

tmax_smgid_t smgid;

char *buf;

long rcvlen;

Page 44: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

43

buf = (char *)tpalloc("CARRAY", NULL, 0);

ret = tmgetsmgid(&smgid);

if(ret < 0)

tpreturn(TPFAIL, -1, NULL, 0, 0);

stdata = (struct smtrace *)msg->data;

stdata->gid1 = smgid.gid1;

stdata->gid2 = smgid.gid2;

stdata->seqno = smgid.seqno;

cd = tpacall("SMTRACE", msg->data, 0, 0);

ret = tpgetrply(&cd, (char **)&buf, (long *)&rcvlen, 0);

if(ret < 0)

tpreturn(TPFAIL, -1, NULL, 0, 0);

sleep(20);

tpreturn(TPSUCCESS,0,(char *)buf, strlen(buf),0);

}

< client.c>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <usrinc/atmi.h>

#include <usrinc/tmadmin.h>

#include "../sdl/demo.s"

main(int argc, char *argv[])

{

struct smtrace *sndbuf, *rcvbuf;

long rcvlen, sndlen;

int ret;

if (tpstart((TPSTART_T *)NULL) == -1){

printf("tpstart failed\n");

Page 45: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 44

exit(1);

}

...

if (tpcall("SDLTOUPPER", (char *)sndbuf, 0, (char

**)&rcvbuf, &rcvlen, 0) ==

-1){

printf("Can't send request to service SDLTOUPPER

=>\n");

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

exit(1);

}

printf("rcvbuf = %s\n", rcvbuf);

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

}

Page 46: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

45

8 tmadmin 의 명령어 추가

8.1 ds –A 옵션 추가 8.1.1 ds (Disconnect Session)

현재 접속되어 있으나, 아무 일도 수행하지 않는 클라이언트를 강제로 연결 해제하는 명령어

8.1.1.1 추가된 옵션

[ -A ] : ds 는 클라이언트를 강제로 연결 해제하는 명령어로 –h 옵션으로 특정 clh 에 접속되어 있는 클라이언트를 해제할 수 있다. 하지만 –h 옵션을 주지 않는 경우에 디폴트로 0 번 clh 에 접속되어 있는 클라이언트에 대한 연결을 해제하게 된다. 이에 모든 clh 에 접속되어 있는 클라이언트를 해제하기 위한 옵션이 추가 되었다. –A 옵션을 사용하면 모든 clh 에 접속되어 있는 클라이언트에 대한 연결이 해제된다.

8.1.1.2 사용 예제

tmaxh2:/data1/starbj81/WORK/client> tmadmin -m

--- Welcome to Tmax Admin (Type "quit" to leave) ---

$$1 tmaxh2 (tmadm): ci

CLH 0:

----------------------------------------------------------------

cli_id clid status count lastin_time ipaddr usrname

----------------------------------------------------------------

0 0x00000000 RDY 0 7 192.168.1.48

1 0x00000001 RDY 0 7 192.168.1.48

CLH 1:

----------------------------------------------------------------

Page 47: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 46

cli_id clid status count lastin_time ipaddr usrname

----------------------------------------------------------------

0 0x00004000 RDY 0 7 192.168.1.48

1 0x00004001 RDY 0 6 192.168.1.48

CLH 2:

----------------------------------------------------------------

cli_id clid status count lastin_time ipaddr usrname

----------------------------------------------------------------

0 0x00008000 RDY 0 7 192.168.1.48

1 0x00008001 RDY 0 6 192.168.1.48

----------------------------------------------------------------

Total Connected Clients = 6

----------------------------------------------------------------

$$2 tmaxh2 (tmadm): ds -A

$$3 tmaxh2 (tmadm): ci

no client login

$$4 tmaxh2 (tmadm):

8.2 clhsinfo, tmmsinfo 명령어 추가

멀티 노드 환경에서는 서로 다른 노드 간의 연결이 반드시 이루어져야 한다. 하지만 방화벽이나 장비 노후로 인해 네트웍이 불안정한 경우에는 노드 간의 연결이 끊어져 정상적인 서비스가 이루어질 수 없는 경우가 있다. 따라서 이와 같은 문제를 확인할 수 있는 명령어가 추가되었다.

8.2.1 clhsinfo

clhsinfo 명령어는 멀티 노드 환경에서 각각의 clh 간 연결 상태 정보를 확인할 수 있다.

Ex) minclh =1, maxclh=2 인 경우

tmaxh4@starbj81:/EMC01/starbj81/tmax/config>tmadmin

Page 48: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

47

TMADMIN for rnode (tmaxh2): starting to connect to RAC

--- Welcome to Tmax Admin (Type "quit" to leave) ---

$$1 tmaxh4 (tmadm): clhsinfo

CLH 0:

---------------------------------------

nodename clhno cpc status

---------------------------------------

tmaxh2 0 2 RDY

tmaxh2 1 0 NRDY

---------------------------------------

CLH 1 is not available

Msg from rnode(tmaxh2):

CLH 0:

---------------------------------------

nodename clhno cpc status

---------------------------------------

tmaxh4 0 2 RDY

tmaxh4 1 0 NRDY

---------------------------------------

CLH 1 is not available

8.2.2 tmmsinfo

tmmsinfo 명령어는 멀티 노드 환경에서 tmm 간 연결 상태 정보를 확인할 수 있다.

tmaxh4@starbj81:/EMC01/starbj81/tmax/config>tmadmin

TMADMIN for rnode (tmaxh2): starting to connect to RAC

--- Welcome to Tmax Admin (Type "quit" to leave) ---

$$1 tmaxh4 (tmadm): tmmsinfo

------------------------------------------

no nodename livectime status

Page 49: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 48

------------------------------------------

1 tmaxh2 13:53:53 RDY

Msg from rnode(tmaxh2):

------------------------------------------

no nodename livectime status

------------------------------------------

0 tmaxh4 13:53:08 RDY

8.3 chlog 명령어 추가 (동적 로그 레벨 변경)

8.3.1 설명

Tmax 4.0 버전에서는 특정 에러 상황에 보다 신속하게 대응하기 위하여 tmadmin 의 chlog 명령어를 이용하여 run-time 에 log level 을 dynamic 하게 변경할 수 있도록 기능이 추가되었다.

로그 레벨 변경 기능을 사용하여 로그를 확인하기 위해서는 반드시 해당 모듈을 디버그 모드로 사용하여야 한다.

사용 방법은 아래와 같다.

옵션 내용

-t TMM 의 로그 레벨을 설정한다.

-c CLH 의 로그 레벨을 설정한다.

-v [서버 이름] 지정된 서버에 대한 로그 레벨을 설정한다.

-g [서버 그룹 이름] 지정된 서버 그룹에 대한 로그 레벨을

설정한다.

-m TMS 에 대한 로그 레벨을 설정한다.

-l [로그 레벨] 위 대상에 대한 실제 로그 레벨을 설정한다.

Page 50: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

49

설정 대상 – COMPACT, BASIC, DETAIL, DEBUG1, DEBUG2, DEBUG3, DEBUG4 중

하나를 선택하여 설정한다. 오른쪽으로

설정할수록 더 자세한 로그 확인이 가능

8.3.2 변경 확인

tmadmin 의 cfg 명령어를 통하여 동적 로그 레벨이 실제로 변경되었는지 확인할 수 있다.

8.3.3 예제

<TMM 의 동적 로그 레벨 변경>

tmaxh2:/data1/starbj81/tmax/config> tmadmin -l -m

--- Welcome to Tmax Admin (Type "quit" to leave) ---

$$1 tmaxh2 (tmadm): chlog -t -l DEBUG4

log level is updated

$3 tmaxh2 (tmadm): cfg -n

node_name = tmaxh2, hostname = tmaxh2, node_no = 1

...

tmmloglvl = DEBUG4,

...

<clh 의 동적 로그 레벨 변경>

tmaxh2:/data1/starbj81/tmax/config> tmadmin -m -l

--- Welcome to Tmax Admin (Type "quit" to leave) ---

$$1 tmaxh2 (tmadm): chlog -c -l COMPACT

log level is updated

$$2 tmaxh2 (tmadm): cfg -n

node_name = tmaxh2, hostname = tmaxh2, node_no = 1

tmmloglvl = DEBUG4,

clhloglvl = COMPACT,

...

Page 51: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 50

<tms 의 동적 로그 레벨 변경>

$$3 tmaxh4 (tmadm): chlog -m -g svg32306X -l debug3

log level is updated

$$4 tmaxh4 (tmadm): cfg –g

svg_name = svg32306X, svg_no = d

tmsloglvl = DEBUG3,

...

<특정 서버그룹의 동적 로그 레벨 변경>

$$4 tmaxh2 (tmadm): chlog -g svg3 -l DETAIL

log level is updated

$$5 tmaxh2 (tmadm): cfg -g

svg_name = svg3, svg_no = 10002

loglvl = DETAIL

...

<특정 서버의 동적 로그 레벨 변경>

$$11 tmaxh2 (tmadm): chlog -v svr22_3 -l BASIC

log level is updated

$$13 tmaxh2 (tmadm): cfg -v

svr_name = svr22_3, svr_no = 10004

loglvl = BASIC

...

Page 52: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

51

8.4 st –t 에 –x 옵션 추가

8.4.1 TMS 에 대한 보다 자세한 정보 제공

Tmadmin 에서 st –t 옵션은 TMS 의 상태 정보를 조회하는 옵션으로 –x 옵션이 추가됨으로써 XID 와 xa status 와 관련된 정보를 추가적으로 조회할 수 있다

$$1 tmaxh4 (tmadm): st –t -x

CLH 0:

--------------------------------------------------------------

tms_name svgname spr_no(tid) status count avg cqcount

XID xastate

---------------------------------------------------------------

tms_ora xa1 0 RUN 0 0.00 0

000:000:13505 PREPARE

---------------------------------------------------------------

TMS 가 Multi threaded TMS 일 경우에는 각 Thread 상태 조회가 가능하다.

$$1 tmaxh3 (tmadm): st -t -x

CLH 0:

----------------------------------------------------------------

tms_name svgname spr_no(tid) status count avg cqcount

XID xastate

----------------------------------------------------------------

tms_ora_mt svgora1 0 RUN 0 0.00 0

000:000:13505 commit

tms_ora_mt svgora1 0( 1) RDY 0% 0.00 ( 0)

000:000:00000 -

tms_ora_mt svgora1 0( 2) RDY 0% 0.00 ( 0)

000:000:00000 -

----------------------------------------------------------------

tms_ora_mt svgora1 1 RDY 0 0.00 ( 0)

000:000:00000 -

tms_ora_mt svgora1 1( 1) RDY 0% 0.00 ( 0)

000:000:00000 -

Page 53: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 52

tms_ora_mt svgora1 1( 2) RDY 0% 0.00 ( 0)

000:000:00000 -

----------------------------------------------------------------

tms_ora_mt svgora2 10 RDY 0 0.00 0

000:000:00000 -

tms_ora_mt svgora2 10( 1) RDY 0% 0.00 ( 0)

000:000:00000 -

tms_ora_mt svgora2 10( 2) RDY 0% 0.00 ( 0)

000:000:00000 -

----------------------------------------------------------------

tms_ora svgora3 20 RDY 0 0.00 0

000:000:00000 -

----------------------------------------------------------------

tms_ora svgora3 21 RDY 0 0.00 ( 0)

000:000:00000 -

----------------------------------------------------------------

8.5 smtrc 명령어 추가

8.5.1 사용법

$$ node0 (tmadm) : smtrc GID0 GID1

- GID0 : SysMaster 의 GID 상위 4byte 를 Hexa decimal 로 표기

- GID1 : SysMaster 의 GID 하위 4byte 를 Hexa decimal 로 표기

자세한 내용은 위의 5.1.2.3 항목 참조

8.6 chtrc 의 사용 방법 변경 8.6.1 chtrc

chtrc 는 시스템 운영 중에 동적으로 TMAXTRACE 설정을 변경하고자 하는 경우에 tmadmin tool 의 명령어로써 사용할 수 있는 기능이며, 이 기능은 3.14 버전에서 추가되었다.

Page 54: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

53

Tmax 3.14 버전에서는 아래와 같은 방법으로 특정 노드에 대한 TMAXTRACE 스펙을 변경할 수 있었다.

$$1 tmaxh4 (tmadm) : chtrc –n $HOSTNAME –s newspec

하지만 Tmax 4.0 에서는 –n 옵션이 제거되었으며, 멀티 노드 환경에서 -n 옵션이 지정되어 있지 않으면 모든 노드에 적용이 된다.

멀티 노드 환경에서 특정 노드에만 새로운 TRACE 스펙을 적용하고자 할 경우에는 아래와 같은 방법으로 사용하면 된다.

$$1 tmaxh3 (tmadm): nodeset $HOSTNAME

node is set to $HOSTNAME

$$2 tmaxh3 (tmadm): chtrc –s newspec

Page 55: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 54

9 Local recursive call

9.1 개요

서버에서 tpcall() 을 할 경우, 같은 서버에 존재하는 서비스일 경우에도 내부에서 recursive 하게 호출할 수 있도록 기능이 추가되었다.

이는 서버에서 multicontext 기법을 통해 tpcall() 에 한해서 local recursive call 이 가능하도록 한 것으로, 무한 루프를 방지하기 위해서 최대 depth 는 8 로 제한한다.

9.2 주의 사항

Local recursive call 을 사용하기 위해서는, 서버 프로그램 컴파일 시 반드시 CFLAGS 에 –D_MCONTEXT 를 추가해 주어야 하며, libsvr.so 대신 libsvrmc.so 서버 라이브러리를 이용해 컴파일 해 주어야 한다.

9.3 예제 <서버 프로그램>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <usrinc/atmi.h>

SVC15004_1(TPSVCINFO *msg)

{

int i;

char *rcvbuf;

long rcvlen;

Page 56: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

55

if ((rcvbuf = (char *)tpalloc("STRING", NULL, 0)) == NULL)

printf("rcvbuf tpalloc fail[%s]\n",tpstrerror(tperrno));

if (tpcall("SVC15004_2", msg->data, 0, &rcvbuf, &rcvlen, 0) ==

-1)

{

printf("tpcall fail [%s]\n", tpstrerror(tperrno));

tpfree((char *)rcvbuf);

tpreturn(TPFAIL, 0, 0, 0, 0);

}

strcat(rcvbuf, "_Success");

tpreturn(TPSUCCESS,0,(char *)rcvbuf, 0,0);

}

SVC15004_2(TPSVCINFO *msg)

{

int i;

char *rcvbuf;

long rcvlen;

if ((rcvbuf = (char *)tpalloc("STRING", NULL, 0)) == NULL)

printf("rcvbuf tpalloc fail \n");

}

if (tpcall("SVC15004_3", msg->data, 0, &rcvbuf, &rcvlen, 0) ==

-1)

{

printf("tpcall fail [%s]\n", tpstrerror(tperrno));

tpfree((char *)rcvbuf);

tpreturn(TPFAIL, 0, 0, 0, 0);

}

strcat(rcvbuf, "_Success");

tpreturn(TPSUCCESS,0,(char *)rcvbuf, 0,0);

}

SVC15004_3(TPSVCINFO *msg)

Page 57: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 56

{

int i;

char *rcvbuf;

long rcvlen;

if ((rcvbuf = (char *)tpalloc("STRING", NULL, 0)) == NULL)

printf("rcvbuf tpalloc fail \n");

if (tpcall("SVC15004_4", msg->data, 0, &rcvbuf, &rcvlen, 0) ==

-1)

{

printf("tpcall fail [%s]\n", tpstrerror(tperrno));

tpfree((char *)rcvbuf);

tpreturn(TPFAIL, 0, 0, 0, 0);

}

strcat(rcvbuf, "_Success");

tpreturn(TPSUCCESS,0,(char *)rcvbuf, 0,0);

}

<Makefile.c.mc>

# Server makefile

TARGET = $(COMP_TARGET)

APOBJS = $(TARGET).o

NSDLOBJ = $(TMAXDIR)/lib64/sdl.o

LIBS = -lsvrmc -lnodb

OBJS = $(APOBJS) $(SVCTOBJ)

SVCTOBJ = $(TARGET)_svctab.o

CFLAGS = -O -Ae -w +DSblended +DD64 -D_HP -I$(TMAXDIR) -D_MCONTEXT

APPDIR = $(TMAXDIR)/appbin

Page 58: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

57

SVCTDIR = $(TMAXDIR)/svct

LIBDIR = $(TMAXDIR)/lib64

#

.SUFFIXES : .c

.c.o:

$(CC) $(CFLAGS) -c $<

#

# server compile

#

$(TARGET): $(OBJS)

$(CC) $(CFLAGS) -L$(LIBDIR) -o $(TARGET) $(OBJS) $(LIBS)

$(NSDLOBJ)

mv $(TARGET) $(APPDIR)/.

rm -f $(OBJS)

$(APOBJS): $(TARGET).c

$(CC) $(CFLAGS) -c $(TARGET).c

$(SVCTOBJ):

cp -f $(SVCTDIR)/$(TARGET)_svctab.c .

touch ./$(TARGET)_svctab.c

$(CC) $(CFLAGS) -c ./$(TARGET)_svctab.c

#

clean:

-rm -f *.o core $(APPDIR)/$(TARGET)

Page 59: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 58

10 TIP 에 기능 추가

10.1 개요

TIP (Tmax Information Provider) 이란 TIPSVC 를 처리하기 위하여 Tmax 에서 제공하는 기능 프로세스로서 TIP 을 사용하여 시스템 환경 정보의 확인, 시스템 통계 정보의 확인, 시스템 운용 관리의 기능을 수행하며 3.14.0 버전에서 처음으로 추가된 기능이다.

Tmax 4.0 에서는 위의 세 가지 기능에 대하여 몇 가지 추가적인 항목이 추가되었다.

Tmax 4.0 에서 추가된 항목에 대해서 설명한다.

10.2 TIP 구조

10.2.1 조작

GET 과 SET 이 있으며 자세한 내용은 3.14.0 매뉴얼을 참조한다.

10.2.2 세그먼트 (TIP_SEGMENT)

어떤 기능을 수행할 지 결정하기 위하여 사용하며, CONFIGURATION, STATISTICS, ADMINISTRATION 이 있으며 자세한 내용은 3.14.0 매뉴얼을 참조한다.

10.2.3 절 (TIP_SECTION)

어떤 항목에 대하여 처리를 할 것인지 세부 항목을 결정하는 기능으로, 자세한 내용은 3.14.0 매뉴얼을 참조한다.

Page 60: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

59

10.2.4 명령어 (TIP_CMD)

TIP_SECTION 이 ADMINISTRATION 일 경우에만 사용되며 자세한 내용은 3.14.0 매뉴얼을 참조한다.

10.3 추가된 항목

TIPSVC 를 호출하였을 때, 리턴되어 받아오는 결과 값 중 아래의 항목들이 추가되었다.

10.3.1 Configuration segment

TIP 서비스를 호출할 경우, 필드 버퍼에 아래를 설정하여 TIPSVC 를 호출한다.

TIP_OPERATION (string) : GET 으로 설정

TIP_SEGMENT (string) : CONFIGURATION 으로 설정

TIP_SECTION (string) : “DOMAIN” | “NODE” | “SVRGROUP” | “SERVER”

그 결과로 받아오는 값들 (4.0 에서 추가된 항목만 제시) 은 아래와 같다.

10.3.1.1 Domain section

TIP_CRYPT (string) : 클라이언트와 CLH 사이의 송수신 데이터 암호화 여부로 YES 또는 NO 가 설정된다.

TIP_DOMAIN_TMMLOGLVL (string) : 도메인 절의 TMMLOGLVL 이 설정됨 로그 레벨은 항상 (DEFAULT, COMPACT, BASIC, DETAIL. DEBUG1, DEBUG2, DEBUG3, DEBUG4) 중 한 가지로 설정됨

TIP_DOMAIN_CLHLOGLVL (string) : 도메인 절의 CLHLOGLVL 이 설정됨

TIP_DOMAIN_TMSLOGLVL (string) : 도메인 절의 TMSLOGLVL 이 설정됨

Page 61: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 60

TIP_DOMAIN_LOGLVL (string) : 도메인 절의 server LOGLVL 이 설정됨

TIP_DOMAIN_MAXTHREAD (int) : 도메인 절의 MAXTHREAD 값이 설정됨

10.3.1.2 Node section

TIP_NODE_TMMLOGLVL (string) : NODE 절의 TMMLOGLVL 이 설정됨

TIP_NODE_CLHLOGLVL (string) : NODE 절의 CLHLOGLVL

TIP_NODE_TMS_LOGLVL 이 설정됨 (string) : NODE 절의 TMSLOGLVL 이 설정됨

TIP_NODE_LOGLVL (string) : server LOGLVL 이 설정됨

TIP_NODE_MAXTHREAD (int) : MAXTHREAD 값이 설정됨

TIP_EXTPORT (int) : export 값이 설정됨

TIP_EXTCLHPORT (int) : MAX_NUM_CLH 값 만큼의 extclhport 값이 설정됨

10.3.1.3 SVRGROUP section

TIP_SVG_TMSTYPE (string) : STD_MT 또는 STD 로 설정됨

TIP_SVG_TMSTHREADS (int) : tms 의 threads 수가 설정됨

TIP_SVG_TMSPORT (string) : tmsopt 가 설정됨

TIP_SVG_TMSLOGLVL (string) : TMSLOGLVL 이 설정됨

TIP_SVG_LOGLVL (string) : server LOGLVL 이 설정됨

10.3.1.4 SERVER section

TIP_SVR_LOGLVL (string) : server LOGLVL 이 설정됨

Page 62: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

61

10.3.1.5 Configuration 조회 예제

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

#include <usrinc/atmi.h>

#include <usrinc/fbuf.h>

#include <usrinc/tip.h>

#define SEC_DOMAIN 1

#define SEC_NODE 2

#define SEC_SVGROUP 3

#define SEC_SERVER 4

#define SEC_SERVICE 5

#define SEC_ROUTING 6

#define SEC_RQ 7

#define SEC_GATEWAY 8

main(int argc, char *argv[])

{

FBUF *sndbuf, *rcvbuf;

TPSTART_T *tpinfo;

int i, n, sect;

long rcvlen;

char nodename[NAMELEN];

int pid, count = 0;

if (argc != 3) {

printf("Usage: %s section nodename\n", argv[0]);

printf("section:\n");

printf("\t1: domain\n");

printf("\t2: node\n");

printf("\t3: svrgroup\n");

printf("\t4: server\n");

printf("\t5: service\n");

printf("\t6: routing\n");

Page 63: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 62

printf("\t7: rq\n");

printf("\t8: gateway\n");

exit(1);

}

if (!isdigit(argv[3][0])) {

printf("fork count must be a digit\n");

exit(1);

}

count = atoi(argv[3]);

sect = atoi(argv[1]);

if (sect < SEC_DOMAIN || sect > SEC_GATEWAY) {

printf("out of section [%d - %d]\n", SEC_DOMAIN,

SEC_GATEWAY);

exit(1);

}

strncpy(nodename, argv[2], sizeof(nodename) - 1);

n = tmaxreadenv("tmax.env", "TMAX");

if (n < 0) {

fprintf(stderr, "can't read env\n");

exit(1);

}

tpinfo = (TPSTART_T *)tpalloc("TPSTART", NULL, 0);

if (tpinfo == NULL) {

printf("tpalloc fail tperrno = %d\n", tperrno);

exit(1);

}

strcpy(tpinfo->usrname, ".tpadmin");

if (tpstart((TPSTART_T *)tpinfo) == -1){

printf("tpstart fail [%s]\n", tpstrerror(tperrno));

exit(1);

}

Page 64: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

63

if ((sndbuf = (FBUF *)tpalloc("FIELD", NULL, 0)) == NULL) {

printf("tpalloc failed! errno = %d\n", tperrno);

tpend();

exit(1);

}

if ((rcvbuf = (FBUF *)tpalloc("FIELD", NULL, 0)) == NULL) {

printf("tpalloc failed! errno = %d\n", tperrno);

tpend();

exit(1);

}

n = fbput(sndbuf, TIP_OPERATION, "GET", 0);

n = fbput(sndbuf, TIP_SEGMENT, "CONFIGURATION", 0);

switch (sect) {

case SEC_DOMAIN:

n = fbput(sndbuf, TIP_SECTION, "DOMAIN", 0);

break;

case SEC_NODE:

n = fbput(sndbuf, TIP_SECTION, "NODE", 0);

break;

case SEC_SVGROUP:

n = fbput(sndbuf, TIP_SECTION, "SVGROUP", 0);

break;

case SEC_SERVER:

n = fbput(sndbuf, TIP_SECTION, "SERVER", 0);

break;

case SEC_SERVICE:

n = fbput(sndbuf, TIP_SECTION, "SERVICE", 0);

break;

case SEC_ROUTING:

n = fbput(sndbuf, TIP_SECTION, "ROUTING", 0);

break;

case SEC_RQ:

n = fbput(sndbuf, TIP_SECTION, "RQ", 0);

break;

case SEC_GATEWAY:

Page 65: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 64

n = fbput(sndbuf, TIP_SECTION, "GATEWAY", 0);

break;

}

n = fbput(sndbuf, TIP_NODENAME, nodename, 0);

n = tpcall("TIPSVC", (char *)sndbuf, 0, (char **)&rcvbuf,

&rcvlen, TPNOFLAGS);

if (n < 0) {

printf("tpcall fail [%s]\n", tpstrerror(tperrno));

fbprint(rcvbuf);

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

exit(1);

}

#if 1

fbprint(rcvbuf);

#endif

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

}

<결과 (Domain Conf) >

$ client 1 tmaxh4

fkey = 217326601, fname = TIP_ERROR, type = int, value = 0

...

fkey = 485762214, fname = TIP_CRYPT, type = string, value = NO

fkey = 485762215, fname = TIP_DOMAIN_TMMLOGLVL, type = string,

value = DEBUG1

fkey = 485762216, fname = TIP_DOMAIN_CLHLOGLVL, type = string,

value = DEBUG2

Page 66: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

65

fkey = 485762217, fname = TIP_DOMAIN_TMSLOGLVL, type = string,

value = DEBUG3

fkey = 485762218, fname = TIP_DOMAIN_LOGLVL, type = string,

value = DEBUG4

fkey = 217326763, fname = TIP_DOMAIN_MAXTHREAD, type = int,

value = 128

10.3.2 STATISTICS segment

TIP 서비스를 호출할 경우, 필드 버퍼에 아래를 설정하여 TIPSVC 를 호출한다.

TIP_OPERATION (string) : “GET” 으로 설정

TIP_SEGMENT (string) : “STATISTICS” 으로 설정

TIP_SECTION (string) : “TMS” | “TMGW” | “NTMGW” | “TMMS” | “CLHS” |

그 결과로 받아오는 값들 (4.0 에서 추가된 항목만 제시) 은 아래와 같다.

10.3.2.1 TMS section

TIP_ERROR (int) : error 값이 설정됨 - 0 : 에러가 없을 경우 - TIPEOS : 메모리 할당에 실패한 경우

TIP_TMS_NAME (string) : tms 이름이 설정됨

TIP_SVG_NAME (string) : tms 가 속한 svg 이름이 설정됨

TIP_SPRI (int ) : SPR index 가 설정됨

TIP_STATUS (string) : tms 의 현재 status 가 설정됨

TIP_COUNT (int) : count 가 설정됨

TIP_AVERAGE (float) : 평균 처리 시간이 설정됨

TIP_CQCOUNT (int) : 현재 CQCOUNT 가 설정됨

Page 67: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 66

TIP_TI_THRI (int) : thr index 가 설정됨 – tms 가 thread 인 경우만

TIP_TI_AVG (float) : 평균 처리 시간이 설정됨 – tms 가 thread 인 경우만

TIP_TI_XID (string) : xid 가 설정됨

TIP_TI_XA_STATUS (string) : xa status 가 설정됨 ( - | PREPARE | ROLLBACK | COMMIT | UNKNOWN 이 설정될 수 있음)

10.3.2.2 TMGW section

TIP_ERROR (int) : error 값이 설정됨 - 0 : 에러가 없을 경우 - TIPEOS : 메모리 할당에 실패한 경우

TIP_GW_NO (int) : Gateway Number 가 설정됨

TIP_GW_NAME (string) : Gateway 이름이 설정됨

TIP_GW_CTYPE (string) : Gateway channel type 이 설정됨 (OUTCH | INCH | 중 하나가 설정)

TIP_GW_CTYPE2 (string) : Gateway channel type 이 설정됨 (PRIM | BACK | - 중 하나가 설정)

TIP_GW_HOSTN (string) : Gateway HostName 이 설정됨

TIP_GW_IPADDR (string) : Gateway IP_address 가 설정됨

TIP_GW_PORT (int) : Gateway Port No 가 설정됨

TIP_GW_STATUS (string) : Gateway status 가 설정됨

10.3.2.3 NTMGW section

TMGW 와 동일함

10.3.2.4 TMMS section

TIP_ERROR (int) : error 값이 설정됨 - 0 : 에러가 없을 경우

Page 68: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

67

- TIPEOS : 메모리 할당에 실패한 경우 - TIPENOENT : 노드의 개수가 0 인 경우

TIP_NO (int) : 노드 번호가 설정됨

TIP_NODENAME (string) : 노드 이름이 설정됨

TIP_LIVECTIME (string) : 조회 당시의 시간이 설정됨

TIP_STATUS (string) : status 가 설정됨

10.3.2.5 CLHS section

TIP_ERROR (int) : error 값이 설정됨 - 0 : 에러가 없을 경우 - TIPEOS : 메모리 할당에 실패한 경우 - TIPENOENT : 현재 떠 있는 CLH 의 갯수가 0 인 경우

TIP_NO (int) : 노드 번호가 설정됨

TIP_NODENAME (string) : 노드 이름이 설정됨

TIP_CLHNO (int) : clh 번호가 설정됨

TIP_CPC (int) : CPC 가 설정됨

TIP_STATUS (string) : status 가 설정됨

10.3.2.6 STATISTIC 조회 예제

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <usrinc/atmi.h>

#include <usrinc/fbuf.h>

#include <usrinc/tip.h>

#define SEC_NODE 1

#define SEC_TPROC 2

#define SEC_SPR 3

#define SEC_SERVICE 4

Page 69: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 68

#define SEC_RQ 5

#define SEC_TMS 6

#define SEC_TMMS 7

#define SEC_CLHS 8

#define NODE_NAME_SIZE 32

main(int argc, char *argv[])

{

FBUF *sndbuf, *rcvbuf;

TPSTART_T *tpinfo;

int i, n, sect;

long rcvlen;

char nodename[NODE_NAME_SIZE];

int stat;

if (argc != 3) {

printf("Usage: %s section node\n", argv[0]);

printf("section:\n");

printf("\t1: node\n");

printf("\t2: tproc\n");

printf("\t3: spr\n");

printf("\t4: service\n");

printf("\t5: rq\n");

printf("\t6: tms\n");

printf("\t7: tmms\n");

printf("\t8: clhs\n");

exit(1);

}

sect = atoi(argv[1]);

if (sect < SEC_NODE || sect > SEC_CLHS) {

printf("out of section [%d - %d]\n",SEC_NODE, SEC_TMMS);

exit(1);

}

memset(nodename, 0x00, NODE_NAME_SIZE);

Page 70: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

69

strncpy(nodename, argv[2], NODE_NAME_SIZE - 1);

n = tmaxreadenv("tmax.env", "TMAX");

if (n < 0) {

fprintf(stderr, "can't read env\n");

exit(1);

}

tpinfo = (TPSTART_T *)tpalloc("TPSTART", NULL, 0);

if (tpinfo == NULL) {

printf("tpalloc fail tperrno = %d\n", tperrno);

exit(1);

}

strcpy(tpinfo->dompwd, "xamt123");

if (tpstart((TPSTART_T *)tpinfo) == -1){

printf("tpstart fail tperrno = %d\n", tperrno);

exit(1);

}

if ((sndbuf = (FBUF *)tpalloc("FIELD", NULL, 0)) == NULL) {

printf("tpalloc failed! errno = %d\n", tperrno);

tpend();

exit(1);

}

if ((rcvbuf = (FBUF *)tpalloc("FIELD", NULL, 0)) == NULL) {

printf("tpalloc failed! errno = %d\n", tperrno);

tpend();

exit(1);

}

n = fbput(sndbuf, TIP_OPERATION, "GET", 0);

n = fbput(sndbuf, TIP_SEGMENT, "STATISTICS", 0);

switch (sect) {

case SEC_NODE:

n = fbput(sndbuf, TIP_SECTION, "NODE", 0);

Page 71: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 70

break;

case SEC_TPROC:

n = fbput(sndbuf, TIP_SECTION, "TPROC", 0);

break;

case SEC_SPR:

n = fbput(sndbuf, TIP_SECTION, "SPR", 0);

break;

case SEC_SERVICE:

n = fbput(sndbuf, TIP_SECTION, "SERVICE", 0);

break;

case SEC_RQ:

n = fbput(sndbuf, TIP_SECTION, "RQ", 0);

break;

case SEC_TMS:

stat = 1;

n = fbput(sndbuf, TIP_SECTION, "TMS", 0);

n = fbput(sndbuf, TIP_EXTRA_OPTION, (char *)&stat, 0);

break;

case SEC_TMMS:

n = fbput(sndbuf, TIP_SECTION, "TMMS", 0);

break;

case SEC_CLHS:

n = fbput(sndbuf, TIP_SECTION, "CLHS", 0);

break;

}

n = fbput(sndbuf, TIP_NODENAME, nodename, 0);

n = tpcall("TIPSVC", (char *)sndbuf, 0, (char **)&rcvbuf,

&rcvlen, TPNOFLAGS);

if (n < 0) {

printf("tpcall fail [%s]\n", tpstrerror(tperrno));

fbprint(rcvbuf);

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

exit(1);

}

Page 72: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

71

fbprint(rcvbuf);

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

}

< 결과 (TMS STATISTICS) >

$ client 3000 1 2

fkey = 217326601, fname = TIP_ERROR, type = int, value = 0

fkey = 485762680, fname = TIP_TMS_NAME, type = string, value =

tms_ora2

fkey = 485762681, fname = TIP_SVG_NAME, type = string, value = xa1

fkey = 217327226, fname = TIP_SPRI, type = int, value = 0

fkey = 485762649, fname = TIP_STATUS, type = string, value = RUN

fkey = 217327197, fname = TIP_COUNT, type = int, value = 0

fkey = 351544938, fname = TIP_AVERAGE, type = float, value =

0.000000

fkey = 217327212, fname = TIP_CQCOUNT, type = int, value = 0

fkey = 217327227, fname = TIP_TI_THRI, type = int, value = 1

fkey = 351544956, fname = TIP_TI_AVG, type = float, value =

0.000000

fkey = 485762685, fname = TIP_TI_XID, type = string, value =

00000013664

fkey = 485762686, fname = TIP_TI_XA_STATUS, type = string, value =

COMMIT

10.3.3 ADMINISTRATION segment

10.3.3.1 CHLOG section

TIP 서비스를 호출할 경우, 필드 버퍼에 아래를 설정하여 TIPSVC 를 호출한다.

TIP_OPERATION (string) : “GET” 으로 설정

Page 73: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 72

TIP_SEGMENT (string) : “ADMINISTRATION” 으로 설정

TIP_SECTION (string) : “CHLOG”

TIP_MODULE (int) : 동적으로 로그를 변경하고 싶은 모듈을 설정한다. (TIP_TMM | TIP_CLH | TIP_TMS | TIP_SVR 중 하나를 선택한다)

TIP_FLAGS (int) : flags 를 설정한다. (TIP_VFLAG | TIP_GFLGA | TIP_NFLAG 중 하나를 선택한다.)

TIP_SVRNAME (string) : 해당 서버 이름을 설정한다. TIP_FLAGS 를 TIP_VFLAG 로 설정한 경우에만 설정한다.

TIP_SVGNAME (string) : 해당 서버 그룹 이름을 설정한다. TIP_FLAGS 를 TIP_GFLAG 로 설정한 경우에만 설정한다.

TIP_NODENAME (string) : 해당 노드 이름을 설정한다. TIP_FLAGS 를 TIP_NFLAG 로 설정한 경우에만 설정한다.

TIP_LOGLVL (string) : 변경하고자 하는 로그 레벨을 설정한다. (compact | basic | detail | debug1 | debug2 | debug3 | debug4 중 하나를 선택하여야 하며 반드시 소문자로 설정한다)

그 결과로 받아오는 값들은 아래와 같다.

TIP_ERROR (int) : error 값이 설정됨 TIPESVCFAIL : 해당 서비스를 제대로 처리하지 못한 경우 TIPEOS : 메모리 할당에 실패한 경우 TIPEBADFLD : TIP_MODULE 값을 설정하지 않은 경우

10.3.3.2 chlog 사용 예제

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

#include <usrinc/atmi.h>

#include <usrinc/fbuf.h>

Page 74: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

73

#include <usrinc/tmaxapi.h>

#include <usrinc/tip.h>

#include "../fdl/tip_fdl.h"

#define NFLAG 32

#define GFLAG 8

#define VFLAG 1024

int case_chlog(int, char *[], FBUF *);

#define NODE_NAME_SIZE 32

main(int argc, char *argv[])

{

FBUF *sndbuf, *rcvbuf;

TPSTART_T *tpinfo;

int i, ret, n, type, clid, count, flags = 0;

long rcvlen;

char svrname[TMAX_NAME_SIZE];

char svgname[TMAX_NAME_SIZE];

char nodename[NODE_NAME_SIZE];

int pid, forkcnt;

if (argc < 6) {

printf("Usage: %s svgname svrname nodename [chlogmodule]

[flags] [loglvl]\n", argv[0]);

printf("chlogmodule 1: TIP_TMM, 2: TIP_CLH, 4: TIP_TMS,

8: TIP_SVR\n");

printf("flags 1: NFLAGS, 2: GFLAGS, 3: VFLAGS\n");

printf("loglvl : 1: compact, 2: basic, 3: detail, 4:

debug1, 5: debug2, 6: debug3, 7: debug4\n");

exit(1);

}

n = tmaxreadenv("tmax.env", "TMAX");

if (n < 0) {

fprintf(stderr, "can't read env\n");

Page 75: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 74

exit(1);

}

tpinfo = (TPSTART_T *)tpalloc("TPSTART", NULL, 0);

if (tpinfo == NULL) {

printf("tpalloc fail tperrno = %d\n", tperrno);

exit(1);

}

strcpy(tpinfo->usrname, ".tpadmin");

strcpy(svgname, argv[1]);

strcpy(svrname, argv[2]);

strncpy(nodename, argv[3], NODE_NAME_SIZE - 1);

if (tpstart((TPSTART_T *)tpinfo) == -1){

printf("tpstart fail tperrno = %d\n", tperrno);

exit(1);

}

if ((sndbuf = (FBUF *)tpalloc("FIELD", NULL, 0)) == NULL) {

printf("tpalloc failed! errno = %d\n", tperrno);

tpend();

exit(1);

}

if ((rcvbuf = (FBUF *)tpalloc("FIELD", NULL, 0)) == NULL) {

printf("tpalloc failed! errno = %d\n", tperrno);

tpend();

exit(1);

}

ret = case_chlog(argc, argv, sndbuf);

n = fbput(sndbuf, TIP_OPERATION, "GET", 0);

n = fbput(sndbuf, TIP_SEGMENT, "ADMINISTRATION", 0);

n = fbput(sndbuf, TIP_CMD, "CHLOG", 0);

n = fbput(sndbuf, TIP_NODENAME, nodename, 0);

Page 76: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

75

n = fbput(sndbuf, TIP_SVGNAME, svgname , 0);

n = fbput(sndbuf, TIP_SVRNAME, svrname, 0);

n = tpcall("TIPSVC", (char *)sndbuf, 0, (char **)&rcvbuf,

&rcvlen, TPNOFLAGS);

if (n < 0) {

printf("tpcall failed! errno = %d[%s]\n", tperrno,

tpstrerror(tperrno));

fbprint(rcvbuf);

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

exit(1);

}

fbprint(rcvbuf);

tpfree((char *)sndbuf);

tpfree((char *)rcvbuf);

tpend();

}

int case_chlog(int argc2, char *argv2[], FBUF *sndbuf)

{

int chlogmdl, loglvl, flags, n=0;

char cloglvl[TMAX_NAME_SIZE];

const int true = 1, false = 0;

chlogmdl = atoi(argv2[4]);

if( (chlogmdl != 1) && (chlogmdl != 2) && (chlogmdl != 4) &&

(chlogmdl != 8)

{

printf("couldn't support such a chlogmdl\n");

exit(1);

}

flags = atoi(argv2[5]);

Page 77: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 76

if( (flags != NFLAG) && (flags != GFLAG) && (flags !=

VFLAG) )

{

printf("couldn't support such a flags\n");

exit(1);

}

loglvl = atoi(argv2[6]);

if( (loglvl < 1) || (loglvl > 7) )

{

printf("couldn't support such a loglvl\n");

exit(1);

}

switch (loglvl)

{

case 1 :

strcpy(cloglvl, "compact");

break;

case 2 :

strcpy(cloglvl, "basic");

break;

case 3 :

strcpy(cloglvl, "detail");

break;

case 4 :

strcpy(cloglvl, "debug1");

break;

case 5 :

strcpy(cloglvl, "debug2");

break;

case 6 :

strcpy(cloglvl, "debug3");

break;

case 7 :

strcpy(cloglvl, "debug4");

break;

Page 78: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

77

}

n = fbput(sndbuf, TIP_MODULE, (char *)&chlogmdl, 0);

n = fbput(sndbuf, TIP_FLAGS, (char *)&flags , 0);

n = fbput(sndbuf, TIP_LOGLVL, cloglvl , 0);

return 1;

}

<결과 (TIP_SVR, => DEBUG4) >

$ client xa1 svr23_stat_ins $HOSTNAME 8 1024 7

fkey = 217326601, fname = TIP_ERROR, type = int, value = 0

>>> tmadmin (cfg -v)

loglvl = DEBUG2

10.3.3.3 CHTRC section

TIP 서비스를 호출할 경우, 필드 버퍼에 아래를 설정하여 TIPSVC 를 호출한다

TIP_OPERATION (string) : “GET” 으로 설정해야 함

TIP_SEGMENT (string) : “ADMINISTRATION” 으로 설정해야 함

TIP_SECTION (string) : “CHTRC” 로 설정해야 함

TIP_FLAGS (int) : flags 를 설정한다. (TIP_PFLAG | TIP_VFLAG | TIP_GFLAG | TIP_NFLAG 중 하나를 지정한다.)

TIP_SPRI (int) : spri 를 설정한다. TIP_FLAGS 를 TIP_PFLAG 로 설정한 경우에만 설정한다.

TIP_SVRNAME (string) : 해당 서버 이름을 설정한다. TIP_FLAGS 를 TIP_VFLAG 로 설정한 경우에만 설정한다.

TIP_SVGNAME (string) : 해당 서버 그룹 이름을 설정한다. TIP_FLAGS 를 TIP_GFLAG 로 설정한 경우에만 설정한다.

Page 79: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 78

TIP_NODENAME (string) : 해당 노드 이름을 설정한다. TIP_FLAGS 를 TIP_NFLAG 로 설정한 경우에만 설정한다.

TIP_SPEC (string) : 변경하고자 하는 TMAX TRACE SPEC 을 설정한다.

그 결과로 받아오는 값들은 아래와 같다.

TIP_ERROR (int) : error 값이 설정됨 TIPESVCFAIL : 해당 서비스를 제대로 처리하지 못한 경우 TIPEOS : 메모리 할당에 실패한 경우 TIPEBADFLD : TIP_MODULE 값을 설정하지 않은 경우

Page 80: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

79

11 DB 정보 조회 API 추가

11.1 tmax_get_db_usrname

11.1.1 이름

tmax_get_db_usrname : 현재 Tmax 에 연결되어 있는 DB username 을 알아오는 함수 (서버)

11.1.2 사용 방법

#include <usrinc/tmaxapi.h>

int tmax_get_db_usrname (char *svgname, char *usrname, int type)

11.1.3 설명

현재 Tmax 가 접속하고 있는 Database 의 username 을 알아내는 함수이다.

svgname 에는 usrname 을 알기를 원하는 서버 그룹의 이름을 지정해 준다. 이 때 서버 그룹은 반드시 XA 서버 그룹이어야 한다. Type 은 현재 사용하고 있는 DBMS 를 구별하기 위하여 지정해 주며, ORACLE_TYPE | SYBASE_TYPE | INFORMIX_TYPE | DB2_TYPE 중 하나를 지정해 주어야 한다.

svgname 과 type 을 지정해서 위의 함수를 호출하게 되면 두 번째 인자인 usrname 에 결과 정보가 담겨져 리턴된다.

이 때 usrname 은 리턴되는 정보를 담을 수 있을 만한 충분한 크기로 할당되어 있어야 한다.

Page 81: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 80

11.1.4 반환값

tmax_get_db_usrname 이 성공적으로 종료되면, 1 을 리턴한다. 그렇지 않으면 –1 을 리턴하고 tperrno 에 에러 상황에 해당하는 값이 설정된다.

11.1.5 오류

TPEINVAL 인수가 유효하지 않다. 예를 들어 서버 그룹의 이름을 잘못 지정했거나, type 을 usrinc/tmaxapi.h 에 정의된 값 이외의 값으로 정의한 경우 또는 type 에 INFORMIX_TYPE 을 설정한 경우 이 에러가 발생할 수 있다.

TPEITYPE svgname 에 NONXA 서버 그룹을 지정했을 경우나 Tmax 환경 파일의 OPENINFO 정보가 잘못되었을 경우 이 에러가 발생한다.

11.1.6 참조

tmax_get_db_passwd(), tmax_get_db_tnsname()

11.1.7 예제

<환경 파일의 OPENINFO>

svg4 NODENAME = @HOSTNAME@, DBNAME = ORACLE,

OPENINFO =

"ORACLE_XA+Acc=P/scott/tiger+SesTm=60+Sqlnet=tmaxi1",

TMSNAME = tms_ora

<서버 프로그램>

#include <stdio.h>

...

SVC_GETUSRNAME( TPSVCINFO *msg )

{

char usrname[30];

Page 82: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

81

printf("\n => use right..\n");

ret = tmax_get_db_usrname("svg1", usrname, ORACLE_TYPE);

if(ret < 0)

printf("tmax_get_db_usrname fail[%s]\n",tpstrerror(tperrno));

else

printf("\ntmax_get_db_usrname = %s\n", usrname);

tpreturn( TPSUCCESS, 0, rcvbuf, 0, 0 );

}

<결과>

tmax_get_db_usrname = scott

Page 83: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 82

11.2 tmax_get_db_passwd

11.2.1 이름

tmax_get_db_passwdTmax 에 연결되어 있는 DB username 의 password 를 알아오는 함수 (서버)

11.2.2 사용 방법

#include <usrinc/tmaxapi.h>

int tmax_get_db_passwd (char *svgname, char *passwd, int type)

11.2.3 설명

현재 Tmax 가 접속하고 있는 Database 의 username 에 대한 password 를 알아내는 함수이다.

svgname 에는 password 를 알기를 원하는 서버 그룹의 이름을 지정해 준다. 이 때 서버 그룹은 반드시 XA 서버 그룹이어야 한다. Type 은 현재 사용하고 있는 DBMS 를 구별하기 위하여 지정해 주며, ORACLE_TYPE | SYBASE_TYPE | INFORMIX_TYPE | DB2_TYPE 중 하나를 지정해 주어야 한다.

svgname 과 type 을 지정해서 위의 함수를 호출하게 되면 두 번째 인자인 passwd 에 결과 정보가 담겨져 리턴된다.

이 때 passwd 은 리턴되는 정보를 담을 수 있을 만한 충분한 크기로 할당되어 있어야 한다.

11.2.4 반환값

tmax_get_db_passwd 가 성공적으로 종료되면, 1 을 리턴한다. 그렇지 않으면 –1 을 리턴하고 tperrno 에 에러 상황에 해당하는 값이 설정된다.

Page 84: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

83

11.2.5 오류

TPEINVAL 인수가 유효하지 않다. 예를 들어 서버 그룹의 이름을 잘못 지정했거나, type 을 usrinc/tmaxapi.h 에 정의된 값 이외의 값으로 정의한 경우 또는 type 에 INFORMIX_TYPE 을 설정한 경우 이 에러가 발생할 수 있다.

TPEITYPE svgname 에 NONXA 서버 그룹을 지정했을 경우나 Tmax 환경 파일의 OPENINFO 정보가 잘못되었을 경우 이 에러가 발생한다.

11.2.6 참조

tmax_get_db_usrname(), tmax_get_db_tnsname()

11.2.7 예제

<환경 파일의 OPENINFO>

svg4 NODENAME = @HOSTNAME@, DBNAME = ORACLE,

OPENINFO =

"ORACLE_XA+Acc=P/scott/tiger+SesTm=60+Sqlnet=tmaxi1",

TMSNAME = tms_ora

<서버 프로그램>

#include <stdio.h>

...

SVC_GETPASSWORD( TPSVCINFO *msg )

{

char passwd[30];

printf("\n => use right..\n");

ret = tmax_get_db_passwd("svg1", passwd, ORACLE_TYPE);

if(ret < 0)

printf("tmax_get_db_passwd fail[%s]\n",tpstrerror(tperrno));

else

Page 85: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 84

printf("\ntmax_get_db_passwd = %s\n", passwd);

tpreturn( TPSUCCESS, 0, rcvbuf, 0, 0 );

}

<결과>

tmax_get_db_passwd = tiger

Page 86: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

85

11.3 tmax_get_db_tnsname

11.3.1 이름

tmax_get_db_passwdTmax 에 연결되어 있는 DB 의 tnsname 을 알아오는 함수 (서버)

11.3.2 사용 방법

#include <usrinc/tmaxapi.h>

int tmax_get_db_tnsname (char *svgname, char *tnsname, int type)

11.3.3 설명

현재 Tmax 가 접속하고 있는 Database 의 tnsname 를 알아내는 함수이다.

svgname 에는 tnsname 을 알기를 원하는 서버 그룹의 이름을 지정해 준다. 이 때 서버 그룹은 반드시 XA 서버 그룹이어야 한다. Type 은 현재 사용하고 있는 DBMS 를 구별하기 위하여 지정해 주며, ORACLE_TYPE | SYBASE_TYPE | INFORMIX_TYPE | DB2_TYPE 중 하나를 지정해 주어야 한다.

svgname 과 type 을 지정해서 위의 함수를 호출하게 되면 두 번째 인자인 tnsname 에 결과 정보가 담겨져 리턴된다.

이 때 tnsname 은 리턴되는 정보를 담을 수 있을 만한 충분한 크기로 할당되어 있어야 한다.

11.3.4 반환값

tmax_get_db_tnsname 가 성공적으로 종료되면, 1 을 리턴한다. 그렇지 않으면 –1 을 리턴하고 tperrno 에 에러 상황에 해당하는 값이 설정된다.

Page 87: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 86

11.3.5 오류

TPEINVAL 인수가 유효하지 않다. 예를 들어 서버 그룹의 이름을 잘못 지정했거나, type 을 usrinc/tmaxapi.h 에 정의된 값 이외의 값으로 정의한 경우 또는 type 에 INFORMIX_TYPE 을 설정한 경우 이 에러가 발생할 수 있다.

TPEITYPE svgname 에 NONXA 서버 그룹을 지정했을 경우나 Tmax 환경 파일의 OPENINFO 정보가 잘못되었을 경우 이 에러가 발생한다.

11.3.6 참조

tmax_get_db_usrname(), tmax_get_db_tnsname()

11.3.7 예제

<환경 파일의 OPENINFO>

svg4 NODENAME = @HOSTNAME@, DBNAME = ORACLE,

OPENINFO =

"ORACLE_XA+Acc=P/scott/tiger+SesTm=60+Sqlnet=tmaxi1",

TMSNAME = tms_ora

<서버 프로그램>

#include <stdio.h>

...

SVC_GETTNSNAME( TPSVCINFO *msg )

{

char tnsname[30];

printf("\n => use right..\n");

ret = tmax_get_db_tnsname("svg1", tnsname, ORACLE_TYPE);

if(ret < 0)

printf("tmax_get_db_tnsname fail[%s]\n",tpstrerror(tperrno));

else

Page 88: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

87

printf("\ntmax_get_db_tnsname = %s\n", passwd);

tpreturn( TPSUCCESS, 0, rcvbuf, 0, 0 );

}

<결과>

tmax_get_db_tnsname = tmaxi1

11.4 tmax_is_xa

11.4.1 이름

tmax_is_xa : 현재 자신이 속한 서버가 XA 인지를 체크해 주는 함수 (서버)

11.4.2 사용 방법

#include <usrinc/tmaxapi.h>

int tmax_is_xa();

11.4.3 설명

tmax_is_xa API 는 현재 자신이 속한 서버가 xa 인지 nonxa 인지 체크해 주는 함수이다.

현재 자신이 속한 서버가 XA 서버일 경우 XA_MODE 를 리턴하며,

XA 모드가 아닌 경우에는 NONXA_MODE 를 리턴한다.

11.4.4 리턴 값

XA 모드에서 실행될 때는 XA_MODE (1) 를 리턴하며, XA 모드가 아닌 경우에는 NONXA_MODE (0) 를 리턴한다.

Page 89: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 88

11.4.5 예제

#include <stdio.h>

SVC_XA( TPSVCINFO *msg )

{

...

ret = tmax_is_xa();

if (ret < 0)

printf("\ntmax_is_xa func fail [%s]\n", tpstrerror(tperrno));

if(ret == 1) strcpy(mode, "XA_MODE");

else if(ret == 0) strcpy(mode, "NONXA_MODE");

else strcpy(mode, "unknown");

printf(" => [SVC_XA] result of tmax_is_xa() : %s\n\n", mode);

tpreturn( TPSUCCESS, 0, rcvbuf, 0, 0 );

}

Page 90: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

89

12 서비스 이름 확장 (16 -> 32 byte)

12.1 설명

기존에 서비스 이름의 길이가 16byte 로 제한되어 있었다면 4.0 버전부터는 32byte (NULL 포함) 까지 사용할 수 있어 보다 유연한 프로그래밍이 가능해졌다.

따라서 4.0 버전부터는 null 을 제외한 31 byte 까지 서비스 이름을 지정할 수 있다.

단, 클라이언트 버전이 3.X (4.0 이전 버전) 일 경우와 클라이언트가 WebT 일 경우에는 16byte 이상의 서비스 이름을 가진 서비스를 호출할 수 없다.

Page 91: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 90

13 Tmax 헤더의 변경

13.1 개요

Tmax 4.0 의 추가기능으로 Tmax 4.0 의 헤더가 확장되었다. 그러나 구버전과의 호환성을 제공하므로 서로 다른 버전 간의 서비스가 가능하다.

13.2 클라이언트 헤더 호환

Tmax 3.X 버전의 클라이언트와 WebT 클라이언트에서 Tmax 4.0 서버로의 접속이 가능하도록 헤더를 확장하였다. 따라서 Tmax 4.0 서버과 기존 버전의 클라이언트와의 통신이 가능하다. 단 RDP 의 경우는 하위 버전의 클라이언트와 호환이 이루어지지 않는다.

13.3 Domain Gateway 헤더 호환

13.3.1 환경 설정

*GATEWAY

Gateway 이름 ...

[,CLOPT=string]

CLOPT = string

범위: 255 자 이내 Gateway 가 기동 될 때 그 Gateway 로 전달되는 명령어 옵션들을 정의한다. 정의된 옵션들 중에 ‘--’이전에 지정된 옵션들은 시스템에서 사용하고, 그 이후에 지정된 옵션들은 사용자가 자유롭게

Page 92: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

91

사용할 수 있다. 4.0 에서 추가된 사용자 옵션은 아래와 같다.

-h : -h Tmax Version Number 이 옵션은 Tmax 4.0 과 4.0 이전 버전의 Tmax 시스템으로 이루어진 도메인 간의 연동이 가능하도록 하기 위해서 사용하는 옵션으로 Tmax 4.0 에 해당하는 도메인의 환경 파일에 상대방 도메인에 해당하는 Tmax 시스템의 엔진 버전을 xxyyzz 의 6 자리 형식으로 지정해 준다. (ex : Tmax 3.14.4 : CLOPT = “-h 031404”) 이 옵션을 지정하게 되면, Gateway 는 설정된 버전을 토대로 상대편 도메인과 통신을 하게 된다. 단, 상대편 도메인의 버전은 하위 버전까지 명확하게 명시해 주어야 한다. 그렇지 않을 경우, 서비스 블록 등 여러가지 문제점이 발생할 수 있다. TYPE=JEUS 일 경우 (JEUSGW 일 경우) 항상 CLOPT = “–h 1” 로 지정해 준다.

Page 93: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 92

14 장애 대책 기능 변화

14.1 서버 RESTART 횟수 변화

14.1.1 환경 설정

SERVER 이름 SVGNAME=“svrgroup-name”,

...

[,CLOPT=string]

CLOPT = string

범위: 255 자 이내 SERVER 가 기동 될 때 그 SERVER 로 전달되는 명령어 옵션들을 정의한다. 4.0 에서 추가된 사용자 옵션은 아래와 같다.

-r : 이 옵션은 서비스 타임 아웃으로 인하여, 서버가 재기동 되었을 경우, 해당 서버의 RESTART 횟수를 증가시키지 않게 하는 옵션이다. RESTART=Y 인 경우에만 의미가 있으며, UNIX 플랫폼인 경우, tpsvctimeout() 에서 tpreturn() 의 인자가 TPEXIT 일 경우에 적용이 된다.

-r 옵션을 설정하였을 경우, SLOG 에 아래와 같은 로그가 기록되고 서버 RESTART 횟수에는 영향을 미치지 않게 된다.

(W) SVR3032 service timeout error : SVC25 [SVR0403]

(I) SVR3022 SVR (svr25) is down due to tpreturn(TPEXIT) at svc

timeout handler. [SVR0305]

Page 94: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

93

(I) TMM0211 General Infomation : server closed due to TIMEOUT : SVR,

pid = 15040 [TMM0161]

(I) TMM3004 SVR (svr25) is restarted the 5th time [TMM0149]

Page 95: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 94

15 Gateway 사용방법의 변경

15.1 Gateway (TCPIP, Multi-thread TCPIP, X.25) 의 새로운 라이브러리 추가

15.1.1 추가된 라이브러리

libtmaxgw.so

15.1.2 설명

Tmax 4.0 에서 gateway 공통 라이브러리인 libtmaxgw 가 추가되었다.

따라서 각 gateway 라이브러리 파일 외에도 libtmaxgw.so 라이브러리를 같이 링크하여 컴파일하여야 한다.

이에 대한 보다 자세한 내용은 Gateway 매뉴얼을 참조한다.

Page 96: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

95

16 Dynamic DB 의 세션 복구 기능

16.1 설명

기존의 버전에서는 정적 연결 방식을 사용하는 DB 를 사용할 경우, 서비스의 시작과 함께 xa_start 가 호출되어 트랜잭션 분기의 시작을 RM 에게 알린다. 만약 이 과정에서 장애가 감지되면 xa_start 를 이용하여 재연결을 시도해서 복구된 RM 과 정상적인 세션을 유지할 수 있다.

하지만 동적 연결 방식을 사용하는 DB (ex : IBMDB2) 는 RM 이 xa_start 를 호출하기 때문에 장애가 발생하였을 경우, RM 이 장애 복구되어도 정상적인 세션을 유지하지 못해 서비스를 처리할 수 없다.

따라서, 동적 연결 방식에서는 xa_end 시점에 연결을 복구할 수 있도록 기능이 추가되었다.

Page 97: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트 96

17 tpreturn 의 flag 추가

tpreturn 에 아래의 플래그가 추가되었다.

아래의 플래그는 $TMAXDIR/usrinc/xa.h 에 정의되어 있다.

TMSUCCESS : TPSUCCESS 와 동일

TMFILE : TPFAIL 과 동일

Page 98: Tmax 4€¦ · Tmax 4.0 릴리즈 노트 12 1.4.2 사용 방법 $ mkpw [ -G group_name] [ -u uid] 1.4.3 설명 [ -G group_name ] 해당 유저가 속하는 그룹 이름을 지정해

Tmax 4.0 릴리즈 노트

97

18 압축 라이브러리의 이름 변경

3.12 버전부터 클라이언트와 CLH 간의 압축기능이 추가되었고 이를 위해 압축 라이브러리가 추가되었다. 해당 라이브러리의 이름은 libz 이며, Client 에서만 사용한다. (Server 프로그램 내에서는 압축모듈을 사용하지 않고 대신 clh 에서 압축기능을 담당하며, libz 를 사용한다.)

하지만 일반 압축 라이브러리와 이름이 동일하기 때문에 충돌이 일어날 가능성이 있으므로 Tmax 에서 사용하는 압축 라이브러리의 이름이 변경되었다.

변경된 이름은 다음과 같다.

libz.so -> libtz.so