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 오류 비교
구분 | B37 | E37 |
---|---|---|
원인 | Primary+Secondary 다 사용, 추가 볼륨 없음 | Primary space 다 씀, Secondary도 확보 실패 |
추가 볼륨 사용 가능성 | 없음 (설정 안 돼 있음) | 원래는 시도할 수 있지만 실패 |
주 상황 | 한 디스크 안에서만 쓰는 경우 문제 | 여러 디스크로 넘어가려고 했지만 실패한 경우 |
흔한 경우 | 작은 파일을 무리하게 많이 쓰다가 | 큰 파일을 쓰다가 추가 볼륨 설정 없이 |
데이터셋 용량 관련 오류코드
오류 코드 | 설명 |
---|---|
B37 | 현재 할당된 디스크 공간(프라이머리+세컨더리 익스텐트)을 다 사용했는데 추가 익스텐트(extent)를 얻지 못할 때 발생 (지금 디스크가 꽉 찼는데 다른 디스크 쓸 준비가 안 되어 있음) |
E37 | 한 파일이 할당 가능한 익스텐트 개수 한도(16개 등)에 도달했을 때 발생 ((공간이 부족해서 다른 디스크 쓰려고 했지만 못함)) |
837 | VTOC(Volume Table of Contents)가 꽉 차거나 다른 시스템적 이유로 볼륨에 공간이 있지만 할당할 수 없을 때 발생 |
D37 | Dataset이 FULL인데, Secondary space 설정이 없을 때 발생 |
(참고: 메인프레임 DASD(디스크)에서는 한 파일이 "Extent"라는 단위로 공간을 점진적으로 추가할 수 있습니다.)