Linux 나 AIX 환경이 아닌 unix 환경에서는 kernel parameter 값을 설정해 주어야 한다.

( Linux 및 AIX 경우는 DB2 실행 시 동적으로 kernel parameter 값이 설정되는 것으로 알고 있다)

 

Solaris 나 HP-UX 환경에서 kernel parameter 값을 설정하지 않아도 설치 및 인스턴스 구성, 인스턴스 실행 시 오류가 발생하지 않아 설정하지 않는 경우가 종종 있다.

이런 경우 특정 작업을 하다가 오류가 발생해서 원인이 못찾고 헤매게 되는 경우가 있다.

 

보안 상 고객사의 진단로그 메시지들을 메모하지 못하고 나와서 그 오류 메시지를 글에 넣을 수는 없지만,

기억나는 오류 코드는 SQL0902C, 디바이스 부족 정도였던 것 같다.

 

db2diag.log를 보면서 맨 처음 의심이 드는 것은 restore 시 필요한 경로의 disk 가용 공간이 부족해서 생긴 문제로 보여, disk 가용 공간을 확인해 봤지만 문제점은 찾을 수 없었다. (고객사의 문제는 restore 시 SQL0902C 에러로 실패하면서 작업 진행을 하지 못하는 상황이였다)

나중에 로그의 특정 메시지를 통해서 kernel parameter 를 설정하지 않아서 생긴 것으로 원인을 파악하게 되었다.

 

kernel parameter 관련 technote를 소개해 본다.

 

1. the db2diag.log is reporting an ENOSPC (28) error message

    URL: http://www-01.ibm.com/support/docview.wss?uid=swg21407281

 

2009-11-15-16.18.55.210069+330 E25334773A223 LEVEL: Error (OS)
PID : 47785 TID : 4198246823968PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-17762 APPID: 9.142.38.82.23748.034005560721
AUTHID : DB2INST1
EDUID : 75 EDUNAME: db2agent (DB1) 0
FUNCTION: DB2 UDB, oper system services, sqloNLCKLock, probe:150
MESSAGE : ZRC=0x8300001C=-2097151972
CALLED : OS, -, semget

 

2.  SQL0902C A system error (reason code = "") occurred.  Subsequent SQL statements cannot be processed.

     URL: http://database.ittoolbox.com/groups/technical-functional/db2-l/sql0902c-a-system-error-3974926

 

2011-01-11-11.48.54.138210-300 I29339688A484 LEVEL: Error
PID : 21872 TID : 1 PROC : db2agent (VPLANDB) 0
INSTANCE: db2vplan NODE : 000
APPHDL : 0-40 APPID: 128.209.72.162.45433.1101111648
AUTHID : VPLANADM
FUNCTION: DB2 UDB, buffer pool services, sqlbinit, probe:550
MESSAGE : ZRC=0x850F0081=-2062614399=SQLO_SSEM_EXCEED_MAX
"Requesting too many semaphores"
DIA8336C Requested too many semaphores

 

3. Severe system error occurs with SQLO_NORES, DIA8336C and DIA8532C messages in db2diag.log

     URL: http://www-01.ibm.com/support/docview.wss?uid=swg21406633

2009-10-08-11.35.20.600704-320 I5639725A439 LEVEL: Severe
PID : 25196 TID : 7 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000
EDUID : 7 EDUNAME: db2ipccm 0
FUNCTION: DB2 UDB, global services, sqzEDUObj::StartEDU, probe:10
RETCODE : ZRC=0x870F00F2=-2029059854=SQLO_NORES

 

Solaris 나 HP-UX 환경에서는 꼭 kernel parameter를 설정하고 DB2 설치 작업을 하는 것이 좋다.

일반적으로 DB 카탈로그 작업 시 DB2 서버 IP 주소, 포트, DB 명 정도만 설정을 하고 사용한다.

이런 CLI 연결 환경에서 DB 접속이 느려지는 경우가 발생할 수 있다.

 

사내 여러 Desktop PC 에서 특정 PC에서만 접속이 느린 현상이 발생하는 경우 (접속이 분 단위 혹은 10초 단위 소요)

다른 네트워크 환경에서 접속을 해도 해당 PC만 접속 느린 현상이 발생하는 경우,

접속이 이뤄진 후 접속을 끊고(terminate) 재접속을 해도 느리게 접속이 되는 경우

 

마치 특정 PC의 Disk 등 성능이 느려져서 or PC의 성능이 낮아 발생되는 것처럼 느껴진다.

이런 경우 Catalog 설정을 확인해 볼 필요가 있다.

 

DB 카탈로그 시, DB2 서버와의 인증 방식을 설정하는 옵션이 있다. (DB2 서버의 기본 인증 방식은 SERVER 임)

이 인증 방식을 설정하지 않는 경우 서버쪽의 인증 방식에 맞추기 위한 준비 작업으로 DB 접속이 느려질 수 있다.

 

만일 CLI 방식의 개발을 하거나, native driver를 사용하는 개발 환경에서는 DB 카탈로그 작업 시 인증 방식을 꼭 필수적으로 하는 것이 좋을 듯 하다.  (카탈로그 작업 시 인증 방식 설정을 습관화 해야 될 것 같다.)

 

참고문서: http://www-01.ibm.com/support/docview.wss?uid=swg21455469

 

 preprpnode 오류 내용 

Error
2632-044 The domain cannot be created due to the following errors that were detected while harvesting information from the target nodes:
svr2: 2632-068 This node has the same internal identifier as svr1 and cannot be included

 원인

preprpnode svr1 svr2 명령으로 2대의 서버 (svr1, svr2)를 한 도메인에 등록시킬 때, 각각의 서버는 서로 다른 RSCT(Reliable Scalable Cluster Technology) ID를 가지고 있어야 하는데, 어떠한 이유에서 (주로 VMware로 구축할 경우, svr1의 이미지를 그대로 복사하여 svr2를 만든 경우) RSCT ID가 동일해서 발생하는 오류임!

 조치

다음의 명령을 두 서버 중 하나에서 실행시켜 RSCT ID를 재 설정한 후, preprpnode 명령을 재 실행 함.

/usr/sbin/rsct/install/bin/recfgct

preprpnode svr1 svr2

 

고객사 DB 데이터 암호화 작업 지원 중 진단로그에 다음과 같은 오류가 발생하였다.

 

2013-08-10-12.54.51.756152+540 I75183662C377      LEVEL: Error
PID     : 630814               TID  : 1           PROC : db2pfchr 0
FUNCTION: DB2 UDB, buffer pool services, sqlbReadAndReleaseBuffers, probe:40
RETCODE : ZRC=0x870F0009=-2029060087=SQLO_EOF "the data does not exist"
          DIA8506C Unexpected end of file was reached.

2013-08-10-12.54.51.769508+540 I75184799C441      LEVEL: Error
PID     : 630814               TID  : 1           PROC : db2pfchr 0
FUNCTION: DB2 UDB, buffer pool services, sqlbReadAndReleaseBuffers, probe:50
DATA #1 : String, 162 bytes
Obj={pool:7;obj:1033;type:0} State=x27 Parent={7;1033}, EM=340480, PP0=340608 Page=0 Cont=0 Offset=113664 BlkSize=12
sqlbReadAndReleaseBuffers error: num-pages=6

2013-08-10-12.54.51.779808+540 I75187165C356      LEVEL: Error
PID     : 630814               TID  : 1           PROC : db2pfchr 0
FUNCTION: DB2 UDB, buffer pool services, sqlbPFPrefetcherEntryPoint, probe:0
DATA #1 : String, 78 bytes
Prefetcher Error rc = -2029060087 IGNORED ... err loc 0
. Request follows...

 

원시 디바이스(raw device) 콘테이너를 암호화가 설정된 원시 디바이스로 옮긴 후 테이블 조회 시, prefetcher 에러가 진단로그에 기록이 되었다.

 

해당 문제는 원시 디바이스 환경에서 암호화 작업 시 문제가 생겼으며 암호화 솔루션의 수정(patch)를 통하여 해결되었다.

DB2 구축 작업을 하면, 동시접속자수를 고려하여 maxuproc(AIX) 등의 OS 레벨의 변수 값을 검토하게 된다.

DB2 인스턴스 레벨에서는 MAX_COORDAGENTS 변수의 값으로 조정을 하게 되는데, 현재는 기본 값이 Automatic 이기 때문에 크게 고려할 필요가 없게 되었다.

 

그런데 pureScale 환경에서는 동시접속 관련하여 고려해야 될 변수가 있다.

클라이언트 친화성(Client Affinity) 방식 및 자동 워크로드 밸런싱(WLB) 방식 중 어느 방식이 pureScale 이중화 구성에 권장되는지는 알 수 없지만 WLB 방식인 경우 dsdriver 설정 파일에 maxTransports 값을 고려해야 된다.

 

V10.1 FixPack 0 (GA) 버전에서는 기본 값이 80 이였고, FixPack 1에서는 기본 값이 1000으로 변경되었다.

 

만일 설정 값 보다 접속 수가 초과하는 경우 –4210 에러 메시지(SQLSTATE=57033)를 Application에서 받게 되고, 진단로그(db2diag.log)에는 접속이 강제로 끊어지는 메시지(Detected client termination, ZRC=0x00000036=54)가 기록된다.

 

현재로서는 어느 정도 설정하고 쓰는지 알 수 없으나, maxTransports 변수 값은 WAS 및 업무 담당자와 협의를 통해서 설정되어져야 하겠다.

 

진단로그 오류메시지

2013-03-20-17.53.00.994278+540 I79184627A574        LEVEL: Error
PID     : 12190138             TID : 51181          PROC : db2sysc 1
FUNCTION: DB2 UDB, common communication, sqlcctcptest, probe:11
MESSAGE : Detected client termination
DATA #1 : Hexdump, 2 bytes
0x070000035ABEE222 : 0036 


2013-03-20-17.56.04.862158+540 I79264650A547        LEVEL: Error
PID     : 40108300             TID : 51479          PROC : db2sysc 0
FUNCTION: DB2 UDB, base sys utilities, sqeAgent::AgentBreathingPoint, probe:10
CALLED  : DB2 UDB, common communication, sqlcctest
RETCODE : ZRC=0x00000036=54

 

참고 문서

1. IBM APAR ( http://www-01.ibm.com/support/docview.wss?uid=swg1IC80398)

IC80398: INTERMITTENT -4210 ERRORS FOR TRANSPORT TIMEOUT WHEN MAXTRANSPORTS EXCEEDS MAX CONCURRENT APPLICATION CONNECTIONS.

 

2. IBM DeveloperWorks (AIX 기반 DB2 튜닝 사항)

  http://www.ibm.com/developerworks/aix/library/au-DB2AIXPERF.html 

 

3. 정보센터 참고 문서

http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/index.jsp?topic=%2Fcom.ibm.db2.luw.apdv.cli.doc%2Fdoc%2Fc0056065.html&resultof%3D%2522%256d%2561%2578%2554%2572%2561%256e%2573%2570%256f%2572%2574%2573%2522%2520%2522%256d%2561%2578%2574%2572%2561%256e%2573%2570%256f%2572%2574%2573%2522%2520

 

http://pic.dhe.ibm.com/infocenter/db2luw/v10r1/index.jsp?topic=%2Fcom.ibm.db2.luw.wn.doc%2Fdoc%2Fi0060385.html&lang%3Dko

db2 “? sql30090n”

SQL30090N  조작이 응용프로그램 실행 환경에 대해 유효하지 않습니다. 이유 코드 = "<reason-code>".

설명:

조작이 응용프로그램 실행 환경에 대해 유효하지 않습니다.  예를 들어, 명령문 또는 API에 대해 특별한 제한사항이 있는 응용프로그램(CICS와 같은 XA분산 트랜잭션 처리 환경에서 실행되는 응용프로그램,CONNECT 유형 2 연결설정으로 실행되는 응용프로그램 또는 페더레이티드 시스템 기능을 사용하여 여러 데이터 소스를 갱신하는 응용프로그램)의 조작이 유효하지 않을 수 있습니다. 조작이 거부되었습니다.

 

DB2 V9.X 에서 Oracle로의 Federation 설정할 때는 발생하지 않았었는데, V10.1에서는 Wrapper 생성 시 Linux에서는 위와 같은 오류가 발생한다.

 

나름 웹 상의 문서를 찾으면서 해결방법을 찾아보니 다음과 같이 해결이 가능하다.

 

db2set DB2LIBPATH=$LD_LIBRARY_PATH
db2set DB2ENVLIST=DB2LIBPATH

db2stop
db2start

db2 connect to 데이터베이스

db2 "create wrapper net8"

 

LD_LIBRARY_PATH는 .profile 에 설정되어야 하는 ORACLE 환경 변수이며,  운영체제에 따라 해당 변수는 다르다.

AIX 경우는 LIBPATH, HP-UX 경우는 SHLIB_PATH, Solaris와 Linux 경우는 위 변수를 사용하면 된다.

db2 “? SQL3508N”

로드 또는 로드 쿼리 중에 "<file-type>" 유형의 파일 또는 경로에 액세스하는 동안 오류가 발생했습니다. 이유 코드: "<reason-code>". 경로: "<path/file>".

이유 코드 3:

파일에 기록할 수 없거나 파일 크기를 변경할 수 없습니다.

디스크가 가득찼거나 하드웨어 오류 때문일 수 있습니다. 아래의 파일 유형 목록을 참조해서 로드를 실행하기에 충분한 스페이스가
있는지 확인하거나 다른 곳을 사용하도록 지정하십시오. 로드를 재시작하거나 다시 실행하십시오.

하드웨어 오류인 경우, 적절한 조치를 취한 다음 재시작하거나 로드를 다시 실행하십시오.

 

db2 load 유틸리티를 사용해서 데이터 적재를 수행하는 경우, 적재 작업 중 임시 파일을 만들어 적재 작업을 진행한다.

따라서 임시 파일 경로를 별도로 지정하지 않아 데이터베이스 기본 경로에 임시 파일이 생성되는 경우 파일 시스템이 가득차 작업이 실패하거나, 실패한 로드 작업을 반복 수행하면서 임시 파일이 쌓여서 파일 시스템이 가득차 버리는 상황이 발생한다.

 

실패한 load 작업은 재시작을 하거나 terminate를 해서 완료를 하지 않는 이상 임시 파일은 없어지지 않으며 함부로 삭제를 해서도 안된다.

load 작업 시 임시 파일 경로는 다음과 같이 지정할 수 있다.

LOAD FROM 추출파일.DEL OF DEL MODIFIED BY
COLDEL, NOROWWARNINGS SAVECOUNT 건수 MESSAGES
로드메시지파일.msg
TEMPFILES PATH
로드임시파일.tmp restart INTO 테이블이름

(참고) load 임시 파일 기본 경로: DB홈_경로/load/DB2mmmm.PID/DB2nnnnn.OID)

 

대용량 데이터를 적재하는 경우 임시파일 경로 설정을 해서 load 작업 수행할 필요가 있다.

 

참고문서

http://www-01.ibm.com/support/docview.wss?uid=swg1IC62561

http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.dm.doc%2Fdoc%2Fc0004598.html

SQL6048N 메시지

SQL6048N  START 또는 STOP DATABASE MANAGER 처리 중에 통신 오류가 발생했습니다.

설명:
START 또는 STOP DATABASE MANAGER 명령이 추가하려는 새 노드를 포함하여 sqllib/db2nodes.cfg 파일에 정의된 모든 노드와 연결을 설정하려는 중에 TCP/IP 통신 오류가 발생했습니다.

고객으로부터 SQL6048N 관련 문의가 온 적이 있었다.

이 오류메시지는 hostname 과 관련된 오류로 관련된 파일들을 살펴봐야 한다.

확인1) db2 명령어가 정상 수행되는가?

DB2가 운영 중인 상태라 하더라도 “호스트 명”이 변경되는 경우 db2 명령어는 수행되지 못하고 위 에러메시지를 반환한다. DB는 요청된 작업 수행에 있어서 “호스트 명”을 가지고 수행되기 때문에 “인스턴스 구성/생성할 때 사용된 호스트 명”이 바뀌는 경우 db 명령어는 수행되지 못한다.

따라서 db2pd, db2 등의 명령어가 정상 수행되는지 확인해 봐야한다.

 

확인2) /etc/hosts 파일명이 변경되었는가?

hosts 파일에 설정된 호스트 명과 db2set 의 DB2SYSTEM의 값, db2nodes.cfg (인스턴스홈/sqllib/ 하위에 위치) 의 호스트 명이 모두 동일한 지 확인한다.

* (참고) Enterprise Server Edition 이상에서만 db2nodes.cfg 파일이 존재함

문의를 요청한 고객사의 경우 보안 작업으로 hosts 파일의 권한을 변경하면서 생겼던 것으로 확인되었다. (대부분의 unix에서는 755 가 기본 권한이고, 특별히 파일 권한을 변경하는 작업은 없는 편인데 소유자 이외는 접근을 하지 못하도록 권한을 강화했던 것 같다.)

 

호스트 명 관련하여 변경이 되면 db2diag.log 파일에는 다음과 같은 메시지가 기록이 된다.

2011-10-28-07.57.17.335302-240 I70274A383 LEVEL: Error
PID : 2040060 TID : 1 PROC : db2
INSTANCE: DB2 NODE : 000
FUNCTION: DB2 UDB, command line process, clp_start_bp, probe:3
MESSAGE : CLP frontend unable to get REQUEST queue handle

 

참고로 hostname 변경과 관련된 IBM 기술문서를 소개한다.

문서: Changing hostname of the DB2 server

http://www-01.ibm.com/support/docview.wss?uid=swg21258834

 

문서: SQL6048N error on db2start with "CLP frontend unable to get REQUEST queue handle" error

http://www-01.ibm.com/support/docview.wss?uid=swg21569876

 

문서: db2start failing with SQL6048N error

http://www-01.ibm.com/support/docview.wss?uid=swg21578906

 

 db2diag 내용

 

2009-07-30-10.53.46.652901-300 I41527A389         LEVEL: Warning

PID     : 557298               TID  : 1           PROC : db2haicu

INSTANCE: db2                  NODE : 000

EDUID   : 1

FUNCTION: DB2 Common, SQLHA APIs for DB2 HA Infrastructure, sqlhaGetPolicyTypeFromSysFile, probe:400

MESSAGE : No matching instance record ... setting policy to none

DATA #1 : unsigned integer, 4 bytes

0

 

2009-07-30-10.56.04.951966-300 E41917A760         LEVEL: Error

PID     : 557298               TID  : 1           PROC : db2haicu

INSTANCE: db2                  NODE : 000

EDUID   : 1

FUNCTION: DB2 Common, SQLHA APIs for DB2 HA Infrastructure, sqlhaGetObjectState, probe:400

MESSAGE : ECF=0x90000557=-1879046825=ECF_SQLHA_CLUSTER_ERROR

          Error reported from Cluster

DATA #1 : String, 35 bytes

Error during vendor call invocation

DATA #2 : unsigned integer, 4 bytes

6

DATA #3 : String, 5 bytes

tec30

DATA #4 : unsigned integer, 4 bytes

6

DATA #5 : String, 5 bytes

tec30

DATA #6 : unsigned integer, 8 bytes

1

DATA #7 : signed integer, 4 bytes

0

DATA #8 : String, 83 bytes

Line # : 10828---2610-301 The resource class name IBM.AgFileSystem is not defined.

 

2009-07-30-10.56.04.963270-300 E42678A380         LEVEL: Error

PID     : 557298               TID  : 1           PROC : db2haicu

INSTANCE: db2                  NODE : 000

EDUID   : 1

FUNCTION: DB2 Common, SQLHA APIs for DB2 HA Infrastructure, sqlhaGetInfoForClusterNode, probe:700

RETCODE : ECF=0x90000557=-1879046825=ECF_SQLHA_CLUSTER_ERROR

          Error reported from Cluster

 

2009-07-30-10.56.04.984431-300 E43059A435         LEVEL: Error

PID     : 557298               TID  : 1           PROC : db2haicu

INSTANCE: db2                  NODE : 000

EDUID   : 1

FUNCTION: DB2 Common, SQLHA APIs for DB2 HA Infrastructure, sqlhaUIListAllNodesInClus, probe:300

RETCODE : ECF=0x90000557=-1879046825=ECF_SQLHA_CLUSTER_ERROR

          Error reported from Cluster

MESSAGE : Error in retrieving info for node at Cluster.

 

 원인
 

rsct 모듈 중에서 AIX에서 Default 설치되지 않는 storagerm 설치해야 .

 

(주의) prereqSAM 에서는 storagerm 설치가 되어있지 않아도 통과하는 버그가 있음!

 

 조치
 

다음과 같이 모듈이 설치 되고 나서야 제대로 동작함.

 

  rsct.opt.storagerm        2.4.11.0  COMMITTED  RSCT Storage Resource Manager

 

 

 

 db2haicu 내용
 

HADR 데이터베이스 HADRDB() 도메인에 추가하고 있습니다...

HADR 데이터베이스 HADRDB() 고가용성에 유효한 것으로 판별되었습니다. 그러나 노드는 HADR 데이터베이스 HADRDB 대기 노드이기 때문에 노드의 클러스터에 데이터베이스를 추가할 없습니다.  데이터베이스에 대해 자동 장애 복구를 구성하려면 HADR 데이터베이스 HADRDB 기본 노드에서 db2haicu 실행하십시오.

 

 db2diag 내용

 

[ Standby db2diag.log ]

 

RETCODE : ECF=0x9000056F=-1879046801=ECF_SQLHA_HADR_VALIDATION_FAILED

          The HADR DB failed validation before being added to the cluster

MESSAGE : Standby Node not configured for HADR.

 

[ Primary db2diag.log ]

 

RETCODE : ECF=0x9000056F=-1879046801=ECF_SQLHA_HADR_VALIDATION_FAILED

          The HADR DB failed validation before being added to the cluster

MESSAGE : Please verify that HADR_REMOTE_INST and HADR_REMOTE_HOST are correct and in the exact format and case as the Standby instance name and hostname.

 

 원인
 

다음과 같이 db2haicu 설정에서 Private Network 대한 호스트 이름을 입력할 , Private Hostname 사용하면 안됨!

 

도메인에 클러스터 노드 10.0.0.1이(가) 없습니다. 호스트 이름을 다시 입력하십시오.

svr1priv

도메인에 클러스터 노드 10.0.0.2이(가) 없습니다. 호스트 이름을 다시 입력하십시오.

svr2priv

 

 조치
 

다음과 같이 Private Network 대한 호스트 이름을, Public Hostname 사용해야 !!!

 

도메인에 클러스터 노드 10.0.0.1이(가) 없습니다. 호스트 이름을 다시 입력하십시오.

svr1

도메인에 클러스터 노드 10.0.0.2이(가) 없습니다. 호스트 이름을 다시 입력하십시오.

svr2

 

 

+ Recent posts