나그네소
Goldilocks 운영 가이드 본문
>> Goldilocks 기동 방법
[shutdown]
GOLDILOCKS 의 Instance를 종료하기 위해서는 일반 계정이 아닌 DBA 모드로 접속해서 종료해야 합니다. 클라이언트가 접속되어 있는 상태에서 강제적으로 Instance를 종료하여도 문제가 되지 않으나, 이중화가 수행중에는 shutdown 옵션을 이용하여 상황에 맞는 인스턴스 종료를 권장합니다.
- shutdown option
옵션 설명 Shutdown normal 새로운 세션의 접속을 차단하고 현재 접속된 모든 세션 종료를 기다린 후, checkpoint 수행 및 서버 종료 Shutdown transactional 새로운 트랜잭션의 시작을 차단하고 현재 수행중인 트랜잭션의 종료를 기다린 후, checkpoint 수행 및 서버 종료 (클러스터 환경 미지원) Shutdown immediate 새로운 단위 연산(ex: FETCH or EXECUTE 등)의 수행을 차단하고 현재 수행중인 모든 단위 연산의 종료를 기다린 후, 모든 트랜잭션을 rollback, checkpoint 수행 및 서버 종료 (클러스터 환경 미지원) Shutdown abort 접속중인 session들의 상태와 무관하게 바로 서버 강제 종료 Shutdown 옵션 생략 시 shutdown normal 과 동일
$> gsql sys gliese --as sysdba
$gSQL> shutdown abort
[cluster startup]
goldilocks cluster db start 하기 위해서는 DB Instance 간의 구성 관계를 정확히 알고 수행 해야 한다.
- Cluster 환경 시 구동 예 ( 1 by 2 )
항목 | Node#01 | Node#02 |
DBA권한으로 gSQL 접속 | gsql SYS <password> --as sysdba |
gsql SYS <password> --as sysdba |
GOLDILOCKS 구동(Local open) | startup | startup |
Global open 변경 | alter system open global database; | |
Slave노드 참여 (필요 상황 시) | alter system join database; | |
리스너 구동 | glsnr --start | glsnr --start |
>> Goldilocks 기동 상태 체크
Goldilocks 현재 정상 적인 상태인지 체크.
- DB Instance 상태 체크 (1BY2 구성)
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.12 revision(7b804dd4b2) 2021-12-30 13:04:23.640723 OPEN 1118 TRUE 1 1 G1N1 0
Release 21c 21.1.12 revision(7b804dd) 2021-12-30 12:48:38.705616 OPEN 1003 TRUE 1 2 G1N2 1
2 rows selected. - DB Listner가 구동 되었는지 확인 한다.
$> glsnr --status
...
Listener is running.
참고 : Listner가 Start 되어 있지 않다면 Client가 접속 할 수 없다.
>> Goldilock 접속 방법
- gsql 접속
gsql userid passwd // da mode 접속
$>gsql test test - gsqlnet 접속
gsqlnet userid passwd // tcp 접속
$>gsqlnet test test - gsql help
<명령어>
help
\q[uit]
import {'FILE'} Import SQL
ed[it] [{'FILE'|[HISTORY] num}] Edit SQL statement
\\ Executes the most recent history entry
\{n} Executes n'th history entry
hi[story] Show history entries
desc {[schema.]table_name} Show table description
idesc {[schema.]index_name} Show index description
spo[ol] ['filename' | OFF] Stores query results in a file
ho[st] [command] Executes an operating system command
set vertical {ON|OFF}
set time {ON|OFF}
set timing {ON|OFF}
set color {ON|OFF}
set error {ON|OFF}
set autocommit {ON|OFF}
set autotrace {ON|TRACEONLY|OFF}
set serveroutput {ON|OFF}
set linesize {n} 0 < n <= 10000
set pagesize {n} 0 < n <= 10000
set colsize {n} 0 < n <= 104857600
set numsize {n} 0 < n <= 50
set ddlsize {n} 0 < n <= 100000
set history {n} n <= 100000 ( if n < 0, clear history buffer )
var {host_var_name} {INTEGER|BIGINT|VARCHAR(n)}
exec [{:host_var_name} := {constant}]
exec sql {sql string}
prepare sql {sql string}
dynamic sql {host_var_name}
explain plan [{ON|ONLY}] {sql string}
print [{host_var_name}]
ddl_cluster
ddl_db
ddl_tablespace {name}
ddl_profile {name}
ddl_auth {name}
ddl_schema {name}
ddl_table {[schema.]name}
ddl_constraint {[schema.]name}
ddl_index {[schema.]name}
ddl_view {[schema.]name}
ddl_sequence {[schema.]name}
ddl_synonym {[schema.]name}
ddl_publicsynonym {name}
ddl_procedure {[schema.]name}
startup {[nomount|mount|open]}
shutdown {[abort|immediate|transactional|normal]}
cstartup {[nomount|mount|open]}
cshutdown {[abort|immediate|transactional|normal]}
connect userid password [as {sysdba|admin}] - .odbc.ini
[GOLDILOCKS]
HOST = 192.168.0.119
PORT = 22581
PROTOCOL = TCP
CS_MODE = DEDICATED
기본 적으로 goldilocks tcp mode로 접속 시 odbc.ini을 설정을 한 후 접속을 해야 한다.
ex) gsqlent test test --dsn=GOLDILOCKS
>> Schmea Print
gsql의 특정 명령어를 이용하여 SQL 객체의 현재 상태에 해당하는 DDL 구문을 출력할 수 있습니다. SQL 객체를 생성하는 CREATE
구문 뿐 아니라, 다양한 옵션을 통해 관련 객체의 DDL 구문을 출력할 수 있습니다.
명령어 | 옵션 | 명령 설명 |
ddl_db | ddl_db | 데이터베이스에 생성된 모든 객체의 DDL 구문을 출력 |
ddl_db GRANT | 데이터베이스 객체의 권한 정보에 해당하는 GRANT .. ON DATABASE 구문을 출력 | |
ddl_db COMMENT | 데이터베이스 객체의 주석 정보에 해당하는 COMMENT ON DATABASE 구문을 출력 | |
ddl_tablespace | ddl_tablespace name | ddl_tablespace name CREATE 와 동일함. |
ddl_tablespace name CREATE | 테이블스페이스의 CREATE TABLESPACE 구문을 출력 | |
ddl_tablespace name ALTER | 테이블스페이스에 추가된 datafile 또는 memory 에 대한 ALTER TABLESPACE 구문을 출력 | |
ddl_tablespace name TABLE | 테이블스페이스에 저장된 table 들의 CREATE TABLE 구문을 출력 | |
ddl_tablespace name CONSTRAINT | 테이블스페이스에 저장된 constraint 들의 ALTER TABLE 구문을 출력 | |
ddl_tablespace name INDEX | 테이블스페이스에 저장된 index 들의 CREATE INDEX 구문을 출력 | |
ddl_tablespace name GRANT | 테이블스페이스의 권한 정보에 대한 GRANT .. ON TABLESPACE 구문을 출력 | |
ddl_tablespace name COMMENT | 테이블스페이스의 주석에 해당하는 COMMENT ON TABLESPACE 구문을 출력 | |
ddl_profile | ddl_profile name | ddl_profile name CREATE 와 동일함. |
ddl_profile name CREATE | Profile 객체의 CREATE PROFILE 구문을 출력 | |
ddl_profile name COMMENT | Profile 의 주석에 해당하는 COMMENT ON PROFILE 구문을 출력 | |
ddl_auth | ddl_auth name | ddl_auth name CREATE 와 동일함. |
ddl_auth name CREATE | 사용자 객체의 CREATE USER 구문을 출력 | |
ddl_auth name SCHEMA PATH | 계정의 schema path 에 해당하는 ALTER USER 구문을 출력 | |
ddl_auth name SCHEMA | 사용자가 소유한 schema 들의 CREATE SCHEMA 구문을 출력 | |
ddl_auth name TABLE | 사용자가 소유한 table 들의 CREATE TABLE 구문을 출력 | |
ddl_auth name CONSTRAINT | 사용자가 소유한 constraint 들의 ALTER TABLE 구문을 출력 | |
ddl_auth name INDEX | 사용자가 소유한 index 들의 CREATE INDEX 구문을 출력 | |
ddl_auth name VIEW | 사용자가 소유한 view 들의 CREATE VIEW 구문을 출력 | |
ddl_auth name SEQUENCE | 사용자가 소유한 sequence 들의 CREATE SEQUENCE 구문을 출력 | |
ddl_auth name COMMENT | 계정의 주석에 해당하는 COMMENT ON AUTHORIZATION 구문을 출력 | |
ddl_schema | ddl_schema name | ddl_schema name CREATE 와 동일함. |
ddl_schema name CREATE | 스키마 객체의 CREATE SCHEMA 구문을 출력 | |
ddl_schema name TABLE | 스키마에 속한 table 들의 CREATE TABLE 구문을 출력 | |
ddl_schema name CONSTRAINT | 스키마에 속한 constraint 들의 ALTER TABLE 구문을 출력 | |
ddl_schema name INDEX | 스키마에 속한 index 들의 CREATE INDEX 구문을 출력 | |
ddl_schema name VIEW | 스키마에 속한 view 들의 CREATE VIEW 구문을 출력 | |
ddl_schema name SEQUENCE | 스키마에 속한 sequence 들의 CREATE SEQUENCE 구문을 출력 | |
ddl_schema name GRANT | 스키마의 권한 정보에 대한 GRANT .. ON SCHEMA 구문을 출력 | |
ddl_schema name COMMENT | 스키마의 주석에 해당하는 COMMENT ON SCHEMA 구문을 출력 | |
ddl_publicsynonym | ddl_public_synonym | ddl_public_synonym name CREATE 와 동일함. |
ddl_public_synonym name CREATE | Public Synonym 객체의 CREATE PUBLIC SYNONYM 구문을 출력 | |
ddl_table | ddl_table name | ddl_table name CREATE 와 동일함. |
ddl_table name CREATE | 테이블 객체의 CREATE TABLE 구문을 출력 | |
ddl_table name CONSTRAINT | 테이블에 생성된 constraint 들의 ALTER TABLE 구문을 출력 | |
ddl_table name INDEX | 테이블에 생성된 index 들의 CREATE INDEX 구문을 출력 | |
ddl_table name IDENTITY | 테이블이 identity column 을 가질 경우 restart 값에 대한 ALTER TABLE 구문을 출력 | |
ddl_table name SUPPLEMENTAL | 테이블에 supplemental log 옵션이 설정된 경우 ALTER TABLE 구문을 출력 | |
ddl_table name GRANT | 테이블의 권한 정보에 대한 GRANT .. ON TABLE 구문을 출력 | |
ddl_table name COMMENT | 테이블의 주석에 해당하는 COMMENT ON TABLE 구문을 출력 | |
ddl_constraint | ddl_constraint name | ddl_constraint name ALTER 와 동일함. |
ddl_constraint name ALTER | 제약조건 객체의 ALTER TABLE 구문을 출력 | |
ddl_constraint name COMMENT | 제약조건의 주석에 해당하는 COMMENT ON CONSTRAINT 구문을 출력 | |
ddl_index | ddl_index name | ddl_index name CREATE 와 동일함. |
ddl_index name CREATE | 인덱스 객체의 CREATE INDEX 구문을 출력 | |
ddl_index name COMMENT | 인덱스의 주석에 해당하는 COMMENT ON INDEX 구문을 출력 | |
ddl_view | ddl_view name | ddl_view name CREATE 와 동일함. |
ddl_view name CREATE | 뷰 객체의 CREATE VIEW 구문을 출력 | |
ddl_view name GRANT | 뷰의 권한 정보에 대한 GRANT .. ON TABLE 구문을 출력 | |
ddl_view name COMMENT | 뷰의 주석에 해당하는 COMMENT ON TABLE 구문을 출력 | |
ddl_sequence | ddl_sequence name | ddl_sequence name CREATE 와 동일함. |
ddl_sequence name CREATE | 시퀀스 객체의 CREATE SEQUENCE 구문을 출력 | |
ddl_sequence name RESTART | 시퀀스 객체의 restart 값에 해당하는 ALTER SEQUENCE 구문을 출력 | |
ddl_sequence name GRANT | 시퀀스의 권한 정보에 대한 GRANT .. ON SEQUENCE 구문을 출력 | |
ddl_sequence name COMMENT | 시퀀스의 주석에 해당하는 COMMENT ON SEQUENCE 구문을 출력 | |
ddl_synonym | ddl_synonym | ddl_synonym name CREATE 와 동일함. |
ddl_synonym name CREATE | Synonym 객체의 CREATE SYNONYM 구문을 출력 | |
ddl_procedure | ddl_procedure | ddl_procedure name CREATE 와 동일함 |
ddl_procedure name CREATE | Procedure 객체의 CREATE PROCEDURE 구문을 출력 | |
set ddlsize | DDL 출력 버퍼의 크기 제어 | |
ddl_cluster | Cluster system의 상태 구문 출력 |
example)
gSQL>\ddl_table test_01(table_name) // test_01 테이블에 대하여 생성 schema 정보를 출력 할 수 있다.
gSQL>\ddl_db // 현재 구성 되어 있는 모든 schema 정보를 출력 할 수 있다.
>> Goldilocks Cluster DB 상태 체크.
항목 | SQL | 설명 |
클러스터 그룹 및 멤버 조회 |
select * from cluster_group; select * from cluster_member; select * from v$cluster_member; |
Cluster Group, Member 정보를 확인 할 수 있다. |
DB Member 구성 확인 | select * from x$cluster_location; |
Cluster 구성 된 Member IP, PORT 확인 할 수 있다. |
gSQL> select * from cluster_group;
GROUP_ID GROUP_NAME CREATED_TIME MODIFIED_TIME COMMENTS
-------- ---------- -------------------------- -------------------------- --------
1 G1 2021-12-30 14:56:05.810000 2021-12-30 14:56:07.450000 null
: G1 Group이 생성 된 것을 확인 할 수 있다.
gSQL> select * from cluster_member;
GROUP_ID MEMBER_ID MEMBER_NAME MEMBER_POSITION CREATED_TIME MODIFIED_TIME COMMENTS
-------- --------- ----------- --------------- -------------------------- -------------------------- --------
1 1 G1N1 0 2021-12-30 14:56:05.810000 2021-12-30 14:56:05.810000 null
1 2 G1N2 1 2021-12-30 14:56:07.450000 2021-12-30 14:56:07.450000 null
: G1 Group에 2개의 Member G1N1, G1N2가 있다는 것을 확인 할 수 있다.
gSQL> select * from v$cluster_member;
MEMBER_ID MEMBER_POSITION STATUS IS_GLOBAL_COORD IS_GROUP_COORD
--------- --------------- ------ --------------- --------------
1 0 ACTIVE TRUE TRUE
2 1 ACTIVE FALSE FALSE
: 두 개의 Member Status ACTIVE로 정상 적인 상태 인것을 확인 할 수 있다.
비 정상 시 IN-ACTIVE로 표시 된다.
gSQL> select * from x$cluster_location@local;
MEMBER_NAME HOST PORT
----------- ------------- -----
G1N1 192.168.0.119 20101
G1N2 192.168.0.120 20102
: Member IP,PORT 확인 할 때 사용 한다.
>> 운영 시 필요한 정보 조회 ( tech_view )
* TECH_TABLESPACE(Cluster DB)
GSQL> SELECT * FROM TECH_TABLESPACE;
--CLUSTER_NAME TABLESPACE_NAME TOTAL_MEGABYTE USED_MEGABYTE FREE_MEGABYTE FREE_PERCENTAGE
-------------- --------------- -------------- ------------- ------------- ---------------
--G1N1 DICTIONARY_TBS 256 103 152 59
--G1N1 MEM_UNDO_TBS 32 16 15 49
--G1N1 MEM_DATA_TBS 200 2 197 98
--G1N1 MEM_TEMP_TBS 200 3 196 98
--G1N1 DISK_DATA_TBS 200 0 199 99
--G1N1 MEM_AUX_TBS 200 3 196 98
--G1N2 DICTIONARY_TBS 256 107 148 57
--G1N2 MEM_UNDO_TBS 32 18 13 42
--G1N2 MEM_DATA_TBS 200 2 197 98
--G1N2 MEM_TEMP_TBS 200 2 197 98
--G1N2 DISK_DATA_TBS 200 0 199 99
--G1N2 MEM_AUX_TBS 200 3 196 98
: Goldilocks DB Tablespace Size 조회 할 수 있다.
* TECH_TABLESPACE_STANDALOLNE
GSQL> SELECT * FROM TECH_TABLESPACE_STANDALONE;
CLUSTER_NAME TABLESPACE_NAME TOTAL_MEGABYTE USED_MEGABYTE FREE_MEGABYTE FREE_PERCENTAGE
------------ --------------- -------------- ------------- ------------- ---------------
STANDALONE DICTIONARY_TBS 256.00 80.31 175.68 68.62
STANDALONE MEM_DATA_TBS 32.00 8.25 23.75 74.21
STANDALONE MEM_TEMP_TBS 32.00 2.50 29.50 92.18
STANDALONE MEM_UNDO_TBS 32.00 16.00 16.00 50.00
: Goldilocks Standalone DB Tablespace Size 조회 할 수 있다.
* TECH_TABLE
gSQL> SELECT * FROM TECH_TABLE;
OWNER TAB_SCHEMA TAB_NAME USE_MBYTE TBS_NAME PERCENTAGE
----- ---------- -------- ------------- ------------ ----------------
TEST PUBLIC T1 0.50 MEM_DATA_TBS 0.25
-> 운영 되고 있는 Table Size 조회 할 수 있다.
* TECH_INDEX
gSQL> SELECT * FROM TECH_INDEX;
OWNER TAB_SCHEMA TAB_NAME IDX_NAME USE_MBYTE TBS_NAME PERCENTAGE
----- ---------- -------- -------------------- ------------- ------------ ----------------
TEST PUBLIC T1 T1_PRIMARY_KEY_INDEX 0.50 MEM_TEMP_TBS 0.25
-> 운영 되고 있는 Index Size 조회 할 수 있다.
* TECH_CLUSTER
gSQL> SELECT * FROM TECH_CLUSTER;
G_ID M_ID M_POS NAME STATUS G_COORD D_COORD GLOBAL_SCN LOCAL_SCN AGABLE_SCN AGABLE_SCN_GAP IP PORT
---- ---- ----- ---- ------ ------- ------- ---------- ---------- ---------- -------------- ------------ -----
1 1 0 G1N1 ACTIVE FALSE TRUE 748.0.316 748.0.330 748.0.330 0.0.0 192.168.0.50 10000
2 2 1 G2N1 ACTIVE TRUE TRUE 748.0.1253 748.0.1264 748.0.1264 0.0.0 192.168.0.50 20000
--> Clsuter 정보를 확인 할 수 있다.
ex) Member G1N1,G1N2 두 개의 Member가 있고 현재 Active로 운영 중이며(IN-ACTIVE) Cluster 간에는 Gap이 업속
각각의 Meber IP,PORT는 (192.168.0.50 10000, 192.168.0.50 20000) 사용 중인것을 알 수 있다.
* TECH_LOCKWAIT
gSQL> SELECT * FROM TECH_LOCKWAIT;
MEMBER_NAME SESSION_ID SESSION_SERIAL TRANS_ID PROGRAM LOGIN_TIME DISCONNECT_SQL
----------- ---------- -------------- -------- ------- -------------------------- ----------------------------------------------
G2N1 45 4 90701869 gsql 2018-09-28 13:44:46.137219 ALTER SYSTEM DISCONNECT SESSION 45, 4 AT G2N1;
--> 현재 Lock Wait 처리 하고 있는 Program 및 server & client ip 및 SQL를 알 수 있다.
ex) 45 gsql session이 dml 처리 후 commit을 안하고 있다는 것을 알 수 있다.
* TECH_SESSION_PSA
gSQL> select * from tech_session_psa;
MEMBER_NAME ID SERIAL PROGRAM TOTAL_PSA_MEGA USED_PSA_MEGA
----------- -- ------ ------- -------------- -------------
G1N1 4 13 gsqlnet 100.00 10.00
G1N1 59 7 gsqlnet 100.00 10.00
G1N1 61 22 gsqlnet 100.00 10.00
G1N2 58 79 gsqlnet 100.00 10.00
G1N2 60 10 gsqlnet 100.00 10.00
--> session별 psa 영역을 구할 수 있다.
* TECH_STATEMENT
gSQL> SELECT * FROM TECH_STATEMENT;
MEMBER_NAME STAT_BEGIN_TIME STMT_LONG_TIME USER_NAME USER_ID PROGRAM SQL_TEXT
----------- -------------------------- -------------- --------- ------- ------- ----------------------------
G1N1 2022-01-03 07:56:40.016604 11 TEST 4 gsqlnet update t3 set c2 = '1'
G1N1 2022-01-03 07:56:54.906597 0 TEST 61 gsqlnet select * from tech_statement
--> 현재 수행 되고 있는 Transaction Statement 및 Long Query를 확인 할 수 있다.
ex) STMT_LONG_TIME 11초 현재 11초 동안 gsqlnet update t3 set c2 = '1' Query가 수행 되고 있는 것을
알 수 있다. 앗... Long Query다.
* TECH_TRANSACTION
gSQL> SELECT * FROM TECH_TRANSACTION;
MEMBER_NAME USER_NAME USER_ID USER_SERIAL CHARSET PROGRAM USER_LOGIN_TIME TRANSACTION_ID TRAN_BEGIN_TIME
----------- --------- ------- ----------- ------- ------- -------------------------- -------------- --------------------------
G1N1 SYS 4 1 UTF8 gsql 2018-08-08 15:26:42.502763 33292292 2018-08-08 15:55:23.107324
--> commit을 안호고 있는 session의 Transaction을 확인 할 수 있다.
'sunjesoft > Goldilocks 가이드' 카테고리의 다른 글
Goldilocks Docker 가이드 (0) | 2022.01.03 |
---|---|
Goldilocks / Oracle 비교 자료 (0) | 2019.10.16 |