나그네소

Goldilocks 운영 가이드 본문

sunjesoft/Goldilocks 가이드

Goldilocks 운영 가이드

나그네소티 2021. 12. 30. 12:40

>> 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 과 동일
    example)
    $> 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 구성 된 Instance 들의 STATUS 상태가 Open 상태인지 확인한다.
  • 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