오라클 테이블에서 응답을주지 않고 Java 애플리케이션에서 동일한 쿼리를 실행하는 데드락 상황을 만들고 싶습니까?이 상황을 테이블 (4 열 sno, 이름, 직업, 부서). 제 1 세션에서간단한 4 열 (sno, 이름, 직업, 부서)가있는 테이블에서 교착 상태를 교착 상태로 만드는 방법은 무엇입니까?
답변
:
세션 2이어서DECLARE
v_row1 TABLE_NAME%ROWTYPE;
v_row2 TABLE_NAME%ROWTYPE;
BEGIN
SELECT *
INTO v_row1
FROM table_name
WHERE sno = 1
FOR UPDATE;
DBMS_LOCK.SLEEP(seconds => 5);
SELECT *
INTO v_row2
FROM table_name
WHERE sno = 2
FOR UPDATE;
ROLLBACK;
END;
/
:
DECLARE
v_row1 TABLE_NAME%ROWTYPE;
v_row2 TABLE_NAME%ROWTYPE;
BEGIN
SELECT *
INTO v_row2
FROM table_name
WHERE sno = 2
FOR UPDATE;
DBMS_LOCK.SLEEP(seconds => 5);
SELECT *
INTO v_row1
FROM table_name
WHERE sno = 1
FOR UPDATE;
ROLLBACK;
END;
/
대답 해 주셔서 감사합니다.이 상황을 만들려고 노력 중입니다. 결과를 알고 있습니다. – user3442562
또 다른 방법은 세션 1의 행에 대한 업데이트를 수행 한 후 커밋하지 않고 시도하는 것입니다. 세션 2에서 동일한 행에 대한 업데이트를 수행합니다. 세션 1은 커밋 또는 롤백을 수행 할 때까지 중단됩니다. – MT0
둘 개 이상의 세션 모든 세션이되는 결과, 서로 잠 데이터 대기 때 교착 상태가 발생 막힌. 일반적으로 교착 상태는 응용 프로그램 코드에서 잘못 구현 된 잠금으로 인해 발생하거나 성능 문제로 인해 또는 DB에서 서로 다른 두 프로세스 처리 데이터 간의 충돌로 인해 발생합니다.
답장을 보내 주셔서 감사합니다.이 상황을 만들려고 노력 중입니다. 결과를 알 수 있습니다. – user3442562
* 교착 상태 * 또는 * 잠금 *을 의미합니까? 교착 상태는 특정 종류의 잠금이며 일을 멈추지는 않지만 신속하게 오류를 일으키고 프로세스 중 하나를 중단시킵니다. –
나는 세션에 교착 상태를 만들고 싶었다. – user3442562