입출력(I/O) 오류 값

다음 표에서는 데이터베이스, 파일, WebSphere® MQ 메시지 큐에 영향을 미치는 입출력(I/O) 조작의 EGL 오류 값에 대해 설명합니다. V6 예외 호환성(V6 예외 호환성 사용 참조)을 사용하는 경우 하드 입출력(I/O) 오류와 소프트 입출력(I/O) 오류 모두에 액세스할 수 있습니다(is/not 연산자 참조). 자세한 정보는 예외 핸들링를 참조하십시오.

오류 값 오류 유형 레코드 유형 오류 값의 의미
deadlock 하드 SQL 두 프로그램 인스턴스가 레코드를 변경하려 하지만 시스템 개입 없이는 변경할 수 없습니다. DB2®에서 SQL 테이블에 액세스할 경우 교착 상태는 sqlcode의 값이 -911임을 표시합니다.
duplicate 소프트 DL/I, 색인화 또는 상대 자세한 정보는 이 주제의 "duplicate"를 참조하십시오.
endOfFile 소프트 DL/I, 색인화, 상대, 직렬 자세한 정보는 이 주제의 "endOfFile"을 참조하십시오.
ioError 하드 또는 소프트 임의 자세한 정보는 이 주제의 "ioError"를 참조하십시오.
fileNotAvailable 하드 색인화, 상대, 직렬 fileNotAvailable은 모든 입출력(I/O) 조작에 가능하며 다른 프로그램이 파일을 사용 중이거나 파일에 액세스하기 위해 필요한 자원이 부족한 경우 등을 표시합니다.
fileNotFound 하드 색인화, 메시지 큐, 상대, 직렬 fileNotFound는 입출력(I/O) 조작에만 가능하며 요청한 파일을 찾을 수 없음을 표시합니다.
full 하드 색인화, 상대, 직렬 full은 다음 경우에 설정됩니다.
  • 색인화 또는 직렬 파일이 가득찼습니다.
  • 색인화 또는 상대 파일이 CICS® 임시 스토리지 큐로 구현되고 add가 32767바이트보다 큰 키를 삽입하려고 합니다.
hardIOError 하드 임의 자세한 정보는 이 주제의 "hardIOError"를 참조하십시오.
invalidFormat 하드 색인화, 상대, 직렬 액세스된 파일이 레코드 정의와 호환되지 않습니다. 자세한 정보는 이 주제의 "invalidFormat"을 참조하십시오.
noRecordFound 소프트 임의 자세한 정보는 이 주제의 "noRecordFound"를 참조하십시오.
softIOError 소프트 임의 소프트 오류가 발생했습니다. endOfFile, noRecordFound 또는 duplicate입니다.
unique 하드 DL/I, 색인화, 상대, SQL 사용자 코드에서 이미 있는 키를 가진 레코드를 추가하거나 바꾸려고 했으나 실패했습니다. 자세한 정보는 이 주제의 "unique"를 참조하십시오.

duplicate

색인화 또는 상대 레코드의 경우 다음 경우에 duplicate가 설정됩니다.
  • add 문이 파일 또는 대체 색인에 키가 이미 있는 레코드를 삽입하려고 하며 삽입에 성공합니다.
  • replace 문이 레코드를 겹쳐쓰고 대체 값에는 다른 레코드의 대체 색인 키와 동일한 키가 포함되어 있습니다.
  • get, get next 또는 get previous 문이 레코드를 읽으며 두 번째 레코드에 동일한 키가 있습니다.

duplicate 설정은 일부 운영 체제에서는 참이지만 다른 운영 체제에서는 참이 아니므로 액세스 방법이 정보를 리턴하는 경우에만 리턴됩니다. SQL 데이터베이스 액세스 중에는 옵션을 사용할 수 없습니다.

iSeries의 EGL 생성 COBOL 프로그램에서 에뮬레이트된 VSAM 파일에 액세스할 경우, 생성 시 사용되는 자원 연관 파트에서 duplicates 특성의 설명은 EGL 생성 안내서의 "연관 요소"를 참조하십시오.

DL/I 데이터베이스의 경우 duplicate는 소프트 오류이며, add 문이 중복 키가 있는 레코드를 허용하지 않는 데이터베이스에 세그먼트를 삽입하려 하고 동일한 키를 가진 레코드가 데이터베이스에 이미 있는 경우 설정됩니다. add는 실패합니다. 해당 상태 코드는 II입니다. duplicate 값과 unique 값은 DL/I에 대해 동등합니다.

endOfFile

직렬 또는 상대 레코드의 경우 다음 경우에 endOfFile이 설정됩니다.
  • 관련 파일 포인터가 파일 끝에 있을 때 사용자 코드에서 직렬 또는 상대 레코드에 사용할 get next 문을 발행합니다. 이전 get 또는 get next 문이 파일의 마지막 레코드에 액세스할 때 포인터가 파일의 끝에 있습니다.
  • GSAM 파일로 구현된 직렬 레코드의 경우 사용자 코드가 get next 문을 발행하고 데이터베이스에는 더 이상 세그먼트가 없습니다. 해당 상태 코드는 GB입니다.
  • IMS™ 메시지 큐로 구현된 직렬 레코드의 경우 사용자 코드가 get next 문을 발행하고 메시지 큐에는 더 이상 메시지가 없습니다. 해당 상태 코드는 QC입니다.
직렬 또는 상대 레코드의 경우 다음 경우에 endOfFile이 설정됩니다.
  • 관련 파일 포인터가 파일의 끝에 있을 때 사용자 코드는 get next 문을 발행합니다. 관련 파일 포인터가 파일 끝에 있는 경우는 다음과 같은 상황에서 발생합니다.
    • 이전 get 또는 get next 문이 파일의 마지막 레코드에 액세스했습니다.
    • 다음 조건 중 하나가 적용될 때 set record position 유형의 이전 set 문이 파일의 마지막 레코드에 액세스했습니다.
      • 키 값이 파일에 있는 마지막 레코드의 키와 일치합니다.
      • 키 값의 모든 바이트가 16진 FF로 설정되었습니다. (키 값이 모두 16진수 FF로 설정된 상태에서 set record position 유형의 set 문이 실행될 경우 명령문은 위치 포인터를 파일 끝으로 설정합니다.)
  • 관련 파일 포인터가 파일의 시작에 있을 때 사용자 코드는 get previous 문을 발행합니다. 관련 파일 포인터가 파일의 시작에 있는 경우는 다음과 같은 상황에서 발생합니다.
    • 이전 get 또는 get previous 문이 파일의 첫 번째 레코드에 액세스했습니다.
    • 사용자 코드가 이전에 동일한 파일에 액세스하지 않았습니다.
    • 파일에서 해당 키 앞에 키가 없을 때 set record position 유형의 set 문이 키를 사용하여 실행됩니다.
  • get next 문이 비어 있거나 초기화되지 않은 파일에서 데이터를 검색하려 합니다. (빈 파일은 모든 레코드가 삭제된 파일입니다. 초기화되지 않은 파일은 추가된 레코드가 없는 파일입니다.)
  • get previous 문이 비어 있는 파일에서 데이터를 검색하려 합니다.
  • COBOL 생성의 경우 get previous 문이 초기화되지 않은 파일에서 데이터를 검색하려 합니다.

DL/I 데이터베이스의 경우 get next 또는 get next inParent 문이 데이터를 검색하려 하고 관련 데이터베이스 포인터가 데이터베이스의 끝에 있으면 endOfFile이 설정됩니다. 해당 상태 코드는 GB입니다.

ioError

이 값은 다음 조건에 따라 설정됩니다.
  • 직렬, 색인화 또는 상대 파일의 경우 입출력(I/O) 조작에서 0이 아닌 리턴 코드가 수신되었습니다.
  • GSAM 파일로 구현된 직렬 파일의 경우 DL/I가 공백이 아닌 상태 코드를 리턴했습니다.
  • IMS 메시지 큐로 구현된 직렬 파일의 경우 DL/I가 공백이 아닌 상태 코드를 리턴했습니다.
  • DL/I 데이터베이스의 경우 DL/I가 0이 아닌 CICS DL/I 오류 코드 또는 공백이 아닌 DL/I 상태 코드를 리턴했습니다.
  • SQL 행 레코드에 DB2를 사용할 때 SQLCODE가 0이 아니었습니다.

hardIOError

하드 입출력(I/O) 오류는 입출력(I/O) 조작에 실패하는 경우 발생합니다. endOfFile 값과 noRecordFound 값은 하드 오류로 고려되지 않습니다. 하드 입출력(I/O) 오류가 있는지 테스트하려면 V6 예외 모드에 있어야 합니다.
  • DL/I 조작 이외의 경우 시스템 변수 vgVar.handleHardIOErrors가 1로 설정되어야 합니다.
  • DL/I 입출력(I/O) 조작의 경우에는 다음 조건 중 하나가 참이어야 합니다.
    • vgVar.handleHardIOErrors가 1로 설정되어 있습니다.
    • dliVar.handleHardDLIErrors가 1로 설정되어 있습니다.
hardIOError는 다음 조건에서 설정됩니다.
  • 직렬, 색인화 또는 상대 파일의 경우 소프트 오류로 정의된 오류 이외의 파일 입출력(I/O) 오류가 발생했습니다. 소프트 오류는 duplicate, endOfFile, noRecordFound 또는 unique를 설정합니다.
  • GSAM 파일로 구현된 직렬 파일의 경우 DL/I가 GB 이외의 공백이 아닌 상태 코드를 리턴했습니다.
  • IMS 메시지 큐로 구현된 직렬 파일의 경우 DL/I가 QC, QD, CE, CF, CG, CI, CJ, CK 또는 CL 이외의 공백이 아닌 상태 코드를 리턴했습니다.
  • DL/I 데이터베이스의 경우 DL/I가 0이 아닌 CICS DL/I 오류 코드나 GA, GB, GD, GE, GK 또는 II 이외의 공백이 아닌 DL/I 상태 코드를 리턴했습니다.
  • SQL 행 레코드에 DB2를 사용할 때 SQLCODE가 304, 802이거나 0보다 작습니다.

invalidFormat

invalidFormat은 모든 유형의 입출력(I/O) 조작에서 발생할 수 있으며 다음과 같은 이유로 설정됩니다.
  • 레코드 형식

    파일 형식(고정 또는 가변 길이)이 EGL 레코드 형식과 다릅니다.

  • 레코드 길이

    고정 길이 레코드의 경우 파일에 있는 레코드의 길이가 EGL 레코드의 길이와 다릅니다. 가변 길이 레코드의 경우 파일에 있는 레코드의 길이가 EGL 레코드의 길이보다 깁니다.

  • 파일 유형

    레코드에 지정된 파일 유형이 런타임의 파일 유형과 일치하지 않습니다.

  • 키 길이

    파일의 키 길이가 EGL 색인화 레코드의 키 길이와 다릅니다.

  • 키 오프셋

    파일의 키 위치가 EGL 색인화 레코드의 키 위치와 다릅니다.

noRecordFound

noRecordFound는 다음 조건에서 설정됩니다.
  • 색인화 레코드의 경우 get 문에서 지정된 키와 일치하는 레코드를 찾을 수 없습니다. 또는 CICS에서 get next 문이나 get previous 문이 빈 VSAM 파일에서 색인화 레코드로 데이터를 검색하려고 합니다.
  • EGL 생성 Java™의 경우 VSAM 파일이 비어 있거나 초기화되지 않았을 때 사용자 코드가 색인화된 레코드에 get next 또는 get previous 문을 발행합니다.
  • 상대 레코드의 경우 get 문에서 지정된 레코드 ID와 일치하는 레코드를 찾을 수 없습니다. 또는 get next 문이 파일의 끝 이후에 있는 레코드에 액세스하려고 합니다.
  • SQL 레코드의 경우 지정된 SELECT 문과 일치하는 행을 찾을 수 없습니다. 또는 검토할 선택된 행이 더 이상 남아 있지 않은 경우 get next 문이 발생합니다.
  • DL/I 데이터베이스의 경우 데이터베이스에서 DL/I 호출에 지정된 선택 조건을 충족하는 레코드를 찾을 수 없습니다. 삽입할 세그먼트의 상위를 찾을 수 없는 경우 EGL add 문에 이 상태가 설정될 수 있습니다. 상태 코드는 GE입니다.

unique

색인화 또는 상대 레코드의 경우 다음 경우에 unique가 설정됩니다.
  • add 문이 파일 또는 대체 색인에 키나 레코드 ID가 이미 있는 레코드를 삽입하려고 하지만 중복으로 인해 삽입에 실패합니다.
  • 대체 값에 다른 레코드의 대체 색인 키와 동일한 키가 포함되어 있으므로 replace 문이 레코드를 겹쳐쓰지 못합니다.

일부 운영 체제에서는 참이지만 다른 운영 체제에서는 참이 아니기 때문에 액세스 방법이 정보를 리턴하는 경우에만 unique가 리턴됩니다.

SQL 데이터베이스 액세스 중에, 고유 색인에 이미 존재하는 키가 추가 중이거나 대체 중인 SQL 행에 있는 경우 unique가 설정됩니다. 해당 sqlcode는 -803입니다.

DL/I 데이터베이스의 경우 uniqueadd 문이 중복 키가 있는 레코드를 허용하지 않는 데이터베이스에 세그먼트를 삽입하려 하고 동일한 키를 가진 레코드가 데이터베이스에 이미 있는 경우 설정됩니다. add는 실패합니다. 해당 상태 코드는 II입니다. duplicate 값과 unique 값은 DL/I에 대해 동등합니다.