동시성 문제

여러 사용자가 관계형 데이터베이스의 데이터에 액세스하고 변경하므로 데이터베이스 관리자는 사용자가 데이터 무결성이 보존되는지 확인하는 동안 이러한 변경을 수행할 수 있도록 허용해야 합니다.

동시성은 여러 대화식 사용자 또는 애플리케이션 프로그램이 동시에 자원을 공유함을 나타냅니다. 데이터베이스 관리자는 이 액세스를 제어하여 다음과 같이 바람직하지 못한 영향을 방지합니다.
  • 갱신사항 유실. 두 개의 애플리케이션 A와 B가 모두 동일한 행을 읽고 이러한 애플리케이션이 읽은 데이터에 따라 컬럼 중 하나의 새 값을 계산할 수 있습니다. A가 행을 갱신한 후 B도 이 행을 갱신한 경우 A의 갱신이 유실됩니다.
  • 커미트되지 않은 데이터에 대한 액세스. A 애플리케이션이 값을 갱신하고 이 값이 커미트되기 전에 B가 읽을 수 있습니다. 그런 다음 A가 이 갱신을 백아웃하면 B가 수행하는 계산은 유효하지 않은 데이터에 기초할 수 있습니다.
  • 반복 불가능한 읽기. A 애플리케이션은 다른 요청을 처리하기 전에 행을 읽을 수 있습니다. 그동안 B는 행을 수정하거나 삭제하고 변경사항을 커미트합니다. 나중에 A가 원래의 행을 다시 읽으려고 시도하면 수정된 행을 보거나 원래의 행이 삭제되었음을 발견합니다.
  • 팬텀 읽기. A 애플리케이션은 일부 검색 기준에 따라 행 세트를 읽는 쿼리를 실행할 수 있습니다. B 애플리케이션은 새 데이터를 삽입하거나 A 애플리케이션의 쿼리를 충족시키는 기존 데이터를 갱신합니다. A 애플리케이션은 동일한 작업 단위(UOW)에서 쿼리를 다시 실행하고 일부 추가(팬텀) 값이 리턴됩니다.

전역 임시 테이블은 해당 테이블을 선언하거나 작성한 애플리케이션만 사용할 수 있으므로 이 경우 동시성은 문제가 되지 않습니다.

페더레이티드 데이터베이스 시스템에서 동시처리 제어

페더레이티드 데이터베이스 시스템은 단일 명령문에 두 개 이상의 데이터베이스 관리 시스템(DMBS)을 참조하는 SQL문을 제출하여 애플리케이션 및 사용자를 지원합니다. 이러한 데이터 소스 (각각 DBMS및 데이터로 구성됨) 를 참조하기 위해 Db2® 서버는 별칭을 사용합니다. 별칭은 다른 DBMS에 있는 오브젝트의 별명입니다. 페더레이티드 시스템에서 DB2 서버는 요청된 데이터를 호스트하는 데이터베이스 관리자의 동시처리 제어 프로토콜에 의존합니다.

DB2 페더레이티드 시스템은 데이터베이스 오브젝트에 위치 투명성을 제공합니다. 예를 들어, 테이블 및 뷰에 대한 정보가 이동되는 경우 해당 정보에 대한 참조(별칭 이용)는 이 정보를 요청하는 애플리케이션을 변경하지 않고 갱신할 수 있습니다. 애플리케이션이 별칭을 통해 데이터에 액세스하는 경우 DB2 서버는 데이터 소스의 동시처리 제어 프로토콜에 의존하여 격리 레벨이 시행되었는지 확인합니다. DB2 서버는 데이터 소스에서 요청된 격리 레벨을 논리적으로 동등한 것과 일치시키려고 시도하지만 결과는 데이터 소스 기능에 따라 다를 수 있습니다.