Table of Contents
개요
...
SQL 실행 도중 다음과 같이 오류가 나서 원하는 작업을 못할 때가 있습니다.
...
$ altierr -w "lock timeout"
0x11075 ( 69749) smERR_ABORT_smcExceedLockTimeWait The transaction exceeds lock timeout specified by user.
# *Cause: The transaction failed to lock the object.
# *Action: Please abort the transaction.
버전
...
ALTIBASE HDB 4 이상
발생원인
...
SQL 실행 도중 다음과 같이 오류가 나서 원하는 작업을 못할 때가 있습니다
위의 오류코드 내용과 같이 해당 객체 - 테이블이나 뷰, 저장 프로시져 등 - 에 대해 lock을 잡을 수가 없다는 오류입니다.
테이블에 접근하는 모든 세션은 해당 테이블에 LOCK을 잡고 접근하게 됩니다.
즉 그 테이블에 SELECT/INSERT/UPDATE 등의 DML을 수행하거나 ALTER TABLE 등의 DDL을 수행하는 등의
작업을 누군가 하고 있을 때 DROP TABLE을 수행하면 이전 작업이 commit/rollback할 때 까지 기다리게 됩니다.
이 경우, 사용자가 없는지 확인하고 이전 작업이 commit할 때가지 기다리거나, 세션을 강제로 끊을 수 있습니다.
아래 예와(조치방법) 같이 alter database 문을 사용하면 세션을 강제로 끊을 수 있습니다.
조치방법
...
* lock 정보 확인
Code Block |
---|
select T.table_name, X.lock_desc from system_.sys_tables_ T, v$lock X where T.table_oid = X.table_oid and T.table_name = 'T1'; //T1 테이블 LOCK 정보 확인 |
...
Code Block |
---|
$ isql -sysdba -u sys -p manager iSQL(sysdba)> alter database mydb session close 159; alter database mydb session close 160; alter database mydb session close 161; alter database mydb session close 162; -- 위의 SQL 결과를 copy/paste 해서 실행합니다. |
참고
...
alter database 명령어로 session을 종료해도 해당 세션외의 다른 부분에는 영향을 미치지 않습니다.
...