시스템/세션 관리
목차
ALTER SYSTEM
시스템 전역 자원을 관리하거나 설정을 변경할 때 사용하는 구문입니다.
KILL SESSION
alter_system_kill_session_stmt:

alter_system_kill_session_stmt: 'ALTER SYSTEM KILL SESSION' number세션 ID를 지정해 해당 세션을 강제로 종료합니다.
- SYS 사용자만 실행할 수 있으며, 자신의 세션이나 권한이 없는 세션을 대상으로 하면
[ERR-03025: Not enough privileges to manipulate the session. (<sid>)]가 반환됩니다. - 세션 ID가 없으면
ERR_MM_SESSION_ID_NOT_FOUND오류가 반환됩니다. - 연결을 즉시 끊어야 할 때 사용합니다. 대상 세션의 접속이 종료되고 실행 중인 트랜잭션은 롤백됩니다.
예시
-- SYS 계정에서 확인 후 종료
SELECT id, user_id, program FROM v$session;
ALTER SYSTEM KILL SESSION 12;CANCEL SESSION
alter_system_cancel_session_stmt:

alter_system_cancel_session_stmt ::= 'ALTER SYSTEM CANCEL SESSION' number세션 ID를 지정해 해당 세션에서 수행 중인 작업을 취소합니다.
- 연결을 끊지 않고 현재 실행 중인 SQL만 중단합니다. 대상 세션에서는
[ERR-03027: This statement has been canceled.]오류가 발생합니다. - 같은 사용자 또는 SYS만 취소할 수 있습니다. 다른 사용자가 취소하면
[ERR-03026: You should log in with the same user name in the target session. Now (<me>) Target(<them>)]를 반환합니다. - 자기 자신의 세션을 취소하려 하면
[ERR-03025: Not enough privileges to manipulate the session. (<sid>)]가 반환됩니다. - 세션 ID가 없으면
ERR_MM_SESSION_ID_NOT_FOUND오류가 반환됩니다.
예시
-- 세션 A: 대상 SID 확인
SELECT id, user_id, program, sql_text FROM v$session;
-- 세션 B (같은 사용자 또는 SYS): 실행 중인 문장만 취소
ALTER SYSTEM CANCEL SESSION 6;CHECK DISK_USAGE
alter_system_check_disk_stmt:

alter_system_check_disk_stmt ::= 'ALTER SYSTEM CHECK DISK_USAGE'V$STORAGE에서 로그 테이블의 디스크 사용량을 나타내는 DC_TABLE_FILE_SIZE 값을 재계산합니다.
프로세스 장애나 정전이 발생하면 디스크 사용량이 부정확해질 수 있습니다. 이 명령은 파일 시스템에서 값을 다시 읽어 정확한 사용량을 반영하지만, 파일 시스템에 부담을 줄 수 있으므로 필요할 때만 사용해야 합니다.
INSTALL LICENSE
alter_system_install_license_stmt:

alter_system_install_license_stmt ::= 'ALTER SYSTEM INSTALL LICENSE'라이선스 파일을 기본 경로($MACHBASE_HOME/conf/license.dat)에 설치합니다.
설치 전 라이선스 적합성을 검증하며, 검증에 성공하면 설치가 완료됩니다.
INSTALL LICENSE (PATH)
alter_system_install_license_path_stmt:

alter_system_install_license_path_stmt: ::= 'ALTER SYSTEM INSTALL LICENSE' '=' "'" path "'"지정한 경로에 라이선스 파일을 설치합니다.
경로에 파일이 없거나 손상된 라이선스 파일을 지정하면 오류가 발생합니다. 경로는 절대 경로여야 하며, 설치 전 라이선스 적합성을 검증합니다.
SET
alter_system_set_stmt:

alter_system_set_stmt ::= 'ALTER SYSTEM SET' prop_name '=' value변경 가능한 속성 목록은 다음과 같습니다.
- QUERY_PARALLEL_FACTOR
- DEFAULT_DATE_FORMAT
- TRACE_LOG_LEVEL
- DISK_COLUMNAR_PAGE_CACHE_MAX_SIZE
- MAX_SESSION_COUNT
- SESSION_IDLE_TIMEOUT_SEC
- PROCESS_MAX_SIZE
- TAG_CACHE_MAX_MEMORY_SIZE
ALTER SESSION
개별 세션 단위로 자원을 관리하거나 설정을 변경할 때 사용하는 구문입니다.
SET SQL_LOGGING
alter_session_sql_logging_stmt:

alter_session_sql_logging_stmt ::= 'ALTER SESSION SET SQL_LOGGING' '=' flag세션의 트레이스 로그에 메시지를 남길지 여부를 지정합니다.
다음과 같은 비트 플래그 값을 사용할 수 있습니다.
- 0x1: 파싱·검증·최적화 단계 로그
- 0x2: DDL 수행 결과 로그
따라서 값이 2이면 DDL 로그만 기록되고, 값이 3이면 오류와 DDL 로그가 함께 기록됩니다. 아래는 세션의 로깅 플래그를 변경해 오류 로그를 남기는 예시입니다.
Mach> alter session set SQL_LOGGING=1;
Altered successfully.
Mach> exitSET DEFAULT_DATE_FORMAT
alter_session_set_defalut_dateformat_stmt:

alter_session_set_defalut_dateformat_stmt ::= 'ALTER SESSION SET DEFAULT_DATE_FORMAT' '=' date_formatSets the default format for Datetime data types for this session.
서버가 시작되면 시스템 속성 DEFAULT_DATE_FORMAT 값이 각 세션에도 설정됩니다.
속성을 변경하지 않았다면 세션 기본값은 "YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn"입니다.
이 구문을 사용하면 시스템 전체 설정과 무관하게 특정 세션의 날짜 형식을 변경할 수 있습니다.
각 세션에 설정된 기본 날짜 형식은 V$SESSION에서 확인 가능합니다. 아래는 값을 조회하고 변경하는 예시입니다.
Mach> CREATE TABLE time_table (time datetime);
Created successfully.
Mach> SELECT DEFAULT_DATE_FORMAT from v$session;
default_date_format
-----------------------------------------------
YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn
[1] row(s) selected.
Mach> INSERT INTO time_table VALUES(TO_DATE('2016/11/12'));
[ERR-00300: Invalid date value.(2016/11/12)]
Mach> ALTER SESSION SET DEFAULT_DATE_FORMAT='YYYY/MM/DD';
Altered successfully.
Mach> SELECT DEFAULT_DATE_FORMAT from v$session;
default_date_format
----------------------------------------------
YYYY/MM/DD
[1] row(s) selected.
Mach> INSERT INTO time_table VALUES(TO_DATE('2016/11/12'));
1 row(s) inserted.
Mach> SELECT * FROM time_table;
TIME
----------------------------------
2016/11/12
[1] row(s) selected.SET SHOW_HIDDEN_COLS
alter_session_set_hidden_column_stmt:

alter_session_set_hidden_column_stmt ::= 'ALTER SESSION SET SHOW_HIDDEN_COLS' '=' ( '0' | '1' )세션에서 SELECT *를 실행할 때 숨김 컬럼(_arrival_time)을 함께 출력할지 결정합니다.
서버가 시작되면 전역 속성 SHOW_HIDDEN_COLS 값이 각 세션에 0으로 설정됩니다. 세션 기본 동작을 바꾸고 싶다면 이 값을 1로 변경하면 됩니다. 각 세션의 SHOW_HIDDEN_COLS 값은 V$SESSION에서 확인할 수 있습니다.
Mach> SELECT * FROM v$session;
ID CLOSED USER_ID LOGIN_TIME SQL_LOGGING SHOW_HIDDEN_COLS
-----------------------------------------------------------------------------------------------------------------
DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE
------------------------------------------------------------------------------------------------------
1 0 1 2015-04-29 17:23:56 248:263:000 3 0
YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011
[1] row(s) selected.
Mach> ALTER SESSION SET SHOW_HIDDEN_COLS=1;
Altered successfully.
Mach> SELECT * FROM v$session;
_ARRIVAL_TIME ID CLOSED USER_ID LOGIN_TIME SQL_LOGGING
--------------------------------------------------------------------------------------------------------------------------------
SHOW_HIDDEN_COLS DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE
------------------------------------------------------------------------------------------------------------------------
1970-01-01 09:00:00 000:000:000 1 0 1 2015-04-29 17:23:56 248:263:000 3
1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011
[1] row(s) selected.SET FEEDBACK_APPEND_ERROR
alter_session_set_feedback_append_err_stmt:

alter_session_set_feedback_append_err_stmt ::= 'ALTER SESSION SET FEEDBACK_APPEND_ERROR' '=' ( '0' | '1' )세션에서 발생한 Append 에러 메시지를 클라이언트 프로그램으로 전달할지 여부를 설정합니다.
값은 다음과 같습니다.
- 0 = 에러 메시지를 보내지 않음
- 1 = 에러 메시지를 전송
아래는 사용 예시입니다.
mach> ALTER SESSION SET FEEDBACK_APPEND_ERROR=0;
Altered successfully.SET MAX_QPX_MEM
alter_session_set_max_qpx_mem_stmt:

alter_session_set_max_qpx_mem_stmt ::= 'ALTER SESSION SET MAX_QPX_MEM' '=' value세션에서 실행되는 단일 SQL이 GROUP BY, DISTINCT, ORDER BY 연산을 수행할 때 사용할 수 있는 최대 메모리를 지정합니다.
설정한 한도를 초과해 메모리를 할당하려고 하면 SQL 실행이 중단되고 오류로 처리됩니다.
오류 발생 시 쿼리를 포함한 오류 코드와 메시지가 machbase.trc에 기록됩니다.
Mach> ALTER SESSION SET MAX_QPX_MEM=1073741824;
Altered successfully.
Mach> SELECT * FROM v$session;
ID CLOSED USER_ID LOGIN_TIME CLIENT_TYPE
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
USER_NAME USER_IP SQL_LOGGING SHOW_HIDDEN_COLS
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FEEDBACK_APPEND_ERROR DEFAULT_DATE_FORMAT HASH_BUCKET_SIZE MAX_QPX_MEM RS_CACHE_ENABLE RS_CACHE_TIME_BOUND_MSEC
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
RS_CACHE_MAX_MEMORY_PER_QUERY RS_CACHE_MAX_RECORD_PER_QUERY RS_CACHE_APPROXIMATE_RESULT_ENABLE IDLE_TIMEOUT QUERY_TIMEOUT
-----------------------------------------------------------------------------------------------------------------------------------------------
14 0 1 2021-03-08 16:33:01 503:181:809 CLI
NULL 192.168.0.194 11 0
1 YYYY-MM-DD HH24:MI:SS mmm:uuu:nnn 20011 1073741824 1 1000
16777216 50000 0 0 0
[1] row(s) selected.
Elapsed time: 0.001- SQL 문이 최대 메모리를 초과했을 때의 trc 로그 예시
[2021-03-08 16:36:32 P-69000 T-140515328653056][INFO] DML FAILURE (2E10000084:Memory allocation error (alloc'd: 1048595, max: 1048576).)- SQL 문이 최대 메모리를 초과했을 때 machsql 에러 메시지 예시
Mach> select * from tag order by value DESC, time ASC;
NAME TIME VALUE
--------------------------------------------------------------------------------------
[ERR-00132: Memory allocation error (alloc'd: 1048595, max: 1048576).]
[0] row(s) selected.
Elapsed time: 0.447SET SESSION_IDLE_TIMEOUT_SEC
alter_session_set_session_idle_timeout_sec_stmt:

alter_session_set_session_idle_timeout_sec_stmt ::= 'ALTER SESSION SET SESSION_IDLE_TIMEOUT_SEC' '=' value세션이 유휴 상태일 때 연결을 유지할 최대 시간을 지정합니다. 초 단위로 설정하며, 지정한 시간이 지나면 해당 세션이 종료됩니다. 설정된 유휴 제한 시간은 V$SESSION에서 확인할 수 있습니다.
Mach> ALTER SESSION SET SESSION_IDLE_TIMEOUT_SEC=200;
Altered successfully.
Mach> SELECT IDLE_TIMEOUT FROM V$SESSION;
IDLE_TIMEOUT
-----------------------
200
[1] row(s) selected.SET QUERY_TIMEOUT
alter_session_set_query_timeout_stmt:

alter_session_set_query_timeout_stmt ::= 'ALTER SESSION SET QUERY_TIMEOUT' '=' value세션에서 쿼리를 실행할 때 서버 응답을 기다리는 최대 시간을 지정합니다. 초 단위로 설정하며, 지정한 시간을 초과하면 쿼리가 자동으로 중단됩니다. 세션에 설정된 QUERY_TIMEOUT 값은 V$SESSION에서 확인할 수 있습니다.
Mach> ALTER SESSION SET QUERY_TIMEOUT=200;
Altered successfully.
Mach> SELECT QUERY_TIMEOUT FROM V$SESSION;
QUERY_TIMEOUT
-----------------------
200
[1] row(s) selected.