>  기사  >  데이터 베이스  >  Oracle이 테이블을 잠그는 이유는 무엇입니까?

Oracle이 테이블을 잠그는 이유는 무엇입니까?

WBOY
WBOY원래의
2022-02-17 17:49:5314541검색

오라클에서 테이블을 잠그는 이유는 프로그램이 테이블에 삽입을 수행하고 아직 커밋되지 않은 경우 다른 프로그램도 동일한 테이블에 삽입을 수행하면 리소스 사용 예외가 발생하기 때문입니다. , 테이블 잠금.

Oracle이 테이블을 잠그는 이유는 무엇입니까?

이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.

Oracle이 테이블을 잠그는 이유는 무엇입니까?

테이블을 잠그는 주요 이유는 다음과 같습니다.

(1) 프로그램 A는 tableA의 삽입을 실행하고, 프로그램 B도 커밋 ​​전에 tableA를 삽입합니다. 이번에 리소스가 바쁠 때 예외는 Lock 테이블입니다

(2) Lock 테이블은 병렬성보다는 동시성으로 자주 발생합니다. (병렬에서는 한 스레드가 데이터베이스를 운영하면 다른 스레드는 데이터베이스, CPU 및 I/O 할당을 운영할 수 없습니다.) 원칙)

테이블 잠금 확률을 줄이는 방법:

(1) insert, update, delete 문 실행과 커밋 사이의 시간을 줄입니다. 구체적으로 일괄 실행을 단일 실행으로 변경하여 SQL 자체의 비실행 속도를 최적화합니다

(2) 트랜잭션이 비정상적으로 롤백되는 경우

테이블을 잠그는 이유는 행 데이터가 수정되어 행 데이터를 제출하는 것을 잊었으며 이로 인해 테이블도 잠기게 됩니다.

1. 결정하기 전에 시계를 잠그는 이유를 확인하는 것이 좋습니다.

1 테이블 잠금 쿼리의 코드 형식은 다음과 같습니다.

select count(*) from v$locked_object;
select * from v$locked_object;

2. 어떤 테이블이 잠겼는지 확인하세요

select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;

3 어떤 세션이 잠겼는지 확인하세요

select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;

4 어떤 SQL이 잠겼는지 확인하세요

select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid
and b.SQL_ID = c.sql_id and c.sql_id = ''
order by b.logon_time;

5. Kill Drop 해당 프로세스

명령 실행: alter system kill session'1025,41';

여기서 1025는 sid이고 41은 serial#입니다.

2 Oracle 사용자가 로그인할 때 자주 잠기는 이유

. , 메시지가 표시됩니다. Lock

1. 잠금을 해제하려면 dba 역할을 가진 사용자로 로그인하세요. 먼저 특정 시간 형식을 설정하여 변경된 특정 시간

SQL> alter session set nls_date_format=‘yyyy-mm-dd hh24:mi:ss’;

Session을 확인하세요.

2. time

SQL> select username,lock_date from dba_users where username='TEST';
USERNAME LOCK_DATE
------------------------------ -------------------
TEST 2021-03-10 08:51:03

3. Unlock

SQL> alter user test account unlock;

사용자가 변경되었습니다.

추천 튜토리얼: "Oracle Video Tutorial"

위 내용은 Oracle이 테이블을 잠그는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.