Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

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 : CUBRID 서비스 및 데이터베이스 관리를 위한 통합 유틸리티이다.
  • killtran : 지정된 데이터베이스에 대해 트랜잭션을 관리하는 명령어이다.
  • options : 옵션에 따라 특정 트랜잭션을 지정하여 제거하거나, 현재 활성화된 트랜잭션을 화면 출력할 수 있다. 옵션이 지정되지 않으면, -d 옵션이 기본으로 적용되어 모든 트랜잭션을 화면 출력한다. -p 옵션 뒤에 오는 값은 DBA의 암호이며 생략하면 프롬프트에서 입력해야 한다.
  • database_name : 대상 데이터베이스의 이름이다.
옵션

모든 트랜잭션의 정보 출력(옵션 생략)

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 : 트랜잭션 인덱스
  • Process id : 클라이언트 프로세스 ID
  • Program name : 클라이언트 프로그램 이름
  • Query time : 수행중인 질의의 총 수행 시간(단위: 초)
  • Tran time : 현재 트랜잭션의 총 수행 시간(단위: 초)
  • Wait for lock holder : 현재 트랜잭션이 락 대기중이면 해당 락을 소유하고 있는 트랜잭션의 리스트
  • SQL Text : 수행중인 질의문(최대 30자)

위와 같이 트랜잭션 전체 정보가 출력된 후, 잠금 대기를 유발한 질의문이 다음과 같이 출력된다.

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