machsql
machsql は、端末から SQL クエリーを実行する対話型ツールです。
起動オプション
[mach@localhost]$ machsql -h| 短縮形 | 完全形 | 説明 |
|---|---|---|
| -s | –server | サーバー IP(既定値:127.0.0.1) |
| -u | –user | ユーザー名(既定値:SYS) |
-p | –password | パスワード(既定値:MANAGER) |
-K | --auth-key-file | 認証用秘密鍵ファイル(8.5 以降) |
| -P | –port | サーバーポート(既定値:5656) |
| -n | –nls | NLS 設定 |
| -f | –script | 実行する SQL スクリプト |
| -z | –timezone=+-HHMM | タイムゾーン。例:+0900、-1230 |
| -o | –output | 結果の保存先ファイル |
| -i | –silent | 著作権表示を省略 |
| -v | –verbose | 詳細出力 |
| -x | –testing | テストモードで実行 |
| -r | –format | 出力形式(既定値:csv) |
--auth-sig-scheme | 認証署名方式(ECDSA、RSA_PKCS1_V15、RSA_PSS、8.5 以降) | |
| -h | –help | オプション一覧 |
| -c | –connstr | 接続パラメーターを追加(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
#バージョン 6.1 以降でサポート
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 チャレンジ認証
注意:Machbase 8.5 以降でサポートされます。
machsql は、パスワード認証に加えて公開鍵に基づく
チャレンジ認証をサポートします。
専用オプションの使用
machsql -s 127.0.0.1 -u app_user \
-K /opt/machbase/keys/app_user_ecdsa.pem \
--auth-sig-scheme=ECDSA \
-f script.sqlmachsql -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ビットです。 - RSA-PSS は
--auth-sig-scheme=RSA_PSSを指定します。 AUTH_MODE=CHALLENGEでは-pは認証に使用しません。- AUTH KEY を X.509 証明書の PEM から登録した場合も、認証には
-KまたはAUTH_KEY_FILEで対応する秘密鍵ファイルを指定します。 - POSIX では秘密鍵ファイルの権限を
600に制限することを推奨します。
接続文字列の使用
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接続文字列はプロセス引数やログに鍵ファイルのパスを露出させる可能性があるため、
可能なら -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 以降でサポートされます。
ヒアドキュメントによる SQL スクリプト
machsql は HEREDOC(ヒアドキュメント)をサポートし、別ファイルを作らずシェルから直接 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ヒアドキュメントの利点
- 一時ファイル不要:
SQLを直接実行できます。 - インラインのスクリプト:シェルに
SQLを埋め込み、読みやすくできます。 - 自動化:配置や保守用のスクリプトを簡単にできます。
- 変数の置換:引用符を省略すると、
SQL内でシェル変数を使用できます。
注意事項
- 変数展開を防ぐには
<<'DELIMITER'を使用します。 SQL内でシェル変数を使うには<<DELIMITERとします。- 終端の区切り語は、1 行に単独で記述してください。
- すべての
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 0SHOW 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 0SHOW 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 C1SHOW 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.
-- ここでデータを挿入
...
...
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.