목차 1. 환경변수 OS별환경변수설정 ESQL 시작 ESQL 프로그램생성젃차 오라클 Pro*C 젂환 Precompiler 변경 확장자 *.pc를 *.tbc로변경

Similar documents
개발및운영 Tibero DB Link (Tibero To Oracle) - Local 방식

개발및운영 Tibero Perl 연동

[JEUS 7] eclipse plug-in 연동 1. 개요 Eclipse 와 JEUS 7 연동시필요한 plug-in 제공및환경설정에관한가이드제공하여 Eclipse 에서 JEUS 7 기동및 종료테스트할수있는방법을기술하였습니다. 2. Plug-in 설치 2.1 [Step

설치및환경설정 Tibero tbprobe 사용법과원격지포트체크

윈백및업그레이드 Tibero Flashback 가이드

목차 1. 노드매니저종류 Java Type SSH Type 노드설정파일및로깅 nodes.xml jeusnm.properties <servername>.properties...

튜닝및모니터링 OS 별 TCP Recommend Parameter for WebtoB/JEUS

Linux 권장커널파라미터 1. 커널파라미터별설명및설정방법 1.1 nofile ( max number of open files ) 설명 : 지원되는열린파일수를지정합니다. 기본설정이보통대부분의응용프로그램에대해충분합니다. 이매개 변수에설정된값이너무낮으면파일열기오류, 메모리

목차 1. 개요 개요 연동테스트홖경 PowerBuilder Connection Tibero ODBC Driver 설정 PowerBuilder Connection 설정 Tiber

목차 1. TABLE MIGRATOR 란? TABLE MIGRATOR 홖경설정 TABLE MIGRATOR 바이너리 Shell 설정 Migrator.Properterties 파일설정 TAB

설치및환경설정 JEUS Thread State Notify 설정

13주-14주proc.PDF

SSL 접속테스트 본문서에서 WebtoB 가설치된디렉토리는 [WEBTOBDIR] 로표기하겠습니다.. 윈도우계열과리눅스 / 유닉스계열모두명령은동일하므로윈도우를기준으로설명하도록하겠습니다. 1. WebtoB 설정 1.1 Test 용인증서생성 SSL 접속테스트를위해 Webto

개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.

JEUS WebT Copyright 2004 Tmax Soft Co., Ltd. All Rights Reserved.

목차 JEUS JNLP Client Sample 가이드 JNLP 란 JNLP의이점 TEST TEST 환경 TEST Sample sample application 셋팅 (ser

PowerPoint 프레젠테이션

SSL(Secure Socket Layer) 과 TLS(Transport Layer Security) 개요 전자상거래가활발해지면서웹보안이매우중요해지고있으며, 최근정보통신망법의개정으로아무리소상공인이라 도홈페이지운영시개인정보를취급하고있다면아래와같은내용을조치하도록되어있습니다

본 강의에 들어가기 전

K&R2 Reference Manual 번역본

튜닝및모니터링 Tibero EVENT 가이드

PowerPoint 프레젠테이션

Tmax

목차 1. Tibero 4 설치개요 Install 전 Check 사항 H/W 요구사항 Tibero 4 설치 Tibero 설치폴더생성 Tibero 바이너리압축해제 $T

Sena Technologies, Inc. HelloDevice Super 1.1.0

vi 사용법

Tmax COBOL Guide : TMCG : Tmax 3.8 : July 31, 2003 : Sep 20, 2003

chap7.key

설치및홖경설정 Tibero 4 SP1 TAC 설치 - Windows 홖경

목차 1. 웹서비스의예 테스트환경설치 설치전고려사항 설치할공간확보 테스트환경구축 설치파일준비 설치 Windows에서의설치 Linux 에서

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - lab14.pptx

PowerPoint 프레젠테이션

ÃÖÁ¾PDF¿ë

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

untitled

목차 1. TAC 구성준비사항 TAC 구성순서 VirtualBox 으로 CentOS 설치 VirtualBox 에서 TAC 구성

FY2005 LIG

목차 JEUS EJB Session Bean가이드 stateful session bean stateful sample 가이드 sample source 결과확인 http session에

Getting Started Guide

6주차.key

교육지원 IT시스템 선진화

C++-¿Ïº®Çؼ³10Àå

PowerPoint 프레젠테이션

튜닝및모니터링 HP JVM 튜닝옵션

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

untitled

Microsoft Word - AnyLink Introduction v3.2.3.doc

Microsoft PowerPoint - chap13-입출력라이브러리.pptx


PowerPoint 프레젠테이션

개발및운영 Eclipse 를이용한 ANT 활용방법

H_AR_ P

03장.스택.key

untitled

untitled

Tmax Getting Started Guide Tmax 3.8 Tmax Getting Started Guide

untitled

토익S-채용사례리플렛0404

다음 사항을 꼭 확인하세요! 도움말 안내 - 본 도움말에는 iodd2511 조작방법 및 활용법이 적혀 있습니다. - 본 제품 사용 전에 안전을 위한 주의사항 을 반드시 숙지하십시오. - 문제가 발생하면 문제해결 을 참조하십시오. 중요한 Data 는 항상 백업 하십시오.

2012-민간네트워크-05_중국

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

/chroot/lib/ /chroot/etc/

강의10

MySQL-Ch10

untitled

Microsoft PowerPoint - A-max.ppt [호환 모드]

제1장 Unix란 무엇인가?

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

ePapyrus PDF Document

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Microsoft Word - Tmax Programming Guide _ UCS _.doc

Tmax Programming Guide ( UCS ) Tmax 38 Tmax Programming Guide (UCS)

歯9장.PDF

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap12-고급기능.pptx

12주-proc.PDF


untitled

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

단계

Tmax FDL Reference Manual : TMFR : Tmax 3.8 : Sep 20, 2003 : Sep 20, 2003

歯7장.PDF

chap7.PDF

1장. 유닉스 시스템 프로그래밍 개요

Chapter_02-3_NativeApp

Microsoft Word - PLSQL.doc

Microsoft PowerPoint - 08_(C_Programming)_(Korean)_Preprocessing

The Pocket Guide to TCP/IP Sockets: C Version

2009년 상반기 사업계획

Solaris Express Developer Edition

PowerPoint 프레젠테이션

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

Chap04(Signals and Sessions).PDF

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

MPLAB C18 C

: Symantec Backup Exec System Recovery 8:

10.ppt

기술교육 SSL 설정및변환방법

Transcription:

개발및운영 Tibero ProC 전환및 Tmax 설정 2014. 05. 16.

목차 1. 환경변수... 3 1.1. OS별환경변수설정... 3 2. ESQL 시작... 4 2.1. ESQL 프로그램생성젃차... 4 3. 오라클 Pro*C 젂환... 5 3.1 Precompiler 변경... 5 3.2 확장자 *.pc를 *.tbc로변경... 5 3.3 티베로젂환시주의사항... 6 4. Tmax에서 Tibero설정... 6 4.1 RM 설정... 6 4.2 TMS 생성... 7 4.3 TMAX OPENINFO(TIBERO)... 7 4.4 TMAX 환경설정... 8 4.5 연동예제 (HP-Itanium)... 8 2

Tibero ProC 전환및 Tmax 설정 본문서에서는타 DB 에서 Tibero 로 proc 젂환에대한내용과및 Tmax 설정하는방법을소개한다. 1. 환경변수 1.1. OS 별환경변수설정 아래환경변수에 $TB_HOME/client/lib 를포함시킨다. OS(CPU) 64BIT 32BIT HP-UX(IA64) LD_LIBRARY_PATH LD_LIBRARY_PATH HP-UX(PA-RISC) LD_LIBRARY_PATH 없을시 SHLIB_PATH SHLIB_PATH SOLARIS LD_LIBRARY_PATH_64 없을시 LD_LIBRARY_PATH LD_LIBRARY_PATH AIX LIBPATH 없을시 LD_LIBRARY_PATH LIBPATH 없을시 LD_LIBRARY_PATH LINUX LD_LIBRARY_PATH LD_LIBRARY_PATH WINDOWS PATH PATH 3

2. ESQL 시작 2.1. ESQL 프로그램생성절차 ESQL 프로그램생성 EDITOR ESQL SOURCE tbpc Precompiler C Source Program Compiler Linker ESQL 프로그램개발젃차는제공되는매뉴얼 Tibero tbesql/c 안내서참조 4

3. 오라클 Pro*C 전환 3.1 Precompiler 변경 오라클 proc 를티베로 tbpc 로변경 proc include=$tb_home/client/include \ include=$tdir/include \ include=$tdir/include/header \ include=$tdir/include/comm \ include=$tdir/include/incl \ lines=yes \ mode=oracle \ unsafe_null=yes \ hold_cursor=yes \ ORACA=YES \ release_cursor=no \ iname=$pgm.pc select_error=no \ userid=$tb_userid/$tb_passwd SQLCHECK=SYNTAX 2>&1 >$PGM.err tbpc include=$tb_home/client/include \ include=$hitdir/include \ include=$hitdir/include/header \ include=$hitdir/include/comm \ include=$hitdir/include/incl \ lines=yes \ mode=oracle \ unsafe_null=yes \ hold_cursor=yes \ ORACA=YES \ release_cursor=no \ iname=$pgm.tbc select_error=no \ userid=$tb_userid/$tb_passwd SQLCHECK=SYNTAX 2>&1 >$PGM.err 3.2 확장자 *.pc 를 *.tbc 로변경 확장자를변경할.pc 파일이많을경우다음스크립트를이용 (unix) 하여변경한다.! /usr/bin/ksh for file in *.pc do newext=`echo $file sed -e 's/pc$/tbc/'` rm $file mv $file $newext done 5

3.3 티베로전환시주의사항 EXEC SQL INCLUDE sqlca.h( 공백 ); include되어지는헤더파일이름과세미콜론 (;) 사이에공백이있으면파싱오류가발생할수있으므로 EXEC SQL INCLUDE sqlca.h; 로수정필요변경시킬파일이많을경우아래스크립트를이용하여변경 OS상에설치된 sed 에따라실행이되지않는경우가있으니 2개의스크립트중해당시스템에서실행가능한스크립트를선택해서적용 script1) find. -name '*.tbc' -exec sed -i 's/sqlca.h /sqlca.h/g' \; script2)! /usr/bin/ksh for file in *.tbc do newname=`echo $file sed -e 's/tbc$/new/'` sed -e 's/sqlca.h /sqlca.h/' $file >$newname rm $file mv $newname $file done "testesql.tbc", line 95: error 2020: identifier "oraca" is undefined sqlctx.oraca = (void *)&oraca; 오라클에서 tibero로젂환시 oraca.h헤더를소스에추가로포함시켜야정상컴파일가능 oraca.h헤더파일을추가할소스가많을경우 sqlca.h파일에 oraca.h파일을병합하면헤더를일일이추가해야하는작업을줄일수있음. 4. Tmax 에서 Tibero 설정 4.1 RM 설정 $TMAXDIR/config/RM 파일에다음을추가 NON XA Tibero_NONXA:nonxa:-L$TB_HOME/client/lib ltbertl ltbcli lclialloc lm -lpthread XA Tibero_XA:tbs:-L$TB_HOME/client/lib -ltbertl -ltbxa -lm -lpthreads 6

4.2 TMS 생성 dumy.c 파일준비 int i; tms_tbr.mk 파일준비 TMS Makefile for Tibero HP Itanium 64bit TBLIBDIR = $(TB_HOME)/client/lib TBLIB =-ltbxa -ltbertl -ltbcli -lm -lpthread TARGET = tms_tbr APOBJ = dumy.o APPDIR = $(TMAXDIR)/appbin TMAXLIBD= $(TMAXDIR)/lib64 TMAXLIBS= -ltms -ltbs CFLAGS = -O -Ae -w +DSblended +DD64 -D_HP all : $(TARGET) $(TARGET): $(APOBJ) $(CC) $(CFLAGS) -o $(TARGET) $(TMAXINC) -L$(TMAXLIBD) $(TMAXLIBS) $(APOBJ) - L$(TBLIBDIR) $(TBLIB) mv $(TARGET) $(APPDIR)/. $(APOBJ): $(CC) $(CFLAGS) -c dumy.c clean: -rm -f *.o core $(APPDIR)/$(TARGET) TMS 컴파일 make f tms_tbr.mk all 4.3 TMAX OPENINFO(TIBERO) tibero용 OPENINFO 가능파라미터 TIBERO_XA 구문에가장먼저기술 user tibero 계정 pwd tibero 암호 db tibero SID conn_id 설정하지않으면 db 파라미터와동일값이자동설정됨 sestm session timeout default 60 seswt session waittime default 60 loose_coupling default false *LogDir 은 tibero4, tibero5 모두현재지원하지않고있음 7

4.4 TMAX 환경설정 *SVRGROUP svg1 NODENAME = "tmax", DBNAME = TIBERO, OPENINFO = "TIBERO_XA:user=tibero,pwd=tmax,sestm=60,db=tibero4", TMSNAME = tms_tbr *SERVER tbrtest *SERVICE TBRINS TBRSEL TBRUPT TBRDEL SVGNAME=svg1 SVRNAME = tbrtest SVRNAME = tbrtest SVRNAME = tbrtest SVRNAME = tbrtest 4.5 연동예제 (HP-Itanium) compile 파일준비!/bin/sh program compile main Param=$1 case "$Param" in c) COMP_TARGET=$2; export COMP_TARGET make -f Makefile.c;; ucs) COMP_TARGET=$2; export COMP_TARGET make -f Makefile.ucs;; sdl) COMP_TARGET=$2; export COMP_TARGET make -f Makefile.sdl;; tbc) COMP_TARGET=$2; export COMP_TARGET make -f Makefile.tbc all;; pc) COMP_TARGET=$2; export COMP_TARGET make -f Makefile.pc all;; psdl) COMP_TARGET=$2; export COMP_TARGET make -f Makefile.psdl all;; clean) make -f Makefile.pc clean;; *) echo "Usage: $0 argument";; esac 서버용 Makefile.tbc 파일준비 Server tbpc makefile TBINC = $(TB_HOME)/client/include TBLIBDIR = $(TB_HOME)/client/lib TBLIB = -ltbxa -ltbertl -ltbcli -lm -lpthread TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o NSDLOBJ = $(TMAXDIR)/lib64/sdl.o Tibero LIBS = -lsvr -ltbs OBJS = $(APOBJS) $(SVCTOBJ) 8

SVCTOBJ = $(TARGET)_svctab.o CFLAGS = -O -Ae -w +DSblended +DD64 -D_HP -I$(TMAXDIR) APPDIR = $(TMAXDIR)/appbin SVCTDIR = $(TMAXDIR)/svct TMAXLIBDIR = $(TMAXDIR)/lib64.SUFFIXES :.c.c.o: $(CC) $(CFLAGS) -c $< server compile all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(CFLAGS) -L$(TMAXLIBDIR) -o $(TARGET) -L$(TBLIBDIR) $(TBLIB) $(OBJS) $(LIBS) $(NSDLOBJ) mv $(TARGET) $(APPDIR)/. rm -f $(OBJS) $(APOBJS): $(TARGET).tbc tbpc iname=$(target) include=$(tmaxdir) $(CC) $(CFLAGS) -L$(TBLIBDIR) -I$(TBINC) $(TBLIB) -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) $(TARGET).lis tbrtest.h 헤더파일준비 ifndef _SVC_H_ define _SVC_H_ include <stdio.h> include <stdlib.h> include <string.h> include <usrinc/atmi.h> include <usrinc/tmaxapi.h> include <usrinc/tx.h> include <usrinc/fbuf.h> define SQLOK 0 define SQLDUP 1 define SQLNOTFOUND 1403 define MAXLEN 50 define NAMELEN 11 define COMMIT 1 define ROLLBACK 2 9

struct temp_str int empno; char ename[maxlen]; char job[maxlen]; char date[maxlen]; float sal; int commit_yn; /* 1:tx_commit, other except 1 : tx_rollback */ char svcname[xatmi_service_name_length]; ; typedef struct temp_str *str; void print_input(str sndbuf); void print_output(char *rcvbuf); void print_input(str sndbuf) printf("sndbuf->empno = [%d]\n", sndbuf->empno); printf("sndbuf->sal = [%d]\n", sndbuf->sal); printf("sndbuf->ename = [%s]\n", sndbuf->ename); printf("sndbuf->job = [%s]\n", sndbuf->job); printf("sndbuf->date = [%s]\n", sndbuf->date); printf("sndbuf->svcname = [%s]\n", sndbuf->svcname); void print_output(char *rcvbuf) printf("rcvbuf=[%s]\n", rcvbuf); endif 서버 tbrtest.tbc 파일준비 include "tbrtest.h" EXEC SQL INCLUDE SQLCA.H; EXEC SQL BEGIN DECLARE SECTION; int h_empno; char h_ename[maxlen]; char h_job[maxlen]; char h_date[maxlen]; int h_count; float h_sal; EXEC SQL END DECLARE SECTION; TBRINS( TPSVCINFO *msg ) str sndbuf; char *rcvbuf; char tmp[1024]; sndbuf = (str)msg->data; if _DBG print_input(sndbuf); endif rcvbuf=(char *)tpalloc("string", NULL, 4096); if(rcvbuf==null) printf("tpalloc failed (rcvbuf) : %s\n", tpstrerror(tperrno)); tpreturn(tpfail, -1, NULL, 0, 0); 10

h_empno = h_sal = 0; memset( h_ename, 0x00, sizeof( h_ename ) ); memset( h_job, 0x00, sizeof( h_job ) ); memset( h_date, 0x00, sizeof( h_date ) ); h_empno = sndbuf->empno; h_sal = sndbuf->sal; strcpy( h_ename, sndbuf->ename ); strcpy( h_job, sndbuf->job ); strcpy( h_date, sndbuf->date ); EXEC SQL INSERT INTO emp( empno, ename, job, hiredate,sal) VALUES (:h_empno, :h_ename, :h_job, to_date(:h_date,'yymmdd'), :h_sal ); if ( sqlca.sqlcode!= SQLOK ) sprintf(tmp, "[%s] emp Insert Fail", msg->name); strcpy(rcvbuf, tmp); printf("[%s] %d \n", rcvbuf, sqlca.sqlcode); tpreturn( TPFAIL, sqlca.sqlcode, rcvbuf, strlen(rcvbuf), 0 ); sprintf(tmp, "[%s] emp Insert Success", msg->name); strcpy(rcvbuf, tmp); if _DBG print_output(rcvbuf); endif tpreturn( TPSUCCESS, 0, rcvbuf, strlen(rcvbuf), 0 ); TBRUPT( TPSVCINFO *msg ) str sndbuf; char *rcvbuf; char tmp[1024]; sndbuf = (str)msg->data; if _DBG print_input(sndbuf); endif rcvbuf=(char *)tpalloc("string", NULL, 4096); if(rcvbuf==null) printf("tpalloc failed (rcvbuf) : %s\n", tpstrerror(tperrno)); tpreturn(tpfail, -1, NULL, 0, 0); h_empno = h_sal = 0; memset( h_ename, 0x00, sizeof( h_ename ) ); memset( h_job, 0x00, sizeof( h_job ) ); memset( h_date, 0x00, sizeof( h_date ) ); memset( tmp, 0x00, sizeof( tmp ) ); h_empno = sndbuf->empno; h_sal = sndbuf->sal; strcpy( h_ename, sndbuf->ename ); strcpy( h_job, sndbuf->job ); strcpy( h_date, sndbuf->date ); 11

EXEC SQL UPDATE emp SET empno = :h_empno+1, ename = :h_ename, job = 'UPDATE' WHERE empno = :h_empno; if ( sqlca.sqlcode!= SQLOK ) sprintf(tmp, "[%s] emp Update Fail", msg->name); strcpy(rcvbuf, tmp); printf("[%s] %d \n", rcvbuf, sqlca.sqlcode); tpreturn( TPFAIL, sqlca.sqlcode, rcvbuf, strlen(rcvbuf), 0 ); sprintf(tmp, "[%s] emp Update Success", msg->name); strcpy(rcvbuf, tmp); if _DBG print_output(rcvbuf); endif tpreturn( TPSUCCESS, 0, rcvbuf, strlen(rcvbuf), 0 ); TBRDEL( TPSVCINFO *msg ) str sndbuf; char *rcvbuf; char tmp[1024]; sndbuf = (str)msg->data; if _DBG print_input(sndbuf); endif rcvbuf=(char *)tpalloc("string", NULL, 4096); if(rcvbuf==null) printf("tpalloc failed (rcvbuf) : %s\n", tpstrerror(tperrno)); tpreturn(tpfail, -1, NULL, 0, 0); h_empno = h_sal = 0; memset( h_ename, 0x00, sizeof( h_ename ) ); memset( h_job, 0x00, sizeof( h_job ) ); memset( h_date, 0x00, sizeof( h_date ) ); memset( tmp, 0x00, sizeof( tmp ) ); h_empno = sndbuf->empno; h_sal = sndbuf->sal; strcpy( h_ename, sndbuf->ename ); strcpy( h_job, sndbuf->job ); strcpy( h_date, sndbuf->date ); EXEC SQL DELETE emp WHERE empno = :h_empno; if ( sqlca.sqlcode!= SQLOK ) sprintf(tmp, "[%s] emp Delete Fail", msg->name); strcpy(rcvbuf, tmp); printf("[%s] %d \n", rcvbuf, sqlca.sqlcode); 12

tpreturn( TPFAIL, sqlca.sqlcode, rcvbuf, strlen(rcvbuf), 0 ); sprintf(tmp, "[%s] emp Delete Success", msg->name); strcpy(rcvbuf, tmp); if _DBG print_output(rcvbuf); endif tpreturn( TPSUCCESS, 0, rcvbuf, strlen(rcvbuf), 0 ); TBRSEL( TPSVCINFO *msg ) str sndbuf; char *rcvbuf; char tmp[1024]; sndbuf = (str)msg->data; if _DBG print_input(sndbuf); endif rcvbuf=(char *)tpalloc("string", NULL, 4096); if(rcvbuf==null) printf("tpalloc failed (rcvbuf) : %s\n", tpstrerror(tperrno)); tpreturn(tpfail, -1, NULL, 0, 0); h_empno = h_sal = h_count = 0; memset( h_ename, 0x00, sizeof( h_ename ) ); memset( h_job, 0x00, sizeof( h_job ) ); memset( h_date, 0x00, sizeof( h_date ) ); memset( tmp, 0x00, sizeof( tmp ) ); h_empno = sndbuf->empno; h_sal = sndbuf->sal; strcpy( h_ename, sndbuf->ename ); strcpy( h_job, sndbuf->job ); strcpy( h_date, sndbuf->date ); EXEC SQL SELECT COUNT(*) INTO :h_count FROM emp WHERE empno = :h_empno; if ( ( sqlca.sqlcode!= SQLOK ) && ( sqlca.sqlcode!= SQLNOTFOUND ) ) sprintf(tmp, "[%s] emp Select Fail", msg->name); strcpy(rcvbuf, tmp); printf("[%s] %d \n", rcvbuf, sqlca.sqlcode); tpreturn( TPFAIL, sqlca.sqlcode, rcvbuf, strlen(rcvbuf), 0 ); sprintf(tmp, "[%s] emp Select Success [%d]", msg->name, h_count); strcpy(rcvbuf, tmp); if _DBG print_output(rcvbuf); endif 13

tpreturn( TPSUCCESS, 0, rcvbuf, strlen(rcvbuf), 0 ); 서버컴파일방법./compile tbc tbrtest 클라이언트 Makefile.c 파일준비 TARGET APOBJS = $(COMP_TARGET) = $(TARGET).o TMAXLIBD= $(TMAXDIR)/lib64 TMAXLIBS= -lcli CFLAGS = -O -Ae -w +DSblended +DD64 -D_HP -I$(TMAXDIR).SUFFIXES :.c.c.o: $(CC) $(CFLAGS) -c $< client compile $(TARGET): $(APOBJS) $(CC) $(CFLAGS) -L$(TMAXLIBD) -o $(TARGET) $(APOBJS) $(TMAXLIBS) clean: -rm -f *.o core $(TARGET) 클라이언트헤더 tbr_main.h 파일준비 ifndef _CLI_H_ define _CLI_H_ include <stdio.h> include <stdlib.h> include <string.h> include <usrinc/atmi.h> include <usrinc/tx.h> include <usrinc/tmaxapi.h> define SQLOK 0 define SQLDUP 1 define SQLNOTFOUND 1403 define MAXLEN 50 define NAMELEN 11 define COMMIT 1 define ROLLBACK 2 14

define V_EMPNO 1000 define V_ENAME "tmaxqmc" define V_JOB "tmaxqmc" define V_SAL 10 define V_HIREDATE "051119" /* flags */ define INSERT 1 define UPDATE 2 define DELETE 3 define SELECT 4 struct temp_str int empno; char ename[maxlen]; char job[maxlen]; char date[maxlen]; float sal; int commit_yn; /* 1:tx_commit, other except 1 : tx_rollback */ char svcname[xatmi_service_name_length]; ; typedef struct temp_str *str; void print_input(str sndbuf); void print_output(char *rcvbuf); int carray_sel(str sndbuf, char *rcvbuf, char *myname); void print_input(str sndbuf) printf("sndbuf->empno = [%d]\n", sndbuf->empno); printf("sndbuf->sal = [%d]\n", sndbuf->sal); printf("sndbuf->ename = [%s]\n", sndbuf->ename); printf("sndbuf->job = [%s]\n", sndbuf->job); printf("sndbuf->date = [%s]\n", sndbuf->date); printf("sndbuf->svcname = [%s]\n", sndbuf->svcname); void print_output(char *rcvbuf) printf("rcvbuf=[%s]\n", rcvbuf); int carray_sel(str sndbuf, char *rcvbuf, char *myname) int ret, cd; long rlen; cd = tpcall(sndbuf->svcname, (char *)sndbuf, sizeof(struct temp_str), (char **)&rcvbuf, (long *)&rlen, 0 ); if(cd < 0) printf("[%s] tpcall %s is failed [%s]\n", myname, sndbuf->svcname, rcvbuf); tx_rollback(); printf("[%s] [%s]\n", myname, rcvbuf); return 0; endif 15

클라이언트 tbr_main.c 파일준비 include "tbr_main.h" int carray_db(str sndbuf, char *rcvbuf, int flag, int iud); char myname[100]; main(int argc, char *argv[]) int in_num; int i, ret, empno, loop_cnt, ins_flag, upt_flag, del_flag; str sndbuf; char *rcvbuf; long rcvlen; int flags; if (argc!= 6) printf("usage: %s empno loop_cnt ins_flag upt_flag del_flag\n", argv[0]); printf("flag : 1 0 \n"); if ((ret = tmaxreadenv("tmax.env","tmax")) == -1) printf("<%-15s> tmaxreadenv fail [%s]", FILE, tpstrerror(tperrno)); if ( tpstart((tpstart_t *)NULL) == -1 ) printf("<%-15s> tpstart fail [%s]", FILE, tpstrerror(tperrno)); sndbuf=(str)tpalloc("carray", NULL, 4096); if(sndbuf==null) printf("<%-15s> tpalloc fail [%s]", FILE, tpstrerror(tperrno)); tpend(); rcvbuf=(char *)tpalloc("string", NULL, 4096); if(rcvbuf==null) printf("<%-15s> tpalloc fail [%s]", FILE, tpstrerror(tperrno)); tpend(); strcpy(myname, argv[0]); empno = atoi(argv[1]); loop_cnt = atoi(argv[2]); ins_flag = atoi(argv[3]); upt_flag = atoi(argv[4]); del_flag = atoi(argv[5]); sndbuf->empno = empno; sndbuf->sal = V_SAL; strcpy(sndbuf->ename, V_ENAME); strcpy(sndbuf->job, V_JOB); strcpy(sndbuf->date, V_HIREDATE); for (i=1; i<=loop_cnt; i++) 16

printf("\n LOOP COUNT = %d \n", i); if (ins_flag == 1) flags = INSERT; printf(">> INSERT : COMMIT TEST \n"); carray_db (sndbuf, rcvbuf, COMMIT, flags); strcpy(sndbuf->svcname, "TBRSEL"); carray_sel(sndbuf, rcvbuf, argv[0]); if (upt_flag == 1) flags = UPDATE; printf(">> UPDATE : COMMIT TEST \n"); carray_db (sndbuf, rcvbuf, COMMIT, flags); sndbuf->empno++; strcpy(sndbuf->svcname, "TBRSEL"); carray_sel(sndbuf, rcvbuf, myname); if (del_flag == 1) flags = DELETE; printf(">> DELETE : ROLLBACK TEST \n"); carray_db (sndbuf, rcvbuf, ROLLBACK, flags); strcpy(sndbuf->svcname, "TBRSEL"); carray_sel(sndbuf, rcvbuf, myname); printf(">> DELETE : COMMIT TEST \n"); carray_db (sndbuf, rcvbuf, COMMIT, flags); strcpy(sndbuf->svcname, "TBRSEL"); carray_sel(sndbuf, rcvbuf, myname); tpfree((char *)sndbuf); tpfree((char *)rcvbuf); tpend(); int carray_db(str sndbuf, char *rcvbuf, int flag, int iud) int ret, cd; long rlen; ret = tx_begin(); if(ret < 0) printf("<%-15s> tx_begin fail [%s]", FILE, tpstrerror(tperrno)); if(iud == INSERT) strcpy(sndbuf->svcname, "TBRINS"); else if(iud == UPDATE) strcpy(sndbuf->svcname, "TBRUPT"); else if(iud == DELETE) strcpy(sndbuf->svcname, "TBRDEL"); 17

else printf("[%s] flags must be INSERT or UPDATE or DELETE\n", myname); cd = tpcall(sndbuf->svcname, (char *)sndbuf, sizeof(struct temp_str), (char **)&rcvbuf, (long *)&rlen, 0 ); if(cd < 0) printf("[%s] [%s]\n", myname, rcvbuf); tx_rollback(); printf("[%s] [%s]\n", myname, rcvbuf); if(flag == COMMIT) ret = tx_commit(); if(ret < 0) printf("<%-15s> tx_commit fail [%s]", FILE, tpstrerror(tperrno)); else ret = tx_rollback(); if(ret < 0) printf("<%-15s> tx_rollback fail [%s]", FILE, tpstrerror(tperrno)); return 0; 클라이언트컴파일방법./compile c tbr_main 18

Copyright 2014 TmaxData Co., Ltd. All Rights Reserved. Trademarks Tibero RDBMS is a registered trademark of TmaxData Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. Contact Information TmaxData can be contacted at the following addresses to arrange for a consulting team to visit your company and discuss your options. Korea TmaxData Co., Ltd 5, Hwangsaeul-ro 329beon-gil, Bundang-gu, Seongnam-si, Gyeonggi-do. South Korea Tel: +82-31-779-7113 Fax: +82-31-779-7119 Email: info@tmax.co.kr Web (Korean): http://www.tmaxdata.com Technical Support: http://technet.tmaxsoft.com USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632. U.S.A Tel: +1-201-567-8266 Fax: +1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Russia Tmax Russia L.L.C. Grand Setun Plaza, No A204 Gorbunova st.2, Moscow, 121596 Tel: +7(495)970-01-35 Email: info.rus@tmaxsoft.com Web (Russian): http://ru.tmaxsoft.com Singapore Tmax Singapore Pte. Ltd. 430 Lorong 6, Toa Payoh 10-02, OrangeTee Building. Singapore 319402 Tel: +65-6259-7223 Email: info.sg@tmaxsoft.com United Kingdom TmaxSoft UK Ltd. Surrey House, Suite 221, 34 Eden Street, Kingston-Upon- Thames, KT1 1ER United Kingdom Tel: + 44-(0)20-8481-3776 Email: info.uk@tmaxsoft.com Web (English): http:/www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info.jp@tmaxsoft.com Web (Japanese): http://www.tmaxsoft.co.jp China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2 North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027. China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web (Chinese): http://www.tmaxsoft.com.cn Brazil TmaxSoft Brazil Avenida Copacabana, 177-3 andar 18 do Forte Empresarial, Alphaville - Barueri, Sao Paulo, SP-Brasil CEP 06472-001 Email: contato.brasil@tmaxsoft.com TN-TR3P-D0516101 19