데이터베이스 관리

본 장에서는 설계된 OpenFrame HiDB 데이터베이스를 구현하기 위해 필요한 작업에 대해서 설명한다.

1. 개요

HiDB 데이터베이스를 관리하는 일은 데이터베이스를 설계, 구현, 유지하는 작업을 말한다.

HiDB 데이터베이스의 각 관리 업무와 그에 대한 설명은 다음과 같다.

  • 데이터베이스 설계

    사이트의 업무 요건을 분석해서 데이터 구조를 만든다. 데이터 구조는 새로운 데이터베이스 안에 어떤 데이터가 저장될 것인지 그리고 어떻게 데이터가 구조적으로 서로 연결될 것인지를 보여준다.

    데이터 구조가 결정되면, 데이터베이스를 설계할 수 있다. 데이터베이스 설계 단계에서 데이터베이스 관리자는 구체적인 데이터베이스 정의 항목과 옵션들을 결정한다.

  • 데이터베이스 구현

    데이터베이스가 설계되면 설계된 데이터베이스의 특징과 애플리케이션이 데이터베이스를 사용하는 방법을 매크로 어셈블러로 코딩함으로써 데이터베이스를 구현한다.

    데이터베이스 구현은 DBD(Database Description) 스크립트와 PSB(Program Specification Block) 스크립트를 코딩하고 컴파일하는 업무로 이루어져 있다. 데이터베이스 구현의 또 다른 업무는 ACB(Application Control Block)를 정의하는 일이다.

  • 데이터베이스 적재

    데이터베이스가 정의되면 데이터베이스에 데이터를 적재하기 위해 초기 적재 프로그램을 작성해야 한다. 데이터베이스에 데이터가 적재되고 나면 애플리케이션은 데이터베이스를 사용해서 작업을 수행할 수 있다. 메인프레임에서 사용하던 계층 데이터베이스의 데이터를 HiDB에서 사용하기 위해서는 데이터베이스 마이그레이션 작업을 수행한다.

  • 데이터베이스 유지

    데이터베이스가 운용에 들어가면 데이터베이스의 성능을 모니터링하고 튜닝하기 위한 작업이 계속되어야 한다. 정기적인 모니터링 작업은 언제 데이터베이스를 튜닝해야 하는지 결정하는데 도움을 준다.

2. DBD

HiDB 데이터베이스에 대한 설계가 끝나면, 데이터베이스를 사용하는 애플리케이션을 실행하기 전에 데이터베이스 관리자는 DBD(Database Description)를 코딩하고 컴파일함으로써 데이터베이스에 대한 물리적인 또는 논리적인 특징들을 HiDB 시스템에 알려주어야 한다.

DBD는 데이터베이스의 구조나 액세스 메소드, 데이터베이스 레코드 내의 세그먼트와 필드 그리고 각각의 세그먼트 유형간의 관계에 대해 기술하는 매크로 어셈블러 명령어의 집합이다. HiDB 관련 문서에서는 DBD 스크립트에 기술되어 있는 매크로 어셈블러 명령어의 집합들을 DBD 메타 정보라고 한다.

다음은 DBDGEN 유틸리티 프로그램을 사용해서 DBD 메타 정보를 메타 테이블에 저장하는 방법에 대한 설명이다.

figure 2 1
DBD Generation Process

작성된 DBD 매크로 어셈블러 스크립트는 DBDGEN 유틸리티 프로그램의 입력으로 사용된다. 이 유틸리티 프로그램은 어셈블리 컴파일 프로그램으로 DBD 메타 정보를 DBD 관련 메타 테이블에 저장한다. 저장된 DBD 메타 정보는 이후에 데이터베이스를 처리할 때 사용된다.

HiDB에서는 DBD 컨트롤 블록의 생성을 위해 DBDGEN 유틸리티 대신 dbdgen 툴을 제공한다.

정의되는 각각의 데이터베이스마다 하나씩 별개의 입력 스크립트가 필요하다.

다음은 입력 스크립트 문장에 대한 설명이다.

구분 설명

DBD 문장

현재 기술하고 있는 데이터베이스의 이름과 DL/I 액세스 메소드를 지정한다.

DATASET 문장

데이터베이스의 물리적인 데이터 저장소로 사용되는 데이터셋에 대한 속성을 지정한다. 데이터베이스의 유형에 따라 최대 10개까지의 데이터셋 그룹이 정의될 수 있고, 데이터베이스에 있는 데이터셋 그룹 하나 당 하나의 DATASET 문장이 사용된다.

각각의 DATASET 문장 뒤에는 SEGM 문장이 따라오며, SEGM 문장에 정의된 모든 세그먼트는 해당 데이터셋 그룹에 저장된다.

AREA 문장

DEDB 데이터베이스의 경우에는 DATASET 문장 대신 AREA 문장이 사용되고, AREA 문장은 DEDB의 데이터 영역을 정의한다. 한 데이터베이스 안에 여러 개의 데이터 영역을 정의하기 위해 최대 240개까지의 AREA 문장이 사용된다. 모든 AREA 문장은 DBD 문장과 첫 번째 SEGM 문장 사이에 존재해야 한다.

SEGM 문장

SEGM 문장은 데이터베이스에 하나의 세그먼트 유형을 정의하기 위해 사용된다. SEGM 문장에는 해당 세그먼트에 대한 계층 구조에서의 위치, 물리적인 속성, 다른 세그먼트와의 관계 등의 정보가 기술된다.

세그먼트는 계층 구조에서의 순서대로 정의되어야 하며, 최대 1000개까지, 15개 깊이까지의 계층 레벨이 허용된다.

원본 시스템의 문법에 추가해서 EXTPROC과 GNALLPARENT 파라미터를 지정할 수 있다. 자세한 내용은 데이터베이스 정의 고유 문법을 확인한다.

FIELD 문장

FIELD 문장은 한 세그먼트 안에서의 특정 필드를 정의한다.

FIELD 문장은 자신이 속한 세그먼트의 SEGM 문장 바로 다음에 정의되어야 한다. 한 세그먼트 안에 있는 순차 필드와 DL/I 호출할 때 사용되는 SSA에 언급된 필드들은 모두 FIELD 문장으로 정의되어야 한다.

LCHILD 문장

LCHILD 문장은 두 개 세그먼트 유형 사이의 Secondary Index나 Logical Relationship를 정의한다. 또는 HIDAM 데이터베이스 유형에서 인덱스 데이터베이스와 루트 세그먼트 사이의 관계를 정의한다. 인덱스 관계 정의를 위해서는 PTR 파라미터에 INDX, SYMB 값을 명시하며, Logical Relationship 정의는 SNGL, DBLE, NONE을 명시한다.

XDFLD 문장

XDFLD 문장은 Secondary index가 사용될 경우에만 사용된다.

XDFLD 문장은 소스 세그먼트와 타깃 세그먼트를 연결시켜 준다. XDFLD 문장에는 인덱스 필드의 이름, 소스 세그먼트의 이름, Secondary index의 키를 만드는데 사용되는 필드명의 정보가 지정된다.

  • SRCH : 사용자 응용프로그램에서 검색조건으로 지정할 필드들을 지정한다.

  • SUBSEQ : 검색 키로는 사용되지 않지만 SRCH 필드 외에 추가적으로 HiDB가 Secondary index의 키로 관리할 필드를 지정한다.

  • DDATA : 검색 키로 사용되지 않고 Index segment의 추가적인 데이터로 사용할 필드를 지정한다.

DBDGEN 문장,

END 문장

DBDGEN 문장과 END 문장은 DBD 생성 스크립트의 마지막에 추가되며, 각각은 다음과 같은 의미를 갖는다.

  • DBDGEN : DBD를 정의하는 마지막 문장

  • END : 입력 스크립트의 마지막 문장

3. PSB

특정 애플리케이션은 데이터베이스에 저장되어 있는 모든 세그먼트와 필드를 다 사용할 필요가 없다. 그리고 특정 애플리케이션은 보안상의 이유나 통합 관리의 목적으로 특정 세그먼트나 필드에 접근이 허용되지 않아야 하는 경우도 있다.

데이터베이스 관리자는 PSB(Program Specification Block)를 코딩하고 컴파일함으로써 특정 애플리케이션이 데이터베이스의 어떤 세그먼트와 필드는 읽을 수 있고, 또 해당 세그먼트에 대해 어떤 작업을 수행할 수 있는지에 대한 통제를 할 수 있다. PSB는 데이터베이스의 세그먼트에 대한 애플리케이션의 접근방법을 기술하는 매크로 어셈블러 명령어의 집합이다. 하나의 PSB는 하나 이상의 PCB(Program Communication Block)로 구성되어 있고, 각각의 PCB는 관련된 데이터베이스를 읽거나 사용할 수 있는 애플리케이션의 권한을 기술한다. HiDB 관련 문서에서는 PSB 스크립트에 기술되어 있는 매크로 어셈블러 명령어의 집합들을 PSB 메타 정보라고 한다.

애플리케이션은 애플리케이션이 사용하는 PSB에 여러 개의 PCB를 가짐에 따라 같은 데이터베이스에 대한 여러 가지 다른 뷰를 가질 수 있고, 동시에 여러 데이터베이스에 대한 접근을 할 수도 있다.

데이터베이스에 대한 애플리케이션의 권한을 기술하는 데이터베이스 PCB 이외에 Alternate PCB라고 불리는 다른 종류의 PCB가 있다. Alternate PCB는 온라인 프로그램에서 Alternate Message Destination을 기술하는 데에 사용된다.

다음은 PSBGEN 유틸리티 프로그램을 사용해서 PSB 메타 정보를 메타 테이블에 저장하는 방법에 대한 설명이다.

figure 2 2
PSB Generation Process

작성된 PSB 매크로 어셈블러 스크립트는 PSBGEN 유틸리티 프로그램의 입력으로 사용된다. 이 유틸리티 프로그램은 어셈블리 컴파일 프로그램으로 PSB 메타 정보를 PSB관련 메타 테이블에 저장한다. 저장된 PSB 메타 정보는 이후에 데이터베이스를 처리할 때 사용된다.

HiDB에서는 PSB 컨트롤 블록의 생성을 위해 PSBGEN 유틸리티 대신 psbgen 툴을 제공한다.

다음은 입력 스크립트 문장에 대한 설명이다.

구분 설명

Alternate PCB 문장

2종류의 다른 PCB 문장이 입력 스크립트에 기술될 수 있다.

그 중 첫 번째 PCB 유형인 Alternate PCB는 온라인 트랜잭션 메시지가 처음에 생성된 장소와는 다른 장소로 보내지기 위한 목적지를 기술한다.

Alternate PCB 문장은 입력 스크립트의 맨 앞에 위치해야 한다.

데이터베이스 PCB 문장

두 번째 PCB 유형인 데이터베이스 PCB 문장은 애플리케이션이 접근하려고 하는 데이터베이스의 DBD 이름을 지정해 준다. 더불어 PCB 문장에서는 애플리케이션에서 데이터베이스에 저장되어 있는 세그먼트에 대해 실행 가능한 작업(GET, INSERT, REPLACE 등)에 대해 정의한다.

이 문장에서 기술되는 데이터베이스는 물리 데이터베이스 혹은 논리 데이터베이스가 될 수 있다. 애플리케이션에서 접근하는 모든 데이터베이스에 대해서 독립적인 데이터베이스 PCB가 필요하다.

SENSEG 문장

SENSEG 문장은 애플리케이션에서 볼 수 있는 데이터베이스의 세그먼트 유형을 정의한다. 각각의 세그먼트에 대해 독립적인 SENSEG 문장이 필요하다.

SENFLD 문장

SENFLD 문장은 Field-Level Sensitivity 기능과 같이 사용되어야 한다. SENFLD 문장은 애플리케이션에서 볼 수 있는 세그먼트의 필드를 정의한다.

PSBGEN 문장

PSBGEN 문장은 PSB의 이름을 지정하고 애플리케이션에 대한 여러 가지 속성을 정의한다. 애플리케이션에 사용된 프로그램 언어 및 I/O 버퍼의 최대 크기 등의 속성이 정의된다. 입력 스크립트에는 한 개의 PSBGEN 문장이 존재해야 한다.

END 문장

PSB 생성 스크립트의 마지막에는 END 문장이 있어야 한다.

END 문장은 psbgen 툴에게 입력 스크립트의 마지막이라는 것을 알려준다.

4. ACB

ACBGEN 유틸리티 프로그램은 PSB 메타 정보와 DBD 메타 정보를 취합하여 ACB(Application Control Block) 메타 정보를 만들어 낸다. 온라인 애플리케이션에서 HiDB 데이터베이스를 사용하려면 온라인 서버를 기동하기 전에 반드시 ACB 메타 정보를 생성해야 한다.

HiDB에서는 ACB 컨트롤 블록의 생성을 위해 ACBGEN 유틸리티 대신 acbgen 툴을 제공한다.

다음은 ACBGEN 유틸리티 프로그램을 사용해서 ACB 메타 정보를 메타 테이블에 저장하는 방법에 대한 설명이다.

figure 2 3
ACB Generation Process

ACB 관리 유틸리티인 ACBGEN 프로그램은 ACB 메타 정보에 필요한 PSB 메타 정보와 DBD 메타 정보를 PSB 관련 메타 테이블과 DBD 관련 메타 테이블에서 얻는다.

ACBGEN 유틸리티 프로그램을 사용하면 PSB 관련 메타 테이블 에 있는 모든 PSB에 대해 ACB 메타 정보를 생성할 수 있다. 또는 특정한 PSB 이름을 지정하거나 특정한 DBD 이름을 지정해서 해당하는 PSB에 대한 ACB 메타 정보를 생성할 수도 있다. 생성된 ACB 메타 정보는 PSB 관련 메타 테이블과 DBD 관련 메타 테이블에 저장된다.

특정 온라인 프로그램의 실행이 스케줄되면 해당 온라인 프로그램에서 사용하는 PSB에 해당하는 ACB 메타 정보가 바로 메모리로 로딩된다. 이렇게 함으로써 특정 온라인 프로그램의 실행을 스케줄하는 시간이 절약된다.

5. 가변길이 세그먼트

가변길이 세그먼트를 정의하기 위해서는 DBD의 SEGMENT 구문에서 BYTES 항목을 (max,min)형태로 기술한다. 가변길이 세그먼트를 가진 데이터베이스에 접근하는 애플리케이션 프로그램에서는 DL/I 함수를 호출할 때 반드시 세그먼트 I/O Area의 처음 2Bytes에 실제 처리할 세그먼트의 길이 정보를 기술해야 한다.

HiDB는 가변길이 세그먼트도 일반 세그먼트와 같은 방식으로 처리하지만, 세그먼트를 정의할 때 사용하는 카피북을 반드시 dbdcpybkgen으로 만들어야 한다는 제약이 있다.