2015년 3월 31일 화요일

SUNDB GUI TOOL




1. SUNDB GUI TOOL


1.1. 개요

GUI SQL TOOL을 SUNDB와 연결하여 사용하기 위해 Execute Query라는 제품을 사용합니다. Execute Query는 http://www.executequery.org 에서 다운로드 합니다.



1.2. Introducing Execute Query

Execute Query is an operating system independent database utility written entirely in Java.
Using the flexibility provided by Java Database Connectivity (JDBC), Execute Query provides a simple way to interact with almost any database from simple queries to table creation and import/export of an entire schema's data. See Features for a list of some of the available tools.
If you find this software useful and would like to say thanks, donations are gratefully received.
This software was developed using IntelliJ IDEA who kindly provide Execute Query developers with free licenses, and Eclipse Java IDEs and jEdit on a Debian GNU/Linux system.
ej-technologies GmbH have also kindly provided licenses for JProfiler.
Execute Query has been tested under Windows, Linux, Solaris and Mac using Java Runtime Environment v1.6 - Java v1.6.0 (min) is recommended. If you do not have the required Java version please go to the Java website.
Execute Query is very much a work in progress and is continually being extended and refined with new features and tools. Interests of contribution are welcome.
Execute Query is available completely free of charge and will remain so under the GNU Public License.
<출처 : http://www.executequery.org/>




2. Execute Query 설치

2.1. 설치파일의 실행

Execute Query Java 기반의 프로그램으로 Java Runtime이 설치되어 있어야 합니다다운로드가 완료된 후 아래와 같이 설치 파일을 실행 합니다.

$> java –jar executequery-installer-v4.1.1.jar








2.2. Execute Query 실행

Execute Query 아이콘을 클릭하여 프로그램을 실행 합니다.



2.3. SUNDB 연결 설정

2.3.1. JDBC Driver 설정

좌측의 Driver Tab에서 “New JDBC Driver”를 선택합니다.


Driver Name에 “SUNDB” 라고 입력하고, Database는 “Other”를 선택 합니다.


JDBC URL은 “jdbc:sundb://127.0.0.1:22581/test”의 형식으로 입력하고, Class Name은 “sunje.sundb.jdbc.SundbDriver”를 입력 합니다.

“Add Library” 버튼을 클릭하여 SUNDB 설치시 제공되는 SUNDB JDBC드라이버를 선택 합니다

 JDBC Driver 는 SUNDB가 설치된 디렉토리에서 다운로드 받아 사용합니다.


[sunje@symphony ~]$ cd $SUNDB_HOME/lib
[sunje@symphony ~]$ 
[sunje@symphony lib]$ ls -la
합계 54036
drwxrwxr-x. 2 sunje sunje     4096 2015-03-05 20:28 .
drwxrwxr-x. 9 sunje sunje     4096 2015-03-05 20:28 ..
-rw-r--r--. 1 sunje sunje       14 2015-03-05 19:12 README
-rwxr-xr-x. 1 sunje sunje    20498 2015-03-05 19:52 libstib.so
-rw-r--r--. 1 sunje sunje 13187242 2015-03-05 20:16 libsundb.a
-rw-r--r--. 1 sunje sunje 13096278 2015-03-05 20:16 libsundba.a
lrwxrwxrwx. 1 sunje sunje       25 2015-03-05 20:28 libsundbas.so -> libsundbas.so.Trunk.2.2.0
-rwxr-xr-x. 1 sunje sunje  8642314 2015-03-05 20:17 libsundbas.so.Trunk.2.2.0
-rw-r--r--. 1 sunje sunje  4497506 2015-03-05 20:16 libsundbc.a
lrwxrwxrwx. 1 sunje sunje       30 2015-03-05 20:28 libsundbcs-ul32.so -> libsundbcs-ul32.so.Trunk.2.2.0
-rwxr-xr-x. 1 sunje sunje  3003998 2015-03-05 20:05 libsundbcs-ul32.so.Trunk.2.2.0
lrwxrwxrwx. 1 sunje sunje       30 2015-03-05 20:28 libsundbcs-ul64.so -> libsundbcs-ul64.so.Trunk.2.2.0
-rwxr-xr-x. 1 sunje sunje  3003998 2015-03-05 20:06 libsundbcs-ul64.so.Trunk.2.2.0
-rw-r--r--. 1 sunje sunje   143654 2015-03-05 20:17 libsundbesql.a
lrwxrwxrwx. 1 sunje sunje       28 2015-03-05 20:28 libsundbesqls.so -> libsundbesqls.so.Trunk.2.2.0
-rwxr-xr-x. 1 sunje sunje    90615 2015-03-05 20:12 libsundbesqls.so.Trunk.2.2.0
lrwxrwxrwx. 1 sunje sunje       24 2015-03-05 20:28 libsundbs.so -> libsundbs.so.Trunk.2.2.0
-rwxr-xr-x. 1 sunje sunje  8653042 2015-03-05 20:17 libsundbs.so.Trunk.2.2.0
-rw-r--r--. 1 sunje sunje   312539 2015-03-05 20:13 sundb4.jar
-rw-r--r--. 1 sunje sunje   307075 2015-03-05 20:13 sundb5.jar
-rw-r--r--. 1 sunje sunje   328835 2015-03-05 20:12 sundb6.jar
[sunje@symphony lib]$ 



설정이 완료된후 저장 합니다.




2.3.2. Connection 설정

Connections Tab을 클릭하고 Context Menu에서 “New Connection”을 선택 합니다.


Database Browser  Connection 화면의 Connection Name에 “sundb”를 입력합니다.
User Name 부분에 “TEST”를 입력하고, Password 부분에 “test”를 입력합니다.(User Name에 입력하는 기본 계정명칭은 대문자를 사용합니다.)
SUNDB가 설치된 서버의 IP를 설정하고, SUNDB Listener의 포트번호를 설정합니다. (기본 포트번호는 22581을 사용합니다.)
JDBC URL 부분은 “jdbc:sundb://127.0.0.1:22581/test” 형식으로 입력하고, JDBC Driver부분에서는 이전에 설정한 SUNDB를 선택 합니다.
설정 값을 저장한 후 “Connect” 버튼을 클릭하여 접속을 확인 합니다.




3. GUI환경의 SQL사용

Query Editor를 이용하여 SQL을 사용합니다.







4. 접속을 위한 Service Listener 설정

SQL TOOL을 사용하기 위해서는 SUNDB가 설치된 서버에 서비스를 위한 접속서버가 실행되어 있어야 합니다.

4.1. Listener 서비스 시작


[sundb@cheroky ~]$ glsnr --start


4.2. Listener 서비스 상태 확인


[sundb@cheroky ~]$ glsnr --status
Listener process ID : 4139
Listener confiuration file : /home/sundb/sundb/sundb_mercury/sundb_data/conf/sundb.listener.conf
Unix Domain Path : /tmp/sundb-unix-22581
TCP Listen Port : 22581

>>> Listener is running <<<
[sundb@cheroky ~]$


4.3. Listener 서비스 종료


[sundb@cheroky ~]$ glsnr --stop


[sundb@cheroky ~]$ glsnr --status
>>> Listener is stopped <<<
[sundb@cheroky ~]$





5. 접속이 안될경우 SUNDB 설정


SUNDB 에 META Schema가 생성이 안되어 있을경우 SQL TOOL이 접속이 되지 않을수 있습니다. 

5.1. Meta Schema 생성 

$SUNDB_HOME/admin 디렉토리에 있는 3개의 Schema파일을 Build해 주어야 합니다.


[sunje@symphony lib]$ cd $SUNDB_HOME/admin
[sunje@symphony admin]$
[sunje@symphony admin]$ ls -la
합계 988
drwxrwxr-x. 2 sunje sunje   4096 2015-03-05 20:28 .
drwxrwxr-x. 9 sunje sunje   4096 2015-03-05 20:28 ..
-rw-r--r--. 1 sunje sunje 756383 2015-03-05 19:12 DictionarySchema.sql
-rw-r--r--. 1 sunje sunje 141152 2015-03-05 19:12 InformationSchema.sql
-rw-r--r--. 1 sunje sunje  94640 2015-03-05 19:12 PerformanceViewSchema.sql
-rw-r--r--. 1 sunje sunje     21 2015-03-05 19:12 README
[sunje@symphony admin]$
[sunje@symphony admin]$ gsql --as sysdba --import DictionarySchema.sql
...
[sunje@symphony admin]$ gsql --as sysdba --import InformationSchema.sql 
...
[sunje@symphony admin]$ gsql --as sysdba --import PerformanceViewSchema.sql 
[sunje@symphony admin]$




SUNDB redo log file path 변경


SUNDB Redo Log 파일의 경로 변경



SYSDBA 계정으로 접속하여 DATABASE를 종료



gSQL> \connect as sysdba
gSQL> \shutdown immediate;

Shutdown success

gSQL>
gSQL>



DATABASE를 MOUNT 상태로 startup



gSQL> \startup mount 
gSQL>
gSQL> select * from v$instance;

RELEASE_VERSION                       STARTUP_TIME               INSTANCE_STATUS DATA_ACCESS_MODE
------------------------------------- -------------------------- --------------- ----------------
Release Mercury.2.2.1 revision(14629) 2015-03-31 13:37:34.361397 MOUNTED         NONE          

1 row selected.

gSQL>



현재의 Redo 로그 파일을 조회 (현재는 0~3번 까지 4개의 GROUP이 존재한다)



gSQL> select * from v$logfile;

GROUP_ID FILE_NAME                                                   GROUP_STATE FILE_SEQ FILE_SIZE
-------- ----------------------------------------------------------- ----------- -------- ---------
       0 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_0_0.log CURRENT            4 104857600
       1 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_1_0.log INACTIVE           1 104857600
       2 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_2_0.log INACTIVE           2 104857600
       3 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_3_0.log INACTIVE           3 104857600

4 rows selected.

gSQL>



group 4 를 추가해 본다. (기존 경로가 아닌 새로운 경로에 추가)



gSQL> alter database add logfile group 4 ('/home/sunje/sundb/sundb_mercury/sundb_data/db/redo_4_0.log') size 15m;

Database altered.

gSQL> select * from v$logfile;

GROUP_ID FILE_NAME                                                   GROUP_STATE FILE_SEQ FILE_SIZE
-------- ----------------------------------------------------------- ----------- -------- ---------
       0 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_0_0.log CURRENT            4 104857600
       4 /home/sunje/sundb/sundb_mercury/sundb_data/db/redo_4_0.log  UNUSED            -1  15728640
       1 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_1_0.log INACTIVE           1 104857600
       2 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_2_0.log INACTIVE           2 104857600
       3 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_3_0.log INACTIVE           3 104857600

5 rows selected.

gSQL> alter system switch logfile;

System altered.

gSQL> select * from v$logfile;

GROUP_ID FILE_NAME                                                   GROUP_STATE FILE_SEQ FILE_SIZE
-------- ----------------------------------------------------------- ----------- -------- ---------
       0 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_0_0.log ACTIVE             4 104857600
       4 /home/sunje/sundb/sundb_mercury/sundb_data/db/redo_4_0.log  CURRENT            5  15728640
       1 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_1_0.log INACTIVE           1 104857600
       2 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_2_0.log INACTIVE           2 104857600
       3 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_3_0.log INACTIVE           3 104857600

5 rows selected.



기존 Redo 로그파일인 3번을 삭제한다.



gSQL> alter database drop logfile group 3;

Database altered.

gSQL>
gSQL> select * from v$logfile;

GROUP_ID FILE_NAME                                                   GROUP_STATE FILE_SEQ FILE_SIZE
-------- ----------------------------------------------------------- ----------- -------- ---------
       0 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_0_0.log ACTIVE             4 104857600
       4 /home/sunje/sundb/sundb_mercury/sundb_data/db/redo_4_0.log  CURRENT            5  15728640
       5 /home/sunje/sundb/sundb_mercury/sundb_data/db/redo_5_0.log  UNUSED            -1  15728640
       1 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_1_0.log INACTIVE           1 104857600
       2 /home/sunje/sundb/sundb_mercury/sundb_data/wal/redo_2_0.log INACTIVE           2 104857600

5 rows selected.



DATABASE를 OPEN하여 사용할수 있다.



gSQL> alter system open database;

System altered.

gSQL> select * from v$instance;

RELEASE_VERSION                       STARTUP_TIME               INSTANCE_STATUS DATA_ACCESS_MODE
------------------------------------- -------------------------- --------------- ----------------
Release Mercury.2.2.1 revision(14629) 2015-03-31 13:37:34.361397 OPEN            READ_WRITE    

1 row selected.

gSQL>





2015년 3월 20일 금요일

eclipse에서 SUNDB E-SQLC Debug하기





1. Use SUNDB Precompiler in eclipse CDT


1.1. eclipse를 이용하여 Project를 생성한다.



1.2. 생성한 Project Properties를 클릭한다.





1.3. Project->Properties->C/C++ General->Paths and Symbols

1.3.1. Include -> Add Button 클릭한다

1.3.2. File system Button 클릭하여 SUNDB library include 경로를 설정한다.




1.3.3. Library Paths-> Add Button 클릭한다

1.3.4. File system Button 클릭하여 SUNDB library lib경로를 설정한다.




1.3.5. 설정된 모습은 아래와 같다.



1.3.6. Libraries-> Add Button 클릭한다

1.3.7. SUNDB ESQL Library SUNDB library, 그외 사용 library를 설정한다.



1.3.8. 설정이 완료된 후 Apply Button을 클릭하면 아래와 같은 화면이 출력된다.

1.3.8.1.  Yes Button 클릭



1.3.9. OK Button을 클릭하여 Properties->Paths and Symbols 설정이 화면을 닫는다.




1.4. 생성된 Project를 선택하고 Build Project를 클릭하여 Build를 수행한다.





1.4.1. Build가 완료되면 하단의 Console 창에 설정한 library 가 보여야 된다. 설정한 library가 보이지 않으면 잘못된 것이므로 처음부터 다시 한다.



1.5. 생성한 Project->Properties를 클릭한다.



1.5.1. Project->C/C++ Build를 선택한다.

1.5.1.1. Builder Settings->Makefile generation 부분의 Generate Makefile automatically 부분은 Uncheck한다.

1.5.1.2. Apply Button 클릭하고, OK Button을 클릭하여 화면을 닫는다.




1.6. Console 창을 열어 생성된 Project Directory로 이동한다



1.6.1. Directory에 생성된 파일을 확인한다



1.7. {생성된 프로젝트 Directory}/Debug/src Directory로 이동한다.

1.7.1. Vi를 이용하여 subdir.mk 파일을 열어본다.



1.7.2. subdir.mk의 내용은 아래와 같다, 이 파일을 수정할 것이다.





1.7.3. subdir.mk 파일에 Precompile 명령을 추가한다.


#SUNDB Pre-Compiler
../src/%.c: ../src/%.gc
        @echo 'Building file: $<'
        @echo 'Invoking: GCC C Compiler'
        gpec --output "$@" "$<"
        @echo 'Finished building: $<'
        @echo ' '


1.7.4. Precompile 명령 추가 후 모습은 아래와 같다.

1.7.4.1. subdir.mk File을 저장한다.



1.8. 생성한 Project에서 default로 생성된 소스파일의 이름을 변경한다.




1.8.1. 파일이름 중 확장자 부분만 *.gc로 변경한다.



1.9. 변경이 완료된 파일에 SUNDB ESQLC Code를 작성한다.




1.9.1. Source Coding이 완료되었다면 Clean Project를 한번 수행한다.




1.9.2. 그리고 Build Project를 수행한다.




1.9.3. Build가 완료되면 하단의 Console창에 아래와 같이 Build 정보가 출력된다.



1.10. 이제 eclipse를 이용하여 SUNDB ESQLC Debugging 한다.



2. Eclipse IDE for C/C++ Developers





SUNDB license 설정하기



license 설정


$SUNDB_HOME/license 디렉토리에 license 파일이 없을경우 생성합니다.


[sunje@symphony ~]$ cd $SUNDB_HOME/license
[sunje@symphony license]$ pwd
/home/sunje/sundb/sundb_mercury/sundb_home/license
[sunje@symphony license]$ ls -la
합계 16
drwxrwxr-x. 2 sunje sunje 4096 2015-03-05 20:30 .
drwxrwxr-x. 9 sunje sunje 4096 2015-03-05 20:28 ..
-rw-r--r--. 1 sunje sunje   13 2015-03-05 19:12 README
-rw-rw-r--. 1 sunje sunje  129 2015-03-05 20:30 license
[sunje@symphony license]$
[sunje@symphony license]$ cat license
49CB2A8543999970F366298C32285ECE8D2048A5E34DFD8809D7AAC0EC45D6EC71D7AAC
[sunje@symphony license]$
[sunje@symphony license]$

SQL Explain Plan & SQL Trace Log



SQL Explain Plan


SQL 실행 계획은 Query Optimizer에서 여러 Candidate Plan 중 가장 좋은 Plan으로 선택된 Plan을 실제 수행을 위한 형태로 구성된 것을 말한다. SQL 실행 계획은 실행을 위한 Node 단위로 구분이 되며, 각 Node는 자신이 수행해야 하는 Filter 등을 갖는다.


\explain plan : 실행결과 및 실행계획 출력

gSQL> \explain plan SELECT id, name FROM t1 ORDER BY 1;


\explain plan only : 실행 계획만 출력

gSQL> \explain plan only SELECT id, name FROM t1 ORDER BY 1;


\explain plan verbose : 실행결과에 따른 소요시간 출력

gSQL> \explain plan verbose SELECT id, name FROM t1 ORDER BY 1;


ID NAME
-- ----------
1 leekmo
2 jhkim
3 bsyou

3 rows selected.


>>>  start print plan

< Execution Plan >
======================================================================================================
|  IDX  |  NODE DESCRIPTION                                            |       ROWS | Total Time     |
------------------------------------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |            | 0:00:00.000009 |
|    1  |    TABLE ACCESS ("T1")                                       |          9 | 0:00:00.000008 |
======================================================================================================

     1  -  READ COLUMNS : ID, NAME

<<<  end print plan







SQL Trace Log


SQL Trace Log는 사용자의 질의 수행에 대한 분석 가능한 정보를 기록하는 Log이다. SQL Trace Log는 $SUNDB_DATA/trc 디렉토리에 생성되며, 프로세스 ID 와 세션 ID로 구분되어 각각 독립된 파일로 생성된다. SQLTrace Log는 사용자의 질의, SQL 실행 계획, SQL 처리 과정별 수행시간 등 여러 정보로 구성되어 파일에 출력된다.


SQL Trace Log 출력 (Trace Log 옵션은 SYSDBA 계정에서 설정)


gSQL> \CONNECT AS SYSDBA

# trace log 출력
gSQL> ALTER SYSTEM SET TRACE_LOG_ID = 70200;

System altered.

# trace log 시간을 상세하게
gSQL> ALTER SYSTEM SET TRACE_LOG_TIME_DETAIL = ON;

System altered.



SQL Trace Log 해제


# trace log 해제
gSQL> ALTER SYSTEM SET TRACE_LOG_ID = 0;

System altered.

# trace log 시간 해제
gSQL> ALTER SYSTEM SET TRACE_LOG_TIME_DETAIL = OFF;

System altered.



SQL Trace Log는 trc 디렉토리 아래 파일이 생기며 파일명에 대한 규칙은 아래와 같다.


opt_p[프로세스ID]_s[세션ID].trc




SQL Trace Log 확인


[neuron@song ~]$ cd $SUNDB_DATA/trc
[neuron@song trc]$ ls -la
합계 48
drwxrwxr-x. 2 neuron neuron  4096 2015-03-20 17:43 .
drwxrwxr-x. 8 neuron neuron  4096 2015-03-19 13:04 ..
-rw-r--r--. 1 neuron neuron    15 2015-03-19 00:41 README
-rw-rw-r--. 1 neuron neuron  5045 2015-03-20 17:44 opt_p23232_s27.trc
-rw-rw-r--. 1 neuron neuron 24876 2015-03-20 17:24 system.trc
[neuron@song trc]$
[neuron@song trc]$




[neuron@song~]$ vi opt_p23232_s27.trc


< SQL Query String >
----------------------
select empno, ename from semp


< Execution Plan >
======================================================================================================
|  IDX  |  NODE DESCRIPTION                                            |       ROWS | Total Time     |
------------------------------------------------------------------------------------------------------
|    0  |  SELECT STATEMENT                                            |            | 0:00:00.000009 |
|    1  |    TABLE ACCESS ("SEMP")                                     |          9 | 0:00:00.000008 |
======================================================================================================

     1  -  READ COLUMNS : EMPNO, ENAME



< Result >
----------------------
  SUCCESS


< Execution Type >
----------------------
  DIRECT EXECUTE


< Bind Param Value >
--------------------------
  No Bind Param.

< Time Info >
====================================================
| Module    | Time           | Rate     | Call     |
----------------------------------------------------
| Parse     | 0:00:00.000021 |  14.89 % |        1 |
| Validate  | 0:00:00.000038 |  26.95 % |        1 |
| Code Opt  | 0:00:00.000018 |  12.77 % |        1 |
| Optimizer | 0:00:00.000043 |  30.50 % |        1 |
| Data Opt  | 0:00:00.000007 |   4.96 % |        1 |
| Execute   | 0:00:00.000004 |   2.84 % |        1 |
| Fetch     | 0:00:00.000010 |   7.09 % |        1 |
| Total     | 0:00:00.000141 | 100.00 % |          |
====================================================