Skip to content

machsql

machsql은 터미널 화면에서 SQL 질의를 수행하는 대화형 도구입니다.

구동 옵션 설명

[mach@localhost]$ machsql -h
짧은 옵션긴 옵션설명
-s–server접속할 서버의 IP 주소 (default : 127.0.0.1)
-u–user사용자명 (default : SYS)
-p–password사용자 패스워드 (default : MANAGER)
-K–auth-key-file인증용 개인키 파일 경로 (Machbase 8.5 이상 지원)
-P–port서버의 포트 번호 (default : 5656)
-n–nlsNLS 설정
-f–script실행할 SQL 스크립트 파일
-z–timezone=+-HHMMTimezone 설정 ex) +0900 -1230
-o–output질의 결과를 저장할 파일명
-i–silent저작권 출력 없이 실행
-v–verbose상세 출력
-x–testing테스트 모드로 실행
-r–format출력 파일 포맷 지정 (default: csv)
–auth-sig-scheme인증 서명 스킴 (ECDSA, RSA_PKCS1_V15, RSA_PSS; Machbase 8.5 이상 지원)
-h–help옵션 출력
-c–connstrConnection 매개변수 추가(6.1 이후 버전부터 지원)

예제:

machsql -s localhost -u sys -p manager
machsql --server=localhost --user=sys --password=manager
machsql -s localhost -u sys -p manager -f script.sql
machsql -s localhost -u app_user -K /opt/machbase/keys/app_user_ecdsa.pem --auth-sig-scheme=ECDSA -f script.sql
## Supported from version 6.1 or later
machsql -s 127.0.0.1 -u sys -p manager -P 8888 -c "ALTERNATIVE_SERVERS=192.168.0.147:9209;CONNECTION_TIMEOUT=10"

AUTH KEY challenge 인증

참고: 이 기능은 Machbase 8.5 이상에서 지원됩니다.

machsql은 비밀번호 인증 외에 공개키 기반 challenge 인증도 지원합니다.

전용 옵션 사용

machsql -s 127.0.0.1 -u app_user \
    -K /opt/machbase/keys/app_user_ecdsa.pem \
    --auth-sig-scheme=ECDSA \
    -f script.sql
machsql -s 127.0.0.1 -u app_user \
    -K /opt/machbase/keys/app_user_rsa.pem \
    --auth-sig-scheme=RSA_PSS \
    -f script.sql

설명:

  • -K, --auth-key-file을 지정하면 내부적으로 AUTH_MODE=CHALLENGE가 적용됩니다.
  • --auth-sig-scheme를 생략하면 키 알고리즘 기준 기본 스킴을 사용합니다.
    • ECDSA 키: ECDSA
    • RSA 키: RSA_PKCS1_V15
  • 지원 키 파라미터는 ECDSA P-256, P-384, P-521 및 RSA 2048, 3072, 4096 bits입니다.
  • RSA-PSS 인증을 사용하려면 --auth-sig-scheme=RSA_PSS를 명시합니다.
  • AUTH_MODE=CHALLENGE에서는 -p를 인증에 사용하지 않습니다.
  • 사용자 AUTH KEY를 X.509 인증서 PEM으로 등록한 경우에도 인증 시에는 해당 인증서에 대응하는 개인키 파일을 -K 또는 AUTH_KEY_FILE로 지정합니다.
  • POSIX 환경에서는 개인키 파일 권한을 600으로 제한하는 것을 권장합니다.

connection string 사용

machsql -c "SERVER=127.0.0.1;PORT_NO=5656;UID=APP_USER;AUTH_MODE=CHALLENGE;AUTH_SIG_SCHEME=ECDSA;AUTH_KEY_FILE=/opt/machbase/keys/app_user_ecdsa.pem;" -f script.sql

connection string 형태는 프로세스 인자나 로그에 키 파일 경로가 노출될 수 있으므로, 가능하면 -K 옵션 사용을 권장합니다.

실패 예시

  • 키 파일이 없으면 인증이 실패합니다.
  • 키 타입과 AUTH_SIG_SCHEME가 맞지 않으면 인증이 실패합니다.
  • 만료(VALID_BEFORE)되었거나 비활성화된 AUTH KEY로는 인증할 수 없습니다.

환경변수 MACHBASE_CONNECTION_STRING

기본 접속 매개변수를 지정합니다. 예를 들어 CONNECTION_TIMEOUT과 ALTERNATIVE_SERVERS 설정을 추가하려면 다음 환경변수를 설정할 수 있습니다.

export MACHBASE_CONNECTION_STRING="ALTERNATIVE_SERVERS=192.168.0.148:8888;CONNECTION_TIMEOUT=3"

-c 옵션으로 지정한 접속 매개변수는 환경변수보다 우선합니다. 이 기능은 6.1 이후 버전부터 지원합니다.

HEREDOC으로 SQL 스크립트 실행

machsql은 HEREDOC(Here Document) 구문을 지원하므로, 별도 파일을 만들지 않고 셸에서 SQL 명령을 바로 전달할 수 있습니다. 자동화 스크립트나 일회성 SQL 실행에 특히 유용합니다.

참고: 이 기능은 Machbase 8.0.50 이상에서 지원됩니다.

기본 구문

machsql -s <server> -u <user> -p <password> <<'DELIMITER'
SQL statements here
DELIMITER

구분자로는 임의의 문자열을 사용할 수 있습니다(보통 EOF, SQL, SQLBLOCK). 구분자를 따옴표로 감싸면(<<'DELIMITER') 셸 변수가 확장되지 않습니다.

예제

단순 질의 실행:

machsql -s 127.0.0.1 -u sys -p manager <<'SQLBLOCK'
select 'WORKS!!!!' from v$tables limit 2;
SQLBLOCK

여러 문장 실행:

machsql -s 127.0.0.1 -u sys -p manager <<'EOF'
CREATE TABLE test_table (id INTEGER, name VARCHAR(100));
INSERT INTO test_table VALUES (1, 'First Record');
INSERT INTO test_table VALUES (2, 'Second Record');
SELECT * FROM test_table;
DROP TABLE test_table;
EOF

변수 사용(구분자에 따옴표 없음):

TABLE_NAME="my_table"
machsql -s 127.0.0.1 -u sys -p manager <<EOF
SELECT COUNT(*) FROM ${TABLE_NAME};
EOF

출력 리다이렉션:

machsql -s 127.0.0.1 -u sys -p manager <<'SQL' > output.csv
SELECT name, time, value FROM tag_table
WHERE time >= NOW - INTERVAL 1 HOUR
ORDER BY time DESC;
SQL

HEREDOC의 장점

  1. 임시 파일 불필요: 별도 스크립트 파일을 만들지 않고 SQL을 실행합니다.
  2. 인라인 스크립트: 셸 스크립트에 SQL을 직접 넣어 가독성을 높입니다.
  3. 자동화: 배포 및 유지보수 스크립트를 단순하게 만듭니다.
  4. 변수 치환: 필요하면 SQL에서 셸 변수를 사용할 수 있습니다(구분자에 따옴표 없이 사용).

주의 사항

  • 변수 확장을 막으려면 구분자를 따옴표로 감쌉니다(<<'DELIMITER').
  • SQL에서 셸 변수를 사용하려면 따옴표를 뺍니다(<<DELIMITER).
  • HEREDOC을 끝내려면 구분자를 한 줄에 단독으로 써야 합니다.
  • machsql의 모든 명령행 옵션과 함께 사용할 수 있습니다.

SHOW 명령어

테이블, 테이블스페이스, 인덱스 등의 정보를 출력합니다.

SHOW 명령어 목록:

  • SHOW INDEX
  • SHOW INDEXES
  • SHOW INDEXGAP
  • SHOW LSM
  • SHOW LICENSE
  • SHOW STATEMENTS
  • SHOW STORAGE
  • SHOW TABLE
  • SHOW TABLES
  • SHOW TABLESPACE
  • SHOW TABLESPACES
  • SHOW USERS

SHOW INDEX

인덱스 정보를 출력합니다.

구문:

SHOW INDEX index_name

예제:

Mach> CREATE TABLE t1 (c1 INTEGER, c2 VARCHAR(10));
Created successfully.
Mach> CREATE VOLATILE TABLE t2 (c1 INTEGER, c2 VARCHAR(10));
Created successfully.
Mach> CREATE INDEX t1_idx1 ON t1(c1) INDEX_TYPE LSM;
Created successfully.
Mach> CREATE INDEX t1_idx2 ON t1(c2) INDEX_TYPE BITMAP;
Created successfully.
Mach> CREATE INDEX t2_idx1 ON t2(c1) INDEX_TYPE REDBLACK;
Created successfully.
Mach> CREATE INDEX t2_idx2 ON t2(c2) INDEX_TYPE REDBLACK;
Created successfully.

Mach> SHOW INDEX t1_idx2;
TABLE_NAME                                          COLUMN_NAME                                         INDEX_NAME                                          INDEX_TYPE   KEY_COMPRESS  MAX_LEVEL
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PART_VALUE_COUNT BITMAP_ENCODE
-----------------------------------
T1                                                  C2                                                  T1_IDX2                                             LSM          COMPRESSED    2
100000           EQUAL
[1] row(s) selected.

SHOW INDEXES

인덱스 전체 목록을 출력합니다.

구문:

SHOW INDEXES

예제:

Mach> CREATE TABLE t1 (c1 INTEGER, c2 VARCHAR(10));
Created successfully.
Mach> CREATE VOLATILE TABLE t2 (c1 INTEGER, c2 VARCHAR(10));
Created successfully.
Mach> CREATE INDEX t1_idx1 ON t1(c1) INDEX_TYPE LSM;
Created successfully.
Mach> CREATE INDEX t1_idx2 ON t1(c2) INDEX_TYPE BITMAP;
Created successfully.
Mach> CREATE INDEX t2_idx1 ON t2(c1) INDEX_TYPE REDBLACK;
Created successfully.
Mach> CREATE INDEX t2_idx2 ON t2(c2) INDEX_TYPE REDBLACK;
Created successfully.

Mach> SHOW INDEXES;
USER_NAME             TABLE_NAME                                          COLUMN_NAME                                         INDEX_NAME                                          INDEX_TYPE
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SYS                   T1                                                  C1                                                  T1_IDX1                                             LSM
SYS                   T1                                                  C2                                                  T1_IDX2                                             LSM
SYS                   T2                                                  C2                                                  T2_IDX2                                             REDBLACK
SYS                   T2                                                  C1                                                  T2_IDX1                                             REDBLACK
[4] row(s) selected.

SHOW INDEXGAP

인덱스 생성 GAP 정보를 출력합니다.

예제:

Mach> SHOW INDEXGAP
TABLE_NAME                                INDEX_NAME                                GAP
-------------------------------------------------------------------------------------------------------------
INDEX_TABLE                               T1_IDX1                                   0
INDEX_TABLE                               T1_IDX2                                   0

SHOW LSM

LSM 인덱스 생성 정보를 출력합니다.

예제:

Mach> SHOW LSM;
TABLE_NAME                                INDEX_NAME                                LEVEL       COUNT
--------------------------------------------------------------------------------------------------------------------------
T1                                        IDX1                                      0           0
T1                                        IDX1                                      1           100000
T1                                        IDX1                                      2           0
T1                                        IDX1                                      3           0
T1                                        IDX2                                      0           100000
T1                                        IDX2                                      1           0
[6] row(s) selected.

SHOW LICENSE

라이선스 정보를 출력합니다.

예제:

Mach> SHOW LICENSE
INSTALL_DATE          ISSUE_DATE            EXPIRY_DATE  TYPE        POLICY
---------------------------------------------------------------------------------------
2016-07-01 10:24:37   20160325              20170325    2           0
[1] row(s) selected.

SHOW STATEMENTS

서버에 등록(Prepare, Execute, Fetch)된 모든 질의문을 출력합니다.

예제:

Mach> SHOW STATEMENTS
USER_ID     SESSION_ID  QUERY
--------------------------------------------------------------------------------------------------------------
0           2           SELECT ID USER_ID, SESS_ID SESSION_ID, QUERY FROM V$STMT
[1] row(s) selected.

SHOW STORAGE

사용자가 생성한 테이블별 디스크 사용량을 출력합니다.

구문:

SHOW STORAGE

예제:

Mach> CREATE TAG TABLE TAG (name varchar(20) primary key, time datetime basetime, value double summarized);
Created successfully.

Mach> SHOW STORAGE
TABLE_NAME                                          DATA_SIZE            INDEX_SIZE           TOTAL_SIZE
------------------------------------------------------------------------------------------------------------------------
_TAG_DATA_0                                         50335744             0                    50335744
_TAG_DATA_1                                         50335744             0                    50335744
_TAG_DATA_2                                         50335744             0                    50335744
_TAG_DATA_3                                         50335744             0                    50335744
_TAG_META                                           0                    0                    0

SHOW TABLE

사용자가 생성한 테이블의 정보를 출력합니다.

구문:

SHOW TABLE table_name

예제:

Mach> CREATE TABLE t1 (c1 INTEGER, c2 VARCHAR(10));
Created successfully.
Mach> CREATE INDEX t1_idx1 ON t1(c1) INDEX_TYPE LSM;
Created successfully.
Mach> CREATE INDEX t1_idx2 ON t1(c1) INDEX_TYPE BITMAP;
Created successfully.

Mach> SHOW TABLE T1
[ COLUMN ]
----------------------------------------------------------------
NAME                          TYPE                LENGTH
----------------------------------------------------------------
C1                            integer             11
C2                            varchar             10

[ INDEX ]
----------------------------------------------------------------
NAME                          TYPE                COLUMN
----------------------------------------------------------------
T1_IDX1                       LSM                 C1
T1_IDX2                       LSM                 C1

SHOW TABLES

사용자가 생성한 테이블 전체 목록을 출력합니다.

예제:

Mach> SHOW TABLES
NAME
--------------------------------------------
BONUS
DEPT
EMP
SALGRADE
[4] row(s) selected.

SHOW TABLESPACE

테이블스페이스 정보를 출력합니다.

예제:

Mach> CREATE TABLE t1 (id integer);
Created successfully.
Mach> CREATE INDEX t1_idx_id ON t1(id);
Created successfully.

Mach> SHOW TABLESPACE SYSTEM_TABLESPACE;
[TABLE]
NAME                                      TYPE
-------------------------------------------------------
T1                                        LOG
[1] row(s) selected.

[INDEX]
TABLE_NAME                                COLUMN_NAME                               INDEX_NAME
----------------------------------------------------------------------------------------------------------------------------------
T1                                        ID                                        T1_IDX_ID
[1] row(s) selected.

SHOW TABLESPACES

테이블스페이스 전체 목록을 출력합니다.

예제:

Mach> CREATE TABLESPACE tbs1 DATADISK disk1 (DISK_PATH="tbs1_disk1"), disk2 (DISK_PATH="tbs1_disk2"), disk3 (DISK_PATH="tbs1_disk3");
Created successfully.

-- Insert data here
...
...


Mach> SHOW TABLESPACES;
NAME                                                                              DISK_COUNT  USAGE
-----------------------------------------------------------------------------------------------------------------------
SYSTEM_TABLESPACE                                                                 1           0
TBS1                                                                              3           25824256
[2] row(s) selected.

SHOW USERS

사용자 목록을 출력합니다.

예제:

Mach> CREATE USER testuser IDENTIFIED BY 'test1234';
Created successfully.

Mach> SHOW USERS;
USER_NAME
--------------------------------------------
SYS
TESTUSER
[2] row(s) selected.
최근 업데이트