ibm system i5 - :: dbguide.net · 9만약, crtlib...

66
IBM System i5 1 © 2006 IBM Corporation DB2 UDB for iSeries/i5 -i5/OS DB2의 올바른 사용을 위해 알아야 할 것- 이강민 과장 IBM 글로벌 테크놀로지 서비스 i5

Upload: hathien

Post on 27-Sep-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

1© 2006 IBM Corporation

DB2 UDB for iSeries/i5-i5/OS DB2의 올바른 사용을 위해 알아야 할 것-

이강민 과장

IBM 글로벌 테크놀로지 서비스

i5

Page 2: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

2© 2006 IBM Corporation

i5 server에 라이브러리를 만들면 DB 아닌가요? 지금까지 아무런 문제 없이 사용했는데 Collection을 굳이 왜?

Page 3: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

3© 2006 IBM Corporation

Library vs. Collection

1. DB Configuration

전통적인 DB 구성은 CRTLIB CL 명령어를 이용

라이브러리는 논리적으로 경계를 구분 짓는 단위 : 라이브러리 생성시엔 어떤 오브젝트도 존재하지 않음

SQL interface를 통해 생성되는 콜렉션 혹은 스키마는 SQL 표준 구성을 위한 실제 오브젝트들이 생성됨

Page 4: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

4© 2006 IBM Corporation

1. DB Configuration

Library vs. Collection

Page 5: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

5© 2006 IBM Corporation

Notes

콜렉션(Collection)은 create collection이라는 SQL command에 의해 생성하거나, iSeries Navigator에서 생성할 수 있습니다.

콜렉션에 생성되는 오브젝트들은 두 가지로 구분됩니다 : 저널 구성 관련 오브젝트와 DB catalog views 테이블 입니다.

저널 관련 오브젝트인 저널과 저널 리시버 오브젝트에 의해 컬렉션에 생성되는 table은 자동으로 저널링이 되며, 이를 통해 commitment control및 재해복구에 사용될 수 있는 것입니다.

만약, CRTLIB 명령어에 의해 만들어진 라이브러리에 존재하는 table들이 자동으로 저널링이 되어야 한다면, 라이브러리에 저널과 저널 리시버를생성 해주는 것으로 가능해 집니다.

r530 부터는 SQL table 뿐 아니라 새로이 생성되는 PF도 자동으로 저널링이 되도록 설정할 수 있습니다. 이것은 QDFTJRN이라는 data area를해당 라이브러리에 구성해 주는 것으로 가능합니다

예 : CRTDTAARA DTAARA(DBLIB/QDFTJRN) TYPE(*(CHAR) LEN(25) VALUE(‘LIBname JRNname *FILE')

LIBname과 JRNname는 각각 10자리를 차지하고 모두 대문자로 사용되어야 합니다.

이에 대한 자세한 정보는 아래 site를 참고하세요.

http://www.redbooks.ibm.com/abstracts/tips0604.html?Open

Page 6: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

6© 2006 IBM Corporation

Catalog Views

iSeries™ catalog tables 과 views : QSYS and QSYS2 에 존재

ODBC 와 JDBC catalog views : SYSIBM 에 존재

Catalog Views in each Collection

1. DB Configuration

Page 7: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

7© 2006 IBM Corporation

Data validation을 check 하는 시점이 틀림DDS : Read시에 checkDDL : Write시에 check

Select가 현저히 많은 최근의 application에서는?DDL로의 modernization이 필요한 근거

1. DB Configuration

PF보다 SQL table을 이용해야 하는 이유최근의 application에서 select 구문이 70% 이상을 차지

Page 8: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

8© 2006 IBM Corporation

SQL로 만들어진 테이블은 DDS로 만들어진 테이블에 비해 read 하는 경우에 빠르고 write 하는 경우에 느립니다.

데이터가 SQL로 구성된 테이블에 저장되는 경우에는 DDS의 경우 보다 많은 유효성 검사 과정을 거치므로, read시에는 별도의 유효성 검사 등이 필요하지 않게 됩니다.

SQL table에서 insert 가 다량으로 발생하는 경우라면, 테이블에 대한 storage를 미리 설정하는 것이 효과적입니다.

CHGPF FILE(lib/table1) SIZE(125000 1000 3) ALLOCATE(*YES)

CHGPF가 수행된 후, a CLRPFM 이나 RGZPFM 명령어가 수행되어야 실제로 storage allocation이 활성화 됨을 기억해야 합니다.

Notes

Page 9: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

9© 2006 IBM Corporation

저널이란 건 시스템에서 알아서 관리해 줄텐데 뭘 더 알아야 하죠?저널을 효율적으로 쓴다는 건 뭘 한다는 건지요?

Page 10: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

10© 2006 IBM Corporation

저널링

2. Journal Configuration

Program

File A

PutFile A Journal

Jrn Rcvr

Journal Receiver's content

File A: PT

New Row

PT:New Row

21

New Row

PTNew Row

New Row

Page 11: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

11© 2006 IBM Corporation

Notes

프로그램에 의해 새로운 레코드가 추가되는 경우 저널은 이와 관련된 저널 엔트리를 저널 리시버에 저장하고, 이어서 실제 테이블에 저장하는 과정을 거칩니다.

실제 저널에 의해 생성된 저널 엔트리는 DSPJRN 명령어를 이용해서 해당 저널과 테이블 이름에 대해 확인 할 수 있습니다.

앞 장의 예에서 새로운 레코드가 추가된 경우에는 저널 엔트리 타입이 PT 로 나타날 것입니다. 이를 확인함으로써, 어느 시간에 새로운 레코드가 추가 되었는지 확인 할 수 있는 것입니다.

저널링은 타 DB에서 log와 같은 기능을 하는 것으로 SQL application 구현을 위해 필수적인 요소입니다. 특히, OLTP 환경에서 데이터 정합성을 유지하기 위해서 필수적인 DB 환경이며, 저널링을 통해 필요한 경우데이터 복구용으로 활용할 수도 있습니다.

Page 12: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

12© 2006 IBM Corporation

저널 캐쉬-Journal Caching

2. Journal Configuration

Batch Application

Cache-enabled

AP

Write Cache

IOP

PF

PF

CHGJRN ... JrnCache(*Yes)

System ASP

Receiver

Journal

User ASP

128K Buffer

Main memory cache

ODP Buffer

One per disk arm

757 Meg128K Buffer

Page 13: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

13© 2006 IBM Corporation

저널성능 비교

2. Journal Configuration

Batch Job 5 Million DB operations (10% Adds, 90% Updates)9 Million resulting Journal entries

(captured both before and after images)

Elapsed Time

Original Batch run, no Journaling 1118 SecOrdinary Journaling enabled 9773 SecUsing the new Journal cache option 1433 Sec 약 6배향상

A priced feature of the Operating System

ƒ Option 42

ƒ CHGJRN JRN(MYLIB/MYJRN) JRNCACHE(*YES)

Page 14: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

14© 2006 IBM Corporation

Notes

저널링에 의해 생성된 저널 엔트리는 실제 데이터와 같이 디스크에 write 하는 과정을 거치게 되며,따라서 SQL 성능에 영향을 미치게 됩니다

이를 개선하기 위한 방법으로 저널 데이터가 효과적으로 메모리에 적재되고, 디스크에는 128K 단위로 write 될수 있도록 block화 함으로써 저널 엔트리에 의한 DISK I/O를 줄일 수 있는 방법을 저널 캐쉬에 의해 구현할 수 있습니다.

이러한 구성은 CHGJRN 명령어를 이용해 저널 캐쉬 기능을 enable 시킬 수 있습니다.

단, 이 기능을 이용하기 위해서는 별도의 product를 구매하여야 합니다.

Page 15: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

15© 2006 IBM Corporation

Commitment Control과 관련된 저널 엔트리

2. Journal Configuration

ƒCommitment control과 관련된 entry는 pair로 구성됨

BC - Begin Commitment Control and

EC - End Commitment Control bound all transactions for a Job

SC and CM (or RB) serve as bookends for a particular transaction

... ...BC ECSC SC SCCM... ... CM RB

......

Example Application:

STRCMTCTL

ENDCMTCTL

Transaction 1

Transaction 2

Transaction 3

Commit Rollback

Page 16: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

16© 2006 IBM Corporation

• 무슨 일이 일어나는지, 언제 끝날지를 알 수 없을 때

Display Journal Status System: ISERIES1

Job: QPADEV001P User: JOEUSER Number: 071957 Commitment definition . . . . . . . . : *DFTACTGRP Type options, press Enter.

5=Display commit cycle entries 6=Display all entries 7=Work with journal attributes

Commit Cycle Opt Journal Library Identifier _ MYJRN1 MYLIB1 123_ MYJRN2 MYLIB2 456_ MYJRN3 MYLIB3 789

BottomF3=Exit F5=Refresh F6=Display resource status F9=Command line F11=Display rollback status F12=Cancel F23=More options

WRKCMTDFN + 5 + F6 + Journal

New

2. Journal Configuration

Determining Rollback Process

Page 17: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

17© 2006 IBM Corporation

F11 키를누르면:

Display Journal Status

System: RCHASJMB

Job: QPADEV001P User: RANDYJ Number: 071957

Commitment definition . . . . . . . . : *DFTACTGRP

Type options, press Enter. 5=Display commit cycle entries 6=Display all entries 7=Work with journal attributes

-----------Rollback-----------Opt Journal Library Date Time % Complete

_ MYJRN1 MYLIB1 100_ MYJRN2 MYLIB2 08/23/05 12:00:00 50_ MYJRN3 MYLIB3 0

BottomF3=Exit F5=Refresh F6=Display resource status F9=Command line F11=Display unlock status F12=Cancel F23=More options

RollBack이시작된

시간

2. Journal Configuration

Determining Rollback Process

Page 18: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

18© 2006 IBM Corporation

2. Journal Configuration

Determining Rollback Process

F11 키를또한번누르면:

Display Journal Status

System: RCHASJMB

Job: QPADEV001P User: RANDYJ Number: 071957

Commitment definition . . . . . . . . : *DFTACTGRP

Type options, press Enter. 5=Display commit cycle entries 6=Display all entries 7=Work with journal attributes

------------Unlock-------------Opt Journal Library Date Time % Complete

_ MYJRN1 MYLIB1 100_ MYJRN2 MYLIB2 08/23/05 10:42:00 96_ MYJRN3 MYLIB3 0

BottomF3=Exit F5=Refresh F6=Display resource status F9=Command line

Helps track timespent unlocking lots

of Rows

Page 19: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

19© 2006 IBM Corporation

다른 고려 사항

Open (OP) 과 Close (CL) 엔트리는 저널 리시버에 불필요한 공간을 점유하므로 저널 엔트리에서 제외 가능

Not required for:

IPL recoveryAPYJRNCHG / RMVJRNCHGHigh Availablity Business Partners

Open entry Close Entry

... ... ... UB UP DLOP CL

CHGJRNOBJ Obj((*ALL *FILE)) Atr(*OMTJRNE) OmtJrnE(*OPNCLOSYN)

2. Journal Configuration

Page 20: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

20© 2006 IBM Corporation

Scan for "before" images

"Before" 이미지는레코드가삭제되거나수정되는경우발생

Before image는 RmvJrnChg를수행시필요한엔트리

RmvJrnChg를사용하지않는다면엔트리에서제외

"Before"image

... DL ... ... ... UP UPDL PTUB UB

"Before"image

CHGJRNOBJ Obj((*ALL *FILE)) Atr(*IMAGES) Images(*AFTER)

다른 고려 사항

2. Journal Configuration

Page 21: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

21© 2006 IBM Corporation

Notes

저널 리시버는 데이터의 변동에 따라 많은 저널 엔트리를 쌓아두게 됩니다.

이 중 table을 open하고 close 하는 것과 관련된 엔트리는 굳이 저널 리시버에 남기지 않게 함으로써리시버에 쌓이는 엔트리를 줄일 수 있습니다.

또한, 레코드가 삭제되거나 수정되는 경우 삭제 혹은 수정 전의 레코드도 저널 엔트리로 남게 됩니다. 이 엔트리는 RmvJrnChg를 이용하는 복구 작업에 사용할 수 있으나, RmvJrn을 사용하지 않는 경우라면,이 또한 저널 엔트리에 쌓이지 않도록 제외시킬 수 있습니다. 이러한 작업을 통해 저널링을 통해 저널 리시버에 쌓이는엔트리를 줄임으로써, 저널링과 관련된 성능 향상과 디스크 사용량을 줄 일 수 있습니다.

Page 22: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

22© 2006 IBM Corporation

2. Journal Configuration

SMAPP-inducedtraffic

Journal Entry

AP

Journal Entry

PF

Write Cache

IOP2

Write Cache

IOP1

. .

.JOE

PF

JOE

AP

User ASP

Main Memory

storage is recycled!

Entries are NOT remote journaled, nor written to tape

CHGJRN JRN(MYLIB/MYJRN) RCVSIZOPT(*MAXOPT2

*RMVINTENT) JRNRCV(*GEN)

Access Path 저널링

Page 23: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

23© 2006 IBM Corporation

Notes

*RMVINTENT 옵션을 사용한다는 것은 저널 동작을 두 가지로 분리시키는데, 하나는 실 데이터에 관련된 스트림을담당하고, 나머지 하나는 IPL 시에 keyed access path의 구조적 integrity를 회복시키기 위해 사용되는 hidden 앤트리를 담당하는 부분입니다. 이렇게 저널 엔트리를 분리하여, hidden 엔트리를 실제 데이터에 의해 발생된 데이터가저장되는 디스크와 다른 디스크로 이전시킵니다.

*RMVINTENT 옵션은 SMAPP에 의해 생성되거나, STRJRNAP에 의해 생성된 저널 엔트리가 시스템에 의해 더 이상필요 없다고 판단되는 경우 저널 리시버로부터 자동으로 제거되도록 하여 리시버에 의해 점유된 용량을 줄일 수 있습니다.

SMAPP이란 System Managed Access Path의 약자로 abnormal 시스템 다운 시 IPL에 걸리는 시간을 줄이기 위해system이 access path를 저널을 이용해 protect 하는 기능입니다.

*RMVINTENT 옵션을 이용하는 경우 저널 리시버의 사이즈가 얼마나 감소될 수 있을 지는 아래의 절차로 확인 가능합니다.

DSPJRN JRN(LIB/JRN) OUTPUT(*OUTFILE) INCHIDENT(*YES) OUTFILEFMT(*TYPE5) OUTFILE(LIB/OUTFILE)SELECT SUM(JOENTL) FROM LIB/OUTFILE WHERE JOCODE = ‘I’

*RMVINTENT 옵션을 활성화 하기 위해서는 다음과 같이 CHGJRN 명령어를 이용합니다

CHGJRN JRN(LIB/JRN) JRNRCV(*GEN) RCVSIZOPT(*RMVINTENT)

위와 같이 *RMVINTENT 옵션을 적용하면 hidden entry는 tape로 저널 리시버를 저장하는 경우 제외되므로, 실제 tape에 저장해야 하는 저널 리시버의 사이즈를 줄일 수 있게 됩니다. 따라서, SAVOBJ와 같은 명령어가 보다신속하게 완료될 수 있습니다.

Page 24: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

24© 2006 IBM Corporation

PF를 만들거나 Create Table을 하면 CCSID는 933입니다. 당연한결과이지만, 왜 그렇게 만들어 질까 생각해 본적 있으세요? 특별히옵션을 주는 것도 아닌데 말이죠.

전에는 CCSID 937로 되어 있어도 문제없었는데, 새로운 OS를 도입하니 한글이 깨지고 난리네요. 역시 시스템은 함부로 바꾸는 게 아니라고 생각하고 계신가요?

937이든 933이든 기본적인 건 IBM에서 알아서 해주는 거 아닌가요?

Page 25: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

25© 2006 IBM Corporation

3. Language Configuration

NLSNational Language를 지원하기 위한 부분File 이나 Table내에 저장되는 binary data가 어떤 NLS를 위한 것인지 지정하기 위해 사용어떤 binary data가 저장될 것인지를 결정PF나 Table의 Attribute로 지정됨

Default CCSIDCurrent job의 Default CCSID가 PF creation 시 PF나 table의 CCSID로 지정됨Job CCSID가 65535가 아닌 경우, Default ccsid 는 job ccsid와 같이 설정Job CCSID가 65535인 경우(OS400 default), LangID에 의해 설정됨(User profile의 정보로부터)

CRTPFCRTPF CL command는 job의 ccsid를 따른다. 따라서, job ccsid가 65535라면 PF의 ccsid는 65535OS400, I5/Os의 system default ccsid 는 65535

CCSIDServer내에서 character들이 어떤 방식으로 encoding되고 처리되어야 하는지에 대한 정보를 의미

Language

Character(문자) vs. glyph(기호)

Sample glyphsCharacter

Character vs. Code point : 각 문자는 해당 코드 페이지 내에서 코드 포인트라는 특정 값으로 할당

Page 26: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

26© 2006 IBM Corporation

CCSID의 분류SBCS : 최대 256개의 code pointDBCS : 최대 65535개의 code pointUnicode : over 1 milion code point

Encoding schemaASCII : Intel base flatformEBCDIC : IBMUnicode : 1,000,000 이상의 character를 포함

Defining code pageI5/iSeries는 field별로 ccsid가 설정이 되므로 multi language를 사용할 수 있게 함외부서술 파일과 flat file에서 ccsid를 지정

Review current level code pageDSPJOB OPTION(*DFNA) Example

Language identifier . . . . . . . . . . . . . . . : KOR Country or region identifier . . . . . . . . . . : KR Coded character set identifier . . . . . . . . . : 65535Default coded character set identifier . . . . . : 933

Review current level code pageField ccsid => Unique in iSeries/i5File ccsidCurrent job의 ccsid

3. Language Configuration

Page 27: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

27© 2006 IBM Corporation

Notes

i5 서버를 사용하면서, CCSID, Code Page등의 용어에 대해 신경을 쓰게 됩니다. 정확하게 한국어에 해당하는 언어환경을 구현하기 위해서입니다.그러나, client/server 환경에서는 server 뿐 아니라 client의 환경 또한 중요하며 특히 양측의 code page 호환성에 의해 DBCS 데이터가 정확히 변환 될 수 있 있습니다.

대표적인 client인 window에서 현재 사용중인 code page 확인은 dos 창에서 chcp라는 명령어를 이용하면 확인됩니다. 한글 윈도우라면code page는 949가 표시될 것입니다. 그렇다면 client 949와 server 933 은 정확한 설정일까요.

아래 conversion 표를 보면 949 client로 전송된 933 서버의 데이터는 호환성이 있음을 볼 수 있습니다. 하지만, 표에는 937 은 존재하지않습니다. 즉, server에서 저장된 한글이 정확히 client로 변환되려면 933으로 설정되어 있어야만 하는 이유를 보여주는 것입니다.

00833, 00933, 01208, 01364, 13121, 13488, 61952 00949

윈도우 OS에서 사용되는 code page 번호는 각 나라별로 다르게 설정됩니다.

950 Chinese (Taiwan, Hong Kong)

949 Korean

936 Simplified Chinese (PRC, Singapore)

932 Japan

874 Thai

1256 Arabic

1255 Hebrew

1254 Turkish

1253 Greek

1252 US (ANSI)

1251 Cyrillic

1250 Eastern European

CCSID Windows Operating System

Page 28: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

28© 2006 IBM Corporation

OS/400의 Primary language feature code는 QCCSID가 65535로 설정되어있더라도 default system environment가무엇인지를 결정함

CCSID 는 Encoding Scheme, Character Set, 그리고 Code Page를 포괄하는구분요소

1100=EBCDIC single-byte1301=EBCDIC mixed-byte (single+double)

3. Language Configuration

Page 29: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

29© 2006 IBM Corporation

Language Related System Values and Default Values

3. Language Configuration

Page 30: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

30© 2006 IBM Corporation

전통적인 언어 사용 방법

3. Language Configuration

Page 31: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

31© 2006 IBM Corporation

Notes

전통적인 방법으로 DB를 구성한다면, IBM EBCDIC 체계가 적용되도록 오브젝트들이 구성됩니다.

즉, 미국 중국 일본 한국등 각 나라에 맞는 CCSID를 적용하여 국가별 언어 지원이 최적화 되도록 구성됩니다.

RPG, Cobol 같은 전통적인 application은 EBCDIC을 기본으로 사용하는 언어이므로, DB와 application 간에어떠한 형변환 없이도 정상적으로 데이터를 주고 받을 수 있습니다.

ODBC interface를 통하는 경우 window와 같은 client의 code page와 호환될 수 있도록 conversion table을이용하여 서버로부터 전송된 데이터를 ascii 기반의 언어로 정확히 표현해 줍니다.

Java 기반의 환경에서는 ebcdic을 unicode로 자동 변환되어 사용됩니다. 따라서, 데이터 변환에 따른 성능저하부분은 감수해야만 합니다.

국가별 언어지원을 최적화할 수 있도록 구성된 환경에서 만약 다른 국가의 언어를 사용한다고 가정하면 복잡성이 증가되고어느 부분부터 손을 봐야 봐야 할 지에 대해 고민에 빠지게 됩니다.

ccsid 933으로 한국 환경에 맞게 구성된 컬럼이라도 일본어나 중국어가 저장될 수는 있고, 한국어 기반의 client에서사용될 수 있습니다. 그러나, 중국어 PC인 client에서 이 데이터를 바라본다면, 깨져서 보이게 될 것입니다. 그 이유는 같은 문자의 경우에도 중국어 환경을 정의하는 ccsid 937이나 935 에 정의되는 code point는분명히 한국어 환경을 정의하는 ccsid 933에서와 다르게 정의되기 때문에 ccsid 933에 정의된 code point를 중국어나 일본어 환경의 client에서 본다면, 인식할 수 없는 문자로 변환될 것입니다.

다음 장에서 한국어 환경에서 전통적으로 구성되는 환경 변수를 살펴보고, 다음에는 Global 언어를 표현할 수 있는방법인 Unicode에 대해 살펴봅니다.

Page 32: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

32© 2006 IBM Corporation

Korean 사용시 language 정의

Table CCSID : 영문과 한글이 혼용된다면 table은 933으로 생성

A-type만 존재한다면, table ccsid는 833으로 정의됨

숫자와 알파벳 컬럼 : ccsid 933의 SBCS part인 833으로 정의(default)

한글 컬럼

한글만 저장된다면 J-type(DDS) 혹은 G-type(DDS, SQL)으로 설정 가능

한글(DBCS)과 영문(SBCS)이 혼용되는 경우 : O-type으로 설정

J-type과 O-type은 CCSID 933이며, x’0e와 x’0f를 포함

G-type은 default로 CCSID 834 : CCSID 933의 DBCS part이며 x’0e와 x’0f 가 사용되지 않음

G-type은 CCSID를 설정함으로써 unicode로 사용가능 : USC-2, UTF-16

x’0e, x’0f가 존재하는 이유 : mixed type에서 DBCS의 시작과 끝을 정의 하기 위한 ebcdic의 특수character

컬럼에 저장될 데이터의 유형에 따라 G-type과 O-type을 효과적으로 이용한다면 x’0e와 x’0f에 의해발생되는 문제를 최소화 할 수 있음

3. Language Configuration

Page 33: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

33© 2006 IBM Corporation

Data conversion between systems

SupportNon-supportUnicode

ODBC 3.xODBC 2.5ODBC Spec

Direct ConversionConversion is done on the client

Multi-step operation=> Data -> job -> Ansi code page(Round trip conversion)

Conversion

R510 and LaterR450 and Earlier구분

Client Access ODBC : National Language Support Consideration

3. Language Configuration

Page 34: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

34© 2006 IBM Corporation

Data conversion between systems

Client to DB2 Connect Gateway to DB2 UDB server conversion

Client to DB2 Connect Gateway to DB2 UDB server conversion

Conversion은 Requester가 아닌 Receiver에서 이뤄짐.

3. Language Configuration

Page 35: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

35© 2006 IBM Corporation

4. Unicode

Unicode란?

서버 플랫폼에 독립적으로 데이터를 다룰 수 있는 업계 표준.

전세계에서 쓰여지고 있는 모든 문자들을 하나의 집합체에서 표현.

사용자로 하여금 국가별 언어에 대한 제약 없이 데이터를 바라볼 수 있도록 설정할 수 있다.– 하나의 컬럼에 다국어가 저장 및 사용될 수 있음

• 각 문자는 다른 언어로부터 추출되어 저장될 수 있음

다국적 언어 데이터가 소프트웨어나 시스템간에 특별한 형변환 과정 없이 교환될 수 있는 구조.– 데이터가 깨지거나 소실되는 문제를 제거

소프트웨어 구현을 단순화시킴

– 사용자에 의해 입력된 데이터가 어떤 특정한 언어에서 사용되는 것인지 확인하는 과정 없이 저장과 사용 가능.– 모든 언어내의 문자가 하나의 인코딩 규칙에 적용됨.

• 다른 code page 사이에 변환을 위한 mapping 과정이 없음.• 데이터가 어떤 인코딩 과정을 거쳐서 사용되는 지 추적할 필요가 없음.

– 기존의 데이터가 unicode로 쉽게 변환 가능.• Unicode는 기존의 coding 표준에 대해 mapping이 가능하도록 정의되어 있음.

Page 36: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

36© 2006 IBM Corporation

업계와 IBM의 전략

– 모든 웹 환경은 Unicode를 기반으로 구현됨

– 최근에 새롭게 사용되고 있는 언어는 EBCDIC이 아닌 Unicode로만 정의되고 있음

• 예: Amharic (a native Ethiopian language)

중국 정부에서는 소프트웨어에서 다루는 데이터가 Unicode로 되도록 요구하고 있음

Unicode는 하나의 독립적인 어플리케이션이 모든 언어를 표현할 수 있게 함.– 사용자 측면

• 사용자는 단지 사용자가 사용하는 언어로 사용하는 것이므로 외부적인 변화가 없음.• 사용자가 입력하는 데이터가 어떤 문자를 입력할 있고 없는지에 대해 고려할 필요 없음.

– 프로그래머 측면

• DBCS를 쓰는 경우 특정 언어에만 국한 될 수 있음.• DBCS는 단지 4개 국어만 지원: 일본어, 한국어, Simplified Chinese, Traditional Chinese• DBCS를 지원하려면 데이타베이스에 구성되는 각 컬럼은 각각의 언어에 맞게 다른 CCSID를 가져야 함

– DBCS를 이용하는 Code는 데이터의 CCSID가 무엇인지 추적해가야 하며, 데이터가 저장될 때 마다

– 정확한 CCSID의 컬럼에 저장되고 있는지 검증해야 함.

왜 DBCS대신 Unicode를 쓰는 것을 고려해야 하는가?

4. Unicode

Page 37: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

37© 2006 IBM Corporation

UTF-8: Unicode Transformation Format, ASCII 기반의 시스템에 최적화된 8-bit encoding 형태로, character data type으로 저정됨. A UTF-8 문자는 1,2,3 or 4 bytes의 가변길이를 갖는다.

Name : CHAR(10) CCSID(1208)

UCS-2: Universal Character Set, 각 문자는 16 bit로 표현되며 graphic data type으로 저장됨. UCS-2 는 UTF-16와 동일한 형태이나 UTF-16 가 지원하는 문자영역이 넓다. UCS-2 는 UTF-16를 단순화 한형태이므로, 성능 면에서 UTF-16보다 효과적.

Name : GRAPHIC(10) CCSID(13488)

UTF-16: Unicode Transformation Format, 16bit encoding 형태로 100만자 이상의 문자를 다룰 수 있는 형태로Graphic 형태로 저장됨.

Name : GRAPHIC(10) CCSID(1200)

UTF-16, UTF-8 그리고 UCS Encoding 예

Unicode 자료 유형

4. Unicode

Page 38: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

38© 2006 IBM Corporation

Globalization

4. Unicode

Page 39: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

39© 2006 IBM Corporation

Unicode data type의 자료 전송의 경우?

iSeries Data Transfer : 정상적으로 변환

FTP : i5/OS FTP 는 모든 종류의 Unicode 형태에 대해 변환을 지원하지 않음.

i5/OS FTP cannot correctly perform data transfers where the file or directory data send on the network is in UCS-2 or UTF-16 formats (CCSIDs 13488, 61952 , or 1200).

The i5/OS FTP design properly supports UTF-8 data (CCSID 1208), however, IBM has not formally tested this support, and cannot guarantee that it will work in all cases.

EBCDIC을 UNICODE로 변환 절차?

SBCS : CCSID 833에서 unicode로 변환

DBCS

CCSID 933에서 unicode 변환

단, EBCDIC DBCS data에 포함되는 x’0e, x’0f pair가 깨져있는 경우 conversion error 발생(SQL0330등)

migration전 x’0e, x’0f pair 복원작업 필요

4. Unicode

Page 40: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

40© 2006 IBM Corporation

“i5 server의 DB는 아무래도 한계가 있는 거 같아요. 오라클 쓰다보면i5는 안되는게 너무 많아요. 안된다기 보다 쓰기가 너무 어려워요.”정말 그럴까요? 전 쉬운데…

쿼리를 실행하기 전에 이런 거 생각해본 적 있으세요?

우리 프로그램들은 디비에 붙여 쓰고 있기는 한데, 잘 붙인건가요? 개발자들이 다 해준거니까 잘 되고 있는 거겠죠?

Page 41: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

41© 2006 IBM Corporation

5. DB 기능 및 자료 유형

General Function

Page 42: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

42© 2006 IBM Corporation

자료유형

5. DB 기능 및 자료 유형

Page 43: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

43© 2006 IBM Corporation

Notes

Datalink와 LOB type은 non-traditional data를 저장하는 데 사용한다는 점에서는 동일합니다. 그러나, datalink는 데이터를 SQL table 자체에 저장하지 않는 다는 점에서 LOB 와 다릅니다.

다음과 같은 상황이라면 LOB를 이용하는 것이 효과적입니다.

Data가 데이타베이스의 일부인 아닌 경우Object의 변경이 database transaction의 일부분일 경우LOB data를 직접 UDF로 넘겨야 하는 경우데이타베이스와 데이터를 one-step으로 저장해야 하는 경우Substr, Concat등의 SQL function을 이용해야 하는 경우

Datalink는 다음과 같은 경우에 사용합니다.

다른 application에서 자료를 사용하기 위해서 데이타베이스 외부에 저장되어야 하는 경우웹 브라우져등에서 데이타베이스 외에 존재하는 자료를 직접 조작해야 하는 경우데이터를 조회할때의 성능이 중요시 될때데이타베이스 혹은 object가 다른 시스템에 존재해야 하는 경우오브젝트의 사이즈가 LOB limit인 15MB 이상인 경우

Page 44: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

44© 2006 IBM Corporation

가변길이 컬럼 (VARCHAR/VARGRAPHIC)– 공간절약을 우선 순위로 한다면, VARCHAR 컬럼 정의시 ALLOCATE(0) 을 포함

– 성능을 우선순위로 한다면, 실제 저장될 자료 길이의 90-95% 정도에 대한 공간을 미리 할당

• overflow storage area 에 할당되는 부분을 최소화 함으로써, 성능을 향상시킴

VARCHAR 컬럼은 wildcard 를 이용한 검색시 효과적

– 문자열의 끝에 도달하면 검색을 종료하게 됨, 그러나 고정길이 유형의 경우 공백으로 채워진 모든 부분을

검색함하게 됨

Varchar Type

5. DB 기능 및 자료 유형

Page 45: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

45© 2006 IBM Corporation

Fixed LengthPrimary Storage

Variable Length Auxilary Storage

CREATE TABLE dept (

id CHAR(4),name VARCHAR(40),bldg_num INTEGER

)

CREATE TABLE dept (

id CHAR(4),name VARCHAR(40)

ALLOCATE(40),bldg_num INTEGER

)

Fixed & "Variable" Length Storage

05 SALES

Notes

ALLOCATE 옵션의 사용여부에 따라 storage 사용 방법은 달라지게 됩니다.

Page 46: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

46© 2006 IBM Corporation

Oracle 데이타베이스와 자료유형 mapping

Notes

Page 47: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

47© 2006 IBM Corporation

Null

모든 자료유형은 null 값을 포함

null 값이란 값(nonnull)이 할당되지 않았다는 의미(absence).

상수, Not Null이 정의된 경우 혹은 special register는 null 값을 포함할 수 없다.

COUNT 와 COUNT_BIG 함수는 null 값을 반환할 수 없다.

ROWID 컬럼의 경우 쿼리문의 결과로 null 값을 반환할 수는 있어도 컬럼 자체에 null 값을 포함할 수 없다.

Null 값이 반환되는 것이 문제가 된다면 아래와 같은 함수를 이용

=> Oracle: ...NVL(MANAGER_ID, 'No Manager')...

=> DB2 UDB: ...COALESCE(MANAGER_ID, 'No Manager') ...

5. DB 기능 및 자료 유형

Page 48: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

48© 2006 IBM Corporation

Index Maintenance

인덱스는 기본적으로 serial로 update된다. 즉, 한번에 하나의 index만이 update 됨.인덱스 maintenance의 성능을 높이려 한다면, DB2 SMP에 의한 concurrent process를 유도할 수 있다.Parallel index maintenance I/O를 처리속도를 높이는 반면 resource를 많이 사용하게 됨

Tip: 만약, 20% 이상의 새로운 레코드가 추가되는 과정이라면, index를 drop 한 후 parallel processing에 의해 index rebuild를 유도하는 것이 효과적.

5. DB 기능 및 자료 유형

Page 49: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

49© 2006 IBM Corporation

6. Client interface

ODBC

Setting : iSeries Data Access component의 구성요소

ODBC 는 Data Source없이 application에서 이용 가능하지만, microsoft office제품 등에서 이용하는 경우는 필수

Data Source를 구성하는 DSN은 세가지 요소가 구분User DSN : window에 log-in 한 current user부분만 관리할 수 있음

System DSN : 모든 system user는 system DSN을 공유 가능하며, 일반적으로 사용되는 data source 구성 방법

File DNS : ODBC driver setting을 file내에 저장함으로써, DSN을 다른 서버로 이동하기 용이

Performance에 영향을 미치는 option들

Lazy close : application에서 빈번한 file open/close 를 무시하고 open connection을 재사용(Application에서 정상적으로 open/close가 사용되고 있다면, 효과는 적으나 Access 등에서 사용되는 경우 performance에 차이를 가져올 수 있음) Enable Pre-Fetch of Data for Queries : Select 구문이 사용될 때, 실제 데이터를 요청하기 전에 open과 fetch operation이 함께 일어나도록 유도하여 first block of data를 반환(일반적으로 사용하지 않아도 되는 옵션)Enable Data Compression : 디폴트로 사용되는 옵션으로 데이터 압축 시 client에서는 decompression을 위해 CPU 사용이 증가하나, 최근의client server나 PC에서 CPU 사용은 문제가 적기 때문에 권장되는 사항

Use Blocking with a Fetch of One row : ODBC driver는 result set fetch시 multiple records를 한번에 fetch하여 다음 번 request시 서버로의 trip없이 이미 fetch된 rows로 부터 결과가 반환되도록 할 수 있음

Record Blocking : iSeries server로 부터 ODBC client로 전송되는 blocking size를 지정(많은 rows를 조회하는 경우 크기 변경)Query Optimization Goal : r540 부터 지원되는 옵션으로 optimization 목표를 설정하는 방법을 결정

Default : Extended dynamic이 설정되어 있으면 full query(*ALLIO), 아니면 first block(*FIRSTIO)First Block(*FIRSTIO) : 처음 return되는 block of data가 가장 빠르게 조회될 수 있도록 optimizeFull Query(*ALLIO) : 쿼리에서 요청된 전체 rows가 반환되기에 가장 빠른 빠른 방법으로 optimize

Extended dynamic : Access plan을 SQLPKG에 저장하여 재사용 할 수 있도록 설정

Page 50: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

50© 2006 IBM Corporation

OLE DB

ODBC와 달리 data source를 이용하지 않고 application 내에서 properties를 설정

Setting the iSeries Access OLE DB Provider properties (ADO connection example)

'Create a connection object

Dim cn as ADODB.ConnectionSet cn = New ADODB.Connection

'Use the iSeries Access Provider

cnAS400.Provider = "IBMDA400"

' Set the OLE DB Performance properties

cnAS400.Properties("Block Fetch") = True => r530 이상

cnAS400.Properties("Catalog Library List") = "MyLib1, MyLib2" => r510 이상, Special values(*USRLIBL, *ALL)cnAS400.Properties("Data Compression") = True => r530 이상

cnAS400.Properties(“Query Optimization Goal") = 0 => r530 이상

(0 : *ALLIO if extended dynamic is used, otherwise, *FIRSTIO, 1 : *FIRSTIO, 2 : *ALLIO)

cnAS400.Properties("Use SQL Packages") = True => r530 이상

cnAS400.Properties("SQL Package Name") = "MyAppName" => 7자리로 설정 + 시스템에 의해 부여되는 3자리로 결정

cnAS400.Properties("SQL Package Library") = "QGPL" cnAS400.Properties("Add statements to SQL Package") = True cnAS400.Properties("Unusable SQL Package Action") = 0

'Open the connection

cnAS400.Open "Data Source=MyiSeries;", "MyUserID", "MyPWD"

6. Client interface

Page 51: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

51© 2006 IBM Corporation

JDBC

JDBC 2.0 API : java.sql and javax.sql 를 제공

JDBC architecture : JDBC API interfaces 와 classes, driver, database로 구성

Driver : Java application 과 database 사이의 매개체로써, Java language를 DB specific language로 mapping 하는 역할

Type 1

Type 2

Type 3

Type 4

Client 는 ODBC libraries를 사용

Client 는 DB specific libraries를 사용

Driver passes calls to proxy server

Driver 는 직접 database를 호출

6. Client interface

Page 52: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

52© 2006 IBM Corporation

최적의 JDBC driver 선택

Java Performance : 일반적으로, type 3 와 4 driver의 성능이 가장 좋음(connection pool & caching)

In i5/iSeries : Type 2 driver 가 최고의 성능을 보임 (WAS application 과 DB server가 같은 시스템에 존재)

6. Client interface

Page 53: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

53© 2006 IBM Corporation

Transaction 관리

Transaction이란 하나 혹은 그 이상의 statement들이 동일 작업 단위에서 실행되는 범위를 의미

java.sql.Connection interface를 통해 transaction 환경을 설정하는 방법을 제공

public interface Connection {boolean getAutoCommit();void setAutoCommit(boolean autocommit);void commit();void rollback(); }

기본적으로 JDBD에서는 AutoCommit mode 가 활성화됨 => 이것은 특별히 commit() 함수를 기술하지 않아도 됨을 의미

=> 반복적인 commit이 실행되므로 성능 저하를 가져올 수 있다.

Batch transaction에서 성능 개선을 위해서, AutoCommit mode 를 “false”로 변경하는 것을 고려할 수 있음

try{connection.setAutoCommit(fase);

}

6. Client interface

Page 54: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

54© 2006 IBM Corporation

최적의 isolation level 설정

Isolation level은 dirty ready, phantom reads 그리고 non-repeatable reads 와 같은 데이터 무결성 문제에 대해 어떻게 데이터를 보호하고 처리할 것인지를 결정하는 방법

Java.sql.connection interface는 isolation level을 설정하기 위한 method를 다음과 같이 제공

public interface Connection {public static final int TRANSACTION_NONE = 0public static final int TRANSACTION_READ_UNCOMMITTED = 1public static final int TRANSACTION_READ_COMMITTED = 2public static final int TRANSACTION_REPEATABLE_READ = 4public static final int TRANSACTION_SERIALIZABLE = 8

}

Isolation level description

NONO NOTRANSACTION_SERIALIZABLE

YESNONOTRANSACTION_REPEATABLE_READ

YESYESNO TRANSACTION_READ_COMMITED

YESYESYESTRANSACTION_READ_UNCOMMITED

N/AN/AN/ATRANSACTION_NONE

Phantom readsNon Repeatable readsDirty reads

Permitted PhenomenaTransaction Level

6. Client interface

Page 55: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

55© 2006 IBM Corporation

COMMIT(*RR)

COMMIT(*ALL) orCOMMIT(*RS)

COMMIT(*CS)

COMMIT(*CHG)

COMMIT(*NONE)

Commit mode

*RR(Repeatable Read)

*RS(Read Stability)

*CS(Cursor Stability)

*UR(Uncommitted Read)

*NC(No Commit)

On iSeries/i5

SLOWTRANSACTION_SERIALIZABLE

MEDIUMTRANSACTION_REPEATABLE_READ

FASTTRANSACTION_READ_COMMITED

FASTESTTRANSACTION_READ_UNCOMMITED

FASTESTTRANSACTION_NONE

Performance impactTransaction Level

Concurrent 이 특별히 요구되지 않는다면, 성능 면에서 최적의 선택은 TRANSACTION_NONE

toolbox for java를 사용하는 경우 Default isolation level은 TRANSACTION_READ_UNCOMMITED

Isolation level 과 관련해서는 다음의 method를 이용

-int getTransactionIsolation();-void setTransactionIsolation(int isolationlevelconstant);

Isolation level Mapping in i5/iSeries server

최적의 isolation level 설정

6. Client interface

Page 56: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

56© 2006 IBM Corporation

Dirty read problem

Transaction 1에 의해 변경된 price의 최종 값은 10(step 9)일지라도, transaction 2의 isolation level이 uncommitted read 이므로 step 6에서 조회한 값은 20이므로 transaction 내에서 data integrity에 문제가 발생

T1 의 transaction 동안 T2가 data integrity를 유지하기 위해서는 T2는 T1 transaction이 완료될 때까지 price를 조회하지못하도록 접근을 막아야 한다면, isolation level은 TRANSACTION_READ_COMMITED로 설정하는 것으로 가능

TRANSACTION_READ_COMMITED 로 설정 시 data integrity는 보장가능하나, lock level이 높아짐에 따라 지연 현상과 함께 performance를 감소시킬 수 있음

Notes

Page 57: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

57© 2006 IBM Corporation

Unrepeatable read problem

Transaction 1 첫 번째 조회 시 price가 10 인 것으로 조회를 하였으나, transaction 2에 의해 price가 20으로 변경된 후commit되었다면, transaction 1은 price를 다시 조회하는 경우 같은 transaction 범위일지라도 20으로 바뀐 값을 읽게 되어data integrity가 보장되지 않음

하나의 transaction 범주에서는 동일한 값이 조회되어야 data integrity가 보장된다고 판단되는 경우 isolation level은TRANSACTION_REPEATABLE_READ 상태로 설정해야 함

TRANSACTION_REPEATABLE_READ 로 설정 시 data integrity는 보장가능하나, lock level이 높아짐에 따라 지연 현상과함께 performance를 감소시킬 수 있음

Notes

Page 58: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

58© 2006 IBM Corporation

Phantom read problem

Transaction 1 이 최초에 company_id가 10인 것을 조회하면 1건만 조회되지만, transaction 2(step7)에 의해 새로운 row가 insert되고 commit 되고 나면, 같은 transaction 범위 내에 있는 transaction 1이 다시 조회를 하는 경우에는 2건이 나타나는 현상

하나의 transaction 범주에서는 동일한 건 수의 row가 조회되어야 한다면 isolation level은 TRANSACTION_SERIALIZABLE로 설정되어야 함

TRANSACTION_SERIALIZABLE 은 lock level이 가장 높아 data integrity 보장성은 높아지나, performance 측면에서는 가장 문제가 될 수 있음

Notes

Page 59: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

59© 2006 IBM Corporation

Connection Pool

Application 에서 새로이 DB에 connection을 생성하는 것은 resource 사용이 많아지며 performance에 악영향

특히, DB server와 application이 분리되어 있는 경우 performance는 더욱 저하될 수 있음

Connection pool은 한번 맺어진 connection을 open 상태로 계속 유지하며 반복 사용할 수 있도록 관리

min/max 설정 값에 정의된 수 내에서 connection을 관리하고 incremental size properties를 통해 증가/감소

Application server 혹은 JDBC 2.0에서 ConnectioPoolDataSource과 PooledConnection을 이용가능

i5/iSeries에서 DB connection은 QZDASOINIT pre-started job에 의해 관리

WAS의 data source를 이용해서 connection pool이 설정된 경우, QZDASOINIT PJ는 end user가 web browser를 종료하더라도, connection이 종료되는 것이 아니라, active 상태로 pool로 return됨

Connection pool을 사용하지 않는 경우 QZDASOINIT job은 end user가 connection을 종료하는 경우, active 상태에서 PSRW (Program Start Request Wait)로 전환(Recycle).

6. Client interface

Page 60: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

60© 2006 IBM Corporation

Extended Dynamic Support (SQL package)

Extended dynamic SQL의 경우 access plan을 memory 영역이 아닌 physical object에 저장하게 되므로, job 들간에 공유가 가능한 형태로 사용됨

6. Client interface

Page 61: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

61© 2006 IBM Corporation

Toolbox for iSeries(jt400.jar or Jtopen) 사용시 ODBC와 달리 default는 extended dynamic support 기능을 사용하지않는 상태이므로, 아래의 coding 예를 적용하여 enable 하는 과정이 필요함

6. Client interface

Extended Dynamic Support (SQL package)

Page 62: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

62© 2006 IBM Corporation

7. Stored Procedure

Stored Procedure 내에서의 Isolation Level (Commit mode)

iSeries Navigator (GUI)에서 생성하는 경우– Default로 No Commit mode로 설정

Run SQL Script에서 SQL Script로 생성하는 경우– JDBC setup 중 commit mode 에 따라 설정됨

PRTSQLINF로 설정을 확인

For example

• CREATE PROCEDURE LEELIB.SAVETEST4 ( ) LANGUAGE SQL

SPECIFIC LEELIB.SAVETEST4 NOT DETERMINISTIC MODIFIES SQL DATA CALLED ON NULL INPUT BEGIN INSERT INTO LEELIB . TEST VALUES ( 'B' ) ; ROLLBACK ; END ;

Page 63: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

63© 2006 IBM Corporation

iSeries Navigator에서 생성한 경우

7. Stored Procedure

Page 64: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

64© 2006 IBM Corporation

Run SQL Script에서 commit mode를 *CHG로 설정한 경우

7. Stored Procedure

Page 65: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

65© 2006 IBM Corporation

Interface와 상관없이 commit mode 설정하는 방법

CREATE PROCEDURE LEELIB.SAVETEST4 ( ) LANGUAGE SQL

SPECIFIC LEELIB.SAVETEST4 NOT DETERMINISTIC MODIFIES SQL DATA CALLED ON NULL INPUT SET OPTION COMMIT=*CHGBEGIN INSERT INTO LEELIB . TEST VALUES ( 'B' ) ; ROLLBACK ; END ;

7. Stored Procedure

Page 66: IBM System i5 - :: DBguide.net · 9만약, CRTLIB 명령어에의해만들어진라이브러리에존재하는 table들이자동으로저널링이되어야한다면, 라이브러리에저널과저널리시버를

IBM System i5

66© 2006 IBM Corporation

8. References

Manual

SQL Reference, SQL Programming from Info Center

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/pdf_table/index.htm

RedBooks

Stored Procedures, Triggers and User Defined Functions on DB2 Universal Database for iSeries, SG24-6503-01 Preparing for and Tuning the V5R2 SQL Query Engine on DB2 Universal Database for iSeries, SG24-6598-00SQL Performance Diagnosis on IBM DB2 Universal Database for iSeries, SG24-6654-00

http://www.redbooks.ibm.com