DB2에 내장된 함수 실행 시 위와 같은 SQ0444N 메시지를 보게 되는 경우가 생길 수 있다. 내장 함수 호출 시, db2 내부적으로는 db2clifn1.a 라이브러리를 참조하게 되는데 이 라이브러리 파일이 없어서 발생을 하는 경우가 있다.

$> db2 ? sql0444n

SQL0444N  루틴 "<routine-name>"(특정 이름 "<specific-name>")이(가) 라이브러리 또는

                경로 "<library-or-path>", 함수 "<function-code-id>"에서 코드로 구현되었지만

                액세스할 수 없습니다. 이유 코드:  "<code>".

설명:

데이터베이스 관리 프로그램이 루틴 "<routine-name>"(특정 이름 "<specificname>")을(를) 구현하는 코드 본문에 액세스하려고 했지만, 이유 코드"<code>"(으)로 지정된 이유로 인해 액세스할 수 없습니다(코드는 아래 나열되어 있음). 루틴을 구현하는 파일은 "<library-or-path>"(으)로 식별되고 함수는 "<function-code-id>"(으)로 식별됩니다.

4

         다음 중 한 이유로 인해 "<library-or-path>"에서 파일을 찾을 수 없습니다.

1. 루틴 CREATE 문 정의의 EXTERNAL 절에 지정된 위치에서 루틴과  연관된 루틴 라이브러리가 사용 불가능합니다.

2. 루틴 라이브러리가 찾을 수 없는 공유 라이브러리에 종속적입니 다(UNIX 기반 시스템의 LIBPATH 환경 변수 또는 Windows 시스템의 PATH 환경 변수에 지정된 디렉토리 병합 내). 관련된 간접적인 다중 레벨로 인해 이 이유 코드가 발생할 수 있습니다. 예를 들어, 루틴 본문 X를 찾을 수 있으며, 필요로 하는 공유 라이브러리 Y도 찾을 수 있어야 합니다. 그러나 Y에는 찾을 수 없는 또  다른 공유 라이브러리 Z가 필요합니다.                                                                     
3. 이는 파티션된 데이터베이스이며, 사용자 정의 함수(UDF)가 실행된 파티션 중 하나에서 라이브러리를 찾을 수 없습니다.

 

(확인) 인스턴스 경로 하위의 sqllib/function 에 db2clin.a 링크 파일 존재 유무

엔진의 라이브러리 파일을 가리키는 링크파일로 삭제된 경우 DB2 내부 함수 실행 시 오류 발생함

테스트 (db2clifn.a 파일명을 바꿀 때, 오류 발생 확인)

$> mv db2clifn.a db2clifn1.a
$> db2 force applications all
$> db2 connect to sample
$> db2 "select chr(66) from sysibm.sysdummy1"

    SQL0444N Routine "SYSFUN.CHR" (specific name "CHR") is implemented with code

$> mv db2clifn1.a db2clifn.a

$> db2 "select chr(66) from sysibm.sysdummy1"

1

-

B

 

이런 경우 2가지의 해결 방법이 있을 것이다.

OS 환경 및 DB2 버전이 동일한 다른 시스템이 존재한다면 해당 링크 파일을 복사해 넣어 주는 방법이 있을 것이고 (동일한 환경이 없다면 인스턴스를 추가로 생성하고 나서 sqllib/function 하위 파일을 복사) 

다른 방법은, 인스턴스를 업데이트(db2iupdt)를 수행하여 인스턴스 환경을 초기 상태로 맞춰 놓는 경우일 것이다. (이 경우, dbm cfg 백업하여 초기화된 변수 값이 있는지 확인 필요)

+ Recent posts