데이터베이스 - 시계 가 잠 겨 죽 었 습 니 다.

1248 단어 데이터 구조
증상: 시스템 페이지 에서 수정 할 때 제출 을 누 르 면 반응 이 없습니다. 프로그램 에서 debug 를 사용 할 때 f8 을 사용 하여 sql 문 구 를 보 내 는 곳 에서 정지점 이 사라 지지 만 프로그램 이 끝나 지 않 았 습 니 다.코드 를 자세히 검사 한 결과 코드 작성 에 문제 가 없 음 을 발견 하고 mapper 의 update 문 구 를 데이터베이스 에 넣 어 실행 합 니 다.문 구 는 계속 실행 중인 상태 일 것 이다.
원인: 시계 가 잠 겨 죽 었 습 니 다.
시계 가 잠 겨 죽은 원인:
1. insert, update, delete 를 실행 하 는 프로그램 이 실행 되 지 않 았 을 때 프로그램 을 강제로 종료 합 니 다.이 때 데이터 베 이 스 를 commt 하지 않 았 습 니 다. 그 다음 에 insert, update, delete 를 진행 할 때 sql 이 계속 실행 되 고 있 는 상태 가 나타 납 니 다. 이 때 자원 이 바 쁜 이상 이 발생 할 수 있 습 니 다. 바로 잠 금 표 입 니 다.
2. 잠 금 시 계 는 병행 이 아니 라 병행 에서 발생 한다.병렬: 하나의 스 레 드 가 데이터 베 이 스 를 조작 할 때 다른 스 레 드 는 데이터 베 이 스 를 조작 할 수 없습니다.
잠 금 표 의 원리: 데이터 베 이 스 는 독점 적 인 봉쇄 체 제 를 사용 하여 위의 문 구 를 실행 할 때 시 계 를 잠 그 고 commt 또는 스크롤 백 이 발생 하거나 데이터 베 이 스 를 종료 하 는 것 을 알 고 있 습 니 다.
해결 방안: 잠 금 테이블 프로 세 스 죽 이기
다음 문 구 를 통 해 잠 금 표 의 프로 세 스 를 조회 한 결과, 확실히 update 의 표 가 잠 겨 있 는 것 을 발견 하 였 습 니 다.
select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo,
dba_objects ao,
v$session sess
where ao.object_id = lo.object_id and lo.session_id = sess.sid;

잠 금 테이블 프로 세 스 죽 이기:
alter system kill session 'sid,serial#';

좋은 웹페이지 즐겨찾기