MSSQL 과 Oracle 데이터베이스 트 랜 잭 션 격 리 단계 와 잠 금 메커니즘 비교

1.업무 의 네 가지 기본 특징
Atomic(원자 성):
트 랜 잭 션 에 포 함 된 작업 은 논리 단위 로 간주 되 며,이 논리 단위 의 작업 은
모두 성공 하든지,아니면 모두 실패 하든지.
일관성(일치 성):
합 법 적 인 데이터 만 데이터베이스 에 기록 할 수 있 습 니 다.그렇지 않 으 면 사 무 를 초기 단계 로 되 돌려 야 합 니 다.
상태
Isolation(격 리 성):
트 랜 잭 션 은 여러 사용자 가 같은 데이터 에 동시 접근 할 수 있 도록 해 주 며,데이터 의 정 을 파괴 하지 않 습 니 다.
확실성 과 완전 성.또한,병렬 트 랜 잭 션 의 수정 은 다른 병렬 트 랜 잭 션 과 의 수정 이 필요 합 니 다.
서로 독립 하 다.
내구성(지속 성):
업무 가 끝 난 후,업무 처리 의 결 과 는 반드시 경화 되 어야 한다.
이상 은 쓸데없는 말 에 속한다
둘째,왜 업무 에 대한 병행 통제 가 필요 합 니까?
만약 업무 에 대해 병행 통 제 를 하지 않 는 다 면,우 리 는 데이터 베 이 스 를 보고 동시에 조작 하 는 것 이 그러한 이상 한 상황 이 있 을 것 이다.
Lost update:
두 사 무 는 한 줄 의 데 이 터 를 동시에 업데이트 하지만 두 번 째 사 무 는 중간 에 실 패 했 습 니 다.
데이터 에 대한 두 가지 수정 이 모두 효력 을 잃 었 다.
Dirty Reads:
한 줄 의 데 이 터 를 읽 기 시 작 했 지만 다른 사 무 는 이 수 를 업데이트 하 였 습 니 다.
제때에 제출 하지 못 했 습 니 다.모든 조작 이 가능 하기 때문에 이것 은 상당히 위험 하 다.
다 꺼 져.
Non-repeatable Reads:
같은 줄 의 데 이 터 를 두 번 반복 해서 읽 었 지만 다른 결 과 를 얻 었 습 니 다.
Second lost updates problem:
중복 읽 을 수 없 는 특례 입 니 다.같은 줄 의 데 이 터 를 동시에 읽 는 두 개의 병행 업무 가 있 습 니 다.
하 나 는 수정 제출 을 했 고 다른 하 나 는 수정 제출 을 했다.이것 은
첫 번 째 쓰기 동작 이 실 효 됩 니 다.
Phantom Reads:
사 무 는 조작 과정 에서 두 번 의 조 회 를 하고 두 번 째 조회 결 과 는 첫 번 째 조 사 를 포함한다.
질문 에 나타 나 지 않 은 데이터(두 번 조회 한 SQL 문 구 는 같 지 않 습 니 다).이것 은
두 번 의 조회 과정 에서 다른 사무 가 데 이 터 를 삽입 해서 생 긴 것 이다.
3.데이터베이스 의 격 리 단계
병렬 효율 과 이상 통 제 를 병행 하기 위해 표준 SQL 규범 에서 4 개의 사무 격 리 를 정의 했다.
단계 에서 벗 어 나(ORACLE 와 SQLSERER 는 표준 격 리 단계 에 대해 서로 다른 실현 이 있 음)
Read Uncommitted:
직역 은'읽 기 미 제출'입 니 다.업데이트 문 구 를 제출 하지 않 았 더 라 도 다른 것 을 의미 합 니 다.
이 변 화 를 읽 을 수 있 습 니 다.안전 하지 않 습 니 다.
Read Committed:
직역 은'읽 기 제출'이다.즉,문 구 를 제출 한 후에 바로 COMMIT 를 실행 한 후에
다른 일 은 이 변 화 를 읽 을 수 있다.
Repeatable Read:
직역 은 바로'중복 읽 을 수 있다'는 것 이다.이것 은 같은 업무 에서 선후 로 같은 것 을 집행 한 다 는 것 이다.
문 구 를 조회 할 때 얻 은 결 과 는 같다.
Serializable:
직역 은'직렬 화'로 이 사 무 를 수행 할 때 다른 사 무 를 허용 하지 않 는 다 는 뜻 이다.
동시 집행.
4.격 리 단계 의 병발 에 대한 통제
다음 표 는 각 격 리 단계 에서 각종 이상 에 대한 통제 능력 이다.
LU DR NRR SLU PR
RU Y Y Y Y Y
RC N N Y Y Y
RR N N N N Y
S N N N N N
(비고:LU:업데이트 분실;DR:더러 운 읽 기;NRR:반복 읽 지 않 음;SLU:두 가지 업데이트 분실;PR:환상 읽 기)
겸사겸사 작은 예 를 들다.
MS_SQL:

--   
set transaction isolation level serializable
begin tran
insert into test values('xxx')

--   
set transaction isolation level read committed
begin tran
select * from test

--   
set transaction isolation level read uncommitted
begin tran
select * from test

조회 분석 기 에서 업 무 를 수행 한 후 각각 업무 2,3 을 수행 합 니 다.결 과 는 사무 2 회 가 기다 리 고,사 무 는 3 회 가 집행 한다.
ORACLE:

--   
set transaction isolation level serializable;
insert into test values('xxx');
select * from test;

--   
set transaction isolation level read committed--ORACLE    
select * from test

사 무 를 집행 한 후,사 무 를 집행 하 다.결 과 는 트 랜 잭 션 두 마리 가 기 존의 데 이 터 를 읽 고 트 랜 잭 션 1 의 삽입 작업 을 무시 하 는 것 이다.
독자 발견 MSSQL 과 ORACLE 는 병행 제어 에 대한 처리 가 다 릅 니까?
자물쇠
다음 표 는 자물쇠 의 호환성 이나 충돌 상황 입 니 다.
기 존 S U X
청구 하 다.
S Y Y N
U Y N N
X N N N
현존 하 다 S U X
신청 하 다.    
S  Y Y N
U  Y N N
X  N N N
oracle:
 
여섯,조심 하 세 요.
 
일반적인 병발 문 제 를 처리 할 때의 절차:
1.트 랜 잭 션 을 시작 합 니 다.
2.쓰기 권한 을 신청 하 는 것,즉 대상(표 또는 기록)에 자 물 쇠 를 채 우 는 것 입 니 다.
3.실패 하면 일 을 끝내 고 잠시 후에 다시 시도 합 니 다.
4.성공 하면 대상 에 게 자 물 쇠 를 채 우 는 데 성공 하고 다른 사용자 가 똑 같은 방식 으로 열 리 지 않도록 하 는 것 입 니 다.
5.편집 작업 을 진행한다.
6.편집 결 과 를 기록 합 니 다.
7.기록 에 성공 하면 업 무 를 제출 하고 작업 을 완성 합 니 다.
8.기록 에 실패 하면 스크롤 백 을 하고 제출 을 취소 합 니 다.
9.(7.8)두 단계 작업 은 잠 겨 있 는 대상 을 풀 어 주 고 작업 전의 상태 로 회복 했다.
 
다 중 표 의 조작 은 함께 자 물 쇠 를 얻 거나 처리 순 서 를 확보 하 는 것 이 좋 습 니 다.개인 적 으로 는 전자 가 좋 은 것 같 아 요.효율 은 낮 지만.
첨부 하 다
자물쇠 보기
ORACLE:

select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status
from v$locked_object l, all_objects a
where l.object_id=a.object_id;
MS_SQL:

EXEC SP_LOCK

좋은 웹페이지 즐겨찾기