튜토리얼

GOLDILOCKS Instance 관리

본 장에서는 GOLDILOCKS instance를 관리하기 위한 기반 지식에 대해 설명한다.

Overview

GOLDILOCKS database system은 database와 instance로 구성된다. Database는 메모리상에 존재하는 dictionary data들과 사용자 data, 그리고 이에 대한 각각의 data file, 온라인 redo file 등 database를 구동하기 위한 각종 file들의 집합이다.

Database instance는 GOLDILOCKS database를 운용하기 위해 사용되는 run-time 정보들을 담고 있는 메모리 부분과 이를 운용하고 관리하는 background process를 의미한다. 각 database instance들은 shared memory를 구성할 때 사용되는 shared memory key 값과 "GOLDILOCKS_DATA" 환경 변수 값으로 구분된다.

프로퍼티 설정

$GOLDILOCKS_DATA/conf/goldilocks.property.conf 파일에는 GOLDILOCKS의 프로퍼티가 기술되어 있다. 기본 프로퍼티로도 GOLDILOCKS를 설치할 수 있는데 본 문서에서는 TBS (tablespace), LOG, CONTROL FILE 등 주요 프로퍼티에 대해서만 설명한다.

다음은 GOLDILOCKS 설치 시 주요 프로퍼티 항목과 그에 대한 설명이다.

주요 프로퍼티

프로퍼티

설명

기본값

SYSTEM_TABLESPACE_DIR

시스템 TBS들이 저장되는 디렉토리 경로로써 해당 경로에는 다음과 같은 TBS들이 설치된다.

  • DICTIONARY_TBS

  • MEM_DATA_TBS

  • MEM_UNDO_TBS

  • MEM_TEMP_TBS

  • MEM_TRANS_TBS

‘<GOLDILOCKS_DATA>/db’

SYSTEM_MEMORY_DICT_TABLESPACE_SIZE

딕셔너리 테이블스페이스 사이즈이다.

128M

SYSTEM_MEMORY_DATA_TABLESPACE_SIZE

메모리 데이터 테이블스페이스 사이즈이다.

200M

SYSTEM_DISK_DATA_TABLESPACE_SIZE

디스크 데이터 테이블스페이스 사이즈이다.

200M

SYSTEM_MEMORY_UNDO_TABLESPACE_SIZE

Undo 테이블스페이스 사이즈이다.

32M

LOG_DIR

기본 로그 디렉토리 경로이다.

‘<GOLDILOCKS_DATA>/wal’

SYSTEM_LOGGER_DIR

시스템 로그 디렉토리 경로이다.

‘<GOLDILOCKS_DATA>/trc’

CONTROL_FILE_COUNT

컨트롤 파일의 개수이다.

2

CONTROL_FILE_0

첫 번째 컨트롤 파일의 경로이다.

'<GOLDILOCKS_DATA>/wal/control_0.ctl'

CONTROL_FILE_1

두 번째 컨트롤 파일의 경로이다.

'<GOLDILOCKS_DATA>/wal/control_1.ctl'

BUFFER_CACHE_SIZE

디스크 테이블스페이스에 생성된 테이블, 인덱스 페이지를 캐싱하기 위한 버퍼 캐쉬의 크기이다.

64M

Database나 instance의 설정을 변경하고 싶을 때는 text 프로퍼티 파일 ($GOLDILOCKS_DATA/conf/goldilocks.properties.conf)을 변경하거나 환경 변수에 GOLDILOCKS_<property_name> 형태의 변수를 새로 정의하면 된다. 프로퍼티 파일에 설정된 값이 환경 변수에 설정된 값보다 우선한다.

Background 프로세스

GOLDILOCKS는 instance를 관리하기 위한 background 프로세스 (gmaster)를 가지고 있다. gmaster는 내부적으로 여러 개의 system thread로 구성되어 있으며 그 내용은 다음과 같다.

System threads

Thread

설명

Main thread

gmaster 프로세스를 구동/ 종료한다.

Log archiving thread

온라인 redo log file을 switching 할 때 이전 redo log file을 지정된 위치로 복사하여 보관한다.

Ager thread

Drop 된 schema object들이 사용하고 있던 자원들을 정리한다.

Page flusher thread

Checkpoint가 발생할 때 dirty 된 페이지들을 disk로 저장하기 위하여 IO slave들에 작업을 배분하고 이를 제어한다.

Log flusher thread

Run-time에 redo log buffer에 쌓인 log record들을 온라인 redo log file에 주기적으로 쌓는다.

Checkpoint thread

Redo log file을 switching 할 때 dirty 된 페이지들을 disk 상에 존재하는 data file과 온라인 redo log file로 내린다.

Cleanup thread

비정상적으로 종료된 client들이 사용하던 자원을 정리하고 해당 트랜잭션들을 rollback 한다.

IO slave thread

Checkpoint나 datafile loading 등과 같은 data file과 관련된 모든 disk IO를 수행한다.

Process monitor thread

Balancer (gbalancer), dispatcher (gdispatcher), shared-server (gserver) 등과 같은 process들을 실행하고 monitoring하여 비정상적으로 종료된 경우 재실행한다.

Cluster recover thread

(Cluster only)

Cluster system에서 global transaction을 복구한다.

Failover thread

(Cluster only)

Cluster system에서 특정 노드나 네트워크에 장애가 발생하면 장애 member에 대한 offline 및 coordinator 재선정과 같은 failover 작업을 처리한다.

Client 프로세스

Client/ Server 모델

Client/ Server (이하 C/S) 모델을 사용하는 응용 프로그램은 접속 요청을 기다리고 있는 listener (glsnr)에 접속하여 새로운 데이터베이스 서비스 프로세스 (gserver)를 생성하고 (dedicated 모드) 이 프로세스와의 TCP 통신으로 사용자의 요청을 처리한다. 프로세스간 통신을 통해 작업을 수행하므로 응용 프로그램 단에서 발생하는 모든 signal은 데이터베이스의 상태에 영향을 미치지 않으며, cleanup threads는 비정상적으로 종료된 응용 프로그램이 사용하던 모든 자원을 주기적으로 체크하여 반납한다.

Direct Access 모델

GOLDILOCKS는 Client/ Server (C/S) 모델과 더불어 Direct Access (D/A) 모델을 지원한다. 모든 응용 프로그램들은 GOLDILOCKS가 제공하는 서버 library를 링크하여 직접 database와 instance에 접근한다. 따라서 별도의 서비스 프로세스 없이 응용 프로그램 프로세스들만 존재한다.

D/A 모델로 작성된 응용 프로그램 프로세스가 운영 중에 발생하는 signal에 의해 비정상적으로 중단된 경우, 해당 프로세스가 사용하던 자원은 라이브러리가 connection 할 때 설정한 signal handler 함수에 의해 다음 두 단계로 정리된다.

  1. 해당 프로세스의 signal handler는 자신이 사용하는 session 객체에 비정상 종료함을 표시하고 종료된다.

  2. C/S 모델과 동일하게 gmaster의 cleanup thread에 의해 일정 시간 후에 database로 반환된다.

D/A 모델에서는 응용 프로그램 프로세스가 직접 데이터베이스 영역에 접근하므로 다음 사항들에 유의하여 사용해야 한다.

Instance의 메모리 구조

Database instance가 사용하는 메모리의 크기는 프로퍼티 파일에 지정된 관련 프로퍼티들에 의해 결정된다. Instance가 사용하는 shared memory는 크게 static 영역과 테이블스페이스 영역으로 나뉜다. Static 영역은 database를 운용하기 위해 여러 프로세스 사이에 공용으로 사용되는 instance의 기본 정보들과 각 session, statement 및 transaction 정보들, redo log buffer, dictionary cache 정보, 그리고 그 외 여러 가지 운용 정보들을 담고 있다. 테이블스페이스 영역은 각 테이블스페이스의 내용을 포함하는 page frame들과 이를 제어하기 위한 page control header (PCH)들로 구성되어 있다.

응용 프로그램 프로세스의 메모리는 connect 할 때 attach한 instance 메모리 외에 프로세스 단위로 공유하는 ODBC environment와 여러 ODBC handle들, 그리고 bind 정보와 같은 기타 정보들을 포함하고 있는 heap 메모리 영역을 추가적으로 포함하고 있다.

Instance 시작과 종료

GOLDILOCKS instance를 시작하려면 SHARED_MEMORY_STATIC_KEY 프로퍼티가 다른 instance들과 다르게 설정되어 있어야 한다. 이후 gsql을 이용하여 시작할 수 있는데 다음과 같이 sysdba role을 가지도록 실행시켜야 한다.

C/S 모델의 dedicated 모드에서 GOLDILOCKS instance를 시작하거나 종료하려면 listener가 실행되어 있어야 한다.
C/S 모델의 shared 모드에서는 GOLDILOCKS instance를 시작하거나 종료할 수 없다.
% gsql sys gliese --as sysdba

Connected to GOLDILOCKS Database.

gSQL>

GOLDILOCKS instance는 다음과 같이 여러 단계의 startup phase를 갖는다.

다음 gsql 명령으로 GOLDILOCKS instance를 startup 한다.

gSQL> \startup nomount
Startup success

gSQL> alter system mount database;
System altered.

gSQL> alter system open database;
System altered.

만일 바로 OPEN 단계로 진입하려면 다음과 같이 수행한다.

gSQL> \startup open
Startup success

GOLDILOCKS instance가 종료되면 관리 데몬 프로세스인 gmaster가 종료되어 더 이상의 접속 및 기타 database 작업을 수행할 수 없다.

GOLDILOCKS instance는 다음과 같은 네 가지 방법으로 종료할 수 있다.

Instance를 종료할 때도 sysdba role로 gsql을 수행하고 다음과 같이 \shutdown 명령을 수행한다.

% gsql sys gliese --as sysdba

Connected to GOLDILOCKS Database.

gSQL> \shutdown normal

Shutdown success

gSQL>

Listener 시작과 종료

Client/ server 환경에서 서비스하려면 listener를 구동시켜야 한다.

다음과 같이 listener를 구동한다.

% glsnr --start
 
Listener is started successfully.

%

다음과 같이 listener를 종료한다.

% glsnr --stop
 
Listener is stopped.

%
Listener 제어에 대한 자세한 설명은 glsnr을 참조한다.
Cluster system의 시작과 종료 방법은 Cluster System 시작과 종료를 참조한다.

GOLDILOCKS 설치, 삭제와 Database 생성

본 절에서는 GOLDILOCKS software를 install하고 database를 생성하는 방법에 대해 설명한다.

Overview

GOLDILOCKS software는 goldilocks-<version_no>-<os_type>-<cpu_type>.tar.gz라는 이름의 압축파일로 제공되는데 압축을 풀면 해당 위치에 필요한 software 바이너리들과 각종 sample 및 기본적인 database directory 구조가 생성된 후 install이 완료된다. Install이 끝나면 해당 package 이름의 디렉토리가 생성되며 그 아래에 goldilocks_homegoldilocks_data 디렉토리가 생성된다.

이후 $GOLDILOCKS_DATA 위치에 database를 생성하는 작업은 $GOLDILOCKS_HOME/bin 디렉토리에 존재하는 gcreatedb라는 유틸리티를 사용한다.

릴리즈 플랫폼

GOLDILOCKS는 다음과 같은 릴리즈 플랫폼에서 사용할 수 있다.

릴리즈 플랫폼

플랫폼

플랫폼 이름

OS

CPU

비고

Server platform

linux-x86_64

linux

x86_64

>= linux kernel 2.6

>= glibc 2.1[1]

>= gcc 4.1.2

>= java 1.6

<= java 1.8

linux-powerpc-64

linux

powerpc

>= linux kernel 2.6

>= glibc 2.1[1]

>= gcc 4.1.2

>= java 1.6

<= java 1.8

hpux11.31-itanium-64

HP-UX 11.31

itanium

>= java 1.6

<= java 1.8

aix7-powerpc-64

AIX 7.2

powerpc

>= java 1.6

<= java 1.8

Client platform

linux-x86_64

linux

x86_64

>= linux kernel 2.6

>= glibc 2.1[1]

>= gcc 4.1.2

>= java 1.6

<= java 1.8

linux-x86_32

linux

x86_32

>= Linux kernel 2.6

>= glibc 2.1[1]

>= gcc 4.1.2

>= java 1.6

<= java 1.8

hpux11.31-itanium-64

HP-UX 11.31

itanium

>= java 1.6

<= java 1.8

hpux11.31-itanium-32

HP-UX 11.31

itanium

>= java 1.6

<= java 1.8

aix7-powerpc-64

AIX 7.2

powerpc

>= java 1.6

<= java 1.8

linux-powerpc-64

linux

powerpc

>= Linux kernel 2.6

>= glibc 2.1[1]

>= gcc 4.1.2

>= java 1.6

<= java 1.8

windows-x86-64

Windows

PENTINUM x86

>= java 1.6

<= java 1.8

windows-x86-32

Windows

PENTINUM x86

>= java 1.6

<= java 1.8

[1] CentOS 8, RHEL 8 이상에서는 사용자가 libnsl을 추가로 설치해야 한다.

시스템 요구사항

GOLDILOCKS를 install 하기 전에 다음과 같은 시스템 요구사항을 확인해야 한다.

GOLDILOCKS Package 구성

GOLDILOCKS 설치 시 디렉토리의 구성 내용에 대해 설명한다.

Package 디렉토리 구성

상위 디렉토리 구성

디렉토리 이름

Server

Client

설명

GOLDILOCKS_HOME

O

O

바이너리와 라이브러리가 설치되며 업데이트 할 때 overwrite 할 수 있는 그룹이다.

GOLDILOCKS_DATA

O

X

실제 데이터가 저장되는 경로이며 overwrite 할 수 없는 그룹이다.

Package 디렉토리 구성

구 분

이름

설명

GOLDILOCKS_HOME

admin

데이터베이스를 생성할 때 필요한 스키마 스크립트

bin

실행 파일

lib

Library 파일

include

ODBC, XA, embedded SQL 등과 같은 header 파일

license

라이센스 파일

sample

샘플 파일

msg

에러 메시지 파일

script

편의성 스크립트 파일 (추후 지원 예정)

app_dev

Application development

GOLDILOCKS_DATA

conf

환경 설정 파일

db

데이터베이스 파일

wal

로그 파일, 컨트롤 파일

archive_log

Archive log file

backup

백업 파일

trc

Trace 로그 파일, 경고 메시지 파일

journal

Cluster rebalance 할 때 사용되는 저널 파일

Package 파일 목록

각 디렉토리에 포함되어 있는 파일 및 server package 또는 client package에 포함되는지 여부를 설명한다.

admin/ standalone 디렉토리

파일 이름

Server

Client

설명

README

O

X

read me

DictionarySchema.sql

O

X

Dictionary schema 생성 스크립트

InformationSchema.sql

O

X

Information schema 생성 스크립트

PerformanceViewSchema.sql

O

X

PerformancView schema 생성 스크립트

admin/ cluster 디렉토리

파일 이름

Server

Client

설명

README

O

X

read me

DictionarySchema.sql

O

X

Dictionary schema 생성 스크립트

InformationSchema.sql

O

X

Information schema 생성 스크립트

PerformanceViewSchema.sql

O

X

PerformancView schema 생성 스크립트

GOLDILOCKS를 standalone으로 사용할 때는 admin/ standalone 디렉토리 내의 생성 스크립트를 사용하고, cluster system을 구성하여 사용할 때는 admin/ cluster 디렉토리 내의 생성 스크립트를 사용한다.

bin 디렉토리 (Unix)

파일 이름

Server

Client

설명

README

O

O

read me

gmaster

O

X

GOLDILOCKS master

gcreatedb

O

X

Database creation tool

glsnr

O

X

Listener control tool

gbalancer

O

X

Load balancer for C/S shared

gdispatcher

O

X

Manage multiple connections for C/S shared

gserver

O

X

Instance manager for C/S

gsql

O

X

Interactive SQL tool

gsqlnet

O

O

Interactive SQL tool for C/S

gpec

O

O

Embedded SQL precompiler

logmirror

O

X

Redo-log replication tool

cyclone

O

X

CDC replication tool

gloader

O

X

Import/ export tool

gloadernet

O

O

Import/ export tool for C/S

cymon

O

X

CDC monitoring tool

gdump

O

X

Control/ log/ data/ binary property viewer

gsyncher

O

X

Synchronization utility for shared memory log and disk log files

tablediff.jar

O

X

Table comparison tool

cdispatcher

O

X

Manage cluster connections and distribute protocols in cluster system

cserver

O

X

Instance manager for cluster system

gtrclogger

O

X

Trace log manager for cluster system

gmon

O

X

Process monitoring tool

galocator

O

X

Location management tool

gagent

O

X

Location provider tool

gloctl

O

O

Interactive location editing tool

cyfile

O

X

CDC exporting file tool

bin 디렉토리 (Windows client)

파일 이름

Server

Client

설명

README

X

O

read me

gloadernet.exe

X

O

Import/ export tool for C/S

gpec.exe

X

O

Embedded SQL precompiler

gsqlnet.exe

X

O

Interactive SQL tool for C/S

gloctl.exe

X

O

-

lib 디렉토리 (Unix)

파일 이름

Server

Client

(64 bit)

Client

(32 bit)

설명

README

O

O

O

read me

libstib.so

O

X

X

Infiniband 용 shared library

libgoldilocks.a

O

X

X

D/A와 C/S가 포함된 static library for ODBC

libgoldilocksa.a

O

X

X

D/A 전용 static library for ODBC

libgoldilocksas.so

O

X

X

D/A 전용 shared library for ODBC

libgoldilocksc.a

O

O

O

C/S 전용 static library for ODBC

libgoldilockscs-ul32.so

O

O

X

64bit-C/S 전용 shared library for ODBC

(SQLLEN = 4 byte)

libgoldilockscs-ul64.so

O

O

X

64bit-C/S 전용 shared library for ODBC

(SQLLEN = 8 byte)

libgoldilockscs.so

X

X

O

32bit-C/S 전용 shared library for ODBC

libgoldilockscvtGB18030_32.so

X

X

O

32bit GB18030 character set 변환 library

libgoldilockscvtGB18030_64.so

O

O

X

64bit GB18030 character set 변환 library

libgoldilockscvtUHC_32.so

X

X

O

32bit UHC character set 변환 library

libgoldilockscvtUHC_64.so

O

O

X

64bit UHC character set 변환 library

libgoldilocksesql.a

O

O

O

Embedded SQL 용 static library

libgoldilocksesqls.so

O

O

O

Embedded SQL 용 shared library

libgoldilockss.so

O

X

X

D/A와 C/S가 포함된 shared library for ODBC

goldilocks6.jar

O

O

O

C/S 전용 JDBC library (java 1.6용)

goldilocks7.jar

O

O

O

C/S 전용 JDBC library (java 1.7용)

goldilocks8.jar

O

O

O

C/S 전용 JDBC library (java 1.8용)

libgoldilocksjni.so

O

X

X

D/A 전용 JDBC shared library

libgoldilocksjnigc.so

O

O

O

Global connection용 JDBC shared library

libgdlc.a

O

O

O

C/S 전용 static library for ODBC

libgdlcs.so

O

O

O

C/S 전용 shared library for ODBC

lib 디렉토리 (Windows client)

파일 이름

Server

Client

(64 bit)

Client

(32 bit)

설명

goldilocksc.lib

X

O

O

C/S 전용 static library for ODBC

goldilockscs.dll

X

X

O

32 bit-C/S 전용 shared library for ODBC

goldilockscs-ul64.dll

X

O

X

64 bit-C/S 전용 shared library for ODBC (SQLLEN = 8byte)

goldilockssetup32.dll

X

X

O

32 bit setup library for ODBC

goldilockssetup64.dll

X

O

X

64 bit setup library for ODBC

goldilocksesql.lib

X

O

O

static library for embedded SQL

goldilocksesqls.dll

X

O

O

shared library for embedded SQL

goldilockscvtGB18030_32.dll

X

X

O

32 bit GB18030 character set 변환 library

goldilockscvtGB18030_64.dll

X

O

X

64 bit GB18030 character set 변환 library

goldilockscvtUHC_32.dll

X

X

O

32 bit UHC character set 변환 library

goldilockscvtUHC_64.dll

X

O

X

64 bit UHC18030 character set 변환 library

goldilocks6.jar

X

O

O

C/S 전용 JDBC library (java 1.6용)

goldilocks7.jar

X

O

O

C/S 전용 JDBC library (java 1.7용)

goldilocks8.jar

X

O

O

C/S 전용 JDBC library (java 1.8용)

gdlc.lib

X

O

O

C/S 전용 static library for ODBC

gdlcs.lib

X

O

O

C/S 전용 shared library for ODBC

gdlcs.dll

X

O

O

C/S 전용 shared library for ODBC

README

X

O

O

read me

goldilocksjnigc.dll

X

O

O

GOLDILOCKS application 개발 library (JDBC D/A mode)

include 디렉토리 (Unix)

파일 이름

Server

Client

설명

README

O

O

read me

sql.h

O

O

ODBC 헤더 파일

sqlca.h

O

O

ODBC 헤더 파일

sqlext.h

O

O

ODBC 헤더 파일

sqltypes.h

O

O

ODBC 헤더 파일

sqlucode.h

O

O

ODBC 헤더 파일

goldilocks.h

O

O

GOLDILOCKS ODBC 응용 프로그램 개발용 헤더 파일

goldilockstypes.h

O

O

GOLDILOCKS ODBC 데이터타입 명세 파일

xa.h

O

O

표준 XA 헤더 파일

goldilocksxa.h

O

O

GOLDILOCKS XA 헤더 파일

goldilocksesql.h

O

O

Embedded SQL 헤더파일

include 디렉토리 (Windows client)

파일 이름

Server

Client

설명

README

X

O

read me

goldilocks.h

X

O

GOLDILOCKS ODBC 응용 프로그램 개발용 헤더 파일

goldilockstypes.h

X

O

GOLDILOCKS ODBC 데이터타입 명세 파일

goldilocksxa.h

X

O

GOLDILOCKS XA 헤더 파일

goldilocksesql.h

X

O

Embedded SQL 헤더파일

sqlca.h

X

O

ODBC 헤더 파일

license 디렉토리

파일 이름

Server

Client

설명

README

O

X

read me

msg 디렉토리

파일 이름

Server

Client

설명

README

O

O

read me

goldilocks_error.msg

O

O

에러 메시지 파일

conf 디렉토리

파일 이름

설명

README

read me

goldilocks.property.conf

database 운영 프로퍼티 텍스트 파일

goldilocks.listener.conf

Listener 프로퍼티 파일

goldilocks.invited.conf

database 접속 가능 client 관리 파일

goldilocks.excluded.conf

database 접속 거부 client 관리 파일

goldilocks.gagent.conf

gagent 전용 설정 파일

tablediff.conf

tablediff 설정 파일

cyclone.master.conf

Cyclone master 전용 기본 파일

cyclone.slave.conf

Cyclone slave 전용 기본 파일

logmirror.master.conf

LogMirror master 전용 기본 파일

logmirror.slave.conf

LogMirror slave 전용 기본 파일

odbc.ini

template for odbc configuration

gsql.ini

template for gsql configuration

glogin.sql

gsql 기동시 실행 명령 목록

goldilocks.glocator.conf

gLocator 전용 설정 파일

cyfile.conf

cyfile 전용 설정 파일

db 디렉토리

파일 이름

설명

README

read me

wal 디렉토리

파일 이름

설명

README

read me

archive_log 디렉토리

파일 이름

설명

README

read me

backup 디렉토리

파일 이름

설명

README

read me

trc 디렉토리

파일 이름

설명

README

read me

data 디렉토리

파일 이름

설명

README

read me

GOLDILOCKS Software 설치

GOLDILOCKS를 설치하기 전에 운영체제 및 환경 설정에 대해 설명한다.

커널 파라미터

공유 메모리 (shared memory)

공유 메모리란 Inter Process Communication (IPC)의 일종으로 복수의 프로그램에서 데이터를 공유하기 위해 사용되는 메모리를 가리키는 용어이다. GOLDILOCKS에서는 공유 메모리와 함께 gsql, gloader 및 Client/ Server (C/S) 환경의 ODBC를 이용하는 사용자 프로그램을 사용한다. 또한 운영에 필요한 tablespace들이 모두 공유 메모리에 생성되기 때문에 다른 프로그램에서 권장되는 값보다 정확하게 설정해야 한다.

다음은 GOLDILOCKS 설치에 사용되는 공유 메모리에 필요한 항목과 권장값이다.

Shared memory 관련 kernal property

파라미터

이름

설명

권장값

비고

shmmax

하나의 shared memory 세그먼트가 가지는 최대 크기

가장 큰 datafile의 크기보다 큰 값

구상하고 있는 테이블스페이스에 속한 가장 큰 datafile의 크기보다 큰 값으로 설정한다.

shmmni

시스템이 사용 가능한 shared memory 세그먼트의 최대 개수

전체 datafile의 개수 + 1 보다 큰 값

전체 datafile의 개수 + 1 (SSA를 위한 shared memory 세그먼트)보다 큰 값으로 설정한다.

shmall

전체 shared memory 세그먼트의 총합 (Page 수)

Tablespace 구성의 총합보다 큰 값

시스템이 사용 가능한 shared memory의 총 페이지 수를 의미한다. 일반적으로 8 GB 이상의 큰 공유 메모리를 사용할 경우에 이 파라미터가 사용된다. GOLDILOCKS의 테이블스페이스의 총합이 32 G 라면 shmall은 그 이상의 값으로 설정되어야 한다.

다음은 테이블스페이스의 총합이 32 G 였을 때 shmall 값의 예이다.
kernel.shmmax = 34359738368
kernel.shmmni=4096
kernel.shmall = 8388609
8388609 = (34359738368 / 4096) + 1

세마포어 (semaphore)

세마포어 (semaphore)는 공유 메모리 (shared memory)와 같은 IPC의 일종으로 운영체제에서 자원을 사용하는 복수의 프로세스의 행동을 제어하는 기술이다. 세마포어는 설정에 따라 복수의 프로세스가 해당 자원을 동시에 참조하게 할 수 있고 다른 프로세스가 사용 중인 자원에 대해 해당 프로세스가 사용을 마칠 때까지 대기하도록 할 수도 있다.

GOLDILOCKS에서도 앞에서 설명한 공유 메모리에 대한 접근순서를 제어하기 위해 세마포어가 사용된다. 예를 들어, 다수의 GOLDILOCKS 클라이언트 프로그램에서 동일한 데이터 변경을 요청하는 경우 이를 적절하게 제어할 수 있어야 하기 때문이다. 세마포어의 파라미터 값은 GOLDILOCKS를 운영할 때 발생하는 세마포어 오퍼레이션에 따라 적절한 값으로 설정되어야 하며 본 문서에서는 리눅스의 일반값을 권장한다.

다음은 GOLDILOCKS 설치에 사용되는 세마포어의 권장값이다.

세마포어 관련 커널 파라미터 권장값

커널 파라미터

설명

권장값

semmsl

한 개의 세마포어 셋에 설정되는 세마포어의 개수

250

semmni

세마포어 셋의 개수

128

semmns

세마포어 셋의 총 개수 (semmni * semmsl)

32000

semopm

시스템 콜 별로 수행할 수 있는 세마포어의 최대 개수

100

Redhat, Ubuntu와 같은 리눅스 기반 시스템의 systemd가 관리하는 세션 목록에서 IPC 자원 생성 사용자가 로그아웃하면 해당 IPC 자원이 자동 삭제되는 옵션이 생김에 따라 시스템을 다음과 같이 설정해 주어야 세마포어 삭제를 방지할 수 있다. (커널 3.0.0 이상)

# cp -i /etc/systemd/logind.conf /etc/systemd/logind.conf_prev

# cat /etc/systemd/logind.conf
[Login]
#NAutoVTs=6
#ReserveVT=6
...
RemoveIPC=no
# systemctl restart systemd-logind

네트워크 (network)

Backlog는 TCP socket listen 할 때 accept 되길 기다리는 socket들의 queue 길이이다. GOLDILOCKS glsnr의 backlog는 glsnr의 config 파일의 BACKLOG로 설정한다. System에서 backlog의 최대값이 somaxconn 보다 큰 경우에는 somaxconn로 설정되므로 이 때는 somaxconn를 늘려주어야 한다.

GOLDILOCKS에서 C/S의 shared 모드로 동작할 때 사용되는 Unix Domain Socket (UDS)의 queue 길이는 max_dgram_qlen으로 설정된다. Client들이 동시에 접속할 때 이 값이 작으면 glsnr, gbalancer, gdispatcher 간의 통신에 병목이 발생한다.

다음은 GOLDILOCKS 설치에 사용되는 네트워크의 권장값이다.

네트워크 관련 커널 파라미터 권장값

커널 파라미터

설명

권장값

somaxconn

listen backlog의 최대값

1024

max_dgram_qlen

Unix Domain Socket Queue 크기

256

파라미터 적용

일회성으로 적용할 때는 다음과 같이 적용한다. (시스템을 재기동할 때는 다시 적용해야 한다.)

[SHELL]> echo   34359738368   >  /proc/sys/kernel/shmmax
[SHELL]> echo   8388608 >   /proc/sys/kernel/shmall
[SHELL]> echo   4096   >  /proc/sys/kernel/shmmni
[SHELL]> echo   250 32000 100 128  /proc/sys/kernel/sem
[SHELL]> echo   1024   >  /proc/sys/net/core/somaxconn
[SHELL]> echo   256   >  /proc/sys/net/unix/max_dgram_qlen

시스템이 다시 시작될 때도 적용되게 하려면 /etc/sysctl.conf에 다음과 같이 기술한다.

# shared memory
kernel.shmmax = 34359738368
kernel.shmall = 8388608
kernel.shmmni = 4096

# semaphore
kernel.sem = 250 32000 100 128

# network
net.core.somaxconn = 1024
net.unix.max_dgram_qlen = 256

기술된 내용이 반영되도록 하려면 다음 명령어를 이용한다.

[SHELL]> sysctl  -p

파라미터 확인

기술된 파라미터는 다음 명령어로 확인할 수 있다.

[SHELL]> ipcs -l

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 33554432
max total shared memory (kbytes) = 33554432
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 100
semaphore max value = 32767

압축해제

GOLDILOCKS의 패키지는 압축형태로 제공되므로 압축을 해제하면 기본 설치가 끝난다.

다음은 GOLDILOCKS 패키지를 설치하는 간단한 예이다.

##  $GOLDILOCKS_HOME=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/

[SHELL]> gzip –d goldilocks-mercury.2.1.0-linux-x86_64.tar.gz

[SHELL]> tar -xvf goldilocks-server-mercury.2.1.0-linux-x86_64.tar
goldilocks-server-mercury.2.1.0-linux-x86_64/goldilocks_home/include/sqlext.h
goldilocks-server-mercury.2.1.0-linux-x86_64/goldilocks_home/include/goldilocks.h
goldilocks-server-mercury.2.1.0-linux-x86_64/goldilocks_home/include/sqlca.h
…

압축 해제가 완료되면 <package_file_name>으로 생성된 디렉토리의 이름을 원하는 대로 변경할 수 있다. 이에 따라 $GOLDILOCKS_HOME과 $GOLDILOCKS_DATA 환경 변수도 변경해야 한다.

압축 해제 후 생성되는 디렉토리에 대한 설명은 GOLDILOCKS Package 구성을 참조한다.

환경 변수 설정

GOLDILOCKS package의 압축을 해제한 후에는 향후 GOLDILOCKS software를 실행하고 응용 프로그램을 개발하기 위하여 $GOLDILOCKS_HOME 디렉토리 아래에 생성된 bin과 lib를 각각 다음과 같이 PATH와 LD_LIBRARY_PATH에 추가한다. (GOLDILOCKS client 응용 프로그램을 개발할 때는 항상 컴파일 옵션의 include file directory로 $GOLDILOCKS_HOME/include를 넣어주어야 한다)

export PATH=$GOLDILOCKS_HOME/bin:$PATH
export LD_LIBRARY_PATH=$GOLDILOCKS_HOME/lib:$LD_LIBRARY_PATH

GOLDILOCKS를 사용하는데 필요한 환경 변수가 있다. 설치할 때 참조되는 변수도 있기 때문에 반드시 설치하기 전에 설정해야 한다.

GOLDILOCKS 설치 시 참조되는 OS 환경 변수

환경 변수

설명

비고

GOLDILOCKS_HOME

GOLDILOCKS 바이너리가 설치될 디렉토리 경로

GOLDILOCKS를 운영할 때 참조하는 변수로써 GOLDILOCKS가 설치될 디렉토리를 환경 변수로 미리 설정해야 한다.

GOLDILOCKS_DATA

GOLDILOCKS database instance가 생성될 위치

GOLDILOCKS의 데이터베이스를 생성하거나 운영할 때 참조하는 변수이다.

PATH

GOLDILOCKS의 실행파일들이 위치한 디렉토리 경로

GOLDILOCKS의 각종 바이너리를 절대 경로 없이 실행할 때 설정해야 한다.

LANG

터미널의 character set

  • GOLDILOCKS의 DATABASE를 생성할 때 기술한 character set과 다를 경우 영문, 숫자, 특수 문자를 제외한 문자들이 올바르게 출력되지 않거나 string 관련 함수들이 올바르게 동작하지 않을 수 있다.

  • GB18030, SQL_ASCII, UHC, UTF8에 대응하는 locale을 설정해야 한다.

  • 예: export LANG=ko_KR.utf8

##  $GOLDILOCKS_HOME=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/

[SHELL]> gzip –d goldilocks-mercury.2.1.0-linux-x86_64.tar.gz

[SHELL]> tar -xvf goldilocks-server-mercury.2.1.0-linux-x86_64.tar
goldilocks-server-mercury.2.1.0-linux-x86_64/goldilocks_home/include/sqlext.h
goldilocks-server-mercury.2.1.0-linux-x86_64/goldilocks_home/include/goldilocks.h
goldilocks-server-mercury.2.1.0-linux-x86_64/goldilocks_home/include/sqlca.h
…

DATABASE 삭제

GOLDILOCKS DATABASE를 다시 생성하기 위해 기존 DATABASE를 삭제하려면 데이터 파일, 컨트롤 파일, redo log file, (archive log 사용시) archive log file을 삭제하면 된다.

다음은 GOLDILOCKS DATABASE를 삭제하는 간단한 예이다.

## $GOLDILOCKS_BASE=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
## $GOLDILOCKS_DATA=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
                    goldilocks_data/
## $GOLDILOCKS_HOME=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
                    goldilocks_home/
[SHELL]> rm -rf $GOLDILOCKS_DATA/db/*.dbf
[SHELL]> rm -rf $GOLDILOCKS_DATA/wal/*.ctl
[SHELL]> rm -rf $GOLDILOCKS_DATA/wal/*.log
[SHELL]> rm -rf $GOLDILOCKS_DATA/archive_log/*.log

데이터 파일이나 archive log file 등의 위치는 사용자 설정에 따라 다를 수 있다.

삭제

GOLDILOCKS 패키지는 압축파일 형태로 제공되므로 특별한 삭제 원칙이 필요하진 않으며 DATABASE를 종료한 후에 설치된 디렉토리를 삭제하면 된다.

다음은 GOLDILOCKS 패키지를 삭제하는 간단한 예이다.

## $GOLDILOCKS_BASE=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
## $GOLDILOCKS_DATA=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
                    goldilocks_data/
## $GOLDILOCKS_HOME=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
                    goldilocks_home/
[SHELL]> rm -rf $GOLDILOCKS_DATA
[SHELL]> rm -rf $GOLDILOCKS_HOME
[SHELL]> rm -rf $GOLDILOCKS_BASE



## ~/.bash_profile
$GOLDILOCKS_BASE=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/ 1 삭제
$GOLDILOCKS_DATA=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
                    goldilocks_data/ 2 삭제
$GOLDILOCKS_HOME=/home/GOLDILOCKS/goldilocks-mercury.2.1.0-linux-x86_64/
                    goldilocks_home/ 3 삭제

Database 생성

프로퍼티 생성이 끝난 후 데이터베이스를 생성한다. 데이터베이스는 $GOLDILOCKS_HOME/bin/gcreatedb 명령어를 이용하여 생성할 수 있다. 다음은 gcreatedb 명령어를 사용하는 방법이다.
[SHELL]> gcreatedb --help
Usage 

    gcreatedb [options]

Options:

    --cluster        cluster system (if not specified, stand-alone system)
    --db_name        database name
    --db_comment     database comment
    --timezone       timezone ( {+/-}{TZH:TZM} )
    --character_set  character set
                       SQL_ASCII
                       UTF8
                       UHC
                       GB18030
    --char_length_units  char length units
                          OCTETS
                          CHARACTERS
    --member         local cluster member name
    --host           cluster ip address or host name
    --port           cluster port number
    --silent         suppresses the display of the result message
    --help           print help message

examples:

    gcreatedb --db_name="goldilocks" --db_comment="goldilocks database" --timezone="+09:00" --character_set="UTF8" --char_length_units="OCTETS" --silent

데이터베이스를 생성할 때는 $GOLDILOCKS_HOME/conf/goldilocks.properties.conf를 참조하여 각각의 ***_TABLESPACE_SIZE 값으로 goldilocks.properties.conf의 SYSTEM_TABLESPACE_DIR 경로에 tablespace file들이 생성된다.

Cluster system에 참여시킬 database를 생성할 경우에는 반드시 --cluster 옵션을 명시하여 실행하여야 한다.

다음은 gcreatedb 명령어의 실행 인자에 대한 설명이다.

gcreatedb 인자

실행 인자

설명

--cluster

Cluster system에서 사용할 database 이다.

생략할 경우, standalone database를 생성한다.

--db_name

데이터베이스 이름이다.

생략할 경우, goldilocks로 설정된다.

--db_comment

데이터베이스에 대한 설명이다.

생략할 경우, goldilocks database로 설정된다.

--timezone

타임 존이다.

생략할 경우, TIMEZONE 프로퍼티로 설정된다.

--character_set

데이터베이스 character set 이다.

GOLDILOCKS는 다음과 같은 네 가지 character set을 지원한다.

  • GB18030: 중국어 간체

  • SQL_ASCII: ASCII 문자만 지원하는 character set

  • UHC: 통합형 한글 코드 (Unified Hangul Code)

  • UTF8: (Unicode Transformation Format – 8)

생략할 경우, CHARACTER_SET 프로퍼티로 설정된다.

--char_length_units

캐릭터 길이의 단위이다.

  • OCTETS: 1 바이트를 한 글자로 인식한다.

  • CHARACTERS: 한 글자 (n 바이트)를 한 글자로 인식한다.

생략할 경우, CHAR_LENGTH_UNITS 프로퍼티로 설정된다.

--member

Cluster system 내에서 사용할 local database의 member 이름이다.

생략할 경우, LOCAL_CLUSTER_MEMBER 프로퍼티에 설정된 값을 사용한다.

--host

Cluster system member 간의 통신을 위해 사용할 local member의 host name 또는 IP address이다. Host name을 사용할 경우 시스템의 첫 번째 IPv4 주소를 사용한다.

생략할 경우, LOCAL_CLUSTER_MEMBER_HOST 프로퍼티에 설정된 값을 사용한다.

--port

Cluster system member 간의 통신을 위해 사용할 local member의 TCP listen port이다.

생략할 경우, LOCAL_CLUSTER_MEMBER_PORT 프로퍼티에 설정된 값을 사용한다.

--silent

출력 메시지를 보이지 않게 한다.

--help

도움말을 출력한다.

데이터베이스를 생성할 때는 다음과 같은 사항을 고려하여야 한다.

데이터베이스 생성에 성공하면 goldilocks.properties.conf의 SYSTEM_TABLESPACE_DIR에 기술된 경로에 서 다음과 같은 tablespace 파일들을 확인할 수 있다.

[SHELL]> gcreatedb
Database created

[SHELL]> gcreatedb --db_name="TEST_DB"                   \
                   --db_commnet="test database comment"  \
                   --timezone="+09:00"                   \
                   --character_set="UHC"                 \
                   --char_length_units="OCTETS"
Database created

[SHELL]> ls $GOLDILOCKS_DATA/db
system_data.dbf  system_dict.dbf  system_undo.dbf

다음은 cluster system에서 사용될 데이터베이스를 생성하는 예이다.

[SHELL]> gcreatedb --cluster
Database created

[SHELL]> gcreatedb --cluster --member=G1N1
Database created

[SHELL]> gcreatedb --cluster --member=G1N1 --host=127.0.0.1 --port 10101
Database created

[SHELL]> gcreatedb --cluster                         \
                   --db_name="TEST_DB"               \
                   --home=$GOLDILOCKS_DATA           \
                   --host=127.0.0.1                  \
                   --port=10101                      \
                   --db_comment="g1n1 db comment"    \
                   --timezone="+09:00"               \
                   --character_set="UHC"             \
                   --char_length_units="OCTETS"
Database created

[SHELL]> ls $GOLDILOCKS_DATA/db
system_data.dbf  system_dict.dbf  system_trans.dbf system_undo.dbf

Dictionary Schema 정보 구축

시스템 및 객체 정보를 조회하기 위해 다음과 같은 스키마를 생성한다.

Database를 생성한 후에는 다음과 같은 스키마들을 반드시 구축해야 한다. 구축하지 않을 경우 객체의 구조 정보를 획득하는 ODBC, JDBC의 catalog API (예: SQLTables() 함수 등)들이 오동작하여 third party tool들과 연동하지 않을 수 있다.

해당 스키마들에 포함된 view와 table들은 시스템의 정보를 편리하게 조회할 수 있도록 한다.

GOLDILOCKS instance를 OPEN 상태로 구동한 후에 다음과 같이 sql 파일들을 수행한다. 데이터베이스를 생성한 후에 최초 한 번은 수행해야 한다.

Dictionary schema 정보를 구축하기 위한 스크립트는 standalone용과 cluster system용으로 구분되어 있으므로 반드시 용도에 맞는 스크립트를 사용하여 구축해야 한다.

다음은 standalone database용 스크립트를 사용하여 dictionary schema 정보를 구축하는 방법이다.

% gsql --as sysdba --import $GOLDILOCKS_HOME/admin/standalone/DictionarySchema.sql
% gsql --as sysdba --import $GOLDILOCKS_HOME/admin/standalone/InformationSchema.sql
% gsql --as sysdba --import $GOLDILOCKS_HOME/admin/standalone/PerformanceViewSchema.sql

다음은 cluster system용 스크립트를 사용하여 dictionary schema 정보를 구축하는 방법이다.

% gsql --as sysdba --import $GOLDILOCKS_HOME/admin/cluster/DictionarySchema.sql
% gsql --as sysdba --import $GOLDILOCKS_HOME/admin/cluster/InformationSchema.sql
% gsql --as sysdba --import $GOLDILOCKS_HOME/admin/cluster/PerformanceViewSchema.sql

Database 저장구조 관리

본 절에서는 GOLDILOCKS instance를 구성하는 데이터베이스의 구성 요소들에 대해 설명한다.

Database 저장구조

GOLDILOCKS database는 크게 memory 영역과 disk 영역으로 나뉜다. Memory 영역은 하나 이상의 shared memory 집합으로 구성된 테이블스페이스들의 집합체이며 replace 작업에 의해 disk로 내려가는 경우가 발생하지 않는다.

Disk 영역은 각 테이블스페이스의 shared memory 한 개당 하나씩 존재하는 data file들과 instance의 구성 정보를 저장하고 있는 control file, instance의 환경설정이 저장된 프로퍼티 파일, 그리고 database 복구를 위해 기록되는 온라인 redo log file들로 구성되어 있다.

Control File

Control file은 database의 디스크상에 물리적인 저장 정보를 기록하고 있는 파일이며 instance를 startup할 때 가장 먼저 읽어들여 database의 상태를 파악하는 파일이다. Control file에는 다음과 같은 항목들이 기록되어 있다

온라인 Redo Log File

온라인 redo log file은 database가 비정상적으로 종료되었을 때 미처 data file에 기록되지 못한 변경 정보들을 instance를 재기동할 때 복구하기 위해 해당 instance에서 transaction들이 database 변경 연산을 수행한 모든 정보를 남긴 파일이다. 기본적으로 database가 생성될 때 LOG_FILE_SIZE 프로퍼티의 값에 해당하는 크기로 네 개가 생성되며 필요한 경우 추가할 수도 있다. 이 redo log file들은 circular 방식으로 순환하며 재사용된다.

온라인 redo log file이 다음 파일로 switching 되는 시점에는 checkpoint가 발생하여 일부 dirty 된 페이지들을 해당 data file로 내리는데 만일 checkpoint 연산이 지연되어 다음으로 사용될 온라인 redo log file에서 변경된 페이지가 아직 내려가지 못한 경우에는 (ACTIVE 상태인 경우) checkpoint가 완료될 때까지 모든 transaction들이 정지된다. 따라서 응용 프로그램의 성격에 따라 적당한 크기의 온라인 redo file을 생성하는 것이 database 시스템 성능 향상에 도움된다.

Undo Segment

Undo segment들은 부분 또는 전체 rollback을 할 때 사용하기 위해 transaction들이 변경 연산을 수행하기 이전의 이미지들을 미리 기록해 둔 segment이며 변경 연산을 수행하는 transaction당 한 개씩 할당되어 사용된다. Undo segment들은 MEM_UNDO_TBS 테이블스페이스에 저장되는 동시에 다수의 변경 transaction이 발생하거나 대량의 변경 연산이 하나의 transaction으로 수행되는 경우 (bulk delete 등)에 대비하여 충분한 undo 테이블스페이스를 확보해 두는 것이 좋다.

Data File

Data file은 테이블스페이스에 저장된 테이블/ 인덱스의 내용이 그대로 저장된 파일이다.

Data file은 다음 요소들로 구성되어 있다.

예외적으로 MEM_TEMP_TBS 테이블스페이스와 같은 임시 테이블스페이스는 redo logging도 하지 않으며 data file도 생성하지 않는다.

테이블스페이스

Database는 테이블과 인덱스 등을 담고 있는 논리적 구조인 테이블스페이스로 나뉘어진다. GOLDILOCKS의 테이블스페이스는 메모리 테이블스페이스와 디스크 테이블스페이스로 구분된다. 테이블스페이스의 각 데이터 파일별로 shared memory가 생성되어 페이지에 접근할 때 별도의 디스크 I/O가 발생하지 않는 것이 메모리 테이블스페이스이고 시스템의 버퍼 캐쉬를 이용하여 페이지에 접근하는 것이 디스크 테이블스페이스이다. V$TABLESPACE 테이블을 조회하면 현재 database에 존재하는 테이블스페이스들에 대한 정보가 출력된다.

GOLDILOCKS는 기본적으로 다음과 같은 테이블스페이스들을 지원한다.

GOLDILOCKS의 테이블스페이스 종류

소유자

이름

설명

SYSTEM

DICTIONARY_TBS

Database를 운용하기 위한 기본적인 dictionary 테이블들이 저장된다.

MEM_UNDO_TBS

Undo segment들과 transaction 정보들이 저장된다.

MEM_DATA_TBS

사용자가 schema 객체를 생성할 때 별도로 지정하지 않을 경우, 기본적으로 이 메모리 테이블스페이스에 저장된다.

DISK_DATA_TBS

사용자가 기본적으로 사용할 수 있는 디스크 테이블스페이스이다.

MEM_TEMP_TBS

Query 중에 생성되는 임시 테이블이나 테이블스페이스를 지정하지 않은 index들이 여기에 생성된다. Logging이 일어나지 않기 때문에 instance를 재기동할 때 index가 다시 build된다.

MEM_TRANS_TBS

Cluster system에서 global transaction을 복구하기 위해 사용된다. Cluster system으로 구성할 경우에만 생성된다.

USER

사용자 정의

사용자가 특정 용도의 테이블들을 테이블스페이스로 모아 관리하고 싶을 때 생성하여 사용한다.

테이블스페이스 타입

다음과 같이 다섯 가지 테이블스페이스 타입이 있다.

Database 저장 구조 정보 확인

본 절에서는 앞서 기술한 여러 database 저장 구조에 관한 정보를 확인할 수 있는 방법을 설명한다.

Control File 정보

Control file은 바이너리 형식으로 저장되어 있기 때문에 그 내용을 확인하려면 다음과 같이 gdump라는 유틸리티를 사용해야 한다.

[SHELL]> gdump CONTROL control_0.ctl

온라인 Redo Log File 정보

gdump tool을 사용하여 control file을 조회하면 각 온라인 redo file들의 이름과 현재 상태가 표시된다.

Data File 정보

gdump tool을 사용하여 control file을 조회하면 각 테이블스페이스에 속한 데이터 파일들과 각각의 상태가 표시된다. 또한 V$DATAFILE 테이블을 조회하면 현재 상태가 표시된다.

테이블스페이스 정보

gdump tool을 사용하여 control file을 조회하면 현재 database에 존재하는 각 테이블스페이스의 이름과 상태가 표시된다. 또한 V$TABLESPACE 테이블을 SQL로 조회할 수도 있다.

프로퍼티 정보

기본적으로는 텍스트 파일인 $GOLDILOCKS_Data/conf/goldilocks.properties.conf 파일을 열어서 확인할 수 있는데 온라인 상태에서는 V$PROPERTY, , V$DB_PROPERTY 테이블을 조회하면 현재 적용 중인 프로퍼티 값들을 알 수 있다.

일반적인 데이터 저장소 작업

데이터 저장소인 테이블스페이스에는 다음과 같은 작업을 할 수 있다.

테이블스페이스 생성

메모리, 디스크 USER DATA 테이블스페이스는 다음과 같은 명령어를 사용하여 생성할 수 있다.

gSQL> CREATE TABLESPACE TEST_TBS DATAFILE 'TEST_TBS.dbf' SIZE 10M;

Tablespace created.

gSQL> CREATE MEMORY TABLESPACE TEST_TBS DATAFILE 'TEST_MEM_TBS.dbf' SIZE 10M;

Tablespace created.

gSQL> CREATE DISK TABLESPACE TEST_TBS DATAFILE 'TEST_DISK_TBS.dbf' SIZE 10M;

Tablespace altered.

gSQL> CREATE DISK TABLESPACE DISK_TBS DATAFILE 'TEST_DISK_TBS.dbf' SIZE 10M AUTOEXTEND OFF;

Tablespace altered.

TEMPORARY 테이블스페이스는 data file을 가지지 않으므로 다음과 같은 구문으로 생성한다.

gSQL> CREATE TEMPORARY TABLESPACE TEST_TEMP_TBS MEMORY 'TEST_TEMP_TBS' SIZE 10M;

Tablespace created.

테이블스페이스 공간 사용 상황 조회

테이블스페이스의 공간은 한 개 이상의 연속된 page로 구성된 extent 단위로 할당되고 해제된다. 특정 테이블스페이스의 extent 한 개의 크기 (BYTE)는 다음과 같이 조회할 수 있다.

gSQL> SELECT EXTENT_SIZE FROM V$TABLESPACE WHERE TBS_NAME = 'TEST_TBS';

EXTENT_SIZE
-----------
     262144

1 row selected.

테이블스페이스의 모든 extent 상태는 D$TABLESPACE_EXTENT 테이블을 사용하여 조회할 수 있다. 사용 중인 extent는 STATE column이 'U’로 표시되고 free 상태의 extent는 ‘F’로 표시된다. 따라서 현재 테이블스페이스의 공간 중 남은 공간의 크기 (extent의 개수)는 다음과 같이 구할 수 있다

gSQL> SELECT COUNT(*) FROM D$TABLESPACE_EXTENT('TEST_TBS') WHERE STATE = 'F';

COUNT(*)
--------
      38

1 row selected.

위의 결과를 보면 현재 TEST_TBS의 빈 공간은 38 * 262144 = 9437184 Byte인 것을 알 수 있다.

테이블스페이스 변경

테이블스페이스를 변경하는 방법에는 add/ remove data file (temporary 테이블스페이스의 경우는 memory)과 online/ offline이 있다.

Add/ Drop Data File (or Memory)

데이터베이스를 운영하는 중에 테이블스페이스의 여유 공간이 부족할 경우 다음과 같은 구문으로 DATA 테이블스페이스에 추가 공간을 할당할 수 있다.

gSQL> ALTER TABLESPACE TEST_TBS ADD DATAFILE 'TEST_TBS2.dbf' SIZE 10M;

Tablespace altered.

TEMPORARY 테이블스페이스에는 다음과 같이 공간을 추가한다. DATA 테이블스페이스와 달리 메모리의 이름을 부여하는데 이는 database 내에서 고유한 이름이어야 한다.

gSQL> ALTER TABLESPACE TEST_TEMP_TBS ADD MEMORY 'TEST_TEMP_TBS2' SIZE 10M;

Tablespace altered.

DATA 테이블스페이스의 공간은 다음과 같은 구문으로 삭제한다. 단, 해당 공간을 일부라도 사용한 경우에는 삭제할 수 없다.

gSQL> ALTER TABLESPACE TEST_TBS DROP DATAFILE 'TEST_TBS2.dbf';

Tablespace altered.

마찬가지로 TEMPORARY 테이블스페이스의 공간은 다음과 같이 회수한다.

gSQL> ALTER TABLESPACE TEST_TEMP_TBS DROP MEMORY 'TEST_TEMP_TBS2';

Tablespace altered.

테이블스페이스 Offline

테이블스페이스에 속한 data file의 위치를 변경하는 등의 작업을 수행할 때는 해당 테이블스페이스를 offline 상태로 변경하여야 한다. 다음 구문을 이용하여 offline 상태로 변경할 수 있다.

gSQL> ALTER TABLESPACE TEST_TBS OFFLINE;

Tablespace altered.

다음과 같이 다시 online 상태로 변경할 수 있다.

gSQL> ALTER TABLESPACE TEST_TBS ONLINE;

Tablespace altered.

디스크 테이블스페이스의 데이터파일 자동확장 속성 변경

디스크 테이블스페이스의 데이터파일은 초기 크기로 생성한 후 필요에 따라 최대 크기까지 자동 확장하는 방식으로 사용할 수 있는데 자동 확장 속성은 다음 구문을 이용하여 변경 (on/off) 할 수 있다. 자동 확장 속성을 변경할 때 데이터 파일의 자동 확장 크기와 최대 크기도 함께 변경할 수 있다.

gSQL> ALTER DATABASE DATAFILE 'TEST_DISK_TBS.dbf' AUTOEXTEND ON;

Database altered.

gSQL> ALTER DATABASE DATAFILE 'TEST_DISK_TBS.dbf' AUTOEXTEND OFF;

Database altered.

gSQL> ALTER DATABASE DATAFILE 'TEST_DISK_TBS.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE 20M;

Database altered.

Rename

테이블스페이스의 이름을 변경하려면 다음 구문을 수행한다.

gSQL> ALTER TABLESPACE TEST_TBS RENAME TO TEST_TBS2;

Tablespace altered.

만일 테이블스페이스 내의 data file 위치를 바꾸려면 해당 테이블스페이스를 우선 offline 상태로 변경해야 하며 이후에 OS 명령어로 해당 data file을 직접 이동시킨 후 ALTER TABLESPACE 구문으로 테이블스페이스의 data file 이름을 변경한 후 테이블스페이스를 online 상태로 다시 변경해야 한다.

gSQL> ALTER TABLESPACE TEST_TBS OFFLINE;

Tablespace altered.

gSQL> ALTER TABLESPACE TEST_TBS RENAME DATAFILE 'TEST_TBS.dbf' TO 'TEST_TBS_1.dbf';

ERR-42000(16164): file does not exist : 
ALTER TABLESPACE TEST_TBS RENAME DATAFILE 'TEST_TBS.dbf' TO 'TEST_TBS_1.dbf'
                                                                         *
ERROR at line 1:
gSQL> ALTER TABLESPACE TEST_TBS RENAME DATAFILE 'TEST_TBS.dbf' TO 'TEST_TBS_1.dbf';

Tablespace altered.

gSQL> ALTER TABLESPACE TEST_TBS ONLINE;

Tablespace altered.

테이블스페이스 제거

필요 없어진 테이블스페이스는 다음과 같이 제거할 수 있다. INCLUDING 이하 구문은 옵션이며 이 옵션을 사용하면 해당 테이블스페이스에 존재하는 모든 내용 (schema object)들을 제거할 뿐만 아니라 data file들도 제거한다.

gSQL> DROP TABLESPACE TEST_TBS INCLUDING CONTENTS AND DATAFILES;

Tablespace dropped.

Store Mode

GOLDILOCKS는 특정 환경에서 최대의 성능을 발휘할 수 있도록 하기 위해 instance 단위로 store mode를 설정하여 사용할 수 있도록 한다. Store mode란 연산 성능을 향상시키기 위해 transaction들이 ACID 프로퍼티 중에서 어떤 부분을 포기할 것인지를 정해 놓은 것이다.

GOLDILOCKS는 현재 다음과 같은 두 가지 store mode를 지원한다.

Store mode는 instance를 startup 할 때 프로퍼티 설정을 통해 작동시키는데 transaction들이 서로 다른 store mode로 동작할 수는 없다. 또한 instance가 online인 상태에서는 변경할 수도 없기 때문에 startup할 때 해당 mode를 신중하게 결정해야 한다.

Schema Object 관리

Schema Object

Schema object는 사용자가 생성한 논리적 구조물들이다. GOLDILOCKS는 table, index, synonym, view, sequence, constraint, stored procedure와 같은 schema object들을 지원한다.

Schema Object 관리 권한

현재 GOLDILOCKS는 사용자와 권한을 지원한다. 따라서 생성되는 모든 객체는 모든 사용자에게 공유될 수 없고 공유하기 위해서는 권한을 부여해야 한다.

테이블 관리

본 절에서는 테이블에 대한 개요와 테이블과 관련된 정보를 확인하는 방법, 그리고 테이블의 생성/ 변경/데이터 로딩/ 삭제 방법에 대해 설명한다.

테이블

테이블은 사용자의 데이터를 저장하는 가장 기본적인 단위이다. 테이블은 column과 row로 구성된다.

테이블 타입

현재 GOLDILOCKS는 clustered table, partitioned table을 지원하지 않기 때문에 (데이터의 저장 순서가 특정 column의 sorting order와 상관없는) 일반적인 heap table만 지원한다.

특정 테이블에 저장된 row가 많아져서 그 크기가 너무 커진 경우, bulk delete를 해도 빈 공간이 다시 테이블스페이스에 반납되지는 않는다. 반면 TRUNCATE 연산을 하면 기존의 공간이 모두 테이블스페이스로 반납된다.

GOLDILOCKS를 cluster system으로 구성하여 사용할 경우에는 사용자가 원하는 분배 정책에 따라 테이블의 data를 다수의 노드에 분산하여 저장하고 조회할 수 있다. 자세한 내용은 Cluster System 테이블 관리를 참조한다.

인덱스 관리

본 절에서는 인덱스 개요, 생성 및 삭제에 대해 설명한다.

인덱스 개요

인덱스는 테이블에 연계된 부가적 schema object이다. 인덱스를 사용하면 특정 조건에 해당하는 row의 위치를 찾는 성능이 향상되고 만일 얻으려는 column이 해당 인덱스의 key column일 경우 그 row의 column 값도 알아낼 수 있다.

GOLDILOCKS에서 인덱스는 필요한 만큼 테이블에 생성할 수 있다. 그러나 너무 많은 인덱스는 해당 테이블에 대한 삽입/ 변경/ 삭제 연산에 부하를 주어 성능 저하를 유발할 수도 있다.

Primary key나 unique constraint는 해당 column에 자동으로 인덱스를 생성한다.

인덱스 속성

시퀀스

시퀀스는 사용자가 고유한 수를 생성하게 하는 schema 객체이다.

다음과 같이 생성한다.

gSQL> CREATE SEQUENCE customers_seq START WITH 1000 INCREMENT BY 1 NOCACHE NOCYCLE; 

Sequence created.

NEXTVAL을 이용하여 시퀀스를 사용할 수 있다.

gSQL> SELECT customers_seq.NEXTVAL FROM dual;

다음과 같이 시퀀스를 제거한다.

gSQL> DROP SEQUENCE customers_seq;

GOLDILOCKS를 cluster system으로 구성하여 사용할 경우에는 사용자가 시퀀스를 생성할 때 global 시퀀스 객체가 자동으로 생성된다. 이 객체는 cluster system에 속한 모든 member 노드가 공유하며 사용할 수 있는 시퀀스 값들의 global pool을 관리한다. 각 member 노드는 NEXTVAL을 호출할 때 global 객체로부터 정해진 개수만큼의 시퀀스 값들을 할당받아 사용한다. 자세한 내용은 Global 시퀀스를 참조한다.

사용자 관리

사용자 생성

GOLDILOCKS 데이터베이스의 사용자는 SYS 사용자와 CREATE USER ON DATABASE 권한을 가진 사용자만 생성할 수 있다. 또한 생성한 사용자에 접속하기 위해서는 CREATE SESSION ON DATABASE 권한이 필요하다.

구문은 다음과 같다.

<user definition> ::=
    CREATE USER user_identifier IDENTIFIED BY password
    [ DEFAULT TABLESPACE tablespace_name ]
    [ TEMPORARY TABLESPACE tablespace_name ]
    [ INDEX TABLESPACE tablespace_name ]

구문 규칙과 파라미터는 다음과 같다.

사용자 제거

GOLDILOCKS 데이터베이스에서 생성한 사용자를 제거한다. 사용자 범위와 접근 권한은 사용자 생성과 동일하다.

구문은 다음과 같다.

<drop user statement> ::=
    DROP USER [ IF EXISTS ] user_identifier [ <drop behavior> ]
    ;

<drop behavior> ::=
      RESTRICT
    | CASCADE

구문 규칙과 파라미터는 다음과 같다.

사용자 변경

GOLDILOCKS 데이터베이스에서 생성한 사용자의 정의를 변경한다. 사용자는 ALTER USER의 권한이 필요하며 user_identifier와 동일한 사용자일 경우 권한없이 수행할 수 있다.

구문은 다음과 같다.

<alter user statement> ::=
      ALTER USER user_identifier <alter user action>
    | ALTER USER PUBLIC <alter schema path>
    ;

<alter user action> ::=
      <alter password>
    | <alter profile>
    | <alter default tablespace>
    | <alter temporary tablespace>
    | <alter index tablespace>
    | <alter schema path>

<alter password> ::=
    IDENTIFIED BY new_password [ REPLACE old_password ]

<alter profile> ::=
    PROFILE { profile_name | DEFAULT | NULL }

<password expire> ::=
    PASSWORD EXPIRE

<account lock> ::=
    ACCOUNT { LOCK | UNLOCK }

<alter default tablespace> ::=
    DEFAULT TABLESPACE tablespace_name

<alter temporary tablespace> ::=
    TEMPORARY TABLESPACE tablespace_name

<alter index tablespace> ::=
    INDEX TABLESPACE { tablespace_name | NULL }

<alter schema path> ::=
    SCHEMA PATH ( { schema_name | CURRENT PATH } [, ...] )

구문 규칙과 파라미터는 다음과 같다.

GOLDILOCKS 프로퍼티

GOLDILOCKS 프로퍼티는 데이터베이스를 생성할 때 적용되는 프로퍼티와 online/ offline 중에 변경할 수 있는 프로퍼티로 나뉜다. 테이블스페이스와 redo log file이 저장되는 경로는 startup 단계들 중에 MOUNT 단계에서만 변경할 수 있다.

데이터베이스 생성 시 적용되는 프로퍼티

데이터베이스 생성 시 적용되는 프로퍼티

이름

설명

SYSTEM_MEMORY_DICT_TABLESPACE_SIZE

딕셔너리 테이블스페이스의 초기 사이즈

SYSTEM_MEMORY_DATA_TABLESPACE_SIZE

시스템 데이터 테이블스페이스의 초기 사이즈

SYSTEM_MEMORY_UNDO_TABLESPACE_SIZE

시스템 undo 테이블스페이스의 초기 사이즈

SYSTEM_MEMORY_TEMP_TABLESPACE_SIZE

시스템 임시 테이블스페이스의 초기 사이즈

LOG_BLOCK_SIZE

Redo log file의 블록 사이즈

LOG_FILE_SIZE

Redo log file의 초기 사이즈

LOG_GROUP_COUNT

Redo log file의 개수

CHARACTER_SET

Character set

TIMEZONE

타임 존

CHAR_LENGTH_UNITS

캐릭터 길이 단위

데이터베이스 기동 시 적용되는 프로퍼티

GOLDILOCKS 데이터베이스에는 100 개 이상의 프로퍼티들이 존재한다. 그 중에서 자주 사용되는 프로퍼티는 다음과 같다.

데이터베이스 기동 시 적용되는 프로퍼티

이름

설명

SHARED_MEMORY_STATIC_KEY

공유 메모리가 생성되는 키값

SHARED_MEMORY_STATIC_SIZE

생성되는 공유 메모리의 사이즈

DATA_STORE_MODE

GOLDILOCKS 인스턴스의 저장모드

LOG_BUFFER_SIZE

로그 버퍼 사이즈

LOG_DIR

Redo log 디렉토리 경로

PRIVATE_STATIC_AREA_SIZE

세션별 정적 영역의 크기

CLIENT_MAX_COUNT

접속할 수 있는 최대 세션 개수

PROCESS_MAX_COUNT

최대 프로세스 개수

NET_BUFFER_SIZE

세션별 통신 버퍼 크기

GOLDILOCKS Utility

gcreatedb

gcreatedb 유틸리티는 GOLDILOCKS database를 초기화하고 서비스 할 준비 작업을 한다. gcreatedb는 data file, log file 등을 주어진 property에 따라 GOLDILOCKS_DATA 환경 변수의 위치에 생성한다. 구문은 다음과 같다.

[SHELL]> gcreatedb --help
Usage 

    gcreatedb [options]

Options:

    --cluster                 cluster system (if not specified, stand-alone system)
    --db_name                 database name
    --db_comment              database comment
    --timezone                timezone ( {+/-}{TZH:TZM} )
    --character_set           character set
                                SQL_ASCII
                                UTF8
                                UHC
                                GB18030
    --char_length_units       char length units
                                OCTETS
                                CHARACTERS
    --member                  local cluster member name
    --host                    cluster ip address or host name
    --port                    cluster port number
    --silent                  suppresses the display of the result message
    --help                    print help message

examples:

    gcreatedb --db_name="goldilocks" --db_comment="goldilocks database" --timezone="+09:00" --character_set="UTF8" --char_length_units="OCTETS" --silent

데이터베이스를 생성할 때 $GOLDILOCKS_HOME/conf/goldilocks.properties.conf를 참조하여 각각의 ***_TABLESPACE_SIZE 값으로 goldilocks.properties.conf의 SYSTEM_TABLESPACE_DIR 경로에 tablespace file들을 생성한다.

다음은 gcreatedb 명령어의 실행 인자에 대한 설명이다.

gcreatedb 인자

실행 인자

설명

--cluster

Cluster system에서 사용될 database이다.

생략할 경우, standalone database를 생성한다.

--db_name

데이터베이스 이름이다.

생략할 경우, goldilocks로 설정된다.

--db_comment

데이터베이스에 대한 설명이다.

생략할 경우, goldilocks database로 설정된다.

--timezone

타임 존이다.

생략할 경우, TIMEZONE 프로퍼티로 설정된다.

--character_set

데이터베이스의 character set이다.

GOLDILOCKS는 다음과 같은 네 가지 character set을 지원한다.

  • GB18030: 중국어 간체

  • SQL_ASCII: ASCII 문자만 지원하는 character set

  • UHC: 통합형 한글 코드 (Unified Hangul Code)

  • UTF8: Unicode Transformation Format – 8

생략할 경우, CHARACTER_SET 프로퍼티로 설정된다.

--char_length_units

캐릭터 길이의 단위이다.

  • OCTETS: 1 바이트를 한 글자로 인식한다.

  • CHARACTERS: 한 글자 (n 바이트)를 한 글자로 인식한다.

생략할 경우, CHAR_LENGTH_UNITS 프로퍼티로 설정된다.

--home

Database home 디렉토리이다.

프로퍼티 파일을 찾아서 각종 database 파일들의 생성 및 저장 위치로 참조한다.

생략할 경우, GOLDILOCKS_DATA 환경 변수에 설정된 값을 사용한다.

--member

Cluster system 내에서 사용할 local database의 member 이름이다.

생략할 경우, LOCAL_CLUSTER_MEMBER 프로퍼티에 설정된 값을 사용한다.

--host

Cluster system member 간의 통신을 위해 사용할 local member의 host name 또는 IP address이다. Host name을 사용할 경우 시스템의 첫 번째 IPv4 주소를 사용한다.

생략할 경우, LOCAL_CLUSTER_MEMBER_HOST 프로퍼티에 설정된 값을 사용한다.

--port

Cluster system member 간의 통신을 위해 사용할 local member의 TCP listen port이다.

생략할 경우, LOCAL_CLUSTER_MEMBER_PORT 프로퍼티에 설정된 값을 사용한다.

--silent

출력 메시지를 보이지 않게 한다.

--help

도움말을 출력한다.

gsql (GOLDILOCKS interactive sql tool)

gsql은 GOLDILOCKS를 관리하기 위해 임의의 SQL을 실행시키는 interactive command line 유틸리티이다. DBA는 gsql을 이용해 초기 table schema를 생성하거나 현재 상태를 점검하는 등의 작업을 수행할 수 있다.

gsql 실행 방법은 다음과 같다.

[SHELL]> gsql <userid> <passwd>

gSQL> CREATE TABLE T1 ( COL1 INTEGER );

create success

gSQL> \q

[SHELL]>

gloader (GOLDILOCKS data upload/ download tool)

gloader는 기존의 database에 존재하는 데이터들을 text 형식으로 파일로 내리거나 기존에 text 파일로 저장된 데이터들을 새 database로 loading하는 유틸리티이다. gloader가 사용하는 text data file 형식은 Comma-Separated Value (CSV) 이다.

gloader 사용법은 다음과 같다.

gloader userid passwd [export|import] control='control_file_name' \
data='data_file_name' log='log_file_name' bad='bad_file_name'
gloader 인자

실행 인자

설명

export | import

gloader를 통해 기존 테이블의 내용을 data_file_name으로 내려받을 것인지, data_file_name에 현재 존재하는 데이터들을 control_file_name에 명시된 테이블로 올릴 것인지를 선언한다.

userid

사용할 userid를 명시한다.

passwd

userid 사용자의 비밀번호를 명시한다.

control

export나 import 작업에 대한 상세 설정을 기록한 파일 경로를 명시한다.

data

export 될 target data file이나 import 할 data file을 명시한다.

log

import나 export의 진행 상황 및 경과 시간 등을 기록하는 log file 경로를 명시한다.

bad

import 할 때 여러가지 오류로 인해 insert에 실패한 data record들을 모아서 기록하는 bad file 경로를 명시한다.

다음은 control file 내용의 예이다.

TABLE  TEST_TBL
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'