IBM Mainframe JCL B37 ERROR 데이터셋 할당 용량 부족 오류 설명

IBM Mainframe JCL DATASET B37 ERROR


메인프레임에서 JCL로 작업을 수행하다 보면, 아래와 같은 오류가 발생할 때가 있습니다.

J0101791 IEC030I B37-04,IFG0554A…


IBM 메인프레임 JCL(Job Control Language)에서 B37 에러는
디스크 공간 부족 때문에 발생하는 에러입니다.

프로그램이 어떤 DATASET(파일)에 데이터를 쓰다가
그 데이터셋이 할당된 공간(Primary + Secondary extent)을 다 써버리고
시스템이 더 이상 추가할 수 있는 볼륨(디스크)도 없을 때

B37 Abend 또는 B37 Return Code가 발생합니다.


즉,  "디스크에 쓸 공간이 부족해서 더 이상 데이터를 저장할 수 없음" 이라는 뜻입니다.


B37이 발생하는 주요 원인

  • Primary space와 Secondary space를 너무 작게 잡았을 때
  • Dataset이 확장(Extents) 가능한 최대치(보통 16개 Extent)를 넘었을 때
  • 디스크에 더 이상 빈 공간이 없을 때
  • Volume 추가가 필요하지만, JCL이나 SMS에 그런 설정이 안 되어 있을 때

B37 오류 해결 방법

  • SPACE 파라미터 늘리기
          → JCL의 SPACE=(CYL,(Primary,Secondary)) 안의 값을 늘립니다.
  • DATACLAS 수정
          → SMS 관리 환경이라면, 할당되는 데이터 클래스(DATACLAS) 설정을 수정해서 자동 공간 증가를 허용할 수 있습니다.
  • 다른 디스크(VOL) 사용하기
           → VOL=SER=xxxxxx 대신 더 여유 있는 디스크를 쓰거나, MULTIVOLUME 할당 설정합니다.
  • 프로그램 수정
           → 출력 데이터를 작게 나눠서 쓰도록 하거나, 출력 데이터의 양을 줄입니다.
  • RECFM, LRECL 확인
           → 레코드 포맷이나 길이를 최적화해서 공간 낭비를 줄입니다.
  • Allocate 옵션에 DSNTYPE=LARGE 붙이기
           → IBM 메인프레임 JCL(특히 DD 문에서) 데이터셋을 ALLOCATE할 때 LARGE 옵션을 붙이면 "1차/2차 익스텐트가 65,535 트랙 이상 가능하게 허용" 한다는 의미입니다.
기본적으로 메인프레임의 DASD(디스크)에서는 데이터셋을 할당할 때 1차(primary), 2차(secondary) 익스텐트 크기가 64K 트랙(즉 65,535 트랙) 을 넘을 수 없습니다.

하지만 DSNTYPE=LARGE (줄여서 그냥 LARGE)를 지정하면,
1차 익스텐트와 2차 익스텐트 크기를 64K 트랙 이상 지정할 수 있습니다.
결과적으로 엄청나게 큰 파일을 하나의 데이터셋으로 저장할 수 있게 해 줍니다.
또한, LARGE 타입 데이터셋은 멀티-익스텐트를 좀 더 유연하게 사용해서 초대형 파일(테라바이트급) 까지도 지원할 수 있게 설계되어 있습니다.

간단한 예시:

//MYDD   DD  DSN=MY.BIG.DATASET, 
//          DISP=(NEW,CATLG,DELETE),
//          UNIT=SYSDA,
//          SPACE=(TRK,(70000,1000)),
//          DSNTYPE=LARGE

여기서는

  • 1차 익스텐트를 70,000트랙 (65,535 초과) 로 주었기 때문에 DSNTYPE=LARGE를 꼭 명시해야 오류가 발생하지 않습니다.

B37 오류와 E37 오류 비교


구분B37E37
원인Primary+Secondary 다 사용, 추가 볼륨 없음Primary space 다 씀, Secondary도 확보 실패
추가 볼륨 사용 가능성없음 (설정 안 돼 있음)원래는 시도할 수 있지만 실패
주 상황한 디스크 안에서만 쓰는 경우 문제여러 디스크로 넘어가려고 했지만 실패한 경우
흔한 경우작은 파일을 무리하게 많이 쓰다가큰 파일을 쓰다가 추가 볼륨 설정 없이



데이터셋 용량 관련 오류코드


오류 코드설명
B37현재 할당된 디스크 공간(프라이머리+세컨더리 익스텐트)을 다 사용했는데 추가 익스텐트(extent)를 얻지 못할 때 발생
(지금 디스크가 꽉 찼는데 다른 디스크 쓸 준비가 안 되어 있음)
E37한 파일이 할당 가능한 익스텐트 개수 한도(16개 등)에 도달했을 때 발생
((공간이 부족해서 다른 디스크 쓰려고 했지만 못함))
837VTOC(Volume Table of Contents)가 꽉 차거나 다른 시스템적 이유로 볼륨에 공간이 있지만 할당할 수 없을 때 발생
D37Dataset이 FULL인데, Secondary space 설정이 없을 때 발생

(참고: 메인프레임 DASD(디스크)에서는 한 파일이 "Extent"라는 단위로 공간을 점진적으로 추가할 수 있습니다.)




Written by dukgun.com

댓글 쓰기

다음 이전