환경설정
본 장에서는 MultipleRM을 사용하기 위한 Tmax 환경설정과 서버 사용법에 대해서 설명한다.
1. Tmax 환경설정
MultipleRM 서버는 다수의 RM을 지원하기 때문에 한 서버 그룹을 하나의 RM을 표현하는 기존 설정으로는 표현할 수 없다. MultipleRM 서버를 지원하기 위해서 SVGTYPE 항목에 'MTMAX', 'STMAX’를 추가하고, SVGLIST 항목과 RMID 항목을 추가한다.
MTMAX는 STMAX 서버 그룹들의 묶음인 대표 서버 그룹을 표현한다. MTMAX에 속한 서버들은 MultipleRM 서버가 되어 SVGLIST에 있는 STMAX들의 RM들에 대해 처리가 가능해진다.
예를 들어 Tibero와 Oracle이 같은 프로세스에서 동작해야 하고 함께 트랜잭션에 포함되어야 할 경우 STMAX 서버 그룹으로 먼저 Tibero와 Oracle을 설정한다. MTMAX 서버 그룹을 생성하여 SVGLIST에 STMAX 서버 그룹을 설정하고, 서버에는 MTMAX 서버 그룹에 속한 서버를 설정하면 MultipleRM 서버 설정이 가능해진다.
다음은 앞에서 설명한 환경설정의 예제이다.
*SVRGROUP svg_s1 NODENAME = hahehihol, DBNAME = ORACLE, OPENINFO="Oracle_Xa+SqlNet=KOR04+Acc=P/scott/tiger+SesTm=60", TMSNAME = tms_ora, SVGTYPE = STMAX svg_s2 NODENAME = hahehihol, DBNAME = TIBERO, OPENINFO ="TIBERO_XA:user=scott,pwd=tiger, sestm=60,db=kor01_tibero", TMSNAME = tms_tbr, SVGTYPE = STMAX svgm1 NODENAME = hahehihol, SVGLIST = "svg_s1,svg_s2", SVGTYPE = MTMAX
-
STMAX 관련 설정항목
다음은 STMAX 관련 설정항목으로 아래 항목은 반드시 설정되어야 한다.
항목 설명 NODENAME
사용할 노드 이름을 설정한다.
DBNAME
해당하는 RM의 이름을 표현한다.
현재 'TIBERO', 'ORACLE', 'DB2_STATIC', 'MQ’를 지원한다. 그 외의 RM을 추가하거나 다른 이름의 DBNAME과 libname을 사용한다.
$TMAXDIR/config/RM 파일에 Tmax 환경설정의 DBNAME과 일치하는 항목이 있으면 해당 라이브러리를 사용할 수 있다.
다음은 RM 파일의 예이다.
ORACLE:oras DB2_STATIC:db2s_static MQ:mqs TIBERO:tbs
OPENINFO
STMAX는 XA 서버 그룹이어야 하기 때문에 해당하는 OPENINFO를 입력해야 한다.
TMSNAME
해당 서버 그룹의 데이터베이스 관리를 담당할 TMS 프로세스명을 정의한다.
SVGTYPE
반드시 STMAX로 입력해야 한다.
RMID
한 MTMAX에 속한 STMAX들 중 같은 RM을 사용하는 것이 있다면 인스턴스를 구분하기 위해서 RMID를 구분하여 입력한다. 다른 RM이라면 값을 입력하지 않아도 된다.
위의 예제에서는 다른 RM을 사용하기 때문에 RMID를 설정하지 않았다. RMID의 설정 예제는 환경설정을 참고한다.
-
MTMAX 관련 설정항목
다음은 MTMAX 관련 설정항목으로 아래 항목은 반드시 설정되어야 한다.
항목 설명 NODENAME
사용할 노드 이름을 설정한다.
SVGLIST
포함하는 STMAX 서버 그룹의 이름을 콤마(,) 구분자로 나열한다.
SVGTYPE
반드시 'MTMAX’로 설정해야 한다.
2. 서버 사용 방법
TCS, UCS와 MultipleRM 서버의 사용 방법은 동일하다. TCS, UCS에서 사용하던 일부 함수를 제외한 모든 API를 사용할 수 있고 프로그램 구조 또한 동일하다. 단, 서버에 따라 다음과 같이 프로그램 구성 요소가 달라진다.
-
TCS, UCS 방식의 서버
TCS, UCS를 빌드하기 위해서는 다음과 같이 구성한다.
사용자 코드 + libsvr(ucs) + db_stub(nodb) library
-
MultipleRM 서버
MultipleRM 서버의 경우 다음과 같이 구성한다.
사용자 코드 + libsvr(ucs) + libnodb
3. RM 파일
TCS, UCS와 MultipleRM 서버의 사용 방법은 동일하다. TCS, UCS에서 사용하던 일부 함수를 제외한 모든 API를 사용할 수 있고 프로그램 구조 또한 동일하다. 단, 서버에 따라 다음과 같이 프로그램 구성 요소가 달라진다.
라이브러리에서 목록 추출하는 방법
라이브러리에서 목록 추출하는 경우 RM 설정 파일에 있는 SERVERGROUP 절의 DBNAME 항목과 동일한 이름의 설정에서 라이브러리 목록을 추출한다. 동적으로 로드할 라이브러리를 하나 이상 정의할 수 있다.
RM 파일이 없거나 SERVERGROUP 절의 DBNAME 항목과 동일한 설정이 없는 경우 내부적으로 정의된 라이브러리 목록을 추출한다.
다음은 기본으로 제공하는 DBNAME별 라이브러리 이름을 추출한 예이다.
{"ORACLE","liboras.so"}, {"TIBERO","libtbs.so"}, {"DB2_64","libdb2_64s.so"}, {"SYBASE","libsybs.so"}, {"INFOMIX","libinfs.so"}, {"ALTIBASE","libaltbs.so"}, {"DB2_STATIC","libdb2s_static.so"}, {"MQ","libmqs.so"}
설정 파일에 정의된 내용을 따르는 방법
다음은 ${TAXMDIR}/config/RM 설정 파일에 정의된 내용을 따르는 방법에 대한 설명이다. RM 파일에 Tmax 환경설정의 DBNAME과 일치하는 항목이 있으면 해당 라이브러리를 동적으로 로딩하여 사용한다.
각 라인마다 다음의 형식으로 작성한다.
DBNAME:library[,library]
SERVERGROUP 절의 DBNAME 항목에 정의한 이름과 동일한 이름으로 설정한다.
다음은 로드할 라이브러리 이름을 명시한 RM 파일 예이다.
ORACLE:oras ORACLE_ALL:clntsh,oras ORACLE_FULL:libclntsh.so,liboras.so TIBERO:tbs TIBERO_ALL:tbxa,tbs TIBERO_FULL:libtbxa.so,libtbs.so
-
하나 이상의 라이브러리를 로드할 경우 콤마(,)를 통해 여러 개를 정의한다.
-
앞에서부터 순차적으로 dlopen(RTLD_NOW|RTLD_GLOBAL) 옵션으로 동적 로딩을 수행한다.
-
xa stub 라이브러리(예: liboras.so)를 지정하는 경우 해당 라이브러리는 마지막에 명시한다.
-
라이브러리 이름은 다음의 3가지 형식을 지원하며, 절대경로가 아닌 경우 LIBRARY PATH가 환경변수 등에 명시되어 있어야 한다.
-
절대 경로 : /opt/oracle/client/lib/libclntsh.so
-
상대 경로 : libclntsh.so, liboras.so
-
간단한 이름 형식 : clntsh, oras (이 형식은 하위 호환성을 위해 제공된다. 이 경우 libclntsh.so, liboras.so 형식으로 앞뒤에 {lib}name{.so}를 붙여서 라이브러리를 로드한다.)
-