

AWS Mainframe Modernization Service(관리형 런타임 환경 환경 환경)는 더 이상 신규 고객에게 공개되지 않습니다. AWS Mainframe Modernization Service(관리형 런타임 환경 환경)와 유사한 기능은 AWS Mainframe Modernization Service(자체 관리형 환경)를 참조하세요. 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. 자세한 내용은 [AWS Mainframe Modernization 가용성 변경을](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html) 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 데이터베이스 유틸리티
<a name="system-database-utilities"></a>

이 섹션에서는 데이터베이스 관련 유틸리티에 대해 설명합니다. 레거시 플랫폼에서 이러한 프로그램은 일반적으로 DB2 데이터베이스에서 작동하는 반면, 대체 데이터베이스는 최신 환경에서 선택됩니다(AWS Aurora가 인기 있는 선택임).

## DSNTEP2/DSNTEP4
<a name="dsntep2-dsntep4"></a>

### DSNTEP2/DSNTEP4 용도
<a name="dsntep2-purpose"></a>

DNSTEP 유틸리티는 입력 데이터 세트에서 SQL 쿼리를 실행하고 결과를 출력 데이터 세트에 기록합니다. 현대화된 대상 데이터베이스(DB2 이상)에 대한 레거시 SQL 쿼리를 자동으로 다시 작성하고 스트림, Blusam `SYSIN` 데이터 세트, 플랫 파일, GDG 생성 및 데이터 세트 연결과 같은 여러 데이터 세트 유형을 지원합니다.

### DSNTEP2/DSNTEP4 서명
<a name="dsntep2-signature"></a>

유틸리티는 인수를 사용하지 않고 두 개의 데이터 세트를 사용합니다.
+ `SYSIN`: SQL 문이 포함된 입력 데이터 세트
+ `SYSPRINT`: 쿼리 결과에 대한 출력 데이터 세트(`SELECT` 쿼리만 해당)

### DSNTEP2/DSNTEP4 관련 구성 파라미터
<a name="dsntep2-configuration"></a>

유틸리티의 동작은 다음 구성 파라미터의 영향을 받습니다.
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

이러한 파라미터 구성에 대한 [선택적 웹 애플리케이션에 사용할 수 있는 속성](ba-runtime-key-value.md#ba-runtime-key-value-web) 자세한 내용은 섹션을 참조하세요.

### DSNTEP2/DSNTEP4 검사/오류 처리
<a name="dsntep2-error-handling"></a>
+ 어떤 이유로든 쿼리 실행 중에 예외가 발생하면 오류 메시지가 로깅되고 `StopRunUnitException`가 발생하여 현재 실행 단위가 중지됩니다.
+ `SYSIN`가 다양한 데이터 세트의 연결이고 데이터 세트가 지원되지 않는 경우 `RuntimeException`이 발생합니다. 현재 DSNTEP2/4에서 입력으로 사용되는 경우 플랫 파일 및 GDG 생성 유형만 연결된 파일의 일부로 지원됩니다.

### DSNTEP2/DSNTEP4 샘플 사용량
<a name="dsntep2-sample-usages"></a>

다음은 DNSTEP4의 샘플 JCL 사용량입니다.

```
//********************************************************************
//* RETRIEVE DATA FROM TABLE AP_JBI7_INVOICE                      *
//********************************************************************
//*
//DSNTEP03 EXEC PGM=DSNTEP4,DYNAMNBR=20
//SYSPRINT DD DSN=output(out012.txt),
//            DISP=SHR,DCB=(RECFM=FB,LRECL=1152)
//SYSIN    DD *
  SELECT * FROM BUR000.AP_JBI7_INVOICE WITH UR;
```

및 일치하는 현대화된 groovy 스크립트 조각:

```
def stepDSNTEP03(Object shell, Map params, Map programResults){
    shell.with {
        if (checkValidProgramResults(programResults)) {
            return execStep("DSNTEP03", "DSNTEP4", programResults, {
                    mpr
                        .withFileConfigurations(new FileConfigurationUtils()
                        .withJobContext(jobContext)
                        .fileSystem("SYSPRINT")
                        .path("output(out012.txt)").recordSize(1152)
                        .disposition("SHR")
                        .build()
                        .fileSystem("SYSIN")
                        .stream(
"""  SELECT * FROM BUR000.AP_JBI7_INVOICE WITH UR;  
  """, getEncoding())
                        .build()
                        .getFileConfigurations(fcmap))
                        .withParameters(params)
                    .runProgram("DSNTEP4")
                })
        }
    }
}
```

SQL 쿼리는 수정 없이 DSNTEP2/4 유틸리티에 "있는 그대로" 제공됩니다.

## DSNUTILB
<a name="dsnutilb"></a>

### DSNUTILB 용도
<a name="dsnutilb-purpose"></a>

데이터 로드, 복사 및 관리를 위한 데이터베이스 유틸리티입니다. 일반적으로 레거시 DB2 데이터베이스에서 작동하며, 현대화된 버전은 AWS Aurora 및 기타 대상 데이터베이스를 지원합니다.

### DSNUTILB 서명
<a name="dsnutilb-signature"></a>

기본적으로 DSNUTILB는 현대화된 작업 스크립트에서 직접적으로 호출하기 위한 것입니다.

인수를 가져오지 않고 `SYSIN` 데이터 세트에서 명령을 읽습니다.

지원되는 명령은 다음과 같습니다.
+ `TEMPLATE` (데이터 세트의 동적 할당)
+ `LISTDEF` (데이터베이스 객체를 목록으로 그룹화, 다른 명령에서 사용 가능)
+ `COPY` (데이터베이스 객체의 복사본 생성)
+ `LOAD` (레코드를 테이블에 로드)
+ `DISCARD` (테이블에서 레코드 삭제)

명령에 대한 자세한 내용은 관련 적절한 레거시 설명서를 참조하세요.

### DSNUTILB 관련 구성 파라미터
<a name="dsnutilb-configuration"></a>

유틸리티의 동작은 다음 구성 파라미터의 영향을 받습니다.
+ `unload.useDatabaseConfiguration`
+ `load.format.localDate`
+ `load.format.dbDate`
+ `load.format.localTime`
+ `load.format.dbTime`
+ `load.sqlCodePointShift`
+ `convertGraphicDataToFullWidth`

이러한 파라미터 구성에 대한 [선택적 웹 애플리케이션에 사용할 수 있는 속성](ba-runtime-key-value.md#ba-runtime-key-value-web) 자세한 내용은 섹션을 참조하세요.

### DSNUTILB 검사/오류 처리
<a name="dsnutilb-error-handling"></a>
+ `SYSIN` 데이터 세트에 사용 가능한 명령이 없는 경우 `RuntimeException`이 발생합니다.
+ 데이터베이스 작업 중에 예외가 발생하면 오류 메시지가 로깅되고 반환 코드가 8로 설정되며이 `StopRunUnitException` 발생합니다(현재 실행 단위 중지).

### DSNUTILB 샘플 사용량
<a name="dsnutilb-sample-usages"></a>

다음은 JCL 스크립트에서 DSNUTILB의 샘플 사용입니다.

```
//********************************************************************
//* LOAD DATA IN TABLE AP_JBI7_INVOICE.                           *
//********************************************************************
//DSN01  EXEC PGM=DSNUTILB,DYNAMNBR=20
//SYSREC DD  DSN=input(input021.data),
//           DISP=SHR
//           DCB=(RECFM=FB,LRECL=76)
//SYSIN  DD  DSN=input(dsn01.card),
//           DISP=SHR
```

레거시 플랫폼에서 내보낸 플랫 파일에서 데이터베이스에 데이터를 로드하는 데 사용되는 명령 카드 콘텐츠(dsn01.card) --:

```
  LOAD         DATA 
               INDDN         SYSREC
               RESUME        NO
               LOG           YES
               NOCOPYPEND
               SORTDEVT      SYSDA
               SORTNUM       12
               SORTKEYS      100000
               DISCARDS      0
               INTO TABLE    BUR000.AP_JB17_INVOICE
               WHEN (76:76) = 'L'
 ( IDENTIFIER        POSITION(1:1)        SMALLINT
  ,CUST_ID           POSITION(10)         VARCHAR
                                          NULLIF(39) = '?'
  ,CUST_KD           POSITION(40:43)      CHAR 
  ,INVC_AMNT         POSITION(44:49)      NUMERIC
  ,INVC_DAT          POSITION(50:75)      TIMESTAMP EXTERNAL(26)
 )
```

및 일치하는 groovy 현대화된 스크립트 조각:

```
// STEP DSN01 - PGM - DSNUTILB****************************************************
def stepDSN01(Object shell, Map params, Map programResults){
    shell.with {
        if (checkValidProgramResults(programResults)) {
            return execStep("DSN01", "DSNUTILB", programResults, {
                mpr
                    .withFileConfigurations(new FileConfigurationUtils()
                        .withJobContext(jobContext)
                        .fileSystem("SYSREC")
                        .path("input(input021.data)").recordSize(76)
                        .disposition("SHR")
                        .build()
                        .fileSystem("SYSIN")
                        .path("input(dsn01.card)")
                        .disposition("SHR")
                        .build()
                        .getFileConfigurations(fcmap))
                    .withParameters(params)
                    .runProgram("DSNUTILB")
                    })
            }
    }
}
```

## INFUTILB/INZUTILB
<a name="infutilb-inzutilb"></a>

### INFUTILB 목적
<a name="infutilb-purpose"></a>

INFUTILB/INZUTILB는 데이터베이스 -- 언로드 -- (레거시 환경의 DB2)에서 데이터를 추출하고 이를 다양한 출력 형식으로 변환하는 데 사용되는 유틸리티 프로그램입니다.

레거시 SQL 쿼리는 최신 대상 데이터베이스 요구 사항(지원되는 엔진: PostgreSQL, Oracle 및 DB2)에 맞게 on-the-fly 자동으로 조정됩니다.

### INFUTILB / INZUTILB 서명
<a name="infutilb-signature"></a>

다음 프로그램 별칭을 사용할 수 있습니다(및 해당 레거시 정렬 유틸리티 이름과 일치).
+ `INFUTILB`
+ `INZUTILB`

유틸리티는 인수를 취하지 않고 `SYSIN` 데이터 세트에서 실행할 명령("제어 카드")을 읽습니다. 데이터베이스에서 추출된 레코드는 `SYSREC` 데이터 세트에 기록되고 선택적 `SYSPUNCH` 데이터 세트는 데이터를 다시 로드하는 데 사용할 수 있는 제어 카드를 저장하는 데 사용됩니다(예[DSNUTILB](#dsnutilb):와 같은 다른 유틸리티 사용).

기본적으로 INFUTILB/INZUTILB는 대부분 현대화된 작업 스크립트에서 호출하기 위한 것입니다.

지원되는 명령에 대한 세부 정보는 적절한 레거시 설명서를 참조하세요. INFUTILB/INZUTILB는 레거시 "컨트롤 카드" 데이터세트 "있는 그대로"를 사용하고 있습니다.

### INFUTILB/INZUTILB 관련 구성 파라미터
<a name="infutilb-configuration"></a>

유틸리티의 동작은 다음 구성 파라미터의 영향을 받습니다.
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `unload.columnFiller`
+ `unload.varCharIsNull`
+ `unload.DFSIGDCB`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

이러한 파라미터 구성에 대한 [선택적 웹 애플리케이션에 사용할 수 있는 속성](ba-runtime-key-value.md#ba-runtime-key-value-web) 자세한 내용은 섹션을 참조하세요.

### INFUTILB/INZUTILB 검사/오류 처리
<a name="infutilb-error-handling"></a>
+ 대상 데이터베이스가 지원되는 데이터베이스 엔진(PostgreSQL, Oracle 및 DB2)의 일부가 아닌 경우 프로그램 반환 코드가 8로 설정되고 `UnsupportedOperationException`이 발생합니다.
+ 프로그램이 임시 파일을 삭제하지 못하면 반환 코드가 4로 설정되고 오류 메시지가 로깅되지만 프로그램 실행은 중단되지 않습니다.
+ 다음 모든 경우에 프로그램 반환 코드는 4 또는 8로 설정되고 `AbendException`가 발생합니다(프로그램 실행 중지).
  + `SYSREC` 데이터 세트가 지원되는 종류(GDG 또는 파일 시스템 기반 데이터 세트) 중 하나가 아닌 경우 코드 4를 반환합니다.
  + `SYSPUNCH` 데이터 세트가 지원되는 종류(GDG 또는 파일 시스템 기반 데이터 세트 또는 `DUMMY`) 중 하나가 아닌 경우 코드 4를 반환합니다.
  + 프로그램이 `SYSREC` 데이터 세트 레코드 크기(데이터 세트 카탈로그에 설정되지 않았거나 정의되지 않음)를 검색할 수 없는 경우 코드 8을 반환합니다.
  + 프로그램이 `SYSPUNCH` 데이터 세트 레코드 크기(데이터 세트 카탈로그에 설정되지 않았거나 정의되지 않음)를 검색할 수 없는 경우 코드 8을 반환합니다.
  + `SYSREC` 데이터 세트 콘텐츠를 생성하는 데 사용된 쿼리가 유효하지 않은 경우(오류 쿼리가 로깅됨), 코드 4를 반환합니다.
  + 데이터베이스에서 데이터를 가져오는 동안 예외가 발생하면 코드 8을 반환합니다.
  + 데이터 `SYSIN` 세트에 `OUTDDN` 명령이 없는 경우 언로드 작업의 경우 코드 8을 반환합니다.
  + `SYSIN` 데이터 세트에서 유효한 명령을 찾을 수 없는 경우 코드 8을 반환합니다.

### INFUTILB / INZUTILB 샘플 사용량
<a name="infutilb-sample-usages"></a>

다음은 샘플 레거시 jcl 스크립트 조각입니다.

```
//********************************************************************
//* UNLOAD DATA FROM TABLE AP_JBI7_INVOICE.                       *
//********************************************************************
//INF1   EXEC PGM=INFUTILB
//SYSREC DD  DSN=output(out032.data),
//           DISP=SHR
//           DCB=(RECFM=FB,LRECL=90)
//SYSIN  DD  DSN=input(inf12.card),
//           DISP=SHR
```

는 다음 명령 카드(inf12.card)를 사용하여 데이터베이스에서 일부 데이터를 언로드합니다(여기서 레코드는 날짜를 기준으로 선택됨).

```
  UNLOAD                                                                        
      SELECT * FROM BUR000.AP_JB17_INVOICE                                  
      WHERE INVC_DAT >= 
      CONCAT(STRIP(CHAR(YEAR(CURRENT DATE - 100 YEAR))),'-01-01-00.00.00.000000')
      AND INVC_DAT >= 
      CONCAT('2025-01-01-',CONCAT((CURRENT TIME),'.000000'))
      AND INVC_DAT >= (CURRENT TIMESTAMP - 100 YEAR)
      ORDER BY identifier ASC                                                          
        OUTDDN (SYSREC)                                                         
        FORMAT DSNTIAUL
```

및 일치하는 groovy 스크립트 조각, 자동화된 jcl 현대화의 결과:

```
// STEP INF1 - PGM - INFUTILB*****************************************************
def stepINF1(Object shell, Map params, Map programResults){
    shell.with {
        if (checkValidProgramResults(programResults)) {
            return execStep("INF1", "INFUTILB", programResults, {
                mpr
                    .withFileConfigurations(new FileConfigurationUtils()
                        .withJobContext(jobContext)
                        .fileSystem("SYSREC")
                        .path("output(out032.data)").recordSize(90)
                        .disposition("SHR")
                        .build()
                        .fileSystem("SYSIN")
                        .path("input(inf12.card)")
                        .disposition("SHR")
                        .build()
                        .getFileConfigurations(fcmap))
                    .withParameters(params)
                    .runProgram("INFUTILB")
                })
        }
    }
}
```

## JXHDBCLR
<a name="jxhdbclr"></a>

### JXHDBCLR 목적
<a name="jxhdbclr-purpose"></a>

JXHDBCLR은 GS21 플랫폼에서 찾을 수 있는 데이터베이스 정리 유틸리티 프로그램으로, 명령 카드에 있는 제공된 특정 문에 따라 테이블을 잘라냅니다.

### JXHDBCLR 서명
<a name="jxhdbclr-signature"></a>

인수는 취하지 않지만 `SYSIN` 데이터 세트(명령 카드)에서 문을 읽습니다.

특성상 현대화된 작업 스크립트에서 주로 호출하기 위한 것입니다.

### JXHDBCLR 관련 구성 파라미터
<a name="jxhdbclr-configuration"></a>

유틸리티의 동작은 다음 구성 파라미터의 영향을 받습니다.
+ `unload.sqlCodePointShift`
+ `unload.noPad`
+ `unload.nbi.whenNull`
+ `unload.nbi.whenNotNull`
+ `unload.useDatabaseConfiguration`
+ `unload.format.date`
+ `unload.format.time`
+ `unload.format.timestamp`
+ `hasGraphic`
+ `forcedDate`
+ `frozenDate`

이러한 파라미터 구성에 대한 [선택적 웹 애플리케이션에 사용할 수 있는 속성](ba-runtime-key-value.md#ba-runtime-key-value-web) 자세한 내용은 섹션을 참조하세요.

### JXHDBCLR 검사/오류 처리
<a name="jxhdbclr-error-handling"></a>

잘라낼 테이블을 찾을 수 없는 경우 경고 메시지가 기록되지만 프로그램 실행은 중단되지 않습니다.

테이블 잘라내기 중에 일부 오류가 발생하면 프로그램 반환 코드가 4로 설정되고 오류 메시지가 기록되지만 프로그램 실행은 중단되지 않습니다.

다음 조건 중 하나에 대해 프로그램 반환 코드가 8로 설정되고 `AbendException`이 발생합니다(프로그램 실행 중지).
+ 명령 카드 콘텐츠가 비어 있는 경우
+ 명령 처리 구문 분석 중에 예외가 발생하는 경우

### JXHDBCLR 샘플 사용량
<a name="jxhdbclr-sample-usages"></a>

인라인 명령 카드를 사용한 샘플 JXHDBCLR 사용:

```
//*******************************************************************
//**  Step 1 - JXHDBCLR UTILITY - DBCLEAR TYPE=2/3
//*******************************************************************
//STEP01  EXEC PGM=JXHDBCLR,REGION=256K,PARM='LINECNT=0'
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
    DBCLEAR    SCHEMA=MUSICSCH,TYPE=3,CHECK=YES
    DEFINE     RANGE=(SINGERDEST)
END
```

및 일치하는 현대화된 groovy 스크립트 조각:

```
// STEP STEP01 - PGM - JXHDBCLR***************************************************
def stepSTEP01(Object shell, Map params, Map programResults){
 shell.with {
        if (checkValidProgramResults(programResults)) {
            return execStep("STEP01", "JXHDBCLR", programResults, {
                mpr
                    .withFileConfigurations(new FileConfigurationUtils()
                        .withJobContext(jobContext)
                        .systemOut("SYSPRINT")
                        .output("*")
                        .build()
                        .fileSystem("SYSIN")
                        .stream(
"""    DBCLEAR    SCHEMA=MUSICSCH,TYPE=3,CHECK=YES
    DEFINE     RANGE=(SINGER)
END""", getEncoding())
                        .build()
                        .getFileConfigurations())
                    .withArguments(getParm("LINECNT=0"))
                    .withParameters(params)
                    .runProgram("JXHDBCLR")
                })
        }
    }
}
```

레거시의 인라인 카드는 스트림을 사용하여 "있는 그대로" 유지됩니다.