728x90
반응형
https://launchpad.support.sap.com/#/notes/801367
이번 글에서는 SAP PI/PO의 JDBC Adapter의 JDBC driver properties 설정하는 방법에 대해 설명하겠습니다.
Properties List
JDBC Sender Adapter Parameters
1. ClusterSyncMode
Parameter name | clusterSyncMode |
Parameter type | String |
Possible Parameter values | "lock" or "scheduler" |
Parameter value default | scheduler |
"scheduler": 기본값으로 설정되어 항상 하나의 서버 노드에만 채널 인스턴스가 활성화됨을 보장하는 세팅값이다. Adapter는 Scheduler에 의해 할당된 서버노드에서 local로 실행이 됩니다. 노드가 충돌하거나 'relocMode' 값에 도달하기 전까지는 Adapter의 폴링은 하나의 서버 노드에서 실행됩니다.('relocMode'에 대한 내용은 Notes 1355715를 참고하세요)
"lock": 이 옵션은 서버 노드에서 실행되는 채널의 인스턴스가 하나만 있는지 확인합니다. 이 옵션을 선택할 경우, JDBC Adapter는 서버 노드에서 대기열(Enqueue)을 Lock 시킵니다. Lock은 채널 개체에 잠금이 설정되어 첫번째 인스턴스가 완료될 때까지(Success/Fail) 처리중인 경우가 아니면 두번째 인스턴스(동일한 채널에서 가져온 것이라도)가 구성된 데이터베이스 테이블에서 데이터를 가져올 수 없이 독립적으로 구성되어 대기열에 누적되지 않습니다. 이 설정의 또다른 측면은 폴링이 모든 서버 노드에 적용된다는 것이다. 따라서, 인스턴스가 획득한 잠금에 따라 모든 서버 노드에 영향을 줄 수 있습니다.
relocMode를 간단하게 설명하자면 하나의 서버노드에서 작업을 실행하다가 문제가 생겼을 경우 바로 다른 서버노드에서 실행하는 것이 아닌 해당 노드에서 relocMode에 설정한 값만큼 다시 접속을 시도하게 설정하는 값입니다.
2. msgLimit
Parameter name | msgLimit |
Parameter type | Boolean |
Possible Parameter values | "true" or "false" |
Parameter value default | false |
기본적으로 JDBC Sender Channel은 채널 구성에 제공된 쿼리를 충족하는 데이터베이스에서 사용 가능한 모든 행을 선택합니다. 하지만 간혹 가져온 tuples의 갯수로 인한 과부하로 인해 채널에서 OOM(OutOfMemory) 오류가 발생합니다. 그를 방지하기 위해 tuples/size의 크기를 제한하기 위해 'msgLimit'이 도입되었다.(Notes 1296819 참고)
3. sqlquerytimout
Parameter name | sqlquerytimeout |
Parameter type | int |
Possible Parameter values | non-negative number |
Parameter value default | 0 |
'sqlquerytimeout'는 데이터베이스 수준의 쿼리 시간 초과 매개변수를 설정하는데 사용할 수 있습니다. default값은 0이며, 기본값의 경우 쿼리시간 초과가 데이터베이스 기본값으로 유지되는 경우 default값으로 지정합니다. 값은 seconds(초) 단위로 설정되며 0보다 큰 임의의 숫자로 설정할 수 있습니다. (Notes 1078420 참고)
4. driver:<database-specific-timeout-parameter>
Parameter name | driver:<database-specific-timeout-parameter> |
Parameter type | String |
Possible Parameter values | database-specific |
Parameter value default | NA |
"driver:"를 동반한 매개변수의 경우 데이터베이스 특정 시간 초과 매개변수에 접두어로 지정됩니다. 이 항목에 지정된 매개변수는 각 데이터베이스의 관련성을 확인하지 않습니다.(Notes 1078420 참고)
JDBC Receiver Adapter Parameters
1. logSQLStatement
Parameter name | logSQLStatement |
Parameter type | Boolean |
Possible Parameter values | "true" or "false" |
Parameter value default | false |
PI/PO 메세지 내용에서 JDBC Adapter에 의해 생성된 SQL문을 확인할 수 있어 분석에 도움이 될 수 있습니다.
단, 해당 파라메터는 테스트 단계에서만 사용하는것을 권장하며 실제 운영단계에서는 사용하지 않는것을 권장합니다.
2. sqlBindMode
Parameter name | sqlBindMode |
Parameter type | Boolean |
Possible Parameter values | "true" or "false" |
Parameter value default | false |
"sqlBindMode"는 유사한 쿼리가 많이 실행되어야하는 경우에 사용되어집니다. 해당 파라메터를 사용하는 목적은 동일한 테이블에서 쿼리를 실행하는데 사용되어지는 구현 레벨에서 PreparedStatement를 사용할 수 있다. 따라서 쿼리실행에 있어 성능이 향상되는 효과를 볼 수 있습니다. 해당 아이디어는 일반 쿼리를 만들고 나중에 채울 자리 표시자를 갖는 것입니다. 이 쿼리는 한번 컴파일되어 여러번 실행이 가능하게 됩니다. 그럴경우 데이터베이스에서 쿼리를 컴파일 하는 시간이 절약되어 시간이 어느 정도 단축됩니다.
Statement의 특징
- SQL 구문 실행
- 스스로는 SQL 구문을 해석할 수 없어 Database에 전달하는 역할을 수행
- SQL 관리는 가능하지만 연결 정보를 갖지 않는다
Ex) INSERT INTO TABLE_NAME (COL1,COL2,COL3) VALUES (col1,col2,col3)
PreparedStatement
- Statement의 기능을 향상시킨 구문
- 인자(매개변수)와 관련된 작업이 가능
- 코드 안정성 및 가독성이 높음
- 코드량이 Statement 구문보다 증가함(매개변수를 set해줘야 하기 때문이다.)
- 텍스트 SQL 호출
Ex) INSERT INTO TABLE_NAME(COL1,COL2,COL3) VALUES(?,?,?)
3. dataWithBindMode
Parameter name | dataWithBindMode |
Parameter type | Boolean |
Possible Parameter values | "true" or "false" |
Parameter value default | false |
This parameter is used in addition to parameter #2 under category-"JDBC Receiver Adapter Parameters". The purpose of having this parameter is that when there is a necessity to have a standard database function which needs to be a part of the query. This parameter helps in adjusting the query accordingly. In addition to this parameter, some modifications are needed to be done to the input XML. Please refer note#: 2072891; in order to understand the construction of the XML.
Oracle에서만 사용가능
driver:oracle.jdbc.ReadTimeout | (JDBC 10.2.0.3 이상 사용 가능) 단위: milliseconds; 예시 : 6000(6초); default = 0 |
driver:oracle.net.CONNECT_TIMEOUT | (JDBC 10.2.0.3 이상 사용 가능) 단위: milliseconds; 예시 : 6000(6초); default = 0 |
JDBC Adapter를 사용하여 DB에 연결을 할때 연결시간이 길어져 Driver에서 콜백이 돌아오지 않아 영구적으로 행이 걸려있는 경우가 있습니다. 그럴 경우 ReadTimeout과 CONNECT_TIMEOUT properties를 사용하여 문제를 해결할 수 있습니다.
참고
Notes | |
Notes 1078420 | 1078420 - XI/PI JDBC Adapter: Setting JDBC driver properties for DB |
Notes 801367 | 801367 - XI 3.0 JDBC Adapter: Additional Parameters |
SubNotes |
|
Notes 1355715 | 1355715 - AF Scheduler to avoid using cluster communication |
Notes 1296819 | 1296819 - Configuring Maximum Message Size Limits for OOM Error |
Blog |
|
인스피언 | [XI/PI] JDBC 채널의 timeout 설정 |
코딩하는 흑구 | [JDBC] PreparedStatement 개념 및 예제 |
미래금융인 | JAVA - PreparedStatement 사용하기 |
728x90
반응형