루틴 디버그 제한사항

이 페이지에서는 해당 제한사항을 해결하기 위해 제안된 메소드 및 루틴 디버깅 시 발생할 수 있는 제한사항에 대해 설명합니다. 이 디버거에 대한 추가 제한사항이 포함되어 있는 제품 readme를 참조하십시오.

일반사항

업데이트 항목에 대해서는 루틴 디버거의 알려진 문제점을 참조하십시오.

구분된 루틴 이름
루틴 디버거는 구분된 스키마 또는 루틴 이름이 있는 루틴에 제한된 지원을 제공합니다. 이러한 루틴은 데이터 정의 보기의 컨텍스트 메뉴가 아니라 디버그 실행 구성 대화 상자에서 실행해야 합니다.
단계 조치 사용
디버스 세션이 시작될 때 단계 조치 단추(예: Step Over 단추)가 사용 가능하지 않은 경우 이 단추를 사용 가능하게 설정하는 맨 위 스택 프레임을 선택하십시오.
세션 관리 프로그램
제품에 포함된 세션 관리 프로그램을 사용하십시오. 세션 관리 프로그램은 서버에 있거나 네트워크에 있거나 클라이언트에 있을 수 있습니다. 다음 단계에서는 제품에 포함된 세션 관리 프로그램을 사용하여 클라이언트에서 세션 관리 프로그램을 구성하는 방법에 대해 설명합니다. 이 명령문은 DB2® PL/SQL 및 Oracle 구성에는 적용되지 않습니다.
  1. 명령 창을 열고 제품 설치 디렉토리로 변경하십시오. 디폴트로 제품은 Windows의 C:\Program Files\IBM\SDP70 디렉토리에 설치됩니다.
  2. 명령 창에서 db2dbgm.bat를 실행하여 세션 관리 프로그램의 포트 번호 및 IP 주소를 기록하십시오.
  3. Workbench를 시작한 후 디버거의 환경 설정을 수정하여 로컬 세션 관리 프로그램을 사용하십시오.
    1. > 환경 설정을 클릭하고 실행/디버그 노드를 펼친 후 DB2 루틴 디버거를 클릭하십시오.
    2. 디버거 분할 영역에서 이미 실행 중인 세션 관리 프로그램 사용을 선택하십시오.
    3. 호스트 필드에서 머신의 IP 주소를 지정하십시오. 세션 관리 프로그램이 실행 중인 명령 또는 터미널 창에서 IP 주소를 확보할 수도 있습니다.
    4. 포트 필드에서 로컬 세션 관리 프로그램에 포트를 지정하십시오. 디폴트로 포트 번호는 4554입니다. 세션 관리 프로그램이 실행 중인 명령 또는 터미널 창에서 포트 번호를 확보할 수도 있습니다.
변수 이름
큰따옴표를 포함하는 변수 이름은 Linux, Unix 및 Windows용 DB2 데이터베이스의 루틴을 디버깅하는 데 지원되지 않습니다.
중단점
Optim™ Development Studio 버전 2.2.1.1의 경우 개별 중단점을 사용 불가능하게 할 수 없습니다.
Linux, UNIX 및 Windows용 DB2 데이터베이스 버전 10.1 Fixpack 2 이상 데이터베이스에서만 사용 가능한 기능
이러한 디버깅 기능은 Linux, UNIX 및 Windows용 DB2 데이터베이스 버전 10.1 Fixpack 2 이상 데이터베이스에서 루틴을 디버그하는 경우에만 사용 가능합니다.
  • 선언된 루틴 디버깅
  • 트리거 디버깅
  • PL/SQL 익명 블록 디버깅
  • SQL 및 XQuery 편집기에서 디버거 시작
  • 루틴 편집기에서 지속적 중단점 설정
  • 루틴을 재배치하지 않고 디버깅 옵션을 사용하여 루틴 재컴파일
  • 변수 보기에서 다음 유형의 변수 보기
    • 글로벌 및 패키지 변수
    • 연관 배열
    • 행의 배열
배열 변수
루틴 디버거는 변수 보기에 배열 변수의 처음 100,000개 요소만 나열합니다.
BLOB 데이터 유형
출력 매개변수의 데이터 유형이 2진 대형 오브젝트(BLOB)인 경우 출력은 대문자로 리턴됩니다. 리턴되는 값이 16진수로 표시되므로 이로 인해 문제점이 발생하지 않습니다.
DB2 SYSDEBUG 역할
Linux, UNIX 및 Windows용 DB2 버전 10.1 Fixpack 2 이상 데이터베이스에 배치된 루틴을 디버그하려면 루틴을 배치하는 데이터베이스 사용자 ID가 SYSDEBUG 역할의 멤버여야 합니다.

SQL 및 Java 루틴

트리거

DB2 데이터베이스에서 트리거를 디버그할 때 한 번에 하나의 트리거만 디버깅할 수 있습니다. 동시에 둘 이상의 트리거 디버깅은 지원되지 않습니다.

PL/SQL 및 Oracle 데이터 유형

루틴 디버거에서 지원하는 않는 PL/SQL 및 Oracle 데이터 유형을 참조하십시오.

PL/SQL 루틴

Oracle 제한사항

CURSOR 유형이 있는 프로시저를 디버깅하고 프로시저 중간에 중단점에서 중지되는 경우, 종료를 클릭하는 경우 경우에 따라 출력 보기의 항목이 정지됩니다. 이 제한사항을 일시적으로 해결하려면 종료 대신에 재개를 클릭하십시오.

Informix 제한사항

다음 목록은 Informix® 데이터베이스에서 스토어드 프로시저를 디버깅하는 경우 제한사항입니다.
  • Informix 데이터베이스에서 스토어드 프로시저를 디버깅할 때 내장 디버거를 사용하거나 이미 실행 중인 세션 관리 프로그램을 사용해야 합니다. 연결된 각 서버에서 실행 중인 세션 관리 프로그램의 기본 환경 설정이 지원되지 않습니다.

    루틴 디버거 세션 관리 프로그램 위치에 대한 환경 설정을 변경하려면 > 환경 설정을 선택하십시오. 환경 설정에서 실행/디버그 > 루틴 디버거를 선택하여 디버깅을 위한 환경 설정을 선택하십시오 . 디버깅할 루틴의 데이터베이스 서버를 선택하십시오. 루틴 디버그 세션 관리 프로그램 위치 섹션에서 내장 세션 관리 프로그램 사용 또는 이미 실행 중인 세션 관리 프로그램 사용을 선택하십시오.

  • 데이터 프로젝트 탐색기 보기에서 Informix 스토어드 프로시저를 마우스 오른쪽 단추로 클릭하고 Informix 데이터베이스의 연결이 끊기면 디버그가 사용 불가능합니다. 디버깅을 사용하려면 데이터베이스에 연결하십시오. 또한 데이터 소스 탐색기 보기에서 스토어드 프로시저를 디버그할 수도 있습니다.

Linux 제한사항

로컬 DB2 데이터베이스에서 루틴을 디버깅할 경우 오류 번호 SQL1224N을 수신할 수 있습니다.

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N A database agent could not be started to service a request, or was terminated as a result of a database system shutdown or a force command. SQLSTATE=55032

이 문제점은 Linux 커널(Linux 커널 Bugzilla 버그 #351)에 문제가 있기 때문입니다. 다음 지시사항은 CLI(Call Level Interface) 대신 DB2의 TCPIP 연결 메소드(루프백으로)를 사용하는 임시 문제점 해결 방법입니다. 이 프로시저를 사용하면 디버거가 이전과 동일한 데이터베이스 별명을 사용합니다.

  1. 원격 DB2 클라이언트의 포트가 설정되지 않은 경우, 루트로 로그온하여 /etc/services에 TCP/IP 포트를 작성하십시오(예: db2c_db2inst1 50000/tcp). 또는, 제어 센터를 사용하여 TCP/IP 포트를 사용할 수 있습니다(데이터베이스 인스턴스의 통신 특성 설정). 원격 DB2 클라이언트의 기존 포트를 사용할 수 있습니다.

    2 - 7단계를 수행하려면 DB2 인스턴스 소유자로 로그인해야 합니다.

  2. 데이터베이스 관리자가 TCP/IP 통신 프로토콜의 연결 관리자를 시작하도록 구성하십시오. 해당 구성이 이미 수행되었는지 확실하지 않은 경우, 다음 명령을 실행하십시오.
    db2set db2comm

    출력에 키워드 tcpip가 포함되어 있지 않은 경우 다음 명령을 입력하여 db2comm 레지스트리 변수가 tcpip를 포함하도록 업데이트해야 합니다.

    db2set db2comm=<existing protocol names>,tcpip

    db2comm 레지스트리 변수가 데이터베이스 관리자 시작시 사용할 프로토콜의 연결 관리자를 판별합니다. 키워드를 쉼표로 구분하여 다중 통신 프로토콜에 대해 이 변수를 설정할 수 있습니다.

    db2comm 레지스트리 매개변수가 지정한 프로토콜의 연결 관리자를 시작하도록 db2start 명령을 다시 실행해야 합니다. 7단계에서 DB2를 재시작하기 때문에 지금은 재시작하지 않아도 됩니다.

    .
  3. /etc/services에 정의된 연결 서비스 이름으로 SVCENAME 데이터베이스 관리자 구성 매개변수를 업데이트하십시오(1단계).

    현재 SVCENAME 설정을 확인하려면 다음 명령을 입력하십시오.

    db2 get dbm cfg | grep -i svcename

    SVCENAME의 설정을 업데이트해야 하는 경우, 다음 명령을 입력하십시오.

    db2 update dbm cfg using svcename <connection service name>

    여기서, <connection service name>은 대소문자를 구분하며 /etc/services에 있는 서비스 포트 이름과 일치해야 합니다(예: db2 update dbm cfg using svcename db2c_db2inst1).

    데이터베이스 관리자 구성의 업데이트 항목은 다음 db2start 명령이 실행될 때까지 적용되지 않습니다. 7단계에서 이를 수행합니다.

  4. 다음 명령을 입력하여 루프백 노드를 카탈로그화하십시오.
    db2 catalog tcpip node <nodename> remote <host name> server <connection service name>

    여기서,

    • <nodename>은 카탈로그화될 노드의 로컬 별명입니다. 이 별명은 노드를 식별하는데 사용하는 워크스테이션의 임의의 이름입니다(예: db2 catalog tcpip node mynode remote 127.0.0.1 server db2c_db2inst1).
    • <host name>은 DB2가 설치되는 머신의 이름입니다. 지정하는 호스트 이름에는 머신과 정확하게 일치하는 이름 및 대소문자를 사용해야 합니다. 시스템의 이름이 확실하지 않은 경우, 제어 센터를 확인하십시오.

    카탈로그 명령이 제대로 작동하는지 확인하려면 다음 명령을 실행하십시오.

    db2 list node directory

    이 명령의 샘플 출력은 다음과 같습니다(공백행은 읽기에 편리하도록 제거되었음).

    Node Directory
    Number of entries in the directory = 1
    Node 1 entry:
    Node name = MYNODE
    Comment =
    Protocol = TCPIP
    Hostname = 127.0.0.1
    Service name = db2c_db2inst1
  5. 다음과 같이 데이터베이스를 카탈로그화하십시오. 각 명령의 영향을 추적하려면 다음 명령을 참조하여 샘플 출력을 생성하십시오.
    1. db2 catalog db <database name> as <database alias>
    2. db2 uncatalog db <database name>
    3. db2 catalog db <database alias as <database name> at node <nodename>
    예를 들어,
    db2 catalog db WAS as WASLOOP
    db2 uncatalog db WAS
    db2 catalog db WASLOOP as WAS at node MYNODE

    Notes®:

    • 데이터베이스 별명은 원하는 임의의 이름이 될 수 있지만 데이터베이스 이름과 동일할 수 없습니다. 별명은 8자 이하여야 합니다.
    • 데이터베이스를 제대로 카탈로그화하지 않은 경우, 오류 번호 SQL1334N을 수신하게 됩니다.
    • 루틴을 디버깅하려는 모든 데이터베이스에서 5a-5c 단계를 반복해야 합니다.

    5a-5c 단계의 샘플 출력

    5a 단계 전에 WAS라는 로컬 데이터베이스가 이미 작성되었습니다. db2 list db directory 명령에는 다음 메시지와 유사한 출력이 포함되어 있습니다.

    System Database Directory
    Number of entries in the directory = 1
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    5a 단계 수행 후 db2 list db directory에는 다음 메시지와 유사한 출력이 포함되어 있습니다.

    System Database Directory
    Number of entries in the directory = 2
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0
    
    Database 2 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    5b 단계 수행 후 db2 list db directory에는 다음 메시지와 유사한 출력이 포함되어 있습니다.

    System Database Directory
    Number of entries in the directory = 1
    
    Database 1 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    5c 단계 수행 후 db2 list db directory에는 다음 메시지와 유사한 출력이 포함되어 있습니다.

    System Database Directory
    Number of entries in the directory = 2
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WASLOOP
    Node name = MYNODE
    Database release level = 9.00
    Comment =
    Directory entry type = Remote
    Catalog node number = -1
    
    Database 2 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    catalog db 명령이 제대로 작동하는지 확인하려면 다음 두 명령을 실행한 후 다음 샘플 출력을 참조하십시오.

    db2 connect to wasloop
    db2 connect to was

    여기서 db2 connect to wasloop는 연결 정보를 인쇄하며 db2 connect to was는 SQL1403N을 제공합니다.

    db2 connect to wasloop의 샘플 출력은 다음과 같습니다.

    Database Connection Information
    System Database Directory
    
    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WASLOOP

    db2 connect to was의 샘플 출력은 다음과 같습니다.

    Database Connection Information
    System Database Directory
    
    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WAS
  6. 인증 메커니즘을 클라이언트 인증으로 업데이트하십시오. 다음 명령을 입력하십시오.
    db2 update dbm cfg using authentication client

    해당 명령이 제대로 작동하는지 확인하려면 다음 명령으로 새 설정을 표시하십시오.

    db2 get dbm cfg

    샘플 출력은 다음과 같습니다.

    ....
    Database manager authentication     (AUTHENTICATION) = CLIENT
    ....
  7. DB2를 다시 시작하여 디렉토리 캐시를 새로 고치십시오. 예를 들어,
    db2stop
    db2start

    참고: db2stop force를 사용하여 활성 데이터베이스 연결을 모두 닫아야 할 수 있습니다.

  8. WAS의 경우, admin.config 파일을 업데이트할 필요가 없습니다. WebSphere® 애플리케이션의 경우, 기존 데이터 소스 구성을 변경할 필요가 없습니다.
  9. 데이터베이스를 삭제하려면 다음 명령을 실행하십시오.
    1. db2 attach to <nodename> user <userid> using <password>
    2. db2 drop db <database name>
      예를 들어,
      db2 attach to MYNODE user myid using mypasswd
      db2 drop db WAS

피드백