Goldilocks의 설치는 굉장히 쉬운 편이다.
엔터프라이즈 시스템인데...쉽다.
물론 쉬운 만큼 trade-off도 있겠으나...
Goldilocks 패키지를 해제 시 다음과 같이 디렉토리가 나뉘어져 있다.
$ tree -d -L 2 goldilocks-server-21c.21.1.19-linux-x86_64
goldilocks-server-21c.21.1.19-linux-x86_64
├── goldilocks_data
│ ├── archive_log
│ ├── backup
│ ├── conf
│ ├── db
│ ├── journal
│ ├── trc
│ └── wal
└── goldilocks_home
├── admin
├── app_dev
├── bin
├── include
├── lib
├── license
├── msg
├── sample
└── script
1) goldilocks_data
goldilocks의 데이터 부분이 주로 저장되는 디렉토리이다.
archive log, data file, control file, trace file 등이 저장된다.
해당 부분은 (마이너 버전 하에서) 버전 의존도가 없으며 패치 시 건드리지 않는 영역이다.
2) goldilocks_home
goldilocks 엔진 파트라고 생각하면 되겠다.
bin 디렉토리에 실제 구동 엔진이 저장되고(gmaster 등..) include에 헤더, lib에 라이브러리가 저장된다.
일반적으로 설치 과정에 반드시 포함되는 디렉토리이다.
sample 디렉토리에 ODBC,JDBC 등 샘플 코드가 있어 해당 코드로 테스트 해 볼 수 있다.
bash_profile이나 bashrc에 해당 부분을 추가한다.
# GOLDILOCKS
export GOLDILOCKS_HOME=\$HOME/goldilocks_home
export GOLDILOCKS_DATA=\$HOME/goldilocks_data
export PATH=$PATH:\$GOLDILOCKS_HOME/bin
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$GOLDILOCKS_HOME/lib
export CLASSPATH=\$CLASSPATH:\$GOLDILOCKS_HOME/lib/goldilocks8.jar
default 설치라고 보면 될 것 같다.
요는 GOLDILOCKS_DATA, GOLDILOCKS_HOME 디렉토리를 path로 잡아주는 것이기 때문에 해당 두 환경 변수만 설정해 주고 나머지는 PATH, Library PATH를 $GOLDILOCKS_HOME으로 잡아줌으로서 바로 goldilocks 관련된 바이너리를 사용할 수 있게 한다.
CLASSPATH는 jdbc 사용 시 url을 잡아 주기 위한 것으로 사용자의 jdk 버전에 따라 뒷자리를 바꿔 주면 된다. ( jdk 1.8 = goldilocks8.jar와 같이 )
일단은 이거만 해도 골디락스를 실행할 수 있다. (커널 쪽 설정할 게 더 있지만...)
DB 생성을 위해서는 gcreatedb 프로세스를 실행해야 한다.
해당 프로세스의 역할은 다음과 같다.
1. 컨트롤 파일 생성
2. 데이터 파일 생성
3. 리두 로그 파일 생성
4. 기타 시스템 파일 생성
gcreatedb 프로세스는 커맨드 라인에서 실행할 수 있다.
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
--home home directory
--member local member name
--host host address
--port host port
--silent suppresses the display of the result message
--help print help message
1) Standalone, Cluster 구별
DB 설치 시 시스템 하나만 사용할 것인지 여러개 사용할지에 대한 부분을 정해야 한다. 어차피 골디락스는 Database object 개념이 없으므로 스탠드얼론을 고르게 된다면 db name 등은 필요 없을 듯.
Cluster를 고를 시 다소 복잡해지며, --cluster 옵션 없이 설치 시엔 자동 standalone 설치라고 생각하면 된다.
--cluster 옵션 설정 시 $GOLDILOCKS_DATA/conf/goldilocks.properties.conf 에 있는 설정 파일을 읽게 되는데, --host, --port 등으로 인자값을 주어 설치 또한 가능하다.
단, 이 부분은 추천하지 않는다. gcreatedb 인자값을 통한 cluster member 설정 시 차후에 확인할 방법이 없어 혼선을 유발할 수 있다.
conf 파일을 통해 프로퍼티 참조하여 실행하는것이 좋다. 기록으로 남고 혼선의 여지가 없어 작업자가 달라도 인식하기 편하기 때문.
2) db name 설정
trace log 등에 기재될 Database name이다. 골디락스는 Database 개념이 없으므로 트러블슈팅 등 특정 용도에서 구분하기 위한 용도로 쓰인다.
3) character set 설정
해당 부분 또한 프로퍼티로 설정하는 것을 추천한다.
4) ( Cluster ) member, host, port 설정
해당 부분은 서술한 대로 프로퍼티 설정으로 반영하는 것을 추천한다.
사용한다면 다음과 같이 사용하면 된다.
$ gcreatedb --cluster --member 'G1N1' --host '127.0.0.1' --port 10101
5) 프로퍼티 설정
$GOLDILOCKS_DATA/conf/goldilocks.properties.conf
부분에서 설정한 대로 gcreatedb 시 참조하며,
프로퍼티 샘플 중 apply once when CREATE DB 라 강조된 부분은 gcreatedb 시 참조하는 부분이다.
해당 프로퍼티 대부분은 한번 생성하면 변경할 수 없거나, 차후 기동 시 conf 파일에서 반영되지 않는 프로퍼티들이기 때문에 한번 씩 체크하고 생성하는 것이 좋다.
LOCAL_CLUSTER_MEMBER, LOCAL_CLUSTER_MEMBER_PORT, LOCAL_CLUSTER_MEMBER_HOST
cluster 시스템 하에서 member 정보를 구분하기 위한 프로퍼티이다.
host와 port, member를 조합하여 클러스터 멤버를 구분하게 되며, 해당 port와 host(ip 주소 정보)는 클러스터 통신 용 ip, port임을 유념해야 한다. 실제 일을 수행할 AP들이 붙는 포트와는 별개의 port를 가져야 한다.
해당 정보로 location object가 생성되며 location 정보는 뷰 등으로 조회할 수 있다.
SYSTEM_MEMORY_***_TABLESPACE_SIZE
처음에 생성될 테이블스페이스 사이즈를 결정한다. 10M, 10G 등으로 설정할 수 있으며 테이블스페이스는 늘릴 수 있기 때문에 크게 건드릴 필요는 없다. 단, undo와 temp는 특수한 테이블스페이스이므로 기본적인 용량은 잡아 줘도 무방하다(이 부분도 물론 늘릴 수 있으니..)
LOG_GROUP_COUNT, LOG_FILE_SIZE
골디락스는 오라클처럼 순환 식 redo log 파일을 사용한다. log group count는 log file의 갯수를 뜻하고, log file size는 redo log 파일의 용량을 결정한다.
일반적인 규모의 사이트에서는 2G, 8개 조합을 많이 사용한다. 단 Tx가 많이 발생하지 않고 select 위주의 조회 성 DB라면 그렇게 많이 줄 필요는 없다.
log switch 시 flush를 수행하는 등 I/O가 다소 있는 편이므로 io쪽 문제가 자주 발생할 수 있다면 로그 파일 크기를 늘리고 switch를 줄이는 것이 튜닝에 도움이 될 수 있다.
ARCHIVELOG_MODE
순환식 redo log의 복제본(archive log)을 저장할 지 여부를 결정한다. 이 프로퍼티는 gcreatedb시 한 번만 반영 되고 startup시 아예 반영되지 않는다. 기 생성된 DB의 archive mode를 변경하려면 mount 단계에서 따로 설정해 주어야 한다.
기타 프로퍼티 등은 생성 시 말고도 변경 가능하므로 언급하지 않았다.
5) 기타 특수 설정(length unit이라거나... timezone 등)
등의 설정을 끝마치고... gcreatedb를 수행하면 된다.
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release 21c 21.1.19 revision(37b5377)
Database created
※ 기존 경로에 datafile, log file등이 남아 있으면 gcreatedb시 에러 메시지가 발생하므로 해당 부분을 비워 줘야 한다. 기존 파일을 overwrite 하는 등의 기능은 없으니 주의를 요함.
타 DB와 마찬가지로 gsql이라는 클라이언트 프로그램이 있어 해당 프로그램에서 구동 등 작업을 수행할 수 있다.
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release 21c 21.1.19 revision(37b5377)
Usage
gsql [user_name [password]] [options]
Arguments:
user_name user name
password password
Options:
--version print version information and exit
--import FILE import sql FILE
--no-prompt suppresses the display of the banner and prompts
--dsn DSN dsn string (default is GOLDILOCKS)
--conn-string 'CONN-STRING' connection string
--prompt STRING change prompt string
--enable-color enable colored text
--as {SYSDBA|ADMIN} privilege
--silent suppresses the display of the result message and echoing of commands
--help print help message
sqlplus와 사용 시 유사점이 상당히 많게 만들어진 클라이언트 프로그램이라 마찬가지로 gsql에 접속해서 startup 명령어를 통해 구동할 수 있다.
startup 등 시스템 작업을 수행할 때는 sysdba 권한이 필요하며 gsql --as sysdba 옵션으로 접속하면 된다.
Copyright © 2010 SUNJESOFT Inc. All rights reserved.
Release 21c 21.1.19 revision(37b5377)
Connected to an idle instance.
gSQL> startup;
Startup success
gSQL> select * From v$instance;
RELEASE_VERSION STARTUP_TIME INSTANCE_STATUS DATA_ACCESS_MODE
------------------------------------- -------------------------- --------------- ----------------
Release 21c 21.1.19 revision(37b5377) 2022-06-15 16:19:45.443247 LOCAL OPEN NONE
1 row selected.
구동 후 V$INSTANCE 뷰를 확인하면 LOCAL OPEN 상태인 것을 확인할 수 있다.
골디락스는 여러 단계의 STARTUP 구조를 가진다.
1) CLOSE
2) NOMOUNT
3) MOUNT
4) LOCAL OPEN
5) OPEN
이 LOCAL OPEN 페이즈는 cluster 시스템에서만 거치는 단계이며 특수성을 가지고 있다.
local open 시 DB는 tx가 발생되지 않으며 뷰나 기존 데이터만 확인할 수 있는 상태가 된다.
shared-nothing 구조를 가지는 DB의 특성 상 cluster group을 맺게 하기 위한 처리가 따로 필요하여 local open이라는 특수한 단계를 거치게 되는 것이다.
local open은 서비스가 가능한 상태는 아니므로 global open으로 진입하여야 클러스터 그룹을 만들거나 참여할 수 있다.
기존 그룹이 있냐 없냐에 따라서 구동법이 달라지지만, 일단은 설치법이므로 global open phase를 다음과 같은 명령어로 진입하면 된다.
System altered.
gSQL> select * From x$instance;
VERSION STARTUP_TIME STATUS OS_USER_ID IS_CLUSTER LOCAL_GROUP_ID LOCAL_MEMBER_ID LOCAL_MEMBER_NAME LOCAL_MEMBER_POSITION
------------------------------------- -------------------------- ------ ---------- ---------- -------------- --------------- ----------------- ---------------------
Release 21c 21.1.19 revision(37b5377) 2022-06-15 16:19:45.443247 OPEN 1001 TRUE 0 0 G1N1 -1
이제 OPEN 상태가 되어 서비스를 수행할 수 있게 된다. 물론 아직 끝난 것은 아님..
골디락스 클러스터는 Group-Member 로 구성된다.
1) G1 그룹에는 멤버 두개가 있으며 G1N1, G1N2 멤버가 있다
2) G2 그룹에는 멤버 하나가 있으며 G2N1 멤버가 있다
이런 식인데, Group은 데이터를 분산하기 위한 용도로 나누고 멤버는 동일 그룹의 완전 복제를 만들기 위해 생성하는 것이다. 일반 데이터베이스의 Standby 복제본 정도로 생각하면 된다(똑같진 않으나 일단은)
이건 설치 가이드 포스트고 로컬 장비에 테스트 중이니까 일단은 1by1 cluster라고 생각하고 만들어 보자.
1) 그룹 생성 시
CREATE CLUSTER GROUP <group_name> CLUSTER MEMBER <member_name> HOST <host_address> PORT <port_number>;
2) 생성된 그룹에 멤버 추가 시
ALTER CLUSTER GROUP <group_name> ADD CLUSTER MEMBER <member_name> HOST <host_address> PORT <port_number>;
gSQL> SELECT * FROM X$CLUSTER_LOCATION; -- 멤버 정보 확인
MEMBER_NAME HOST PORT
----------- --------- -----
G1N1 127.0.0.1 10101
1 row selected.
gSQL> SELECT * FROM CLUSTER_MEMBER;
no rows selected.
gSQL> CREATE CLUSTER GROUP G1 CLUSTER MEMBER G1N1 HOST '127.0.0.1' PORT 10101;
Cluster Group created.
gSQL> SELECT * FROM CLUSTER_MEMBER;
GROUP_ID MEMBER_ID MEMBER_NAME MEMBER_POSITION CREATED_TIME MODIFIED_TIME COMMENTS
-------- --------- ----------- --------------- -------------------------- -------------------------- --------
1 1 G1N1 0 2022-06-21 15:55:58.240000 2022-06-21 15:55:58.240000 null
1 row selected.
클러스터 그룹을 생성하고 뷰로 조회가 되면 이제 서비스가 가능한 DB가 된다.
1. 딕셔너리 뷰
오라클과 같은 타 RDB처럼 골디락스도 V$, X$, DBA_, ALL_ 등의 딕셔너리 뷰가 존재한다.
해당 뷰들은 표준을 따르기 때문에 타 RDB 사용자들도 쉽게 사용할 수 있다.
그 외에 골디락스는 클러스터 GLOBAL 뷰 지원을 위해 GV$ 뷰 또한 지원하고 있다.(매뉴얼 참조)
딕셔너리 뷰들은 DB 설치 후 생성을 따로 해 주어야 하며 해당 뷰는 $GOLDILOCKS_HOME/admin/cluster(standalone) 디렉토리에 위치해 있다.
$ gsql sys gliese -i DictionarySchema.sql --silent
$ gsql sys gliese -i InformationSchema.sql --silent
$ gsql sys gliese -i PerformanceViewSchema.sql --silent
gsql 자체 기능인 --import(-i) 옵션을 통해 .sql 파일들을 실행해 주면 된다.
에러 메시지 등 확인을 위해 출력 리다이렉팅을 하면서 보는 것을 추천한다.
2. tech_ 스크립트
제작사 기술팀에서 편의 상 따로 만든 스크립트들이 존재한다.
tablespace 잔여 량 확인 등 운영에 도움이 되는 스크립트들이므로 필요에 따라 생성해서 쓰는 것을 추천한다.
해당 스크립트들은 $GOLDILOCKS_HOME/script 에 위치해 있다.
$ ls $GOLDILOCKS_HOME/script
README tech_index.sql tech_session_psa.sql tech_table.sql tech_tablespace_standalone.sql
tech_cluster.sql tech_lockwait.sql tech_statement.sql tech_tablespace.sql tech_transaction.sql