programing

ORA-00054: 리소스 사용량이 많고 NOWAIT가 지정된 상태에서 획득

mailnote 2023. 7. 20. 22:05
반응형

ORA-00054: 리소스 사용량이 많고 NOWAIT가 지정된 상태에서 획득

테이블을 업데이트하는 중인 스크립트를 죽였습니다.이제 내가 받는 대본을 다시 실행하면,

ORA-00054: 리소스 사용량이 많고 NOWAIT가 지정된 상태에서 획득

테이블이 잠겨 있는 것 같은데요?테이블 잠금을 해제하려면 어떻게 해야 합니까?

1단계:

select object_name, s.sid, s.serial#, p.spid 
from v$locked_object l, dba_objects o, v$session s, v$process p
where l.object_id = o.object_id and l.session_id = s.sid and s.paddr = p.addr;

2단계:

alter system kill session 'sid,serial#'; --`sid` and `serial#` get from step 1

더 많은 정보: http://www.oracle-base.com/articles/misc/killing-oracle-sessions.php

사용자 'user712934'에 대한 정보 감사합니다.

또한 sql, 사용자 이름, 시스템, 포트 정보를 검색하고 연결을 유지하는 실제 프로세스에 액세스할 수 있습니다.

SELECT O.OBJECT_NAME, S.SID, S.SERIAL#, P.SPID, S.PROGRAM,S.USERNAME,
S.MACHINE,S.PORT , S.LOGON_TIME,SQ.SQL_FULLTEXT 
FROM V$LOCKED_OBJECT L, DBA_OBJECTS O, V$SESSION S, 
V$PROCESS P, V$SQL SQ 
WHERE L.OBJECT_ID = O.OBJECT_ID 
AND L.SESSION_ID = S.SID AND S.PADDR = P.ADDR 
AND S.SQL_ADDRESS = SQ.ADDRESS;

기다리셔야 합니다.살해된 세션은 거래 중이었고 많은 기록을 업데이트했습니다.이 기록들은 롤백되어야 하며 일부 백그라운드 프로세스가 이를 처리하고 있습니다.그동안 터치한 레코드는 수정할 수 없습니다.

세션을 종료하면 Oracle이 세션을 정리하는 동안 세션이 "KILD" 상태로 잠시 유지됩니다.

꼭 필요하다면 OS 프로세스도 죽일 수 있습니다(검색).v$process.spid), 이렇게 하면 고정되어 있던 잠금이 해제됩니다.

자세한 내용은 이 항목을 참조하십시오.

상황에 따라 테이블이 잠겨 있는 것은 정상적인 작업의 일부일 수 있으며 차단 트랜잭션을 종료하지 않으려는 것입니다.다른 리소스를 위해 문을 대기시킵니다.Oracle 11g에는 이 문제를 처리하도록 설정할 수 있는 DDL 시간 초과가 있습니다.

만약 당신이 10g를 다루고 있다면, 당신은 더 창의적이어야 하고 재시도를 처리하기 위해 PL/SQL을 작성해야 합니다.Oracle 10g에서 Getting around ORA-00054 보기 resource_busy 예외가 발생할 때 문을 다시 실행합니다.

언급URL : https://stackoverflow.com/questions/3075738/ora-00054-resource-busy-and-acquire-with-nowait-specified

반응형