Versions available for this page: CUBRID 8.2.1 | CUBRID 8.3.0 | CUBRID 8.3.1 | CUBRID 8.4.0 | CUBRID 8.4.1 | CUBRID 8.4.3 | CUBRID 9.0.0 |
cubrid killtran은 대상 데이터베이스의 트랜잭션을 확인하거나 특정 트랜잭션을 강제 종료하는 유틸리티로서, DBA 사용자만 수행할 수 있다.
cubrid killtran options database_name
options :
[{-i|--kill-transaction-index=}index] [--kill-user-name=id] [--kill-host-name=host] [--kill-program-name=program_name]
[{-p|--dba-password=}password]
[-d|--display-information]
[-q|--query-exec-info]
[-f|--force]
모든 트랜잭션의 정보 출력(옵션 생략)
cubrid killtran testdb
Tran index User name Host name Process id Program name
-------------------------------------------------------------------------------
1(+) dba myhost 664 cub_cas
2(+) dba myhost 6700 csql
3(+) dba myhost 2188 cub_cas
4(+) dba myhost 696 csql
5(+) public myhost 6944 csql
-------------------------------------------------------------------------------
지정한 인덱스에 해당하는 트랜잭션 제거(-i 또는 --kill-transation-index)
cubrid killtran -i 1 testdb
Ready to kill the following transactions:
Tran index User name Host name Process id Program name
-------------------------------------------------------------------------------
1(+) dba myhost 4760 csql
-------------------------------------------------------------------------------
Do you wish to proceed ? (Y/N)y
Killing transaction associated with transaction index 1
모든 트랜잭션의 정보 출력(-d 또는 --display)
cubrid killtran -d testdb
Tran index User name Host name Process id Program name
-------------------------------------------------------------------------------
2(+) dba myhost 6700 csql
3(+) dba myhost 2188 cub_cas
4(+) dba myhost 696 csql
5(+) public myhost 6944 csql
-------------------------------------------------------------------------------
지정한 OS 사용자 ID에 해당하는 트랜잭션 제거(--kill-user-name)
cubrid killtran --kill-user-name=os_user_id testdb
지정한 클라이언트 호스트의 트랜잭션 제거(--kill- host-name)
cubrid killtran --kill-host-name=myhost testdb
지정한 프로그램에 해당하는 트랜잭션 제거(--kill-program-name)
cubrid killtran --kill-program-name=cub_cas testdb
트랜잭션의 질의 수행 상태 출력(-q 또는 --query-exec-info)
트랜잭션의 질의 수행 상태를 출력한다. 상태 정보를 출력하는 예는 다음과 같다.
cubrid killtran --query-exec-info testdb
Tran index Process id Program name Query time Tran time Wait for lock holder SQL Text
---------------------------------------------------------------------------------------------
1(+) 8536 b1_cub_cas_1 0.00 0.00 -1 *** empty ***
2(+) 8538 b1_cub_cas_3 0.00 0.00 -1 *** empty ***
3(+) 8537 b1_cub_cas_2 0.00 0.00 -1 *** empty ***
4(+) 8543 b1_cub_cas_4 1.80 1.80 3, 2, 1 update [ta] [ta] set [a]=5 wher
5(+) 8264 b1_cub_cas_5 0.00 0.60 -1 *** empty ***
6(+) 8307 b1_cub_cas_6 0.00 0.00 -1 select [a].[index_name], ( cast
7(+) 8308 b1_cub_cas_7 0.00 0.20 -1 select [a].[index_name], ( cast
.....
---------------------------------------------------------------------------------------------
위와 같이 트랜잭션 전체 정보가 출력된 후, 잠금 대기를 유발한 질의문이 다음과 같이 출력된다.
Tran index : 4
update [ta] [ta] set [a]=5 where (([ta].[a]> ?:0 ))
Tran index : 5, 6, 7
select [a].[index_name], ( cast(case when [a].[is_unique]=0 then 'NO' else 'YES' end as varchar(3))), ( cast(case when [a].[is_reverse]=0 then 'NO' else 'YES' end as varchar(3))), [a].[class_of].[class_name], [a].[key_count], ( cast(case when [a].[is_primary_key]=0 then 'NO' else 'YES' end as varchar(3))), ( cast(case when [a].[is_foreign_key]=0 then 'NO' else 'YES' end as varchar(3))), [b].[index_name], ( cast(case when [b].[is_unique]=0 then 'NO' else 'YES' end as varchar(3))), ( cast(case when [b].[is_reverse]=0 then 'NO' else 'YES' end as varchar(3))), [b].[class_of].[class_name], [b].[key_count], ( cast(case when [b].[is_primary_key]=0 then 'NO' else 'YES' end as varchar(3))), ( cast(case when [b].[is_foreign_key]=0 then 'NO' else 'YES' end as varchar(3))) from [_db_index] [a], [_db_index] [b] where (( CURRENT_USER ='DBA' or {[a].[class_of].[owner].[name]} subseteq (select set{ CURRENT_USER }+coalesce(sum(set{[t].[g].[name]}), set{}) from [db_user] [u], table([u].[groups]) [t] ([g]) where ([u].[name]= CURRENT_USER )) or {[a].[class_of]} subseteq (select sum(set{[au].[class_of]}) from [_db_auth] [au] where ({[name]} subseteq (select set{ CURRENT_USER }+coalesce(sum(set{[t].[g].[name]}), set{}) from [db_user] [u], table([u].[groups]) [t] ([g]) where ([u].[name]= CURRENT_USER )) and [au].[auth_type]= ?:0 ))) and ( CURRENT_USER ='DBA' or {[b].[class_of].[owner].[name]} subseteq (select set{ CURRENT_USER }+coalesce(sum(set{[t].[g].[name]}), set{}) from [db_user] [u], table([u].[groups]) [t] ([g]) where ([u].[name]= CURRENT_USER )) or {[b].[class_of]} subseteq (select sum(set{[au].[class_of]}) from [_db_auth] [au] where ({[name]} subseteq (select set{ CURRENT_USER }+coalesce(sum(set{[t].[g].[name]}), set{}) from [db_user] [u], table([u].[groups]) [t] ([g]) where ([u].[name]= CURRENT_USER )) and [au].[auth_type]= ?:1 ))))
화면에 출력되는 질의문은 질의 계획 캐시에 저장되어 있는 것으로, 응용 프로그램에서 수행되는 INSERT 문이나 질의 계획이 캐시되지 않는 질의문은 출력되지 않는다. 또한 출력 형태도 질의 파싱이 완료된 후의 질의문이 출력되므로, 사용자가 입력한 질의문과는 다른 형태일 수 있다.
예를 들어 사용자가 아래와 같은 질의문을 수행하면
UPDATE ta SET a=5 WHERE a > 0
출력되는 질의문은 다음과 같다.
update [ta] [ta] set [a]=5 where (([ta].[a]> ?:0 ))
중지할 트랜잭션을 확인하는 프롬프트 생략(-f 또는 --force)
cubrid killtran -f -i 1 testdb