반응형
테이블에 DML이 일어나면 lock이 발생되고 다른세션은 이전 DML이 종료될때까지 waiting이 발생합니다.
다른 세션의 작업이 DML이라면, 세션이 계속 대기중이면서 이전 세션이 종료됨과 동시에 수행이 될 것입니다.
하지만 다른 세션의 작업이 DDL이라면?
DDL은 바로 해당 에러를 보이면서 되지 않을 것입니다.
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
리소스가 사용중이니 에러를 뱉으며 명령어를 수행할 수 없다는 뜻입니다.
기존세션에서 있는 DML이 언제 끝날지 모르고 계속 대기해야 하거나, DML을 강제로 종료시키고 저의 DDL 작업을 수행해야 하는데, DML과 다르게 명령어 자체가 기다리지 못하고 바로 에러를 뱉고 종료되니 계속 DDL 명령어를 칠 수도 없는 노릇입니다.
그때 유용하게 사용할 수 있는 파라미터가 있습니다. 바로 ddl_lock_timeout입니다.
default는 0입니다만, 해당 파라미터에 값을 주게되면 ddl에 대해서 lock을 해당 값만큼 기다렸다가 에러를 뱉게 됩니다.
그 시간 내에 기존 작업이 종료된다면 바로 저의 DDL작업을 수행할 수 있는 것입니다.
해당명령어는 세션 level에서도 사용가능하므로, 세션 level에서 변경 후에 작업을 수행하면 좀더 편안하게 작업 할 수 있습니다.
alter session set ddl_lock_timeout = 60;
사용을 다한 후에는 원복필요 없이 세션을 종료만 해주면 됩니다.
반응형
'Oracle > 운영' 카테고리의 다른 글
[통계정보 export/import]다른 테이블에 통계정보 복사 (0) | 2023.12.14 |
---|---|
통계정보 restore 하기 (0) | 2023.10.05 |
테이블 컬럼삭제 Drop Column과 Unused (0) | 2023.07.19 |
[ACL,UTL_SMTP] 10g,11g 메일링 서비스 관련 이슈 (0) | 2023.06.16 |
큰 트랜잭션이 취소됐을때 확인 법과 대처법 (0) | 2023.05.19 |
댓글