programing

READ_의 차이점은 무엇입니까?Oracle 데이터베이스의 커밋되고 직렬화 가능한 격리 수준?

newsource 2023. 9. 17. 13:15

READ_의 차이점은 무엇입니까?Oracle 데이터베이스의 커밋되고 직렬화 가능한 격리 수준?

거래에 관한 서류를 몇 개 읽어보니, 지금 완전히 혼란스럽습니다.저의 시나리오를 먼저 설명하겠습니다.

저는 테이블에서 데이터(SELECT) 쿼리를 읽는 데 약 3분 정도 걸리는 일괄 읽기를 가지고 있습니다.그리고 동시에 다른 스레드가 INSERT/UPDATE/DEELETE를 수행하려고 합니다.데이터 소스의 기본 트랜잭션이 8(SERIALIBLE)이므로 트랜잭션을 획득할 수 없습니다.라는 오류가 발생했습니다.

INSERT/UPDATE/DEELETE를 실행하려면 트랜잭션을 READ_로 설정합니다.UNCOMITED(읽기/쓰기/범위)입니다.쓰기/범위).그러나 프로그램을 실행할 때 지원되는 트랜잭션은 READ_뿐이라는 오류가 발생했습니다.헌신적이고 직렬화 가능합니다.

자세히 조사해보니 오라클이 트랜잭션 격리형 스냅샷 격리를 도입하여 트랜잭션 중에 데이터베이스 스냅샷을 생성함으로써 반복 가능한 읽기 및 더티 읽기를 사실상 제거하고 일관된 데이터를 제공했습니다.

위 문에서 READ_의 트랜잭션 유형을 사용할 수 있습니다.그러나 위키백과는 아래와 같은 진술로 지금까지 제 이해를 완전히 혼란스럽게 했습니다.

Oracle[2][3][4] 및 Postgre에서는 스냅샷 분리를 "직렬화 가능" 모드라고 합니다."실제 직렬화 가능성" 모드와 혼동을 일으킬 수 있는 9.1 이전 SQL 버전,[5][6][7].이 결정에 대한 찬성과 반대 주장이 있습니다. 분명한 것은 사용자가 데이터베이스 시스템 로직에서 발생할 수 있는 바람직하지 않은 비정상적인 동작을 방지하기 위해 이러한 차이점을 인식해야 한다는 것입니다.

그럼 이제 제 질문은 다음과 같습니다.

  1. 직렬화 가능과 읽기의 차이점은 무엇입니까?Oracle 관점에서 헌신적으로?
  2. 스냅샷 분리가 수행되고 개의 서로 다른 트랜잭션 및 업데이트가 동일한 항목에 대해 Oracle이 오류를 발생시키나요?
  3. 제가 이해하는 데 있어 이탈되는 부분이 있다면 알려주세요.

1. COMITED 격리 수준 읽기:기본 레벨입니다.트랜잭션 내의 각 쿼리는 해당 쿼리가 시작되기 전에 커밋된 데이터만 볼 수 있습니다.따라서 동일한 쿼리를 동일한 트랜잭션에서 두 번 실행하면 다른 결과와 팬텀을 볼 수 있습니다.

직렬화 가능 격리 수준:트랜잭션 내의 각 쿼리는 해당 트랜잭션이 시작되기 전에 커밋된 데이터와 트랜잭션 자체에서 변경된 내용만 볼 수 있습니다.그래서 여기는 팬텀이 없습니다.

2.Oracle에서 스냅샷 분리는 serializable이라고 합니다.그러니까 똑같은 거죠.직렬화 가능 트랜잭션이 직렬화 가능 트랜잭션이 시작된 후 커밋하는 다른 트랜잭션에 의해 수정된 데이터를 업데이트하거나 삭제하려고 할 때 오류가 발생합니다.

사실 여기서 더 많은 정보를 찾을 수 있습니다.

언급URL : https://stackoverflow.com/questions/27227898/whats-the-difference-between-read-committed-and-serializable-isolation-levels-i