메인 페이지로 이동

Informix FAQ

Informix software

FAQ


Q.1 데이터베이스 접속시 -908 오류의 발생 원인 및 해결 방법

  • Minimize
  • Maximize

서버 쪽에서의 기본 설정을 먼저 확인 합니다.

  1. 환경변수로 지정이 되어있는 INFORMIXSERVER 값과 $INFORMIXDIR/etc/onconfig (또는 환경변수 $ONCONFIG)에 등록되어 있는 DBSERVERNAME/DBSERVERALIASES와 일치 하는지 확인해주세요.
  2. $INFORMIXDIR/etc/sqlhosts (또는 환경변수 $INFORMIXSQLHOSTS) 파일에 등록 되어 있는 서버의 서비스 정보를 확인합니다.
    sqlhosts 파일의 format은 아래와 같습니다. InformixServerName + ProtocolName + HostName + ServiceName [+ Options ]
    1. InformixServerName : onconfig의 DBSERVERNAME/DBSERVERALIASES에 등록되어 있는 이름이어야 합니다.
    2. ProtocolName : ipcshm, onsoctcp, ontlitcp 등 데이터베이스 서버와 클라이언트사이에 어떠한 방법으로 messaging을 할것인지를 지정하여 줍니다.
    3. HostName : 해당 데이터베이스 서버가 있는 호스트명 또는 해당 IP를 지정하여 줍니다. 호스트명을 사용하는 경우에는 /etc/hosts에 해당 호스트명과 IP가 등록되어 있어야 합니다.
    4. ServiceName : 데이터베이스 서버와 클라이언트사이에 네트워크 통신을 하는 경우 사용하게 될 Port번호를 지정하게 됩니다. 서비스명으로 명시할때에는 /etc/service에 해당 서비스명과 포트번호가 지정이 되어 있어야 합니다.

Client 쪽에서의 설정을 확인합니다.

  1. Informix Client SDK를 설치하시면 기본적으로 setnet32 창을 열어 server 쪽의 환경설정을 해주셔야 Client에서 접속이 가능합니다.
  2. 설정방법은 Tech Note VOL2 Q/A의 setnet32 설정방법을 참조하십시오.
    위의 기본 설정을 맞추었는데도 오류가 발생한다면, 아래의 사항을 다시 한번 확인하여 보십시오.
    1. 접속하고자 하는 데이터베이스 서버명이 올바른지 확인해주십시오. 특히 spelling 이 정확한지 다시 한번 확인하십시오.
    2. 접속하고자 하는 데이터베이스 서버명에 지정된 protocol(setnet32 의 Server Information 창 확인)에 onipcshm이면 안됩니다. 서버쪽에서도 인포믹스 서버명과 그 protocol이 맞아야 합니다.
    3. DB Server 쪽에 지정되어 있는 servername/serveralias ($INFORMIXDIR/etc/onconfig에 있음)를 확인한 후, Client에 있는 SETNET32 의 창을 열어서 INFORMIXSERVER 값이 일치하는 지 확인합니다.
    4. INFORMIXDIXSERVER 값이 일치해도 SETNET32 의 HOSTNAME 이 일치하지 않을 경우 -908 에러가 나는 경우가 있습니다. HOSTNAME 의 값도 SERVER 쪽과 일치하는 지 확인해 주십시오.
    5. 사용한 hostname이 실제 해당 서버의 ip를 지정하는지 확인해 보십시오. ( /etc/hosts, sqlhosts )
    6. INFORMIXDIR (informix 가 설치된 디렉토리, Client인 경우 ClientSDK 가 설치된 디렉토리) 이 일치하지 않은 경우 -908 오류가 발생할 수 있습니다. Setnet32창의 Enviroment TAB 의 INFORMIXDIR 값이 설치된 디렉토리로 지정되어 있는 지 확인해 주십시오.
    7. INFORMIX 서버가 사용하는 service name 정보가 정확하지 않을 경우 오류가 발생할 수 있습니다. Setnet32 창의 Server information TAB 의 service name 이 Server 쪽에서 사용하는 service name 과 일치하는 지 확인해 주십시오.
    8. Setnet32 에서 host name과 service 명을 사용하실 경우에는 Client에서 다음의 사항을 확인하십시오.
      * Window 95, 98 인 경우 :
      c:\windows\ hosts 파일에 host 이름과 해당 IP를 넣어줍니다.
      c:\windows\ services 파일에 services 이름과 port 번호를 넣어줍니다.
      * Window NT 나 Window 2000 인 경우 :
      c:\winnt\system32\etc\drivers\etc\hosts 파일에는 hosts 이름과 IP 를 등록해 줍니다.
      c:\winnt\system32\etc\drivers\etc\ services 이름과 port 번호를 넣어줍니다.

Q.2 online.log 에 -951/952/953 오류에 대하여

  • Minimize
  • Maximize

패스워드 체크시 오류가 발생하는 것으로, 시스템에 따라서 몇 가지 다른 오류번호로 표시될 수 있습니다.

일 반적으로 사용자가 패스워드를 잘못 입력한 경우에 대한 메시지로서, 실수로 잘못 입력하였을 경우도 있고, 대/소문자를 구분하기때문에 CapsLock으로 인한 문제일수도 있습니다. 이렇게 잘못된 패스워드를 사용하는 사용자는 해당 오류로 데이터베이스 접속이 차단이 되고, 이러한 내용이 online.log에 남게 됩니다.

실제 정확한 패스워드를 사용하였는데, 위와 같은 오류가 발생하였다면 아래의 경우를 추가적으로 확인하여 보시기 바랍니다.

  1. Client 쪽에서 들어오는 USER 의 password 가 틀려서 나는 경우로, setnet32에서 password를 정확히 입력하였는지 확인하십시오.
  2. Client 쪽에서 들어오는 USER 의 이름이 틀려서 나는 경우로, 정확한 사용자명으로 들어오도록 조치한다. Informix의 setnet32 쪽의 USER 명이 잘못 입력되었다면 해당 부분을 올바른 USER 이름으로 수정한다.
  3. SERVER 쪽의 $INFORMIXDIR/bin/oninit 파일이나 기타 informix 관련 파일이 owner 와 group 이 잘못 되어있을 경우로, 제품 인스톨 후 강제적으로 $INFORMIXDIR 하위의 파일에 대한 권한을 사용자가 임의로 변경하시면 데이터베이스 서버 운영에 좋지 않은 영향을 미치므로 삼가 하십시오.
    Database Server에 있는 Informix Daemon인 oninit 파일의 owner와 group을 확인한다.
    ls -l $INFORMIXDIR/bin/oninit
    -rwsr-sr-- 1 root informix 11557920 4월 8일 19:55 oninit
    위과 같이 oninit 파일의 owner 와 group 은 root:Informix, mode는 6754 이어야 합니다. 만일에 해당 내용이 변경이 되어있다면, owner/group/mode를 맞추신 후에 데이타베이스 서버를 재기동 해야 합니다. 참고로 제품 설치시 각 파일의 최초 권한에 대한 내용은 $INFORMIXDIR/etc/idsfiles (제품에 따라서 XXXfiles) 를 확인하시면 됩니다.
    ※ Manual하게 직접 해당 파일의 내용을 바꾸게 되면 다른 지속적인 문제가 발생할 경우도 생기기 때문에 가장 확실한 방법은 install script를 다시 실행하는 것입니다.
  4. OS 의 user에 password shadowing을 사용하는 경우에 발생할 수 있습니다. 인포믹스 특정 버전 및 OS(특히 Linux)에서는 password shadowing을 사용하시는 경우에 발생할 수 있습니다. 이 기능을 disable 시키시는 것이 workaround 입니다. 또한 HP-UX같은 경우에는 password shadowing을 사용하실 때, tsconvert 명령어가 아닌 SAM에서 지정해주어야 이 기능을 정상적으로 사용하실 수 있습니다.
  5. passwd aging이 지정된 경우 ( 특히 window system 의 경우 ), 해당 유저에 대한 passwd가 expired된 경우에 발생할 수 있습니다. 이러한 경우에는 해당 유저 password를 새로 변경하시거나, 암호 사용기간에 대한 제한이 없도록 설정을 변경하십시오.
  6. passwd 파일이 corrupt 된 경우가 있을 수 있습니다. 일반적으로 시스템 리부팅 후 passwd 파일이 복구되는 경우가 있습니다. 시스템 리부팅 후에도 복구가 되지 않으면 시스템 엔지니어의 지원을 받아 해당 파일을 복구 하십시오.

Q.3 Informix JDBC Driver 설치 및 Connection 방법

  • Minimize
  • Maximize
  1. 제품다운 받는 방법 : www.informix.com/evaluate(link resides outside of ibm.com)자료실에 가셔서 다운 받으시면 됩니다.

  2. JDBC 드라이버 설치 방법
    설치전의 준비 사항은 TECH NOTE VOL 9 을 참조하십시오.
    1. JDK가 먼저 설치되어 있어야 합니다. 확인 방법은 "java-version"을 실행시키면 현재 시스템에 설치되어 있는 jdk의 버전을 확인할 수 있습니다.
    2. jdbc 제품을 설치할 디렉토리에 풀면 setup.class라는 파일이 생깁니다. 이를 이용하여 다음을 실행합니다.
    3. "java setup" 을 실행시키면 인스톨을 시작합니다. 단, CLASSPATH에 current path가 추가 되야 합니다. 그렇지 않은 경우에 setup.class가 없다고 오류가 발생합니다.
    4. 가지고 있는 제품의 Serial Number 와 Key를 사용하여 설치합니다. (반드시 X window에서 실행하여야 하며, 인스톨 도중 setup.class를 overwrite 하겠느냐는 질문이 나오는 경우에는 'No'를 선택한다.)

  3. 환경설정
    설치가 완료된 후 실제 컴파일 및 실행을 위해서는 Informix jdbc driver에 대하여 $CLASSPATH에 추가하여야 합니다. ifxjdbc.jar(ifxsqlj.jar, ifxtools.jar)가 full path로 추가되어야 합니다.
    예를 들어 설치한 디렉토리를 $JDBCHOME으로 설정한다면, CLASSPATH에 아래와 같이 추가합니다.
    예) ksh 일 경우
    export JDBCHOME=/informix/JDBC
    export
    CLASSPATH=.:$JDBCHOME/lib/ifxjdbc.jar:$JDBCHOME/lib/ifxsqlj.jar: $JDBCHOME/lib/ifxtools.jar:$CLASSPATH


  4. Connection URL에 대하여
    Informix JDBC driver를 이용한 예제가 $JDBCHOME/demo 디렉토리에 있습니다.
    JDBC를 이용하여 Connection URL의 구성은 아래와 같습니다.
    jdbc:informix-sqli://SERVER:PORTNO/MYDATABASE:
    informixserver=MYINFORMIXSERVER; user=MYUSER;password=MYPASSWD; PARAMETER=VALUE


    SERVER: Informix Database server가 있는 시스템명 또는 IP
    PORTNO : Informix Database server가 사용하는 portno (sevice name, in sqlhosts )
    MYDATABASE : 실제로 connect하고자 하는 데이터베이스명 ( 생략가능 )
    MYINFORMIXSERVER : 실제로 Informix Database server에서 지정이 되어있는 Informixserver명
    MYUSER : connect권한을 가진 사용자명
    MYPASSWD : 해당유저의 password.
    PARAMETER : 데이터베이스 접속시 특별히 사용하고자 하는 parameter명, 예를 들면, DB_LOCALE, .. (생략가능하며, parameter1=value1; parameter2=value2;...; 처럼 사용가능)
    VALUE : 해당 파라미터에 대한 값을 지정하여 준다. 예를 들면 ko_kr.ksc

Q.4 테이블이 차지하고 있는 크기 알아내기

  • Minimize
  • Maximize

우선 다음의 쿼리를 통하여 테이블에 대한 할당 정보( 테이블 사이즈 및 extent 정보)를 알아봅니다.
이러한 정보를 통하여 테이블을 re-org할 때, 필요한 공간의 크기를 계산해낼 수 있습니다.

dbaccess
database sysmaster ;
SET isolation to dirty read;
SELECT dbsname, tabname, count(*) num_of_extents, sum(pe_size ) total_size
FROM systabnames, sysptnext
WHERE partnum = pe_partnum
GROUP BY 1, 2
ORDER BY 3 desc, 4 desc;

위의 결과값을 차례로 설명하면 dbsname은 DBSpace의 이름, tabname은 테이블이름, num_of_extents는 extent의 수, total_size는 테이블이 차지하고 있는 page의 개수입니다.
테이블의 정확한 사이즈를 구하기 위해서는 2Kbyte page 시스템 (SUN, HP 등)은 total_size * 2 로 4Kbyte page 시스템 (NT, AIX, SEQUENT 등)은 total_size * 4 를 하면 테이블의 차지하고 있는 공간을 kbyte 단위로 계산할 수 있습니다.

Q.5 ESQL 프로그램 실행시 라이브러리 로드오류에 대하여

  • Minimize
  • Maximize

[오류 메세지] .ld.so.1: ./demo1: 치명적: libifsql.so: 열기 실패: 해당 파일이나 디렉토리가 없음. 중단됨(Killed)

해당 오류는 프로그램 실행시 shared library를 로드하다가 실패한 경우에 발생하는 오류입니다. 인포믹스 라이브러리를 shared library 경로에 추가하여 주십시오.

  1. ESQL/C 프로그램을 컴파일시에 Static library를 사용할 것인지 Shared library를 사용할 것인지에 대하여 선택할 수 있습니다. Static library option 을 주고 컴파일 할 경우에는 library 가 compile time 시에 ESQL/C 실행모듈에 포함됩니다.

    esql -static demo1.ec -o demo1

    Shared library option 을 주고 compile 할 경우에는 ESQL/C 실행모듈에 관련 라이브러리가 포함되지 않습니다. 각각의 ESQL/C 실행모듈은 shared library 의 위치만 저장하게 됩니다. 따라서 이 경우에는 실행 시 환경변수에 library 의 위치를 명시해 주어야 합니다. (default compile option )

    esql [-shared] demo1.ec -o demo1
  2. 따라서 위의 에러는 shared library option 을 주고 컴파일 한 경우 환경변수에 사용한 library 의 경로를 명시 하지 않고 실행시킨 경우라고 볼 수 있습니다. 다음의 INFORMIX 환경 변수들을 지정하신 후 실행하십시오.
    ※ 기본환경변수 : INFORMIXDIR , INFORMIXSERVER
    ※ 라이브러리 관련 환경변수: LIBPATH(AIX), LD_LIBRARY_PATH(Sun, Sequent), SHLIB_PATH (HP-UX) 등 시스템의 종류에 따라 해당 parameter명이 달라질 수 있음.
    ※ Sun일 경우 ksh에서의 예를 들면 아래와 같이 지정을 하여 준다.
    export
    LD_LIBRARY_PATH=$INFORMIXDIR/lib/esql:$INFORMIXDIR/lib/dmi:
    $INFORMIXDIR/lib:$LD_LIBRARY_PATH

Q.6 데이터베이스 접속시 -1829가 발생하는 원인과 해결방법

  • Minimize
  • Maximize

아래와 같은 경우를 확인하여 보십시오.

  1. 실제 해당 파일이 $INFORMIXDIR/msg에 없는경우, csdk 버전을 확인하고 제품을 재 설치한다.
  2. 실제 해당 파일이 $INFORMIXDIR/msg에 있는 경우로서, INFORMIXDIR 이 제대로 설정되어 있지 않은 경우에 발생할 수 있으므로, 이와 같은 경우에서는 INFORMIXDIR이란 환경변수가 시스템 환경변수에 제대로 설정되어 있는지 즉, Informix가 설치된 directory가 맞게 설정되어 있는지 설정 값을 확인하시면 되겠습니다. 예를 들면, Dos창에서 set 명령어를 통한 INFORMIXDIR 확인
  3. $INFORMIXDIR/msg 아래에 있는 citoxmsg.pam이란 존재하며, $INFORMIXDIR이 제대로 설정되어 있는 경우에 클라이언트 제품이 설치된 디렉토리에 SPACE가 포함된 경우에 발생할 수 있습니다. 이러한 경우에는 Client-SDK 제품을 다시 설치하셔야 합니다.
    단, 주의 하실 점은 CSDK설치 시 설치 옵션 중 "custom" 으로 들어가셔서 Program Files 밑의 directory가 아닌 C:\나 D:\아래에 Informix란 directory를 만들어 설치하시기 바랍니다.

Q.7 데이터베이스 접속시 -27001오류가 발생하는 원인 및 해결 방법

  • Minimize
  • Maximize
  1. 실제로 데이터베이스 서버가 on-line mode인지 확인하십시오. 대기모드(Quiescent mode)나 정지모드(Off-line) 인 경우에는 데이터베이스로의 접속이 불가능한 상태입니다. 데이터베이스의 상태를 확인하기 위해서는 데이터베이스 서버로 로그인 한 후에 "onstat -"를 실행시키면 데이터베이스 상태를 확인하실 수 있습니다. On-line mode가 아닌 상태에서의 -27001오류는 무시하셔도 됩니다.
  2. Network I/O error로 여러 client에서 동시에 접속을 하려 할 때 발생할 수 있습니다. 대부분의 경우에는 DB단의 문제이기 보다도 OS 문제로 많이 발생합니다. 즉, OS단에서 각 서버로 접속하는 connection의 수를 제한 할 수 있는데, 그 수치에 다다르면 오류가 발생하는 것입니다. 이럴 경우에는 "ulimit -a" 로 descriptor(or nfiles)의 값을 확인하고 OS 엔지니어를 contact하셔서 적당한 수치로 변경하기 바랍니다.
  3. TCP/IP connection 자체 문제거나 network binding이 안되어 발생할 수도 있으므로 Network쪽을 확인하셔야 합니다. (즉, 이미 다른 쪽에서 사용하는 port일 수도 있음). 주로 shared memory connection으로 연결하여 테스트 해보면 확인 가능한 사항입니다.
  4. /INFORMIXTMP에 garbage가 남아있는 경우에도 발생할 수 있습니다. 인포믹스 엔진을 내린 후 해당 디렉토리의 모든 파일(hidden 파일포함)을 삭제한 후 서버를 재기동 합니다.
  5. message log에 가끔씩 발생한다면 warning정도로만 생각해도 서버 운영에는 지장이 없을 것입니다. 하지만 multi-processor로 운영되는 서버에서 자주 발생한다면, poll thread와 listener thread의 개수를 늘려줘야 합니다.
  6. Informix-SE server를 사용한다면, sqlexecd daemon이 떠 있는 지 확인하고, client에서 INFORMIXCONTIME 이나 INFORMIXCONRETRY 환경변수를 설정해서 connection time이나 retry 회수를 늘려준다.

Q.8 PHP와 연동 중 -439 오류가 발생하는 원인

  • Minimize
  • Maximize
  1. PHP 설치가이드: 기본적인 PHP와 인포믹스 연동방법은 인포믹스 고객 서비스의 자료실에 있는 TechNote Volume8에 자세히 나와 있습니다.
  2. PHP+Informix 사용시 주의해야 할 사항: 인포믹스와의 접속문제 중 대다수를 차지하는 문제가 기본 환경 설정 문제입니다. 대부분 오타나 잘못 된 서비스 정보 등 아주 작은 부분에서 시작이 됩니다. 다시 한번 인포믹스의 환경설정을 검토하시기 바랍니다. (INFORMIXDIR, INFORMIXSERVER, service name/port, etc)
  3. -439 오류는 PHP쪽 bug로 등록이 되어 있습니다. (bugs.php.net/bug.php?id=8267&edit=1 link resides outside of ibm.com) 에 들어가시면 좀 더 자세한 내용을 보실 수 있습니다.) Workaround로는 php가 설치된 디렉토리로 가면 ifmx.ec라는 파일이 있습니다. 그 소스에서 Connect시 사용하는 옵션을 생략(with permanent)하시고 재컴파일 하시기 바랍니다.
  4. 일반적으로 인포믹스와 PHP를 연동하시는 경우에 PHP 관련 문제가 bugs.php.net (link resides outside of ibm.com)에서 다양하게 확인 가능합니다.

Q.9 테이블에 수정/추가/삭제/Alter/index 설정/trigger 설정 시 -...

  • Minimize
  • Maximize

Q.9 테이블에 수정/추가/삭제/Alter/index 설정/trigger 설정 시 - 107/244/106 등의 lock 관련 오류의 발생 원인 및 해결/대처 방법

  1. lock이 걸리는 이유는 일반적으로 lock이 해제가 안되었을 때, 다른 사용자 해당 테이블에 업데이트 (수정/추가/삭제)하고 있을 때 발생합니다. 이러한 현상이 빈번하게 발생한다면, lock contention을 최소화 하기 위해서 기본적으로 application 단에서 transaction 이 짧게 일어날 수 있도록 디자인을 다시 하는 것이 중요합니다. 또한 다음과 같이 page level의 lock mode를 row level로 변경하여 같은 공간에 있는 서로 다른 데이터의 동시 access가 가능하도록 할 수 있습니다.

    ALTER TABLE table명 modify lock mode (row);

    그밖에 프로그램 시작 단에 다음과 같이 lock wait time을 설정하여 lock 오류를 반환하기 전에 지정된 시간(초)동안 최대 wait할 수 있도록 합니다.
    SET LOCK MODE to wait 시간(초단위);

  2. 해당테이블에 lock을 갖고 있는 사용자 알아내는 방법
    사용자 프로그램이 lock을 풀지못한 채 비정상적으로 종료되고 데이터베이스에 세션이 남아있는 경우 Lock을 잡고 있는 session을 알아내어 onmode -z로 강제로 해당 세션을 clear시킬수 있습니다.

    1. dbaccess 에서 아래의 쿼리로 해당 테이블의 partnum (hex값)을 구한다.
      SELECT tabname, hex(partnum) from systables where tabname = '실제 테이블명';

    2. onstat -k (lock 정보) 에서 위에서 구한 partnum 중 뒤의 6자리와 동일한 tblsnum을 찾아 그 owner를 찾는다.

    3. onstat -u (user session 정보) 에서 위의 owner 와 같은 값을 갖고 있는 address 값을 찾아 그것의 session id를 onmode -z로 강제로 종료시킨다.

  3. 해당 테이블에 access하는 비정상적인 resource 체크하는 방법: 실제로 해당 테이블에 대한 lock이 존재하지 않는 경우에도 해당 오류가 발생할수 있습니다.
    1. 문제의 table의 partnum을 알아냅니다.
      SELECT tabname, hex(partnum) from systables where tabname = '실제 테이블명';
      tabname(expression)
      customer0x0010004B

    2. 위의 hex값을 onstat -g opn에서 찾는다. (알파벳은 소문자로)
      $ onstat -g opn |grep 10004b
      81 0xc54cf438 3 0x00000000 0x00000003 0x0010004b 1 1 0

    3. 위에서 나온 rstcb값을 onstat -u로 찾는다.

      $ onstat -u |grep c54cf438
      c54cf438 Y--P--- 53 informix ttypa c5af9828 0 2 25 0

    여기서 해당 세션정보가 나오지 않는 경우에 세션이 비정상 종료되면서 해당테이블을 open한 상태로 존재하는 경우입니다. 이러한 경우에는 Informix Database 서버를 재기동 하셔야 합니다.

Q.10 Windows환경에서 데이터베이스 접속시 -25590 오류의 발생원인

  • Minimize
  • Maximize

가장 먼저 기본적으로 하셔야 할 작업이 client단의 환경 설정 내용과 제품이 정상적으로 설치 되었는지 확인하고, registry의 내용 중 INFORMIXSQLHOSTS/INFORMIXSERVER/INFORMIXDIR 등의 내용이 올바르게 등록 되었는지 확인 합니다. 올바르게 기제 되었음에도 불구하고 오류가 발생한다면, Windows 환경에서 정상적인 log-in 절차가 아닌 id/password를 그냥 "Cancel"하고 로그인 한 경우가 많습니다. 이럴 때에는 다시 정상적으로 window log-in을 하십시오.

Q.11 Informix JDBC Driver 로 connection중 lvarchar ...

  • Minimize
  • Maximize

Q.11 Informix JDBC Driver 로 connection중 lvarchar 컬럼에 들어가 있는 한글이 깨져서 보이는 경우

현재 사용하시는 informix jdbc driver를 확인해 주세요. jdbc 2.11이나 jdbc2.21jc2x1을 사용하시면 됩니다.
JDBC driver는 www.informix.com/evaluate(link resides outside of ibm.com)나 자료실의 Product download에서 받을 수 있습니다.

무엇을 도와드릴까요?

Here-To-Help

IBM 연락처


또는 02-3781-7500
으로 전화하세요
Priority code:
100KS03W