에러 코드 및 대응
본 부록에서는 OpenFrame ASM 실행 중 발생하는 에러 코드 및 대응에 대해 기술한다.
1. 런타임 에러
1.1. VM 시스템 관련 에러
CANNOT FIND LOADABLE PROGRAM. [PROGRAM NAME] (3000)
설명 |
프로그램을 찾을 수 없거나 로드된 프로그램이 존재하지 않는다. |
대응 방법 |
프로그램이 올바른 위치에 존재하는지 확인한다. |
EXTERNAL SYMBOL NOT FOUND. [SYMBOL NAME] (3001)
설명 |
외부 심볼을 찾을 수 없거나 대상 심볼을 로드하지 못했다. |
대응 방법 |
프로그램 내에서 참조하는 심볼이 다른 프로그램에 존재하는지 확인한다. |
OPCODE NOT SUPPORTED. [HEX] (3004)
설명 |
지원하지 않는 OPCODE이다. |
대응 방법 |
해당 에러는 원인이 다양하나, 일반적으로 잘못된 주소로 BRANCH 한 경우가 많다. |
ODD REGISTER FOUND. MUST USE EVEN REGISTER. (3007)
설명 |
EVEN-ODD 레지스터를 사용하는 기계 명령어의 포맷이 올바르지 않다. |
대응 방법 |
해당 기계 명령어에는 짝수 레지스터만 사용할 수 있다. |
DIVIDE WITH ZERO ERROR. (3008)
설명 |
0으로 나눌 수 없다. |
대응 방법 |
0으로 나눌 수 없으므로, 제수(divisor) 값을 확인한다. |
INVAILD STOW OPTION. (3009)
설명 |
올바르지 않은 STOW 옵션이다. |
대응 방법 |
STOW(SVC21)는 레지스터 1번과 0번 값이 양수, 음수, 0인지에 따른 5가지 조합만 허용한다. 각 레지스터에 적재된 값이 올바른지 체크한다. |
DATA EXCEPTION: INVALID PACKED DATA. [MESSAGE] (3010)
설명 |
PACK 데이터의 포맷이 맞지 않다. |
대응 방법 |
팩형 10진수 연산 수행 중 입력값의 포맷이 맞지 않은 경우이다. 입력값의 포맷을 확인한다. |
ENTRY NOT FOUND IN THE PROGRAM. [ENTRY NAME] (3013)
설명 |
프로그램의 엔트리를 찾지 못했다. |
대응 방법 |
프로그램 경로, 엔트리, 컴파일 상태가 올바른지 확인한다. |
OFASM VM LAUNCH FAILED. AT LEAST [VM MEMORY SIZE]MB OF MEMORY SHOULD BE AVAILABLE TO LANUNCH OFASM VM. (3014)
설명 |
VM 기동이 실패했다. |
대응 방법 |
config 파일에 정의된 VM_MEMORY_SIZE만큼의 메모리 용량이 필요하다. 해당 가용 메모리를 확보한 후 VM을 재실행한다. |
FIXED-POINT-DIVIDE EXCEPTION. (3015)
설명 |
팩형 10진수 연산 수행 중 Fixed-point divide exception이 발생했다. |
대응 방법 |
대상 기계 명령어의 입력값이 올바른지 확인한다. |
SVC40: FIELDS NOT SUPPORTED. [SVC40 FIELDS FLAG] (3016)
설명 |
SVC40[EXTRACT]의 미지원 필드가 요청되었다. |
대응 방법 |
EXTRACT의 요청 필드가 올바른지 확인한다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다. |
SPECIFICATION EXCEPTION. (3017)
설명 |
SRST specification 에러이다. 첫 번째 레지스터(32bit)의 0~23비트 위치가 0이 아닌 경우에 발생한다. |
대응 방법 |
SRST 기계 명령어의 입력값이 올바른지 확인한다. |
TESTCB: FIELDS NOT SUPPORTED. [TESTCB FIELDS FLAG] (3018)
설명 |
TESTCB ACB의 미지원 사양이 발견된 경우이다. |
대응 방법 |
TEST ACB에서 지원하는 사양을 확인한다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다. |
SHOWCB: VSAM DATASET IS NOT OPENED. (3019)
설명 |
SHOWCB ACB의 대상 데이터셋이 OPEN 되지 않은 경우이다. |
대응 방법 |
대상 ACB가 OPEN 상태인지 확인한다. |
SVC27: TDCB_ERROR, [MESSAGE]. ERROR_CODE: [OPENFRAME ERROR CODE] (3020)
설명 |
SVC27 실행 중 DCB 관련 에러가 발생한 경우이다. |
대응 방법 |
CAMLST(SVC27) 수행 중 DCB 관련 에러가 발생했으므로 [MESSAGE]를 참고한다. ERRCODE로 출력되는 값은 OpenFrame의 에러 코드이다. |
PARAMETER HAVE NULL VALUE. (3021)
설명 |
파라미터가 NULL 값을 가지고 있다. |
대응 방법 |
OFASM 인터페이스로 전달된 파라미터 중 NULL 값이 포함된 파라미터가 존재하는 경우이다. 인터페이스가 정상적으로 작성되었는지 확인하고, 파라미터가 올바른지 확인한다. |
INVALID PCB MASK ADDRESS. (3028)
설명 |
PCB 마스크 주소가 올바르지 않은 경우에 발생한다. |
대응 방법 |
대상 파라미터가 PCB가 아니거나, 인터페이스가 잘못 작성된 경우이므로 해당 사항을 확인한다. |
NULL PTR DETECTED: [MESSAGE] (3029)
설명 |
OPEN(SVC19) 대상이 DCB/ACB가 아닌 경우에 발생한다. |
대응 방법 |
OPEN 대상이 DCB/ACB가 아닌 경우이므로 코드 작성이 올바른지 확인한다. |
NOT SUPPORT AMODE 64: [INSTRUCTION NAME] (3030)
설명 |
대상 기계 명령어가 64비트 AMODE를 지원하지 않는 경우이다. |
대응 방법 |
64비트 AMODE로의 전환은 OFASM에서 지원하고 있지 않다. |
HFP exponent underflow: (3031)
설명 |
소수점 연산 중 UNDERFLOW EXCEPTION이 발생했다. |
대응 방법 |
입력값이 올바르지 않은 경우이므로 대상 소수 연산의 피연산자 값을 확인한다. |
HFP exponent overflow: (3032)
설명 |
소수점 연산 중 OVERFLOW EXCEPTION이 발생했다. |
대응 방법 |
입력값이 올바르지 않은 경우이므로 대상 소수 연산의 피연산자 값을 확인한다. |
HFP significance. (3033)
설명 |
소수점 연산 중 SIGNIFICANCE EXCEPTION이 발생했다. |
대응 방법 |
입력값이 올바르지 않은 경우이므로 대상 소수 연산의 피연산자 값을 확인한다. |
Invalid access occured. [MESSAGE] (3036)
설명 |
대상 기계 명령어에 올바르지 않은 값이 전달된 경우에 발생한다. |
대응 방법 |
[MESSAGE]로 출력되는 기계 명령어의 피연산자 값을 확인한다. |
Target [MESSAGE] addr is over 16MB: [HEX] (3038)
설명 |
[MESSAGE]의 대상 주소가 16MB 영역을 초과하는 경우에 발생한다. |
대응 방법 |
해당 기능은 31비트 영역에 위치한 데이터에 대해 동작하지 않는다. 대상 데이터가 위치한 영역을 24비트 영역으로 조정한다. |
REQUESTED GETMAIN SIZE IS TOO BIG: [HEX] (3039)
설명 |
GETMAIN의 크기가 너무 큰 경우에 발생한다. |
대응 방법 |
요청 메모리의 크기를 줄인다. |
STACK CORRUPTED. 24 BIT HEAP AREA OVERFLOWED STACK AREA (3040)
설명 |
24비트 메모리 영역에 공간이 부족하다. |
대응 방법 |
요청 메모리의 크기를 줄이거나, 기존에 할당된 메모리를 해제한다. |
MEMORY CORRUPTED. 31 BIT HEAP AREA OVERFLOWED VM AREA (3041)
설명 |
31비트 메모리 영역에 공간이 부족하다. |
대응 방법 |
요청 메모리의 크기를 줄이거나, 기존에 할당된 메모리를 해제한다. |
TRYING TO ACCESS PROTECTED ADDRESS = [Addr: [HEX], Size: [NUMBER]] (3042)
설명 |
VM 메모리 밖의 메모리 영역을 참조하려고 한다. |
대응 방법 |
VM 밖의 영역은 OFASM에서 참조할 수 없다. 참조하려는 메모리 주솟값이 올바른지 확인한다. |
1.2. 데이터셋 I/O 관련 에러
DDNAME SHOULDN’T HAVE NULL CHARACTER (4000)
설명 |
DDNAME이 널 문자 로 시작하고 있다. |
대응 방법 |
DDNAME 또는 대상 DCB가 올바른지 확인한다. |
DSORG NOT FOUND (4001)
설명 |
대상 DCB 내의 DSORG 값을 찾을 수 없다. |
대응 방법 |
DCB 내의 DSORG 값이 생략되었거나, 미지원 사양인 경우이다. TmaxSoft 기술 지원에 문의한다. |
RECFM NOT FOUND (4002)
설명 |
대상 DCB 내의 RECFM 값을 찾을 수 없다. |
대응 방법 |
DCB 내의 RECFM 값이 생략되었거나, 미지원 사양인 경우이다. TmaxSoft 기술 지원에 문의한다. |
RECFM_STRING IS NOT IMPLEMENTED (4003)
설명 |
OPEN 도중 OFASM에서 지원하지 않는 RECFM 값을 발견했다. |
대응 방법 |
OFASM에서 지원하지 않는 사양일 수 있다. TmaxSoft 기술 지원에 문의한다. |
DD NOT FOUND IN SVC [NUMBER]. DDNAME([STRING]) (4005)
설명 |
대상 SVC를 실행하는 도중 지정된 DDNAME이 가리키는 DD를 찾을 수 없다. |
대응 방법 |
대상 DDNAME이 JCL에 올바로 기술되어 있는지 확인한다. |
DSIO ERROR IN SVC [NUMBER]. DSIO([NUMBER]), DDNAME([STRING]), DSNAME([STRING]), ERRCODE([NUMBER]) (4006)
설명 |
SVC[NUMBER]를 실행하는 도중 에러가 발생했다. |
대응 방법 |
[DDNAME] 혹은 [DSNAME]이 가리키는 데이터셋에 대해 OpenFrame 에러가 발생한 경우이다. 자세한 에러 내용은 OpenFrame 에러 코드를 참조한다. |
DATASET IS CLOSED WITH LOCK ERROR IN SVC 19. DDNAME([STRING]), DSNAME([STRING]) (4007)
설명 |
DDNAME/DSNAME이 가리키는 데이터셋이 LOCK 상태에서 CLOSE 되었다. |
대응 방법 |
DDNAME/DSNAME이 가리키는 데이터셋이 LOCK 상태인지 확인한다. LOCK 상태인 경우 LOCK을 해제하고 OPEN을 시도한다. |
NOT SUPPORT VSAM TYPE IN INIT ([NUMBER]) (4008)
설명 |
지원하는 VSAM 데이터셋이 아니다. |
대응 방법 |
VSAM 데이터셋이 올바른 포맷인지 확인한다. |
dsio_batch_write() ERROR. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4009)
설명 |
PUT 매크로에서 에러가 발생했다. |
대응 방법 |
ERRCODE는 OpenFrame 에러 코드를 참조한다. |
dsio_batch_read2() ERROR. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4010)
설명 |
GET 매크로에서 에러가 발생했다. |
대응 방법 |
ERRCODE는 OpenFrame 에러 코드를 참조한다. |
LRECL IS NOT SPECIFIED IN DCB OR IN CATALOG (4011)
설명 |
레코드 길이가 어셈블러 코드, JCL, 카탈로그 정보 어디에도 기술되어 있지 않다. |
대응 방법 |
DCB가 가리키는 데이터셋에 대해 레코드 길이가 올바른지 확인한다. |
INVALID ACCESS MODE ERROR IN SVC 19. DDNAME([STRING]), DSNAME([STRING]) (4013)
설명 |
OPEN(SVC19)에서 지원하지 않는 액세스 모드이다. |
대응 방법 |
OPEN 모드가 올바른지 확인하고, 미지원 사양에 대해서는 TmaxSoft 기술 지원에 문의한다. |
I/O SIZE NOT SET WHILE WRITING PS DATASET (4014)
설명 |
PS 데이터셋에 대해 WRITE 시 지정된 길이가 존재하지 않는다. |
대응 방법 |
DSORG=PS에 대해 WRITE 시 길잇값이 올바로 지정되어 있는지 확인한다. |
NOT SUPPORTED TYPE FOR WRITE: ([NUMBER]) (4016)
설명 |
지원하지 않는 WRITE 매크로 옵션이다. |
대응 방법 |
WRITE 매크로 사용 중 지원하지 않는 옵션이다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다. |
I/O REQUEST SIZE FOR DA DATASET IS NOT EQUAL TO BLKSIZE (4017)
설명 |
DSORG=DA의 READ/WRITE 시 LRECL 크기가 BLKSIZE와 같지 않다. |
대응 방법 |
DSORG=DA 데이터셋의 LRECL 값과 BLKSIZE가 동일한지 확인한다. |
dsio_batch_write() ERROR IN WRITE. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4018)
설명 |
WRITE 매크로에서 에러가 발생했다. |
대응 방법 |
ERRCODE는 OpenFrame 에러 코드를 참조한다. |
WRITE: PO DATASET I/O REQUEST SIZE MUST BE MULTIPLES OF LRECL (I/O REQUEST SIZE = N*LRECL) (4019)
설명 |
PO 데이터셋의 LRECL이 BLKSIZE의 정수배가 아니다. |
대응 방법 |
PO 데이터셋의 WRITE 시에 BLKSIZE를 LRECL의 정수배로 조정한다. |
dsio_batch_read2() ERROR IN READ. DDNAME([STRING]), HANDLE([NUMBER]), ERRCODE([NUMBER]) (4020)
설명 |
READ 매크로에서 에러가 발생했다. |
대응 방법 |
ERRCODE는 OpenFrame 에러 코드를 참조한다. |
DATASET READ EOF. DDNAME([STRING]) (4021)
설명 |
READ 매크로에서 EOF를 읽었지만, EODAD 루틴이 정의되지 않았다. |
대응 방법 |
EODAD 루틴을 지정하거나 CHECK 매크로를 통해 감지할 수 있으며, 무시할 수도 있다. |
NOT SUPPORT I/O OPERATION (4025)
설명 |
지원하지 않는 I/O 동작이다. |
대응 방법 |
대상 데이터셋이 해당 매크로를 지원하지 않는 경우이다. |
KEY IS NOT SPECIFIED IN DELETE OPERATION. (4026)
설명 |
ERASE 매크로를 이용한 VSAM KSDS 데이터셋에 대한 레코드 삭제 요청 시 KEY 값이 생략되었다. |
대응 방법 |
ERASE 매크로에 사용되는 KEY 값을 확인한다. |
THE LAST I/O STATEMENT WAS NOT A READ STATEMENT. (4027)
설명 |
ERASE 매크로를 이용한 데이터셋에 대한 레코드 삭제 요청 시 이전 I/O 요청이 GET이 아닌 경우에 발생한다. |
대응 방법 |
ERASE 매크로를 사용할 경우 반드시 GET을 먼저 사용해야 한다. 로직이 올바른지 확인한다. |
DELETE OPERATION IS NOT ALLOWED. (4028)
설명 |
ERASE 매크로 대상 VSAM이 OUTPUT 모드로 OPEN 되었다. |
대응 방법 |
ERASE 매크로 대상 VSAM은 IN 모드로 OPEN 되어야 한다. 대상 ACB의 OPEN 모드를 확인한다. |
INVALID TARGET DSORG. DDNAME([STRING]), [STRING] (4029)
설명 |
SETL 매크로 대상 데이터셋의 DSORG가 IS로 정의되어 있지 않다. |
대응 방법 |
SETL 매크로의 대상 데이터셋의 DSORG를 IS로 설정한다. |
SETL OPTION IS NOT SUPPORTED: [HEX] (4030)
설명 |
지원하지 않는 SETL 옵션이다. |
대응 방법 |
TmaxSoft 기술 지원에 문의한다. |
NOT SUPPORT MACRF FLAG ([HEX]). DDNAME([STRING]) (4031)
설명 |
해당 DD에 대해 지원하지 않는 MACRF 옵션이다. |
대응 방법 |
TmaxSoft 기술 지원에 문의한다. |
INVALID KEY. DDNAME([STRING]), ERRCODE([NUMBER]). (4032)
설명 |
ISAM READ 시 입력 KEY 값에 해당하는 레코드를 찾을 수 없다. |
대응 방법 |
요청된 KEY 값이 데이터셋 내에 존재하는지 확인한다. |
NOT SUPPORTED FEATURE RECOGNIZED IN DATASET I/O. [MESSAGE] (4033)
설명 |
[MESSAGE]에 해당하는 내용은 지원하지 않는다. |
대응 방법 |
지원하지 않는 데이터셋 I/O 옵션이다. 자세한 내용은 TmaxSoft 기술 지원에 문의한다. |
BLKSIZE MUST BE EQUAL TO MULTIPLES OF LRECL. DDNAME([STRING]) (4034)
설명 |
[DDNAME]에 해당하는 데이터셋의 BLKSIZE가 LRECL의 N배가 아니다. |
대응 방법 |
ISAM 데이터셋의 READ/WRITE 시 발생할 수 있다. BLKSIZE가 LRECL의 배수가 되도록 조정한다. |
TRYING TO OPEN DATASET AGAIN. DDNAME([STRING]) IS ALREADY OPENED. (4035)
설명 |
이미 OPEN 된 데이터셋에 대해 다시 OPEN을 시도하고 있다. 두 번째 OPEN 시도는 무시된다. |
대응 방법 |
같은 데이터셋에 대해 중복 OPEN을 시도하고 있다. 의도된 동작인지 확인한다. |
FAILED GETTING DCB INFO WITH ERRCODE([NUMBER]) (4036)
설명 |
NVSAM 파일의 RECFM과 DSORG 정보를 가져올 수 없다. |
대응 방법 |
NVSAM 파일이 올바로 정의되어 있는지 확인한다. |
NOT SUPPORTED RECFM ([DSNAME]:[RECFM]) (4037)
설명 |
RDJCFB 중 NVSAM 파일의 RECFM 카탈로그 정보를 가져왔지만 OFASM에서는 지원하지 않는다. |
대응 방법 |
OpenFrame에서는 지원 중인 RECFM이지만, OFASM에서는 지원하지 않는다. TmaxSoft 기술 지원에 문의한다. |
NOT SUPPORTED DSORG ([DSNAME]:[DSORG]) (4038)
설명 |
NVSAM 파일의 DSORG 카탈로그 정보를 가져왔지만 OFASM에서는 지원하지 않는다. |
대응 방법 |
OpenFrame에서는 지원 중인 DSORG이지만, OFASM에서는 지원하지 않는다. TmaxSoft 기술 지원에 문의한다. |
BAD REQUEST WHEN FETCHING DISP INFORMATION (4039)
설명 |
RDJCFB 중 데이터셋의 DISP 정보를 가져오는 것에 실패했다. |
대응 방법 |
RDJFCB의 대상 데이터셋이 올바른지 확인한다. |
INPUT RECORD LENGTH FOR V RECFM MUST BE GREATER THAN 4. CURRENT: [LENGTH] (4040)
설명 |
가변 길이 레코드를 PUT 할 때 RDW 값이 4보다 작은 경우에 발생한다. |
대응 방법 |
가변 길이 레코드에 대해 PUT 매크로를 사용할 경우, RDW 값은 4보다 커야 한다. 해당 값을 확인한다. |
LERAD NOT DEFINED WITH ERRCODE([NUMBER]). (4500)
설명 |
VSAM I/O 처리 중 논리적 오류가 발생했지만 LERAD 루틴이 정의되어 있지 않아 해당 에러는 무시된다. |
대응 방법 |
EXLST 매크로를 사용하여 LERAD 루틴을 정의한다. |
SYNAD NOT DEFINED WITH ERRCODE([NUMBER]). (4501)
설명 |
VSAM I/O 처리 중 시스템 오류가 발생했지만 SYNAD 루틴이 정의되어 있지 않아 해당 에러는 무시된다. |
대응 방법 |
EXLST 매크로를 사용하여 SYNAD 루틴을 정의한다. |
VSAM I/O ERR OCCURED WITH ERRCODE([NUMBER]). (4502)
설명 |
VSAM I/O 처리 중 분류되지 않은 에러가 발생했다. |
대응 방법 |
OpenFrame의 에러 코드를 참조한다. |