KR20080106431A - 기업 자원 계획 시스템 내에서의 동시성 제어 방법, 컴퓨터판독가능 매체 및 컴퓨터 - Google Patents

기업 자원 계획 시스템 내에서의 동시성 제어 방법, 컴퓨터판독가능 매체 및 컴퓨터 Download PDF

Info

Publication number
KR20080106431A
KR20080106431A KR1020087022484A KR20087022484A KR20080106431A KR 20080106431 A KR20080106431 A KR 20080106431A KR 1020087022484 A KR1020087022484 A KR 1020087022484A KR 20087022484 A KR20087022484 A KR 20087022484A KR 20080106431 A KR20080106431 A KR 20080106431A
Authority
KR
South Korea
Prior art keywords
data
version
update
row
exception
Prior art date
Application number
KR1020087022484A
Other languages
English (en)
Inventor
제프리 디. 리체이
스리칸스 알. 아바드하남
종화 추
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20080106431A publication Critical patent/KR20080106431A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • G06F16/2329Optimistic concurrency control using versioning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/10Office automation; Time management
    • GPHYSICS
    • G07CHECKING-DEVICES
    • G07CTIME OR ATTENDANCE REGISTERS; REGISTERING OR INDICATING THE WORKING OF MACHINES; GENERATING RANDOM NUMBERS; VOTING OR LOTTERY APPARATUS; ARRANGEMENTS, SYSTEMS OR APPARATUS FOR CHECKING NOT PROVIDED FOR ELSEWHERE
    • G07C15/00Generating random numbers; Lottery apparatus
    • G07C15/005Generating random numbers; Lottery apparatus with dispensing of lottery tickets

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Business, Economics & Management (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Human Resources & Organizations (AREA)
  • Strategic Management (AREA)
  • Operations Research (AREA)
  • General Business, Economics & Management (AREA)
  • Tourism & Hospitality (AREA)
  • Quality & Reliability (AREA)
  • Marketing (AREA)
  • Economics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

동일한 데이터를 수반하는 다수의 데이터 트랜잭션 사이의 동시성 제어는 데이터 트랜잭션의 판독 요청 동안 및 기입 요청 동안의 데이터 버전들을 고유하게 식별하는 버전 ID들을 비교하는 것을 포함한다. 버전 ID들이 일치하지 않으면, 예외가 발생되고, 예외는 데이터 트랜잭션 내에서 처리된다.
동시성 제어, 데이터 트랜잭션, 버전 ID, 예외, 캐치 블록, 트라이 블록

Description

기업 자원 계획 시스템 내에서의 동시성 제어 방법, 컴퓨터 판독가능 매체 및 컴퓨터{CONCURRENCY CONTROL WITHIN AN ENTERPRISE RESOURCE PLANNING SYSTEM}
다수의 사용자가 공유 개체, 데이터 기록 등에 동시에 액세스할 수 있게 하는 시스템 내에서의 동시성 제어는 공유 데이터 항목을 관리하는 임의의 서버 기반 제품의 중요한 특징이다. 특히, 기업 자원 계획 시스템에서, 데이터 트랜잭션이 오래 지속되는 사용자들 사이에 비직렬화 협력을 지원할 필요가 종종 있다.
일반적으로, 비관적 동시성 제어는 판독 동작을 위한 다른 사용을 막지 못한다. 예를 들어, 반복가능한 판독은 갱신되지 않는 판독 행(들)이 데이터 트랜잭션의 기간 동안에 반드시 갱신되게 한다. 그러나, 판독 행을 갱신하려고 하는 판독 동작에서, 비관적 동시성 제어는 데이터 트랜잭션의 기간 동안에 데이터 항목 상에 배타적 잠금 또는 갱신 잠금을 설치함으로써, 다른 사용자들이 갱신하려는 데이터 항목을 판독하지 못하게 한다. 결과적으로, 다른 사용자들은 갱신하려는 데이터 항목을 판독하기 전에 잠금이 해제되기를 기다려야 하는데, 이것은 시스템의 동시성과 확장성에 영향을 준다. 몇몇 경우에, 잠금의 범위는 판독 또는 갱신되는 데이터 항목을 포함하는 단 하나의 행보다는 오히려, 전체 데이터베이스, 데이터베이스 내의 전체 테이블, 또는 테이블 내의 몇몇 행들에 적용된다. 결과적으로, 잠금의 범위는 다수의 동시 사용자가 상이한 행 및/또는 테이블 내의 데이터 항목을 판 독하거나 갱신하지 못하게 한다. 더욱이, 균형 트리 데이터 구조 내에서, SQL 쿼리와 같은 쿼리는 정확한 위치에서 스캔을 시작할 수 없다. 쿼리 실행의 일부로서, 행은 스캔되고, 필터는 쿼리의 평가 동안에 적용된다. 결과적으로, 동시 판독기들은 그들의 최종 쿼리 결과가 서로 교차되지 않을 때조차 서로가 데이터 항목을 판독하지 못하게 한다. 애플리케이션이 행을 선택하고, 선택한 행을 필터 기준에 기초하여 폐기하기 위해 필터를 적용할 수 있지만, 선택된 행에 얻어진 잠금은 데이터 트랜잭션 기간 동안에 계속 존재한다. 그러므로, 동시 작업들은 쿼리의 결과 생긴 최종 집합 내에 교차가 없을 때조차, 공유 테이블을 수반하는 오래 지속되는 데이터 트랜잭션 동안에 직렬화될 수 있다.
낙관적 동시 제어는 다른 사용자들이 데이터 항목을 판독, 갱신 및 삭제하는 것을 못하게 하지 않으면서 한 사용자가 데이터 항목을 판독, 갱신 및 삭제할 수 있게 한다. 낙관적 동시 제어는 한 기입 동작 동안에 동일한 데이터 항목을 갱신하거나 삭제할 가능성은 작고, 판독 동작들은 제한되지 않는다고 가정한다. 그러나, 다수의 데이터 트랜잭션이 기입 동작 동안에 동일한 데이터 항목을 갱신하고 있는 경우에, 갱신은 무효로 될 수 있고, 마지막 갱신만이 동시 사용자들 사이에 유지됨으로써, 데이터 불일치를 야기한다. 즉, 제1 사용자는 최초에 검색된 값에 기초하여 테이블의 행 내의 데이터 항목을 궁극적으로 갱신할 수 있는데, 그 최초에 검색된 값은 그 뒤에 동시 사용자에 의해 변경되었다. 결과적으로, 갱신은 오래된 데이터에 기초하게 된다.
동일한 데이터를 수반하는 다수의 데이터 트랜잭션 사이의 동시성 제어는 동시성 제어로부터 발생된 예외가 데이터 트랜잭션을 즉시 중단시키기보다는 오히려 데이터 트랜잭션 내에서 처리되는 방식을 제공한다. 예외는 데이터를 재판독하고 데이터에 대한 갱신을 재시도함으로써 처리될 수 있고, 이로 인해 데이터 트랜잭션 중단을 지연시킨다. 동시성 제어는 상대 갱신 및 테이블간 종속성을 설명하는 동시에 낙관적 동시성 제어와 비관적 동시성 제어 사이의 옵션을 제공한다. 대체로 말해서, 애플리케이션으로부터의 기입 요청을 수반하는 데이터 트랜잭션 동안에, 갱신될 데이터의 버전을 고유하게 식별하는 버전 ID는 동일한 데이터 트랜잭션 동안에 데이터가 이전에 판독되었을 때의 데이터 버전을 식별하는 버전 ID와 비교된다. 버전 ID가 일치하지 않으면, 예외가 발생되고, 데이터 트랜잭션 내에서 처리된다. 동시성 제어 기술의 사용은 데이터 트랜잭션을 역직렬화하고, 데이터 일관성을 보장하며, 데이터 트랜잭션이 오래 지속되더라도 높은 확장성을 가능하게 할 것으로 예상된다.
도 1은 컴퓨터 네트워크의 단순화된 대표적인 블록도.
도 2는 도 1의 네트워크에 접속될 수 있는 컴퓨터의 블록도.
도 3은 동시성 제어를 관리하는 시스템의 대표적인 블록도.
도 4는 낙관적 동시성 제어를 위한 루틴을 나타내는 순서도.
도 5는 도 4의 낙관적 동시성 제어 루틴에서의 갱신 충돌을 검출하는 루틴을 나타내는 순서도.
도 6은 도 5의 갱신 충돌 검출 루틴 동안에 발생된 구조적 예외를 위한 루틴을 나타내는 순서도.
도 7은 도 5의 갱신 충돌 검출 루틴 동안에 예외가 발생되는 경우에 데이터 트랜잭션 동안에 예외를 처리하는 루틴을 나타내는 순서도.
도 8은 상대적인 데이터 갱신을 행하는 루틴을 나타내는 순서도.
도 9는 다른 테이블 내의 데이터에 의존하여 데이터를 갱신하는 루틴을 나타내는 순서도.
다음 명세서는 다수의 상이한 실시예의 상세한 설명을 나타내지만, 그 설명의 법적 범위는 이 명세서의 끝 부분에 설명된 청구범위의 표현에 의해 정의된다는 것을 이해할 것이다. 상세한 설명은 예시적으로만 해석될 수 있고, 모든 가능한 실시예를 설명하는 것이 불가능하지는 않지만 비현실적일 수 있으므로 모든 가능한 실시예를 설명하지는 못한다. 다수의 대안적인 실시예는 현재의 기술, 또는 여전히 청구범위에 속할 수 있는 이 특허의 출원일 후에 개발된 기술을 사용하여 구현될 수 있다.
또한, "여기에서 사용된 바와 같이, '___'이라는 용어는 ...이라는 의미로 정의된다"는 문장 또는 이와 유사한 문장을 사용하여 이 특허에서 용어가 명백히 정의되지 않는 한, 그 용어의 보통의 또는 통상의 의미를 넘어서 명백히 또는 암암리에 그 용어의 의미를 제한하고자 하는 것은 아니고, 그러한 용어는 (청구범위의 언어와 다른) 이 특허의 임의의 섹션에 있는 임의의 문(statement)에 기초한 범위 에 제한되는 것으로 해석되어서는 안 된다. 이 특허의 끝 부분에 있는 청구범위에서 설명된 임의의 용어가 하나의 의미와 일치하는 방식으로 이 특허에서 관련되는 정도까지, 그 하나의 의미는 단지 독자에게 혼란을 주지 않고 명확히 하기 위한 것이고, 그러한 청구범위 용어를 암암리에 또는 다른 식으로 그러한 단일 의미로 제한하려는 것이 아니다. 마지막으로, 청구범위 요소가 임의의 구조의 설명 없이 "수단"이라는 단어 및 기능을 설명함으로써 정의되지 않는 한, 임의의 청구범위 요소의 범위를 35 U.S.C.§112 제6항의 적용에 기초하여 해석하려는 것은 아니다.
본 발명의 기능의 대부분 및 본 발명의 원리의 대부분은 주문형 반도체(ASIC)와 같은 집적 회로(IC) 및 소프트웨어 프로그램 또는 명령어에서 또는 그러한 것으로 가장 잘 구현된다. 본 분야에 숙련된 기술자는, 예를 들어 이용가능 시간, 현재의 기술 및 경제적 고려사항에 의해 동기 부여된 어쩌면 상당한 노력과 다수의 디자인 선택권에도 불구하고, 여기에서 설명된 개념 및 원리를 따르게 되면, 최소한의 실험으로 그러한 소프트웨어 명령어와 프로그램 및 IC를 용이하게 생성할 수 있을 것이라고 예상한다. 그러므로, 본 발명에 따른 원리 및 개념을 불명료하게 할 모든 위험을 간결하고 최소화하기 위해서, 그러한 소프트웨어 및 IC에 관한 설명이 더 있다면 그 설명은 양호한 실시예의 원리 및 개념에 관하여 필수적인 것으로 제한될 것이다.
도 1 및 2는 현재의 명세서에 관련된 네트워크 및 컴퓨터 플랫폼의 구조적 기반을 제공한다.
도 1은 네트워크(10)를 도시한 것이다. 네트워크(10)는 인터넷이나 VPN(virtual private network)일 수 있고, 또는 하나 이상의 컴퓨터, 통신 장치, 데이터베이스 등이 서로 통신으로 접속될 수 있게 하는 임의의 기타 네트워크일 수 있다. 네트워크(10)는 이더넷(16)과 라우터(18) 및 지상 통신선(20)을 통해 퍼스널 컴퓨터(12) 및 컴퓨터 단말기(14)에 접속될 수 있다. 이더넷(16)은 더 큰 인터넷 프로토콜 네트워크의 서브넷일 수 있다. 프로젝터 또는 프린터(도시 생략)와 같은 기타 네트워크화 자원은 또한 이더넷(16) 또는 다른 데이터 네트워크를 통해 지원될 수 있다. 한편, 네트워크(10)는 무선 통신국(26) 및 무선 링크(28)를 통해 랩톱 컴퓨터(22) 및 개인용 정보 단말기(PDA)(24)에 무선으로 접속될 수 있다. 이와 유사하게, 서버(30)는 통신 링크(32)를 사용하여 네트워크(10)에 접속될 수 있고, 메인프레임(34)은 다른 통신 링크(36)를 사용하여 네트워크(10)에 접속될 수 있다. 네트워크(10)는 피어 투 피어 네트워크 트래픽의 지원에 유용할 수 있다.
도 2는 컴퓨터(110) 형태의 컴퓨팅 장치를 도시한 것이다. 컴퓨터(110)의 컴포넌트는 처리 장치(120), 시스템 메모리(130), 및 시스템 메모리를 비롯한 각종 시스템 컴포넌트들을 처리 장치(120)에 연결하는 시스템 버스(121)를 포함하지만 이에 제한되는 것은 아니다. 시스템 버스(121)는 메모리 버스 또는 메모리 컨트롤러, 주변 장치 버스 및 각종 버스 아키텍처 중의 임의의 것을 이용하는 로컬 버스를 비롯한 몇몇 유형의 버스 구조 중 어느 것이라도 될 수 있다. 예로서, 이러한 아키텍처는 ISA(industry standard architecture) 버스, MCA(micro channel architecture)) 버스, EISA(Enhanced ISA) 버스, VESA(video electronics standard association) 로컬 버스, 및 메자닌 버스(mezzanine bus)로도 알려진 PCI(peripheral component interconnect) 버스를 포함하지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 통상적으로 각종 컴퓨터 판독가능 매체를 포함한다. 컴퓨터(110)에 의해 액세스 가능한 매체는 그 어떤 것이든지 컴퓨터 판독가능 매체가 될 수 있고, 이러한 컴퓨터 판독가능 매체는 휘발성 및 비휘발성 매체, 이동식 및 비이동식 매체를 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보를 저장하는 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광 디스크 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 기타 자기 저장 장치, 또는 컴퓨터(110)에 의해 액세스되고 원하는 정보를 저장할 수 있는 임의의 기타 매체를 포함하지만 이에 제한되는 것은 아니다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메카니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터를 구현하고, 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되는 것은 아니다. 상술된 매체들의 모든 조합이 또한 컴퓨터 판독가능 매체의 영역 안에 포함되는 것으로 한다.
시스템 메모리(130)는 판독 전용 메모리(ROM)(131) 및 랜덤 액세스 메모리(RAM)(132)와 같은 휘발성 및/또는 비휘발성 메모리 형태의 컴퓨터 저장 매체를 포함한다. 시동 중과 같은 때에, 컴퓨터(110) 내의 구성요소들 사이의 정보 전송을 돕는 기본 루틴을 포함하는 기본 입/출력 시스템(BIOS)(133)은 통상적으로 ROM(131)에 저장되어 있다. RAM(132)은 통상적으로 처리 장치(120)가 즉시 액세스 할 수 있고 및/또는 현재 동작시키고 있는 데이터 및/또는 프로그램 모듈을 포함한다. 예로서, 도 2는 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)를 도시하고 있지만 이에 제한되는 것은 아니다.
컴퓨터(110)는 또한 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 저장 매체를 포함한다. 단지 예로서, 도 2는 비이동식·비휘발성 자기 매체에 기록을 하거나 그로부터 판독을 하는 하드 디스크 드라이브(141), 이동식·비휘발성 자기 디스크(152)에 기록을 하거나 그로부터 판독을 하는 자기 디스크 드라이브(151), 및 CD-ROM 또는 기타 광 매체 등의 이동식·비휘발성 광 디스크(156)에 기록을 하거나 그로부터 판독을 하는 광 디스크 드라이브(155)를 포함한다. 예시적인 운영 환경에서 사용될 수 있는 기타 이동식/비이동식, 휘발성/비휘발성 컴퓨터 기억 매체로는 자기 테이프 카세트, 플래시 메모리 카드, DVD, 디지털 비디오 테이프, 고 상(solid state) RAM, 고상 ROM 등이 있지만 이에 제한되는 것은 아니다. 하드 디스크 드라이브(141)는 통상적으로 인터페이스(140)와 같은 비이동식 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광 디스크 드라이브(155)는 통상적으로 인터페이스(150)와 같은 이동식 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
위에서 설명되고 도 2에 도시된 드라이브들 및 이들과 관련된 컴퓨터 저장 매체는, 컴퓨터(110)에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 및 기타 데이터를 저장한다. 도 2에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 여기서 주의할 점은 이 컴포넌트들이 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136) 및 프로그램 데이터(137)와 동일하거나 그와 다를 수 있다는 것이다. 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146) 및 프로그램 데이터(147)에 다른 번호가 부여되어 있다는 것은 적어도 이들이 다른 사본(copy)이라는 것을 나타내기 위한 것이다. 사용자는 키보드(162), 및 일반적으로 마우스, 트랙볼(trackball) 또는 터치 패드라 칭해지는 커서 제어 장치(161) 등의 입력 장치를 통해 명령 및 정보를 컴퓨터(110)에 입력할 수 있다. 웹 카메라(webcam)와 같은 카메라(163)는 사용자의 영상을 제공하는 것과 같이, 컴퓨터(110)와 관련된 환경의 영상을 캡처하여 입력할 수 있다. 웹캠(163)은 요구시에, 예를 들어 사용자에 의해 지시될 때 영상을 캡처할 수 있고, 또는 컴퓨터(110)의 제어 하에 주기적 으로 영상을 찍을 수 있다. 다른 입력 장치(도시 생략)는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등을 포함할 수 있다. 이들 및 기타 입력 장치는 종종 시스템 버스에 연결된 입력 인터페이스(160)를 통해 처리 장치(120)에 접속되지만, 병렬 포트, 게임 포트 또는 USB(universal serial bus) 등의 다른 인터페이스 및 버스 구조에 의해 접속될 수도 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 그래픽 제어기(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속된다. 모니터 외에, 컴퓨터는 또한 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치를 포함할 수 있고, 이들은 출력 주변장치 인터페이스(195)를 통해 접속될 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 사용하여 네트워크화된 환경에서 동작할 수 있다. 원격 컴퓨터(180)는 또 하나의 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어 장치 또는 기타 통상의 네트워크 노드일 수 있고, 도 2에는 메모리 저장 장치(181)만이 도시되어 있지만, 통상적으로 컴퓨터(110)와 관련하여 상술된 구성요소들의 대부분 또는 그 전부를 포함한다. 도 2에 도시된 논리적 연결로는 LAN(171) 및 WAN(173)이 있지만, 기타 네트워크를 포함할 수도 있다. 이러한 네트워킹 환경은 사무실, 전사적 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용될 때, 컴 퓨터(110)는 통상적으로 인터넷과 같은 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메커니즘을 통해 시스템 버스(121)에 접속될 수 있다. 네트워크화된 환경에서, 컴퓨터(110) 또는 그의 일부와 관련하여 기술된 프로그램 모듈은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 2는 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 있는 것으로 도시하고 있지만 이에 제한되는 것은 아니다.
통신 접속(170, 172)은 장치가 다른 장치와 통신할 수 있게 한다. 통신 접속(170, 172)은 통신 매체의 한 예이다. 통신 매체는 통상적으로 반송파(carrier wave) 또는 기타 전송 메카니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터를 구현하고, 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함하지만 이에 제한되는 것은 아니다. 컴퓨터 판독가능 매체는 저장 매체 및 통신 매체 둘 다를 포함할 수 있다.
도 3은 도 1의 네트워크(10)와 유사하거나 그 네트워크(10)에 연결될 수 있는 기업 자원 계획 시스템과 같은 예시적인 클라이언트/서버 네트워크(200)를 나타 낼 수 있다. 클라이언트/서버 네트워크(200)는 네트워크(210, 212, 214)에 의해 연결된 개별 시스템(202, 204, 206, 208)을 포함할 수 있다. 네트워크(210, 212, 214)는 유선 또는 무선일 수 있고, 인터넷 프로토콜 버전 6(IPv6), 및 보안 소켓 계층(SSL)과 같은 보안 통신 프로토콜을 지원할 수 있다. 한 예에서, 인터넷은 네트워크(210, 212, 214)로서 이용될 수 있다. 시스템(202)은 하나의 서버(216) 또는 다수의 서버를 포함할 수 있는 서버 시스템이다. 서버 시스템(202)은 상이한 서버 유형 또는 서버 이용이 포함될 수 있긴 하지만, 비즈니스 기업 서버 시스템, SQL 또는 기타 데이터베이스 관리 서버 시스템, 또는 메시징 및 기업 협력 서버 시스템일 수 있다.
시스템(204, 206)은 네트워크 통신 장치(218, 220)를 각각 포함하는 클라이언트 시스템인데, 네트워크 통신 장치(218, 220)는 퍼스널 컴퓨터, 전화기, PDA, 셋톱 박스, 텔레비전 및 엔터테인먼트 시스템 등을 포함하지만 이에 제한되는 것은 아니다. 시스템(208)은 서버 시스템(202)에 동작가능하게 결합되고 데이터 항목을 저장할 수 있는 데이터베이스(222)를 포함한다. 한 예에서, 데이터베이스(222)는 한 테이블의 한 행에 하나의 데이터 항목을 저장할 수 있고, 데이터베이스(222)는 데이터를 저장하기 위해 다수의 테이블을 유지할 수 있다. 데이터 항목은 서버 시스템(202)에 의해 관리될 수 있는데, 상이한 데이터 항목에 대응하는 하나 이상의 행을 갖는 각종 테이블 내에 저장된다. 한 예에서, 네트워크 통신 장치(218, 220)는 데이터베이스(222) 내에 저장된 데이터 항목을 액세스 및/또는 수정하기 위해 서버(216)로 판독 및/또는 기입 동작을 시작할 수 있는 상이한 사용자들과 관련이 있을 수 있다. 일반적으로, 서버 시스템(202)은 다수의 동시 사용자(204, 206)가 여기에서 설명된 동시성 제어 기술을 사용하여 데이터베이스(222) 내의 데이터 항목, 동일한 테이블 내의 데이터 항목 또는 동일한 데이터 항목을 판독 또는 갱신할 수 있게 한다. 다른 예에서, 상기 시스템(200)을 사용하여, 서버(216)는 다수의 클라이언트(204, 206)가 서버 시스템(202)에 의해 관리된 서버 애플리케이션을 사용할 수 있게 할 수 있다. 대안적으로, 클라이언트(204, 206)는 지역적으로 애플리케이션을 실행할 수 있다. 애플리케이션은 판독 및/또는 기입 요청을 제공하기 위한 판독 및/또는 갱신 문(statement)을 포함하는 애플리케이션을 포함할 수 있다. 여기에서 사용된 바와 같이, '갱신'이라는 용어는 데이터의 수정, 새로운 데이터의 기입 또는 데이터의 삭제를 포함하여(이에 제한되는 것은 아님) 데이터 항목에 대한 임의의 수정을 의미하는 것으로 정의된다.
클라이언트 시스템(204, 206)이 각각 하나의 네트워크 통신 장치(218, 220)를 포함하는 것으로 도시되지만, 상이한 수의 네트워크 통신 장치가 이용될 수 있다는 것을 이해할 것이다. 마찬가지로, 서버 시스템(202)은 상이한 수의 서버를 포함할 수 있고, 데이터베이스 시스템(208)은 상이한 수의 데이터베이스를 포함할 수 있다. 더욱이, 서버(216), 네트워크 통신 장치(218, 220) 및 데이터베이스(222)가 각각 그들 자체의 시스템(202, 204, 206, 208) 내에 제공되는 것으로 도시되지만, 서버(216), 네트워크 통신 장치(218, 220) 및 데이터베이스(222)는 동일한 시스템 내에 제공될 수 있다는 것을 이해할 것이다. 또한, 수백 또는 수천의 클라이언트 시스템 및 데이터베이스 시스템을 포함하여 다수의 시스템이 제공될 수 있다는 것을 이해할 것이다. 다음 명세서가 일반적으로, 하나의 서버(216)와 다수의 동시 사용자 또는 애플리케이션 사이의 상호작용을 포함할 수 있는 동일한 데이터 항목 상의 동시 기입 동작을 실행하는 다수의 데이터 트랜잭션을 설명하지만, 하나 이상의 데이터 항목 상의 기입 동작을 실행하는 데이터 트랜잭션을 수행하는 하나 이상의 동시 사용자 또는 애플리케이션을 각각 갖는 하나 이상의 서버가 동시에 동작할 수 있다는 것을 이해할 것이다. 또한, 다음 명세서가 일반적으로 서버 시스템 운영 체제의 커널 데이터 액세스 계층 내에서 구현되는 동시성 제어 기술을 설명하지만, 동시성 제어 기술의 다양한 다른 구현이 이용될 수 있다는 것을 이해할 것이다. 컴퓨터 코드의 다양한 예가 아래에 제공되는데, 그 중 몇몇은 단순한 개체 지향 언어인 X++ 프로그래밍 언어, 또는 C++ 프로그램가능 코드로 기입되지만, 그외 다른 개체 지향 언어를 포함하는 다양한 기타 프로그래밍 언어가 이용될 수 있다.
일반적으로, 판독 동작을 수반하는 데이터 트랜잭션 동안에, 서버 시스템(202)은 사용자에 의해 실행되는 비즈니스 프로세스와 같은 애플리케이션으로부터 판독 요청을 수신한다. 여기에서 설명된 동시성 제어 기술을 사용하여, 서버 시스템(202)은 단지 데이터 항목을 판독하는 것만으로 무결성이 손실되지 않기 때문에, 동시 사용자들에 의한 무제한 판독 동작을 허용할 수 있다. 이와 같이, 애플리케이션은 판독 동작에 관한 배타적 잠금을 획득하지 않고 행 및 대응하는 데이터 항목을 판독할 수 있게 됨으로써, 서버 시스템(202) 내의 최대 동시성을 고려한다. 그 밖에, 데이터를 갱신하려는 판독 동작이 또한 배타적 잠금을 획득하지 않 고 실행될 수 있고, 이로 인해 판독 동작을 커밋되지 않은 데이터 판독에 노출시킬 수 있다. 여기에서 더욱 설명된 바와 같이, 무결성은 갱신 동안 영향받은 데이터의 버전 ID를 비교함으로써 유지될 수 있다.
한편, 기입 동작을 수반하는 데이터 트랜잭션 동안에, 서버 시스템(202)은 갱신 무효를 방지하기 위해 데이터 일관성을 보장할 수 있다. 데이터 동작은 3단계: 판독 단계, 유효성 검사 단계, 및 기입 동작을 실제로 실행하는 기입 단계로 처리될 수 있다. 한 예에서, 서버 시스템(202)은 판독 단계를 처리할 수 있고, 데이터베이스(222)는 유효성 검사 및 기입 단계를 처리할 수 있다. 각각의 기입 요청은 판독 요청 다음에 행해진다. 기입 요청은 데이터가 후속 갱신을 위해 데이터베이스에서 인출될 때, 초기 판독 요청을 수신하고, 데이터 항목을 선택하며, 그 결과를 애플리케이션에 제공함으로써 처리될 수 있다. 그 다음, 애플리케이션은 데이터 항목을 수정하고, 서버 시스템(202) 또는 데이터베이스(222)에 갱신을 제공한다. 갱신 잠금은 데이터 항목에 대응하는 행에 시작될 수 있고, 데이터 항목은 선택될 수 있으며, 갱신되는 데이터 항목은 유효성이 검사될 수 있다. 유효성 검사 동안에, 일관성 검사 알고리즘이 트리거될 수 있는데, 이 알고리즘은 처음에 판독되는 데이터 항목과 갱신되는 데이터 항목의 버전 ID들(여기에서는 "Rec Version"이라고도 함)를 비교함으로써 다른 데이터 트랜잭션 동안에 데이터 항목이 갱신되었는지 판정한다. 즉, 갱신되는 데이터 항목의 버전이 처음에 판독된 데이터 항목의 버전과 동일한지 판정될 수 있다. 버전들이 동일하면, 갱신은 계속 행해질 수 있게 되고, 변경은 데이터베이스(222)에 제출되며, 일단 데이터 트랜잭션 이 커밋되면 데이터에 대응하는 행은 잠겨지지 않는다. 버전들이 상이하면, 서버 시스템(202)은 충돌을 검출하고, 갱신 충돌 예외를 발생시키며, 애플리케이션은 데이터 트랜잭션을 자동으로 롤백하거나 중단시키지 않고 데이터 트랜잭션 내의 갱신 충돌을 보상하고자 시도하도록 충돌을 처리할 기회가 주어진다. 애플리케이션이 갱신 충돌을 보상할 수 없으면, 서버 시스템(202)은 데이터 트랜잭션을 롤백한다. 애플리케이션을 예외를 알아차릴 수 있고, 애플리케이션이 나중에 기입 동작을 시도할 수 있는 곳으로 애플리케이션 코드를 롤백할 수 있다. 이로 인해, 서버 시스템(202)은 데이터 항목이 후속 갱신을 위해 데이터베이스에서 인출될 때 데이터 항목에 대응하는 행을 잠그지 않고 기입 동작 동안에 동시성 제어를 제공한다. 그 대신에, 행-레벨 잠금은 실제 갱신 동안에 이용되고, 이로 인해 다른 데이터 트랜잭션이 데이터 항목을 판독할 수 있게 하거나 또는 테이블 및/또는 데이터베이스(222) 내의 임의의 다른 데이터 항목을 갱신할 수 있게 한다. 데이터 항목이 인출과 갱신 사이에서 다른 데이터 트랜잭션에 의해 수정되면, 수정은 검출되고, 예외는 생성되고 처리되어, 커널 데이터 액세스 계층에서 애플리케이션 코드로 발생 수 있다.
낙관적 및 비관적 동시성 제어 관리
낙관적 동시성 제어를 제공하는 것 이외에, 서버 시스템(202)은 비관적 동시성 제어 옵션을 더 유지할 수 있다. 따라서, 서버 시스템(202)에는 낙관적 동시성 제어를 전체적으로 가능하게 하는 것, 낙관적 동시성 제어를 전체적으로 불가능하게 하는 것, 및 각 테이블에 대해 낙관적 동시성 제어를 가능하게 하는 것을 포함 하는(이에 제한되는 것은 아님) 각종 동시성 제어 옵션이 주어질 수 있다. 낙관적 동시성 제어를 전체적으로 가능하게 하는 것은 커널이 데이터베이스(222) 내의 모든 테이블에 대해 낙관적 동시성 제어 하에 데이터 트랜잭션을 행할 수 있게 한다. 낙관적 동시성 제어를 전체적으로 불가능하게 하는 것은 데이터베이스(222) 내의 모든 테이블에 대해 비관적 동시성 제어 하에 데이터 트랜잭션을 행하도록 커널에 지시한다. 각 테이블에 대해 낙관적 동시성 제어를 가능하게 함으로써, 데이터베이스(222) 내의 개별 테이블은 특정 동시성 제어 방법 하에서 동작하도록 구성된다. 예를 들어, 모든 테이블은 처음에 낙관적 동시성 제어가 가능하게 되도록 설정될 수 있고, 사용자는 적절하게 각 테이블별로 이러한 값을 변경할 수 있다.
글로벌 낙관적 동시성 제어 스위치는 글로벌 낙관적 동시성 제어의 사용 가능화와 사용 불가능화 사이를 스위칭하도록 제공될 수 있고, 각 테이블에 대해 낙관적 동시성 제어를 사용 가능하게 하거나 사용 불가능하게 한다. 글로벌 낙관적 동시성 제어 스위치는 동시성 제어 지원을 위해 다양한 옵션 사이를 스위칭하는 데이터베이스(22) 내에 저장된 설정 플래그로서 제공될 수 있다. 서버 시스템(202)이 활성화되고, 글로벌 설정값이 인출되어 메모리에 저장될 때, 서버 시스템(202)은 글로벌 낙관적 동시성 제어 스위치의 상태를 확인할 수 있다. 클라이언트가 활성화될 때, 세션 호출은 지역적으로 값을 설정하는 클라이언트에 스위치 값을 다시 보낸다. 테이블 당 낙관적 동시성 제어는 런타임 시에 설정된 테이블 속성에 추가되고, 테이블의 애플리케이션 개체 트리 속성상에 렌더링된다. 테이블 당 낙관적 동시성 제어는 메타데이터 저장소 내의 플래그의 미사용 비트를 사용할 수 있고, 비트 "0"을 갖는 디폴트 값을 정의할 수 있는데 이 경우에 테이블 당 낙관적 동시성 제어 속성은 "참"으로 설정된다.
몇몇 경우에, 애플리케이션은 상기 설명된 구성으로부터 예외를 필요로 할 수 있다. 예를 들어, 낙관적 동시성 제어는, 특정 테이블이 대부분의 다른 애플리케이션을 위해 사용 가능하게 된 낙관적 동시성 제어로 설정되더라도, 개별 애플리케이션에 대해 문 레벨에서 사용 불가능하게 될 필요가 있을 수 있다. 그러므로, 커널은 테이블 당 및 글로벌 낙관적 동시성 제어 스위치를 무효화하기 위해 프로그래밍 언어 내에, 후술되는 "pessimisticlock" 및 "optimisticklock"과 같은 키 워드를 삽입할 수 있다. 다음의 의사-컴퓨터 코드 구현 샘플은 문 레벨에서의 비관적 동시성 제어 관리의 예를 나타내는데, 낙관적 동시성 제어는 전체적으로 사용 가능하게 되지만(또는 테이블 레벨에서 사용 가능하게 되지만), 특정 애플리케이션은 비관적 잠금을 필요로 한다:
Figure 112008064910945-PCT00001
키워드 "pessimisticlock"은 갱신되는 데이터 항목의 버전을 식별하는 버전 ID "RecVersion"을 커널이 검색할 수 없게 하고, 이로 인해 낙관적 동시성 제어를 무효화하고, 비관적 동시성 제어에 따라 적절하게 필요한 갱신 잠금으로 데이터 항목이 판독될 수 있게 한다.
다음의 의사-컴퓨터 코드 구현의 샘플은 문 레벨에서의 낙관적 동시성 제어 관리의 대안적인 예를 나타내는데, 낙관적 동시성 제어는 전체적으로 사용 불가능하게 되지만(또는 테이블 레벨에서 사용 불가능하게 되지만), 특정 애플리케이션은 낙관적 잠금을 필요로 한다:
Figure 112008064910945-PCT00002
버전 ID
앞에서 나타낸 바와 같이, 각 데이터 항목은 버전 ID("RecVersion")와 관련된다. 낙관적 동시성 제어를 이용하는 테이터베이스(222) 내의 각 테이블은 버전 ID에 관한 열(column)을 포함한다. 데이터베이스(222) 내에 테이블을 작성할 때, 커널 데이터 액세스 계층은 버전 ID 열을 테이블 정의에 추가한다. 버전 ID 열이 없이 데이터베이스(222) 내에 테이블이 이미 존재하는 경우에, 버전 ID 열은 현존하는 테이블에 추가될 수 있고, 서버 시스템(202)은 테이블 내의 모든 행에 대해 버전 ID 값을 자동으로 생성할 수 있다. 버전 ID 열을 갖는 테이블 내로 기록이 삽입될 때, 서버 시스템(202)은 새로운 기록에 대한 새로운 버전 ID 값을 자동으로 생성할 수 있다. 낙관적 동시성 제어를 사용하는 모든 기입 동작을 위해, 커널 데이터 액세스 계층은 인출되는 모든 행에 대한 버전 ID 값을 판독하고, 갱신 충돌을 검출하도록 데이터 항목의 일관성을 후속적으로 검사하기 위해 버전 ID 값을 저장한다. 행 내의 데이터 항목을 갱신할 때, 커널 데이터 액세스 계층은 행이 데이터베이스(222)로부터 처음에 인출되었을 때 그 행에 대한 버전 ID 값을 검색하고, 그것을 갱신문 술어에 추가한다. 갱신문 술어가 일치 버전 ID 값을 찾지 못하면, 갱신 충돌이 검출되고, 충돌을 처리하고자 시도하는 애플리케이션에 갱신 충돌 예외가 발생된다. 기입 동작이 이전에 판독된 기록의 삭제를 수반하면, 커널 데이터 액세스 계층은 삭제되는 기록이 이전에 수정되었는지 판정하기 위해 문 술어에 버전 ID 값을 추가한다.
갱신된 데이터를 위해 생성된 새로운 버전 ID 값은 다수의 데이터 동작에 걸쳐 트랜잭션 시맨틱스(semantics)를 유지하기 위해 커널 데이터 액세스시에 유지될 수 있다. 결과적으로, 새로운 버전 ID 값은 데이터베이스(222)보다 오히려 서버 시스템(202)에서 생성될 수 있다.
한 예에서, 버전 ID는 데이터 항목을 고유하게 식별하는 서버 타임스탬프일 수 있다. 다른 예에서, 버전 ID는 단순히 증가하는 정수일 수 있다. 그러나, 발생할 수 있는 동시 데이터 트랜잭션의 수를 최대화하기 위해 데이터 트랜잭션을 역직렬화할 때, 커밋되지 않은 판독 격리 레벨이 이용될 수 있는데, 이것은 데이터 항목이 다른 데이터 트랜잭션의 내부 및 외부에서 데이터 트랜잭션에 의해 선택되고 갱신될 수 있게 한다. 일반적으로, 격리 레벨은 트랜잭션이 다른 트랜잭션에서 격리되는 정도를 나타낸다. 그러나, 커밋되지 않은 동시성 판독 격리 레벨을 증가시키기 위해서는, 모든 데이터 트랜잭션이 항상 완전 격리를 요구하는 것이 아니라는 가능성을 이용한다. 결과적으로, 적절한 버전 ID 없이는 데이터 정확도가 떨어질 수 있다. 상기 버전 ID 예들 중의 어느 한 예에서, 이전의 데이터 트랜잭션에 의한 갱신이 정확하게 검출되지 않을 가능성이 존재하므로, 아래의 차트에 의해 나타내 바와 같이, 덮어쓰기를 초래한다.
시간 트랜잭션 1 트랜잭션 2 트랜잭션 3 데이터베이스 내의 테이블t의 행 r의 RecVersion
T1 Ttsbegin; forupdate 선택; 메모리 내의 RecVersion = v; V(커밋됨)
T2 갱신; 메모리 내의 RecVersion = v+1 V+1(커밋되지 않음)
T3 Ttsbegin; forupdate 선택; 메모리 내의 RecVersion = V+1
T4 중단; V(커밋됨)
T5 Ttbbegin; forupdate 선택; 메모리 내의 RecVersion = v; V(커밋됨)
T6 갱신; 커밋; 커밋은 RecVersions로서 계속됨 일치; V+1(커밋됨)
T7 갱신; 커밋; 커밋은 RecVersions로서 계속됨 일치; 이것은 T6에서 트랜잭션 3에 의해 이루어진 변경을 덮어쓸 수 있음 V+1(커밋됨)
위에서 나타낸 바와 같이, 제1 데이터 트랜잭션은 초기 버전 ID 값 V를 판독 하고 데이터 항목을 갱신함으로써 버전 ID 값이 V+1로 갱신되게 할 수 있다. 기입 동작을 커밋한 후에, 제1 데이터 트랜잭션은 기입 동작을 중단할 수 있고, 버전 ID 값은 V로 설정된다. 그러나, 제2 데이터 트랜잭션은 중단 전에 기입 동작을 시작하고, 버전 ID 값 V+1을 판독한다. 제3 데이터 트랜잭션은 중단 후에 기입 동작을 시작하고, 메모리 내에 버전 ID 값 V를 저장하며, 제2 데이터 트랜잭션이 기입 동작을 커밋하기 전에 기입 동작을 커밋한다. 따라서, 제3 데이터 트랜잭션은 또한, 메모리 내에 저장된 버전 ID 값 V가 갱신되는 데이터 항목의 버전 ID 값 V와 일치하기 때문에, 버전 ID 값을 V+1로 갱신한다. 제2 데이터 트랜잭션이 기입 동작을 커밋할 때, 메모리 내에 저장된 버전 ID 값 V+1은 갱신되는 데이터 항목의 버전 ID 값 V+1과 일치한다. 따라서, 제2 데이터 트랜잭션은 제1 데이터 트랜잭션의 중단된 갱신에 기초하여 데이터 항목을 갱신하고 있고, 제3 데이터 트랜잭션에 의한 갱신을 효과적으로 덮어쓴다는 것을 나타낸다.
이러한 가능성을 해결하기 위해, 버전 ID는 모든 서버 할당에 걸쳐 데이터 항목을 고유하게 식별하는 난수(random number)로서 제공될 수 있다. 한 예에서, 난수의 시드(seed)는 데이터 항목 자체의 내용에 기초할 수 있고, 이로 인해 난수가 시간, 사용자 및 서버 시스템(202)에 걸쳐 데이터 항목에 고유하다는 것을 보장할 수 있고, 갱신 다음의 데이터 항목의 각 버전은 데이터 항목과 관련된 고유 버전 ID 값을 갖는다. 다른 예에서, 난수의 시드는 랜덤 생성 알고리즘으로 난수를 생성하기 위해 사용된 랜덤 시드이다.
난수의 생성은 암호화 응용 프로그램 인터페이스 CryptGenRandom을 이용할 수 있다. CryptGenRandom 함수는 보통의 랜덤 클래스보다 더욱 랜덤한 암호화 랜덤 바이트로 버퍼를 채운다. 불확실성(즉, 엔트로피)의 측정은 다음의 소스들 중의 하나 이상: 커널 스위치 내의 스레드, 현재의 프로세스 식별자, 부트 이후의 틱, 현재 시간, 메모리 정보 및 개체 저장 통계 중의 하나 이상으로부터 CryptGenRandom 함수에 대해 생성될 수 있다. CryptGenRandom 함수는 정적 방법을 통해 한번 초기화될 수 있다. CryptGenRandom 함수의 초기화 예는 아래에 표시된다. CRYPT_NEWKEYSET|CRYPT_MACHINE_KEYSET이 사용되어, 서비스 키가 액세스될 수 있다. C++형 표기가 초기화를 설명하기 위해 사용되고, 초기화는 이에 제한되지 않는다.
Figure 112008064910945-PCT00003
Figure 112008064910945-PCT00004
또한, 다음 버전 ID, RecVersion을 생성하기 위해 CryptGenRandom을 사용하는 방법이 추가되어, 함수가 양의 버전 ID를 생성한다는 것을 보장할 수 있다. 새로운 버전 ID 값은 데이터 트랜잭션이 커밋된 데이터 항목의 각각의 성공적인 갱신에 대해 생성될 수 있다. 이 함수는 예는 아래에 표시된다:
Figure 112008064910945-PCT00005
비관적 잠금의 사용 불가능화
앞에서 설명된 바와 같이, 옵션은, 예를 들어 글로벌 낙관적 동시성 제어 스위치를 통해, 비관적 동시성 제어와 낙관적 동시성 제어 사이에 제공될 수 있다. 그러나, 데이터 항목을 갱신할 때, 애플리케이션의 애플리케이션 코드는 디폴트에 의해 비관적 잠금을 자동으로 사용 가능하게 하는 갱신문 내의 트리거를 포함할 수 있다. 예를 들어, X++ 프로그래밍 코드에서, 비관적 잠금은 SELECT 및 WHILE SELECT 문 내의 forupdate 힌트에 의해 트리거될 수 있고, forupdate 힌트를 사용하는 애플리케이션은 서버 시스템(202) 플랫폼이 비관적 잠금을 지원한다는 가정 아래 동작할 수 있다.
비관적 잠금을 사용 불가능하게 하기 위해, 하지만 비관적 잠금을 가정하는 애플리케이션과의 이전 버전 호환성을 유지하기 위해, 낙관적 동시성 제어는 낙관적 동시성 제어 동안에 비관적 잠금을 사용 불가능하게 하기 위해 갱신문 내의 트리거를 제거하거나 무시하거나 재해석할 수 있다. 예를 들어, 트리거는 문 당, 테이블 당 및 글로벌 낙관적 동시성 제어 스위치의 맥락에서 재해석될 수 있다. 더욱 구체적으로, 트리거는 갱신 잠금이 데이터베이스 내에서 유지되지 않게 할 수 있다. 그 대신에, 트리거는 애플리케이션의 의도를 지정할 수 있다. 예를 들어, 트리거는 의도가 단지 판독 동작만을 위한 것인지, 또는 의도가 장래의 갱신을 위해 판독 동작을 사용하는 것인지 지정할 수 있다. 스위치에 기초하여, 커널 데이터 액세스 계층은 갱신 잠금이 유지되어야 하는지(비관적인지), 또는 행의 버전 ID가 인출되어야 하는지(낙관적인지) 결정할 수 있다. 다른 예에서, X++ 프로그래밍 내에서, 데이터베이스 갱신 잠금을 획득하기 위한 데이터베이스 힌트는 비관적 잠 금을 위한 애플리케이션 코드를 변경하지 않고 SELECT 및 WHILE SELECT 문에서 제거된다. SELECT 및 WHILE SELECT 문에서 데이터베이스 힌트를 제거함으로써 비관적 잠금을 사용 불가능하게 하는 예는 아래에 표시된다:
Figure 112008064910945-PCT00006
Figure 112008064910945-PCT00007
도 4는 테이블 내의 데이터 항목을 갱신하기 위한 기입 동작 동안에 비관적 잠금을 사용 불가능하게 하기 위해 서버 시스템(202)에 의해, 특히 서버 시스템(202)의 커널의 커널 데이터 액세스 계층에 의해 실행될 수 있는 낙관적 동시성 제어 루틴(300)의 예인데, 낙관적 동시성 제어는 (전체적으로 또는 테이블마다) 테이블에 대해 사용 가능하게 되어 있다. 앞에서 나타낸 바와 같이, 각 기입 요청은 판독 요청 다음에 행해진다. 낙관적 동시성 제어 모드에서 어떤 데이터 항목이 판독되든, 커널 데이터 액세스 계층은 인출하는 모든 대응하는 행에 대한 버전 ID 값을 판독하고, 인출된 행의 데이터 항목에 관한 갱신이 실행될 때와 같은 장래에 사용하기 위해 그 값들을 저장한다. 판독 요청 다음에, 데이터 항목을 갱신하기 위 한 기입 요청이 호출될 때까지 어떤 잠금도 유지되지 않는다. 여기에서 설명된 낙관적 동시성 제어 기술에서, 데이터 항목(즉, 테이블 내의 행)을 갱신할 때, 커널 데이터 액세스 계층은 판독 동작 동안에 데이터베이스에서 인출된 대응하는 행에 대한 버전 ID 값을 검색하고, 데이터 항목이 수정되었는지 알아보기 위해 버전 ID 값을 갱신문 술어에 추가한다. 갱신이 이전에 판독된 데이터 항목의 삭제를 수반하면, 커널 데이터 액세스 계층은 삭제되는 데이터 항목이 수정되었는지 알아보기 위해 버전 ID 값을 갱신문 술어에 추가한다. 커널 데이터 액세스 계층은 임의의 다른 데이터 트랜잭션이 판독 후에 갱신되는 데이터 항목을 변경했는지 확인하도록 데이터베이스(222)에 요청한다. 갱신 충돌이 검출되면, UpdateConflict 예외가 발생된다. 나중에 더욱 설명되는 바와 같이, UpdateConflict 예외가 발생될 때 데이터 트랜잭션을 즉시 중단하기보다 오히려, 예외는 데이터 트랜잭션 내에서 처리될 수 있다.
도 4를 참조하면, 블록(302)에서 시작되고, 낙관적 동시성 제어 루틴(300)은 데이터 트랜잭션 동안에 애플리케이션으로부터 판독 요청을 수신한다. 판독 요청이 블록(304)에서 판정된 바와 같이, "forupdate", "pessimisticlock", "optimisticlock"과 같은 행을 갱신하려는 판독 동작에 관한 것이 아니면, 블록(306)에서 수신된 임의의 후속 갱신 요청은 블록(308)에서 불인정될 수 있고, 트랜잭션은 종료될 수 있다. 판독 요청이 행을 갱신하려는 판독 동작에 관한 것이면, 루틴(300)은 블록(310)에서 낙관적 동시성 제어가 테이블에 사용 가능하게 되었는지 판정하는 것과 같은 판정에 의해 낙관적 동시성 제어가 적용되어야 하는지 판정할 수 있다. 루틴(300)은 블록(310)에서, 버전 ID가 검색되어 갱신을 위해 사용될 것인지 더욱 판정한다.
블록(310)에서 판정된 바와 같이 낙관적 동시성 제어가 필요한지 판정하기 위해, 커널 데이터 액세스 계층에는 낙관적 동시성 제어가 적용되어야 하는지 및 버전 ID가 검색되어야 하는지에 관한 계산을 조사하기 위해 중앙 집중 리포지토리가 제공될 수 있다. 그러한 계산은 데이터 항목, 행, 테이블 등과 같은 데이터 개체에 관해 한 번만 실행될 수 있다. 한 예에서, 그러한 판정은 행의 버전 ID가 갱신 및 삭제를 위해 RecVersion을 사용하여 확인될 필요가 있는지 알아보기 위해 확인하는 스키마에 의해 구현될 수 있다. 버전 ID 확인은 다음 상황들 중의 하나 이상: 즉, RecVersion이 판독되지 않을 때, 행 설정 동작의 경우, 테이블 또는 행이 아래에서 더욱 설명되는 열 비교의 요구하는 것으로 구체적으로 표시가 되는 경우, 또는 갱신이 또한 아래에서 더욱 설명되는 상대 갱신인 경우 중의 하나 이상에서 요구되지 않거나 사용되지 않을 수 있다. 다음은 그러한 스키마 SqlStmt::IsRecVersionCheckNeededForupdate의 한 예인데, 이것은 RecVersion 확인이 갱신을 위해 사용될 것인지 알아보기 위해 확인하고, 낙관적 동시성 제어가 테이블에 사용 가능하게 될 것을 요구한다. "TRUE" 값은 RecVersion 확인이 사용될 경우에 반환된다.
Figure 112008064910945-PCT00008
Figure 112008064910945-PCT00009
대안적으로, 또는 SqlStmt::IsRecVersionCheckNeededForupdate 스키마와 관련하여, 블록(312)에서의 판정은 임의 형태의 갱신 충돌 검출이 사용될 것인지 알아보기 위해 확인하는 스키마에 의해 더욱 구현될 수 있다. 예를 들어, 갱신 충돌 검출은 버전 ID가 갱신을 위해 필요한 경우에 또는 갱신을 위한 재판독이 지정되는 경우에 사용된다. 재판독 플래그는 데이터가 원래부터 양식상에 인출되어 있고, 낙관적 동시성 제어가 그외 다른 설정에 관계없이 사용되어야 한다는 것을 나타낸다. 낙관적 동시성 제어가 사용 불가능하게 되면, 갱신 충돌 검출은 양식에만 사용될 수 있다. 양식 및 또한 보고서는 데이터를 인출하기 위해 쿼리를 사용하는데, 데이터 소스는 쿼리 개체에 부가되고, 갱신 속성은 데이터베이스 내의 데이터 항목을 갱신하기 위해 쿼리가 허용되는지 판정한다. 한편, 낙관적 동시성 제어가 사용가능하게 되면, 갱신 충돌 검출은 버전 ID 또는 열 비교를 사용할 수 있다. 다음은 그러한 스키마 SqlStmt::IsUpdateConflictDetectionNeededForupdate의 예인데, 이것은 RecVersion 확인 또는 열 비교와 같은 임의 형태의 갱신 충돌 검출이 갱신을 위해 사용될 것인지 알아보기 위해 확인한다. "TRUE" 값은 임의 형태의 갱신 충돌 검출이 사용될 경우에 반환된다.
Figure 112008064910945-PCT00010
Figure 112008064910945-PCT00011
다시 도 4의 블록(310)을 참조하면, 낙관적 동시성 제어가 위에 제공된 예시적인 스키마를 사용하여 결정될 수 있는 갱신 동안에 이용되지 않는 경우에, 버전 ID는 검색되지 않고, 갱신 잠금은 블록(312)에서 갱신되는 행에 대해 데이터베이스 내에서 유지된다. 블록(314)에서, 갱신 요청이 수신될 수 있고, 블록(316)에서, 데이터 항목의 실제 기입 및/또는 갱신이 실행되는데, 이것은 행에 새로운 데이터를 기입하는 것, 데이터 항목을 삭제하는 것 등을 포함할 수 있다. 블록(318)에서, 데이터 트랜잭션이 커밋되고, 블록(320)에서, 갱신 잠금이 해제된다. 낙관적 동시성 제어가 테이블에 대해 턴온되고, 블록(310)에서 판정된 바와 같이 갱신 동안에 이용될 경우에, 블록(322)에서 버전 ID가 데이터베이스로부터 검색되고, 블록(324)에서 갱신 요청이 수신되며, 버전 ID는 갱신 충돌 검출 루틴(326)을 이용하여 갱신 충돌 검출에 사용된다. 주의할 점은 블록(322)에서는, 구현되어 데이터 베이스에 대해 유지되는 갱신 잠금이 없다는 것이다.
갱신 충돌 검출
도 5는 데이터 항목을 갱신할 때 어떤 충돌이 발생했는 지의 여부를 검출하기 위해 서버 시스템(202)에 의해, 특히 서버 시스템(202)의 커널 데이터 액세스 계층에 의해 실행될 수 있는 갱신 충돌 검출 루틴(326)의 예이다. 즉, 갱신 충돌 검출 루틴(326)은 데이터 항목의 초기 인출과 갱신 사이에 다른 트랜잭션에 의해 데이터 항목이 변경되었는 지의 여부를 판정할 수 있다. 갱신 충돌 검출 루틴(326)은 임의의 그러한 변경을 검출하고, 커널 데이터 액세스 계층에서 애플리케이션 코드로 예외를 발생시킬 수 있다.
블록(402)에서 시작되어, 갱신 충돌 검출 루틴(326)은 버전 ID 확인(RecVersion 확인) 또는 열 비교를 실행할 필요가 있는지 처음에 확인할 수 있다. 예를 들어, 열 비교는 애플리케이션이 현존하는 데이터 항목을 수정만 하고 있는 경우에 사용될 수 있다. 열 비교는 이전 버전과의 호환성을 위해 또는 애플 리케이션 로직이 지시할 때 사용될 수 있다. 한편, 버전 ID 확인은 데이터의 수정 또는 데이터 항목의 삭제와 같은 모든 형태의 갱신을 위해 사용될 수 있다. 다음은 스키마 SqlStmt::AddOccExpressionNodes의 예인데, 이것은 처음에, 버전 ID 확인 또는 열 비교가 필요한지 확인하고(예를 들어, 행이 판독시에 잠겨졌으면, 어느 것도 필요하지 않음), 그 다음에, 필요한 경우에 버전 ID 확인 또는 열 비교를 사용하도록 스위칭한다. 결과적인 표현 노드들, 즉 열 비교를 실행하는 BuildUpdateConflictDetectionExpressionNode 및 버전 ID 확인을 실행하는 BuildRecVersionExpressionNode는 임의 형태의 갱신 충돌 검출이 사용될 경우에 반환된다.
Figure 112008064910945-PCT00012
Figure 112008064910945-PCT00013
다시 도 5를 참조하면, 블록(402)에서 판정된 바와 같이, 열 비교가 실행될 경우에, 루틴(326)은 블록(404)에서 열을 비교하기 시작할 수 있다. 특히, 서버 시스템(202)은 데이터베이스에 비교를 실행하도록 요청할 수 있다. 한 예에서, 열 비교를 이용하는 갱신문은 다음과 같이 보일 수 있다:
UPdate table1 set field1 = new field1Value where RedID = myRecID and field1 = field1OldValue
다음은 스키마 SqlStmt::BuildUpdateConflictDetectionExpessionNode의 예인데, 이것은 열 비교를 이용하여 갱신 충돌을 검출하기 위한 표현 주석을 구성하여 반환한다. 특히, 주의할 점은 갱신 충돌 검출의 이 특정 예에서 버전 ID가 사용되지 않는다는 것이다.
Figure 112008064910945-PCT00014
Figure 112008064910945-PCT00015
버전 ID 확인이 실행된다고 루틴(326)이 판정하면, 버전 ID는 데이터 항목이 인출과 갱신 사이에서 수정되었는지 판정하기 위해 블록(406)에서 갱신문 술어에 추가된다. 블록(408)에서, 인출된 데이터 항목의 버전 ID는 검색되어, 갱신될 데이터 항목의 버전 ID에 비교된다. 주의할 점은 버전 ID 비교가 데이터베이스(222)에 의해 실행될 경우, 서버 시스템(222)은 데이터베이스(222)를 위해 버전 ID를 인출할 필요가 없다는 것이다. 버전 ID가 데이터 항목의 버전에 고유하기 때문에, 블록(410)에서의 검출된 바와 같은, 인출된 데이터 항목의 버전 ID와 갱신되는 데이터 항목의 버전 ID 사이의 임의의 차이는 블록(412)에서 예외를 발생시킨다. 한 예에서, 예외는 커널 데이터 액세스 계층에서, 갱신문을 생성한 애플리케이션 코드로 발생시킬 수 있다. 블록(412)에서, 구조적 예외 루틴은 아래에 더욱 설명되는 바와 같이 실행될 수 있고, 갱신 충돌 예외는 블록(414)에서의 루틴에 의해 처리될 수 있다.
한편, 블록(410)에서의 판정시에, 버전 ID의 차이가 없는 경우에, 새로운 데이터를 데이터 항목에 기입하는 것, 데이터 항목을 삭제하는 것 등을 포함할 수 있는 데이터 항목의 실제 갱신이 블록(416)에서 실행된다. 블록(416)에서 데이터가 갱신된 후, 기입 잠금(배타적 잠금이라고도 함)이 유지된다. 블록(418)에서, 데이터 트랜잭션이 커밋되고, 블록(420)에서, 기입 잠금이 해제된다.
구조적 예외
도 6은 갱신 충돌 예외가 발생될 때마다 블록(322)에서 실행될 수 있는 구조적 예외 루틴(500)의 예이다. 특히, 구조적 예외 루틴(500)은 구조적 예외 처리를 위한 런타임 지원의 예를 보여준다. 앞에서 나타낸 바와 같이, 런타임 시에, 갱신 충돌 에러가 커널 데이터 액세스 계층에 의해 검출되고, 갱신 충돌 예외가 발생된다. 구조적 예외 처리 구성은 갱신 충돌을 캐치할 수 있는데, 캐치 잠금은 갱신 충돌이 그 구성에서 지정된 테이블 상에서 발생할 때에만 실행된다. 비교에 의해, 비구조적 예외 처리 구성에서, 캐치 블록은 트라이 블록 내부에서 갱신 충돌 예외가 있을 때마다 실행될 수 있다.
블록(502)에서 시작되어, 데이터 액세스 커널은 갱신 충돌 예외가 발생한 테이블 인스턴스를 추적할 수 있다. 커널은 갱신 충돌이 발생한 테이블 인스턴스의 커널 표현을 유지할 수 있다. C++ 프로그래밍 언어에서, 표현은 cqlCursor라고 칭해질 수 있다. X++ 프로그래밍 언어에서, 표현은 테이블을 나타내는 임의의 변수일 수 있다. 특히, 커널은 어느 테이블이 갱신 충돌 예외를 초래했는지 알 수 있도록, LastUpdateConflictingTable 속성이라고 칭해질 수 있는 커널 표현 cqlCursor를 테이블 속성에 넣을 수 있다. 한 예에서, 이 함수는 그 예가 아래에 제공되는 다음 스키마 cqlDatasourceSql::RaiseUpdateConflitError로 실행될 수 있는데, 이것은 갱신 충돌을 나타내는 특정 에러를 일으키고, 갱신 충돌 예외를 지정 하는 에러 코드를 나타내는 정수를 반환한다.
Figure 112008064910945-PCT00016
Figure 112008064910945-PCT00017
블록(504)에서, 루틴(500)은 사용자 또는 클라이언트에게 갱신 충돌 예외를 알린다. 특히, 루틴(500)은 서버/클라이언트 경계에 걸쳐 호출이 이루어질 때마다 클라이언트 측에서 적절하게 테이블 속성을 설정하도록 서버/클라이언트 호출을 통해 테이블 속성 LastUpdateConflictingTable을 설정한다. 클라이언트는 로컬 테이블 속성을 유지한다. 이와 같이, UpdateConflict 예외를 초래한 임의의 테이블은 그 테이블에 대한 클라이언트 측의 로컬 참조를 가져야 한다. 그러므로, 서버 시 스템(202)은 클라이언트에게 호를 막 반환하려고 할 때마다, UpdateConflict 예외가 있는지 확인하고, 클라이언트에게 다시 참조를 보낸다. 클라이언트는 UpdateConflict 예외가 있다는 것을 알고, 참조를 판독하며, 지역적으로 참조를 조사하여, 참조를 해석한다. 특히, 클라이언트는 예외 유형 및 로컬 참조를 확인하고, 그것을 역참조하며, 테이블 속성에 참조를 설정할 수 있다.
블록(506)에서, 구조적 예외 루틴(500)은 UpdateConflict 예외를 초래한 테이블 인스턴스를 노출시킨다. 예를 들어, LastUpdateConflictingTable 속성은 애플리케이션 클래스 상의 애플리케이션 코드에 노출될 수 있다. 블록(508)에서, 런타임 함수는 구조적 예외 처리를 가능하게 한다. 예를 들어, 바이트 코드는 함수 포인터 테이블에 대한 인덱스로서 사용될 수 있다. 함수는 해석 클래스에 추가되고, 바이트 코드에 매핑하여, 갱신 충돌에 대한 구조적 예외를 처리할 수 있다. 런타임 시에, 함수는 호출되고, 갱신 충돌이 발생한 예외 유형 및 테이블을 확인한다. 그 다음, 함수는 그들 둘이 일치할 때만 캐치 블록에 대한 다음 명령어를 설정한다. 그 다음, 제어는 갱신 충돌 처리 루틴(414)으로 넘어갈 수 있다.
갱신 충돌 예외의 처리
도 7은 도 5 및 도 6에 개략적으로 도시된 갱신 충돌 처리 루틴(414)의 예이고, 이 예는 갱신 충돌 검출 루틴(322) 동안에 발생할 수 있는 임의의 UpdateConflict 예외를 처리하기 위해 실행될 수 있다. 특히, 위에서 나타낸 바와 같이, UpdateConflict 예외의 처리는 예외가 발생할 때 데이터 트랜잭션을 자동으로 중단시키기보다는 오히려 데이터 트랜잭션 내에서 실행될 수 있다. 갱신 충돌 처리 루틴(600)은 애플리케이션 코드가 데이터를 재판독하고, 갱신 로직을 재적용하며, 다시 갱신을 시도할 수 있게 한다. 아래에 설명된 갱신 충돌 처리 루틴(414)이 UpdateConflict 예외의 보상을 예시적으로 나타내지만, 상이한 형태의 보상 로직이 이용될 수 있다는 것을 이해할 것이다.
일반적으로, 갱신문은 트라이 블록 내에서 발생하는 임의의 예외가 "캐치(catch)" 블록 내에서 캡처되도록, "트라이(try)" 블록 내에서 유지된다. 몇몇 경우에, 트라이 블록은 다른 트라이 블록 내에 중첩됨으로써, 다수의 트라이 블록 레벨을 생성한다. 갱신 충돌 처리 루틴(414)은 UpdateConflict 예외가 데이터 트랜잭션 내에서 처리될 수 있게 하고, 처리 실행이 다시 다음 트라이 블록 레벨로 이동하여 다른 캐치 블록 내에서 UpdateConflict 예외를 다시 캡처하기 전에, 각 트라이 블록 레벨의 캐치 블록 내에서 데이터 트랜잭션을 재판독하고 재시도하려고 시도함으로써 데이터 트랜잭션의 중단을 지연시킨다. 애플리케이션 코드는 충돌 예외가 캐치되어 처리될 때마다 이것을 실행할 수 있다. 더욱 구체적으로, 애플리케이션은 데이터베이스 내의 데이터 및 메모리 내의 개체 상태가 반드시 일관성 상태에 있게 할 수 있다. 데이터 트랜잭션은 일단 가장 바깥쪽 트라이 블록 레벨에 도달되고, 대응하는 캐치 블록이 실행되었거나 트랜잭션 레벨이 "0"에 도달한 경우에만 중단될 수 있다.
루틴(414)을 구현하기 위해, 트라이 블록 레벨은 데이터 트랜잭션이 각 트라이 블록으로 들어가고 각 트라이 블록에서 떠날 때, 트라이 레벨 카운트 tryLevelCount를 증가 및 감소시킴으로써 추적될 수 있다. 트라이 레벨 카운트는 서버 시스템(202)에 의해 클라이언트와 공유될 수 있다. 데이터 트랜잭션이 트라이 블록으로 들어가고 트라이 블록에서 떠날 때 트라이 블록 레벨을 추적하기 위한 동일한 의사-컴퓨터 코드 구현은 다음과 같이 될 수 있다:
Figure 112008064910945-PCT00018
Figure 112008064910945-PCT00019
중첩된 트라이 블록 레벨 이외에, 몇몇 경우에, 애플리케이션 코드는 다른 애플리케이션 코드 내에 래핑될 수 있다. 결과적으로, 데이터 트랜잭션은 다른 데이터 트랜잭션 내에 중첩될 수 있다. 갱신 충돌 처리 루틴(414)의 보상 로직을 적절하게 처리하기 위해, UpdateConflict 예외는 전체 데이터 트랜잭션이 롤백되었기 때문에 가장 바깥쪽 데이터 트랜잭션에 단순히 발생될 수 있다. 가장 바깥쪽 트랜잭션이 UpdateConflict 예외를 처리할 수 있게 하는 샘플 의사-컴퓨터 코드 구현은 다음과 같이 될 수 있다:
Figure 112008064910945-PCT00020
위의 예에서 알 수 있는 바와 같이, 중첩된 트라이 블록이 지원된다. 갱신 충돌이 발생했을 때 데이터 트랜잭션을 중단하기보다는 오히려, 중첩된 ttsbegin 및 ttscommit 블록은 새로운 데이터 트랜잭션을 시작하거나 커밋하지 않고 중첩 레벨이 증가하게 할 수 있다. 오히려, 그것은 외부 트랜잭션의 일부로서 포함된다. 트랜잭션은 가장 바깥쪽 중첩 레벨에 의해 시작되고 커밋되지만, 중첩 내의 어느 곳에서나 중단될 수 있다. 갱신 충돌이 트라이 블록 내부에서 발생되면, 트랜잭션의 중첩 레벨은 코드가 트라이 블록으로 들어갈 때의 레벨에 따르게 된다. 트랜잭션은 이 레벨이 0이면 중단된다. 갱신 충돌이 발생될 수 있는데, 이 갱신 충돌은 지정된 테이블에서 충돌이 발생할 때만 캐치 블록이 실행되는 구조적 예외 처리 구성을 사용하여 캐치될 수 있고, 또는 트라이 블록 내부에서 충돌이 발생할 때마다 캐치 블록이 실행되는 비구조적 예외 처리 구성을 사용하여 캐치될 수 있다. 어느 테이블이 충돌을 초래했는지 찾아내기 위해 애플리케이션 코드가 사용할 수 있는 메커니즘이 제공된다.
다시 도 7을 참조하면, 블록(602)에서 시작되어, 일단 UpdateConflict 예외가 발생되었으면, 데이터 트랜잭션은 캐치 블록으로 들어간다. 블록(604)에서, 갱신 충돌 처리 루틴(414)은 트라이 레벨 카운터를 확인함으로써 데이터 트랜잭션이 트라이 블록 내에 있는 지의 여부를 판정한다. 예를 들어, 트라이 레벨 카운트가 0의 값을 가지면, 데이터 트랜잭션은 더 이상 트라이 블록 내에 있지 않고, 블록(606)에서 중단될 수 있다. 데이터 트랜잭션이 트라이 블록 내에 있으면, 애플리케이션 코드는 데이터 트랜잭션의 재판독 및 재시도를 시도할 수 있다. 특히, 캐치 블록은 예외를 다시 다음 트라이 블록 레벨로 발생시키기 전에 미리 결정된 수의 재판독 및 재시도를 시도할 수 있다. 그러므로, 블록(608)에서, 갱신 충돌 처리 루틴(414)은 재시도의 수가 미리 결정된 한도를 초과했는지 판정한다. 그렇다면, 루틴(414)은 블록(610)에서 예외를 다시 다음 트라이 블록 레벨로 발생시킨다.
한편, 재시도의 수가 미리 결정된 레벨을 초과하지 않았으면, 루틴(414)은 데이터 트랜잭션의 롤백 또는 즉시 중단 없이 블록(612)에서 캐치 블록 내에서 행을 재판독하고 데이터 트랜잭션을 재시도했다. 블록(614)에서의 판정시에, UpdateConflict 예외가 성공적으로 처리되면, UpdateConflict 예외에 관한 대응하는 정보 로그는 블록(616)에서 삭제될 수 있고, 데이터 트랜잭션은 커밋될 수 있다. UpdateConflict 예외는 예를 들어, 데이터베이스로부터 데이터를 판독하고 갱신을 재시도함으로써 성공적으로 처리될 수 있다. 그러한 경우에, 갱신 잠금은 데 이터베이스에서 유지되지 않지만, 애플리케이션은 코드 처리시에 비관적 잠금으로 스위칭하는 것을 선택할 수 있고, 이 경우에, 갱신 잠금은 판독을 통해 유지되고, 갱신 후에 배타적 잠금으로 갱신된다. UpdateConflict 예외가 성공적으로 처리되지 않으면, 재시도 카운트는 1씩 증가될 수 있고, 제어는 다시 블록(608)으로 넘어갈 수 있다.
UpdateConflict 예외를 처리하는 단순한 의사-컴퓨터 코드 구현은 다음과 같이 될 수 있다. 다음 예에서, 트라이 캐치 레벨은 1이고, 5번 이하의 재시도가 허용된다.
Figure 112008064910945-PCT00021
다수의 갱신과 함께 UpdateConflict 예외를 처리하는 단순한 의사-컴퓨터 코드 구현은 다음과 같이 될 수 있다. 의사-컴퓨터 코드에 의해 시범적으로 나타낸 바와 같이, 제1 애플리케이션이 봉착한 갱신 충돌은 애플리케이션 코드에 의해 나타낸 바와 같이 데이터 트랜잭션이 중단되게 한다. 한편, 제2 애플리케이션이 봉착한 갱신 충돌은 재시도를 초래한다.
Figure 112008064910945-PCT00022
다수의 갱신과 함께 UpdateConflict 예외를 처리하기 위해 위에서 제공된 의사-컴퓨터 코드 예는 구조적 예외 처리 메커니즘을 이용한다. 대안적으로, 다수의 갱신과 함께 UpdateConflict 예외의 비구조적 처리를 위한 단순한 의사-컴퓨터 코드는 아래에 제공된다. 다시, 제1 애플리케이션은 데이터 트랜잭션을 중단하는 반면, 제2 애플리케이션은 데이터 트랜잭션을 재시도한다.
Figure 112008064910945-PCT00023
Figure 112008064910945-PCT00024
상대 갱신
앞에서 나타낸 바와 같이, 몇몇 경우에, 갱신은 상대 갱신에 관련될 수 있고, 이 경우에, 버전 ID 확인은 이용되지 않는다. 그럼에도 불구하고, 상대 갱신은 갱신 충돌을 감소시키기 위해 이용될 수 있고, 특히 실수 및 정수 필드 유형에 유용할 수 있다. 데이터 항목에 대한 갱신이 절대적인 것과 반대되는 상대적인 것이면, 갱신은 다음과 같은 형태: update table1 set field1 = field1 + change로 실행되는 반면에, 절대 갱신은 다음과 같이: update table1 set field1 = finalValue로 실행될 수 있다. 예를 들어, 2개의 동시 데이터 트랜잭션은 필드의 새로운 값을 지정하는 것과 반대로, 필드가 "8"의 초기 값을 갖는 경우에, 필드 값을 "2"씩 감소시키는 것을 각각 원할 수 있다. 상대 갱신 감소는 제1 데이터 트랜잭션에 응답하여 초기 값이 2만큼 감소되게 하고, 제2 데이터 트랜잭션에 응답하여 새로운 값을 다시 2만큼 감소시켜서, "4"의 최종 값을 제공한다. 상대 갱신의 장 점은 상대 갱신 포맷의 특성이 다른 사용자의 변경에 대해 견뎌내게 하기 때문에, 판독과 갱신 사이에 변경이 발생하더라도, 상대 갱신이 다른 사용자의 변경을 덮어쓰지 않는다는 것이다. 따라서, 모든 필드가 상대 갱신을 사용하여 갱신되면, 버전 ID 확인이 취소될 수 있다. 상대 갱신을 구현하기 위해, 갱신 필드는 상대 갱신을 사용하는 것으로 표시될 수 있다.
도 8은 데이터 항목에 관해 상대 갱신을 실행하기 위해 사용될 수 있는 상대 갱신 루틴(700)의 예이다. 블록(702)에서 시작되어, 상대 갱신 루틴(700)은 갱신문이 상대 갱신을 요구하는 지의 여부 및/또는 갱신되는 필드가 상대 갱신을 사용하는 것으로 표시되는 지의 여부를 판정한다. 갱신이 상대 갱신이 아니면, 제어는 다시 낙관적 동시성 제어 루틴(300)과 관련될 수 있다. 상대 갱신이 이용될 수 있는지 판정하기 위한 의사-컴퓨터 코드 예가 아래에 제공된다. 설명된 바와 같이, 버전 ID가 이용되지 않기 때문에, 버전 ID와 관련된 필드는 무시된다.
Figure 112008064910945-PCT00025
트랜잭션 시맨틱스가 유지되어야 하는데, 여기에서는 잠재적으로 한 테이블 내의 동일한 행에 대한 다수의 참조가 유지될 수 있고, 다수의 동작이 다수의 참조에 관해 실행될 수 있다. 갱신이 실행될 때, 갱신되는 동일한 행에 대한 참조를 유지하는 변수에 관한 버전 ID는 동일한 트랜잭션에서 판독된 것처럼 갱신된다. RecVersion 열 이외에, 2개의 다른 열: TransactionRecVersion 및 OriginalRecVersion이 추가될 수 있는데, 고유 TransactionRecVersion은 각각의 새로운 트랜잭션마다 생성되고, 이 트랜잭션 내에서의 제1 갱신이 한 행에 이르게 될 때, TransactionRecVersion은 방금 생성한 새로운 것을 사용하여 갱신되고, 기존의 RecVersion은 OriginalRecVersion에 할당된다. 갱신은 TransactionRecVersion이 현재 트랜잭션의 버전과 일치하고, OriginalRecVersion이 메모리내의 RecVersion과 일치하는(트랜잭션이 행을 소유한다는 것을 의미함) 경우에, 또는 RecVersion이 메모리 내의 RecVersion과 일치하는 경우에 행할 수 있게 된다. 갱신이 이루어질 때마다, RecVersion은 갱신될 수 있다.
임의의 갱신에서와 같이, 루틴(700)은 갱신된 필드의 ID 값을 갱신할 수 있다. 그러나, 상대 갱신 루틴(700)이 ID 값을 확인하지 않기 때문에, 아래의 차트에 의해 나타낸 바와 같이, ID 값이 위에서 설명된 기술을 사용하여 새로운 값으로 갱신되는 경우에 갱신이 다른 데이터 트랜잭션 갱신을 덮어쓸 가능성이 존재한다:
시간 트랜잭션 1 트랜잭션 2 데이터베이스 내의 테이블 t의 행 r의 RecVersion
T1 Ttsbegin; forupdate 선택; 메모리 내의 RecVersion = v; Ttsbegin; forupdate r1 선택; forupdate r2 선택; R1.RecVersion = v; R2.RecVersion = v; V(커밋됨)
T2 갱신; 메모리 내의 RecVersion = v1; 커밋; V1(커밋됨)
T3 상대 모드로 r1을 갱신; RecVersion이 확인될 필요가 없기 때문에 갱신이 계속됨; R1.RecVersion = v2; R2.RecVersion = v2;( 이것은 당신이 r2를 통해 갱신할 수 있도록 갱신됨) V2(커밋됨)
T4 절대 모드로 r2를 갱신; 커밋; 버전들이 일치하기 때문에 커밋이 계속됨; 이것은 시간 T2에서 트랜잭션 1에 의해 이루어진 변경을 덮어쓸 수 있음 V3(커밋됨)
위에서 나타낸 바와 같이, 제1 데이터 트랜잭션은 초기 버전 ID 값 V를 판독하고 데이터 항목을 갱신함으로써 버전 ID 값이 V1로 갱신되게 할 수 있다. 그러나, 제2 데이터 트랜잭션은 갱신 전에 기입 동작을 시작하고, 2개의 갱신을 실행하는데, 제1 갱신은 상대 갱신이고, 후속되는 제2 갱신은 절대 갱신이다. 제2 데이터 트랜잭션의 제1 갱신은 갱신이 상대 갱신이기 때문에 버전 ID 값을 확인하지 않는다. 그럼에도 불구하고, 제1 갱신은 새로운 버전 ID 값 V2를 제공한다. 제2 데이터 트랜잭션의 제2 갱신은 판독 동안에 버전 ID 값 V2를 얻고, 갱신시에 버전 ID 값 V2를 사용하며, 데이터 항목을 갱신하고, 데이터 트랜잭션을 성공적으로 커밋하는데, 그 이유는 갱신 동안의 버전 ID 값 V2가 제2 갱신 전에 초기에 판독된 버전 ID 값 V2와 일치하기 때문이다. 결과적으로, 제2 데이터 트랜잭션은 제1 데이터 트랜잭션에 의해 이루어진 변경을 덮어쓸 수 있다.
이러한 가능성을 해결하기 위해, 새로운 버전 ID는 갱신이 상대 갱신으로서 실행될 때 상대 버전 ID로서 계산된다. 특히, 루틴(700)은 블록(704)에서 위에서 제공된 버전 ID에 대한 새로운 값을 계산한다. 블록(706)에서, 상대 갱신 루틴(700)은 새로운 버전 ID와 기존의 버전 ID 사이의 차를 계산하고, 블록(708)에서, 갱신된 데이터 항목의 버전 ID를, "update...set RecVersion = RecVersion + delta"로 표현될 수 있는 버전 ID 값 + 차로 설정하도록 갱신을 발행한다. 블록(710)에서, 갱신이 실행된다. 그러므로, 동일한 트랜잭션 내에서 판독된 동일한 행에 대한 모든 참조에 대해, 버전 ID는 또한 차를 사용하여 갱신된다. 행을 갱신하는 다른 트랜잭션이 더 이상 없으면, 데이터베이스 내의 버전 ID 값은 동일한 원래의 버전 ID값을 갖는 동일한 트랜잭션에서 판독된 메모리 내의 모든 참조의 버전 ID 값과 일치하고, 장래의 갱신은 이들 행에서 계속된다. 한편, 상대 갱신이 이루어지기 전에 소정의 다른 트랜잭션에 의해 행이 갱신되었으면, 버전 ID는 일치하지 않았을 것이고, 임의의 장래의 갱신은 UpdateConflict 예외를 일으킬 것이다.
테이블간 종속성
몇몇 경우에, 테이블(예를 들어, 테이블 A) 내의 몇몇 열의 값은 다른 테이블(예를 들어, 테이블 B)의 몇몇 열의 값에 기초하여 계산될 수 있다. 예를 들어, 테이블 A 내의 데이터 항목에 대한 갱신은 처음에 테이블 B로부터 값을 판독할 수 있는데, 테이블 A 내의 데이터 항목을 갱신하기 전에, 다른 사용자가 테이블 B의 값을 갱신한다. 결과적으로, 테이블 A 내의 데이터 항목에 대한 후속되는 갱신은 테이블 B로부터의 오래된 값에 기초하게 된다.
테이블간 종속성에 의해 야기되는 그러한 일관성 값을 해결하기 위해, 커널 데이터 액세스 계층은 반복가능 판독 힌트를 애플리케이션 코드에 공급할 수 있다. 반복가능 판독 힌트는 데이터 트랜잭션이 끝날 때까지 인출된 데이터에 관해 공유 잠금을 유지하는 서버 시스템(202)에 대한 반복가능 판독 잠금 힌트 RepeatableRead로 변환된다. 반복가능 판독 잠금 힌트는 특정 판독문에만 적용되고, 전체 데이터 트랜잭션에는 적용되지 않는다. 반복가능 판독 잠금 힌트의 부재시에, 공유 잠금은 판독 동작 직후에 해제된다. 이것은 데이터 트랜잭션이 커밋될 때까지 다른 사용자가 행을 갱신하지 못하게 할 수 있다. 고유 잠금들은 동일한 스크립트를 실행하는 다수의 사용자가 서로로부터 차단되지 않도록 서로 호환된다.
도 9는 다른 테이블로부터의 값에 의존하여 데이터 항목을 갱신하기 위해 사용될 수 있는 테이블간 종속성 루틴(800)의 예이다. 블록(802)에서, 루틴(800)은 애플리케이션 코드로부터 반복가능 판독 힌트를 수신할 수 있는데, 이 반복가능 판독 힌트는 서버 시스템(202)에 대한 반복가능 판독 잠금 힌트로 변환된다. 반복가능 판독 힌트의 부재시에, 블록(804)에서, 공유 잠금은 판독 동작 직후에 해제되고, 트랜잭션은 커밋된다. 반복가능 판독 힌트가 제공되면, 블록(806)에서, 인출된 데이터에 대한 테이블 A와 테이블 B 둘 다에 관한 공유 잠금은 데이터 트랜잭션의 기간 동안에 제공되어, 트랜잭션이 커밋될 때까지 다른 사용자가 데이터 항목을 갱신하지 못하게 한다. 블록(808)에서, 데이터 항목은 테이블 B로부터 인출된다. 블록(810)에서, 테이블 A의 데이터 항목은 테이블 B로부터의 갱신된 데이터 항목에 기초하여 계산되고, 블록(812)에서 갱신된다. 블록(814)에서, 공유 잠금이 해제되고, 데이터 트랜잭션이 커밋된다.
상기 명세서는 본 발명의 다수의 상이한 실시예의 상세한 설명을 나타내지만, 본 발명의 범위는 이 특허의 끝 부분에 설명된 청구범위의 표현에 의해 정의된다는 것을 이해할 것이다. 상세한 설명은 예시적으로만 해석되고, 모든 가능한 실시예를 설명하는 것이 불가능하지는 않지만 비현실적일 수 있으므로 모든 가능한 실시예를 설명하지는 못한다. 다수의 대안적인 실시예는 현재의 기술, 또는 본 발명을 정의하는 청구범위에 여전히 속하는 이 특허의 출원일 후에 개발된 기술을 사용하여 구현될 수 있다.
그러므로, 다수의 변경 및 변형은 본 발명의 정신 및 범위를 벗어나지 않고 여기에서 설명되고 도시된 기술 및 구조에서 행해질 수 있다. 따라서, 여기에서 설명된 방법 및 장치는 예시적인 것일 뿐이고 본 발명의 범위를 제한하는 것이 아니라는 것을 이해할 것이다.

Claims (20)

  1. 다수의 행이 있는 테이블 내에 데이터를 유지하도록 적응된 데이터베이스를 포함하는 기업 자원 계획 시스템 내에서의 동시성 제어 방법에 있어서,
    제1 데이터 트랜잭션 동안에 제1 테이블의 행 내의 데이터를 갱신하기 위한 기입 요청을 요청 애플리케이션으로부터 수신하는 단계(302) - 상기 행은 갱신되는 데이터의 버전을 고유하게 식별하는 제1 버전 ID를 포함함-;
    상기 갱신되는 데이터의 상기 제1 버전 ID를, 상기 제1 데이터 트랜잭션 동안에 이전의 판독 요청에 응답하여 데이터가 인출되었을 때 상기 행 내의 데이터 버전을 고유하게 식별하는 제2 버전 ID와 비교하는 단계(408); 및
    상기 제1 버전 ID가 상기 제2 버전 ID와 일치하지 않으면 예외를 발생시키는(throwing) 단계(412)
    를 포함하는 동시성 제어 방법.
  2. 제1항에 있어서,
    상기 제1 버전 ID가 상기 제2 버전 ID와 일치하면 제2 데이터 트랜잭션이 상기 행 내의 데이터를 갱신하지 못하게 하기 위해 제2 데이터 트랜잭션의 기입 요청으로부터 상기 데이터를 잠그는 단계(416);
    상기 행 내의 데이터를 갱신하는 단계(416);
    상기 제1 데이터 트랜잭션을 커밋(commit)하는 단계(418);
    상기 데이터 상의 잠금을 해제하는 단계(420); 및
    상기 갱신된 데이터의 버전을 고유하게 식별하는 제3 버전 ID를 생성하는 단계
    를 더 포함하는 동시성 제어 방법.
  3. 제2항에 있어서, 상기 데이터가 기입 요청으로부터 잠겨있는 제2 데이터 트랜잭션 동안에 요청 애플리케이션으로부터의 판독 요청에 응답하여 상기 제1 테이블의 행 내의 데이터 판독을 허용하는 단계를 더 포함하는 동시성 제어 방법.
  4. 제1항에 있어서, 상기 제1 데이터 트랜잭션 동안에 상기 요청 애플리케이션으로부터의 데이터 판독 요청에 응답하여 데이터를 인출하는 단계;
    상기 인출된 데이터를 고유하게 식별하는 상기 제1 버전 ID를 저장하는 단계;
    제2 데이터 트랜잭션이 상기 데이터를 갱신할 수 있게 하는 단계; 및
    상기 제2 데이터 트랜잭션의 상기 갱신된 데이터를 고유하게 식별하는 제2 버전 ID를 생성하는 단계
    를 더 포함하고, 상기 제2 데이터 트랜잭션의 상기 갱신된 데이터는 상기 제1 데이터 트랜잭션 동안에 갱신되는 데이터를 포함하는 동시성 제어 방법.
  5. 제1항에 있어서, 상기 예외 발생 단계는 상기 요청 애플리케이션의 애플리케 이션 코드에 상기 예외를 발생시키는 단계(412)를 포함하는 동시성 제어 방법.
  6. 제1항에 있어서, 상기 기입 요청은 제1 트라이(try) 블록 내에 들어있는 상기 요청 애플리케이션의 갱신문(update statement)으로부터 생성되고, 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 단계는
    상기 트라이 블록의 캐치(catch) 블록 내에서 상기 예외를 캐치하는 단계(602);
    상기 행으로부터 상기 제2 버전 ID를 재판독하는 단계(612); 및
    상기 제1 버전 ID와 상기 제2 버전 ID의 비교를 재시도하는 단계(612)
    를 포함하는 동시성 제어 방법.
  7. 제6항에 있어서, 상기 제1 트라이 블록은 제2 트라이 블록 내에 중첩되고, 상기 방법은 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 단계를 더 포함하는데, 상기 예외 처리 단계는
    상기 제1 트라이 블록의 상기 캐치 블록 내에서의 상기 제1 버전 ID와 상기 제2 버전 ID의 비교의 재시도가 예외를 발생시키면 실행 처리를 다시 상기 제2 트라이 블록으로 이동하는 단계(614); 및
    상기 제2 트라이 블록 내에서 상기 예외를 처리하고자 시도하는 단계(612)
    를 포함하는 동시성 제어 방법.
  8. 제6항에 있어서, 상기 제1 데이터 트랜잭션을 처리하는 단계는 상기 제1 트라이 블록의 상기 캐치 블록 내에서의 상기 제1 버전 ID와 상기 제2 버전 ID의 비교의 재시도가 예외를 발생시키는 경우 및 상기 제1 트라이 블록이 제2 트라이 블록 내에 중첩되지 않는 경우에 상기 제1 데이터 트랜잭션을 중단시키는 단계(604, 606)를 포함하는 동시성 제어 방법.
  9. 제1항에 있어서, 상기 제1 데이터 트랜잭션은 제2 데이터 트랜잭션 내에 중첩되고, 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 단계는 실행 처리를 다시 상기 제2 데이터 트랜잭션으로 이동하는 단계(608, 610)를 포함하는 동시성 제어 방법.
  10. 제1항에 있어서, 상기 제1 버전 ID는 다음 중의 하나: 즉, 갱신되는 데이터에 기초한 난수(random number) 또는 제1 랜덤 시드(seed)에 기초한 난수 중의 하나를 포함하고, 상기 제2 버전 ID 숫자는 다음 중의 하나: 즉, 상기 제1 데이터 트랜잭션 동안에 이전의 판독 요청에 응답하여 데이터가 인출되었을 때의 데이터에 기초한 난수, 또는 제2 랜덤 시드에 기초한 난수 중의 하나를 포함하는 동시성 제어 방법.
  11. 제1항에 있어서, 제2 테이블의 행 내의 데이터는 상기 갱신되는 데이터에 의존하고, 상기 방법은
    제2 테이블 데이터의 행 내의 데이터가 상기 제1 테이블의 행 내의 데이터로부터 계산되는 경우에 제2 데이터 트랜잭션이 상기 제1 테이블의 행 내의 데이터를 갱신하지 못하게 하기 위해 제2 데이터 트랜잭션의 기입 요청으로부터 상기 제1 테이블의 행 내의 데이터를 잠그는 단계(806);
    상기 제2 데이터 트랜잭션이 상기 제2 테이블의 행 내의 데이터를 갱신하지 못하게 하기 위해 제2 데이터 트랜잭션의 기입 요청으로부터 상기 제2 테이블의 행 내의 데이터를 잠그는 단계(806);
    상기 제1 테이블의 행 내의 데이터를 인출하는 단계(808);
    상기 제1 테이블의 행 내의 데이터를 갱신하는 단계(808);
    상기 제1 테이블의 행 내의 상기 갱신된 데이터에 최소한 부분적으로 기초하여 상기 제2 테이블의 행 내의 데이터를 결정하는 단계(810);
    상기 제2 테이블의 행 내의 데이터를 갱신하는 단계(812);
    상기 제1 데이터 트랜잭션을 커밋하는 단계(814); 및
    상기 제1 및 제2 테이블의 행 내의 데이터 상의 잠금을 해제하는 단계(814)
    를 더 포함하는 동시성 제어 방법.
  12. 제1항에 있어서,
    상기 제1 테이블의 행 내의 데이터의 현재 값에 상대적으로 의존하여 상기 제1 테이블의 행 내의 데이터의 새로운 값을 제공하기 위한 갱신을 상기 기입 요청이 포함하는 경우에 상기 제1 버전 ID와 제2 버전 ID를 비교하지 않고 상기 데이터 를 갱신하는 단계(710);
    제3 버전 ID를 생성하는 단계(704);
    상기 제2 버전 ID와 상기 제3 버전 ID 사이의 차를 결정하는 단계(706); 및
    상기 갱신된 데이터의 버전을 고유하게 식별하는 버전 ID를 상기 제2 버전 ID 값 + 상기 차로 설정하도록 갱신을 발행하는 단계(708)
    를 더 포함하는 동시성 제어 방법.
  13. 제1 테이블의 제1 행 내의 데이터에 관한 다수의 데이터 트랜잭션 사이의 동시성 제어 방법을 구현하는 컴퓨터 실행가능 명령어를 갖는 컴퓨터 판독가능 매체에 있어서, 상기 컴퓨터 실행가능 명령어는,
    제1 버전 ID와 제2 버전 ID를 비교하는 명령어(410) - 상기 제1 버전 ID는 제1 데이터 트랜잭션의 판독 요청 동안에 제1 행으로부터의 데이터의 버전을 고유하게 식별하고, 상기 제2 버전 ID는 상기 제1 데이터 트랜잭션의 기입 요청 동안에 제1 행으로부터의 데이터의 버전을 고유하게 식별함-;
    상기 제1 버전 ID가 상기 제2 버전 ID와 일치하지 않으면 예외를 발생시키는 명령어(412); 및
    상기 제1 테이블이 낙관적(optimistic) 동시성 제어를 위해 사용가능하게 되는 경우에 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 명령어(414)
    를 포함하는 컴퓨터 판독가능 매체.
  14. 제13항에 있어서, 상기 기입 요청은 상기 요청 애플리케이션의 갱신문으로부터 생성되고, 상기 갱신문은 상기 제1 테이블이 낙관적 동시성 제어를 위해 사용가능하게 되는 경우에 상기 낙관적 동시성 제어의 무효화(override)를 포함하며, 상기 컴퓨터 실행가능 명령어는 제2 데이터 트랜잭션 동안에 요청 애플리케이션으로부터의 기입 동작의 임의의 판독 요청들 또는 기입 요청들에 대해 상기 제1 테이블의 제1 행을 잠그는 명령어(312)를 더 포함하고, 상기 잠금은 상기 제1 데이터 트랜잭션의 기간 동안에 유지되는 컴퓨터 판독가능 매체.
  15. 제13항에 있어서, 상기 기입 요청은 상기 요청 애플리케이션의 갱신문으로부터 생성되고, 상기 갱신문은 비관적(pessimistic) 잠금을 가능하게 하는 갱신 힌트(hint)를 포함하며, 상기 컴퓨터 실행가능 명령어는 상기 제1 테이블이 낙관적 동시성 제어를 위해 사용가능하게 되는 경우에 상기 비관적 잠금을 가능하게 하는 갱신 힌트를 사용 불가능하게 하는 명령어(310)를 더 포함하는 컴퓨터 판독가능 매체.
  16. 제13항에 있어서, 상기 제1 테이블이 낙관적 동시성 제어를 위해 사용 불가능하게 되는 경우에 상기 데이터 트랜잭션의 기간 동안에 상기 데이터 항목의 비관적 잠금을 실행하는 명령어(312)를 더 포함하고, 상기 비관적 잠금은
    제2 데이터 트랜잭션 동안에 요청 애플리케이션으로부터의 임의의 판독 요청들 및 기입 요청들에 대해 상기 제1 행을 잠그는 명령어(312); 및
    상기 제1 버전 ID를 상기 제2 버전 ID와 비교하지 않고 상기 제1 행을 갱신하는 명령어(316)
    를 포함하는 컴퓨터 판독가능 매체.
  17. 제13항에 있어서, 상기 기입 요청은 제1 트라이 블록 내에 들어있는 상기 요청 애플리케이션의 갱신문으로부터 생성되고, 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 명령어는
    상기 트라이 블록의 캐치 블록 내에서 상기 예외를 캐치하는 명령어(602);
    상기 행으로부터 상기 제2 버전 ID를 재판독하는 명령어(612); 및
    상기 제1 버전 ID와 상기 제2 버전 ID의 비교를 재시도하는 명령어(612)
    를 포함하는 컴퓨터 판독가능 매체.
  18. 기업 자원 계획 네트워크에 참여하도록 적응된 컴퓨터에 있어서,
    네트워크를 통해 데이터를 수신하는 네트워크 통신 장치(170, 172);
    기계-판독가능 명령어를 저장하는 메모리(130, 140, 150); 및
    방법을 수행하는 상기 기계-판독가능 명령어를 실행하는 프로세서(120)
    를 포함하는데, 상기 명령어는
    제1 데이터 트랜잭션 동안에 데이터베이스 내에 저장된 제1 테이블의 제1 행을 판독하기 위한 판독 요청을 요청 애플리케이션으로부터 수신하는 명령어(302);
    상기 제1 행으로부터 판독된 데이터의 버전을 고유하게 식별하는 제1 버전 ID를 저장하는 명령어(302);
    제1 데이터 트랜잭션 동안에 제1 행을 갱신하기 위한 기입 요청을 요청 애플리케이션으로부터 수신하는 명령어(302);
    제1 버전 ID를, 상기 기입 요청이 수신될 때 제1 행으로부터의 데이터의 버전을 고유하게 식별하는 제2 버전 ID와 비교하는 명령어(410);
    상기 제1 버전 ID가 상기 제2 버전 ID와 일치하지 않으면 상기 요청 애플리케이션에 예외를 발생시키는 명령어(412); 및
    상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 명령어(414)
    를 포함하는 컴퓨터.
  19. 제18항에 있어서, 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 명령어는
    상기 행으로부터 상기 제2 버전 ID를 재판독하는 명령어(612); 및
    상기 제1 버전 ID와 상기 제2 버전 ID의 비교를 재시도하는 명령어(612)
    를 포함하는 컴퓨터.
  20. 제18항에 있어서, 상기 기입 요청은 제1 트라이 블록 내에 들어있는 상기 요청 애플리케이션의 갱신문으로부터 생성되고, 상기 제1 데이터 트랜잭션 내에서 상기 예외를 처리하는 명령어는
    상기 제1 트라이 블록이 제2 트라이 블록 내에 중첩되는 경우 및 상기 제1 트라이 블록 내에서의 예외의 처리가 예외를 발생시키게 되는 경우에, 실행 처리를 다시 제2 트라이 블록으로 이동하고, 제2 트라이 블록 내에서 예외를 처리하는 명령어(608, 610, 612, 614); 및
    상기 제1 트라이 블록이 제2 트라이 블록 내에 중첩되지 않는 경우 및 상기 제1 트라이 블록 내에서의 예외의 처리가 예외를 발생시키게 되는 경우에, 상기 제1 데이터 트랜잭션을 중단시키는 명령어(604, 606)
    를 포함하는 컴퓨터.
KR1020087022484A 2006-03-17 2007-01-16 기업 자원 계획 시스템 내에서의 동시성 제어 방법, 컴퓨터판독가능 매체 및 컴퓨터 KR20080106431A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/378,890 2006-03-17
US11/378,890 US7933881B2 (en) 2006-03-17 2006-03-17 Concurrency control within an enterprise resource planning system

Publications (1)

Publication Number Publication Date
KR20080106431A true KR20080106431A (ko) 2008-12-05

Family

ID=38519162

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087022484A KR20080106431A (ko) 2006-03-17 2007-01-16 기업 자원 계획 시스템 내에서의 동시성 제어 방법, 컴퓨터판독가능 매체 및 컴퓨터

Country Status (7)

Country Link
US (1) US7933881B2 (ko)
EP (1) EP2011045A1 (ko)
KR (1) KR20080106431A (ko)
CN (1) CN101405735B (ko)
BR (1) BRPI0708732A2 (ko)
RU (1) RU2417427C2 (ko)
WO (1) WO2007108859A1 (ko)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7818740B2 (en) * 2006-05-05 2010-10-19 Microsoft Corporation Techniques to perform gradual upgrades
US7571165B2 (en) * 2006-09-28 2009-08-04 Sap Ag Method and system for providing locking behavior
US8041692B2 (en) * 2007-04-09 2011-10-18 Hewlett-Packard Development Company, L.P. System and method for processing concurrent file system write requests
US8091094B2 (en) 2007-10-10 2012-01-03 Sap Ag Methods and systems for ambistateful backend control
US7895172B2 (en) * 2008-02-19 2011-02-22 Yahoo! Inc. System and method for writing data dependent upon multiple reads in a distributed database
US8914341B2 (en) * 2008-07-03 2014-12-16 Tripwire, Inc. Method and apparatus for continuous compliance assessment
US8073778B2 (en) * 2008-09-11 2011-12-06 Linden Research, Inc. Scalable distributed transaction manager for multi-host transactions
US8332443B2 (en) * 2008-12-19 2012-12-11 Microsoft Corporation Masterless distributed batch scheduling engine
US8719845B2 (en) 2010-05-19 2014-05-06 Microsoft Corporation Sharing and synchronization of objects
US8768902B2 (en) 2010-06-11 2014-07-01 Microsoft Corporation Unified concurrent changes to data, schema, and application
US8386421B2 (en) 2010-06-28 2013-02-26 Microsoft Corporation Concurrency control for confluent trees
US8412689B2 (en) * 2010-07-07 2013-04-02 Microsoft Corporation Shared log-structured multi-version transactional datastore with metadata to enable melding trees
CN102456017A (zh) * 2010-10-18 2012-05-16 北京市金蝶政务软件有限公司 存储数据的方法和装置
US9848106B2 (en) 2010-12-21 2017-12-19 Microsoft Technology Licensing, Llc Intelligent gameplay photo capture
US9003519B2 (en) * 2011-05-16 2015-04-07 At&T Intellectual Property I, L.P. Verifying transactions using out-of-band devices
CN102436633A (zh) * 2011-11-30 2012-05-02 华为技术有限公司 数据管理方法及系统、数据库系统
US9110940B2 (en) 2012-02-29 2015-08-18 Red Hat, Inc. Supporting transactions in distributed environments using a local copy of remote transaction data and optimistic locking
US8832050B2 (en) * 2012-03-09 2014-09-09 Hewlett-Packard Development Company, L.P. Validation of distributed balanced trees
US9774676B2 (en) 2012-05-21 2017-09-26 Google Inc. Storing and moving data in a distributed storage system
US9449006B2 (en) 2012-06-04 2016-09-20 Google Inc. Method and system for deleting obsolete files from a file system
US9659038B2 (en) 2012-06-04 2017-05-23 Google Inc. Efficient snapshot read of a database in a distributed storage system
US9747310B2 (en) * 2012-06-04 2017-08-29 Google Inc. Systems and methods of increasing database access concurrency using granular timestamps
US9230000B1 (en) 2012-06-04 2016-01-05 Google Inc. Pipelining Paxos state machines
US20140067480A1 (en) * 2012-09-05 2014-03-06 Rocket Software, Inc. Systems and methods for enterprise-level context management
CN104239357B (zh) * 2013-06-21 2019-01-18 Sap欧洲公司 用于数据库事务的并发请求处理
US9659050B2 (en) 2013-08-06 2017-05-23 Sybase, Inc. Delta store giving row-level versioning semantics to a non-row-level versioning underlying store
US9489409B2 (en) 2013-10-17 2016-11-08 Sybase, Inc. Rollover strategies in a N-bit dictionary compressed column store
US10282228B2 (en) * 2014-06-26 2019-05-07 Amazon Technologies, Inc. Log-based transaction constraint management
CN104573833A (zh) * 2014-12-31 2015-04-29 普天新能源有限责任公司 一种充电预约方法
US9679003B2 (en) * 2015-01-07 2017-06-13 International Business Machines Corporation Rendezvous-based optimistic concurrency control
US10489374B2 (en) 2015-06-01 2019-11-26 International Business Machines Corporation In-place updates with concurrent reads in a decomposed state
US9514046B1 (en) 2015-06-10 2016-12-06 International Business Machines Corporation Dynamic detection and software correction of incorrect lock and atomic update hint bits
US9921953B2 (en) 2015-09-09 2018-03-20 International Business Machines Corporation Dynamic detection and correction of incorrect lock and atomic update hint bits
JP2017078981A (ja) * 2015-10-21 2017-04-27 富士通株式会社 排他切り替えプログラム及び排他切り替え方法
US11080261B2 (en) 2016-01-29 2021-08-03 Hewlett Packard Enterprise Development Lp Hybrid concurrency control
CN106921646B (zh) * 2016-07-26 2020-11-20 创新先进技术有限公司 业务处理方法及装置
CN106919640A (zh) * 2016-11-16 2017-07-04 阿里巴巴集团控股有限公司 一种业务处理方法和装置
CN106776052B (zh) * 2016-12-07 2019-12-10 金蝶软件(中国)有限公司 共享资源访问方法和装置
US10810188B2 (en) * 2017-11-29 2020-10-20 Teradata Us, Inc. Load committed isolation processing
US11423003B2 (en) 2017-12-11 2022-08-23 Micro Focus Llc Optimistic concurrency control for database transactions
CN108769260B (zh) * 2018-06-29 2020-10-16 苏州浪潮智能科技有限公司 一种集群升级过程中事件处理方法及其装置
US11023445B2 (en) * 2018-07-24 2021-06-01 Sap Se Optimistic concurrency for collaborative applications
US11640383B2 (en) 2018-11-15 2023-05-02 Huawei Technologies Co., Ltd. Systems and methods for managing a shared database
FR3090929B1 (fr) * 2018-12-20 2021-07-02 Amadeus Sas Actualisation de multiples enregistrements de données
US11347713B2 (en) * 2019-09-27 2022-05-31 Salesforce.Com, Inc. Version-based table locking
CN110765143B (zh) * 2019-10-10 2022-08-02 腾讯科技(深圳)有限公司 数据处理方法、装置、服务器和存储介质
CN115098228B (zh) * 2021-05-19 2023-04-14 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
US11880388B2 (en) * 2022-06-13 2024-01-23 Snowflake Inc. Hybrid table secondary index for lookups, unique checks, and referential integrity constraints

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5263156A (en) 1990-12-20 1993-11-16 Bell Communications Research, Inc. Parallel, distributed optimistic concurrency control certification using hardware filtering
US5857197A (en) 1997-03-20 1999-01-05 Thought Inc. System and method for accessing data stores as objects
US5920857A (en) 1997-08-04 1999-07-06 Naphtali Rishe Efficient optimistic concurrency control and lazy queries for B-trees and other database structures
US6125371A (en) * 1997-08-19 2000-09-26 Lucent Technologies, Inc. System and method for aging versions of data in a main memory database
US6249803B1 (en) * 1997-12-18 2001-06-19 Sun Microsystems, Inc. Method and apparatus for executing code during method invocation
US6240413B1 (en) 1997-12-22 2001-05-29 Sun Microsystems, Inc. Fine-grained consistency mechanism for optimistic concurrency control using lock groups
US6195685B1 (en) 1998-05-22 2001-02-27 International Business Machines Corporation Flexible event sharing, batching, and state consistency mechanisms for interactive applications
US6338086B1 (en) 1998-06-11 2002-01-08 Placeware, Inc. Collaborative object architecture
US6363387B1 (en) 1998-10-20 2002-03-26 Sybase, Inc. Database system providing methodology for enhancing concurrency using row update bit and deferred locking
US6636242B2 (en) * 1999-08-31 2003-10-21 Accenture Llp View configurer in a presentation services patterns environment
US6598041B1 (en) 2000-09-07 2003-07-22 International Business Machines Corporation Method, system, and program for processing modifications to data in tables in a database system
US6681226B2 (en) 2001-01-30 2004-01-20 Gemstone Systems, Inc. Selective pessimistic locking for a concurrently updateable database
US6928582B2 (en) * 2002-01-04 2005-08-09 Intel Corporation Method for fast exception handling
US7139690B2 (en) * 2002-07-22 2006-11-21 Microsoft Corporation Object-level conflict detection in an object-relational database system
US7827135B2 (en) 2002-12-31 2010-11-02 International Business Machines Corporation Method and apparatus for relaxed transactional isolation in a client-server caching architecture
US7290015B1 (en) * 2003-10-02 2007-10-30 Progress Software Corporation High availability via data services
US7599908B2 (en) * 2005-11-18 2009-10-06 Sap Ag Logical locking for Java Data Objects

Also Published As

Publication number Publication date
BRPI0708732A2 (pt) 2011-06-14
US20070219999A1 (en) 2007-09-20
EP2011045A1 (en) 2009-01-07
CN101405735B (zh) 2011-12-14
WO2007108859A1 (en) 2007-09-27
RU2417427C2 (ru) 2011-04-27
US7933881B2 (en) 2011-04-26
CN101405735A (zh) 2009-04-08
RU2008137135A (ru) 2010-03-27

Similar Documents

Publication Publication Date Title
KR20080106431A (ko) 기업 자원 계획 시스템 내에서의 동시성 제어 방법, 컴퓨터판독가능 매체 및 컴퓨터
US11392588B2 (en) Active queries filter extraction
US7146386B2 (en) System and method for a snapshot query during database recovery
US9411866B2 (en) Replication mechanisms for database environments
US5999943A (en) Lob locators
US8548945B2 (en) Database caching utilizing asynchronous log-based replication
US6243718B1 (en) Building indexes on columns containing large objects
US6873995B2 (en) Method, system, and program product for transaction management in a distributed content management application
US6738790B1 (en) Approach for accessing large objects
US7584204B2 (en) Fuzzy lookup table maintenance
US7685124B2 (en) Systems and methods for performing authorization
US8756196B2 (en) Propagating tables while preserving cyclic foreign key relationships
US20060271606A1 (en) Version-controlled cached data store
US20090319581A1 (en) Online Table Move
US11947823B2 (en) System and methods for providing a memory slice data structure for use with diverse memory and storage media
WO2020192663A1 (zh) 一种数据管理方法及相关设备
US10970275B2 (en) System and methods for providing a data store having linked differential data structures
US7860848B2 (en) Partial sub-lock for delta object management
US20100145996A1 (en) Accessing Data in a Multi-Generation Database
US7209919B2 (en) Library server locks DB2 resources in short time for CM implicit transaction
US12032560B2 (en) Distributed transaction execution management in distributed databases
US11947994B2 (en) Adaptive hardware transactional memory based concurrency control
US20210365440A1 (en) Distributed transaction execution management in distributed databases
CN117931765A (zh) 重新验证传播的细粒度决策

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application