KR20080055795A - 데이터베이스 프래그먼트 복제 및 관리 - Google Patents
데이터베이스 프래그먼트 복제 및 관리 Download PDFInfo
- Publication number
- KR20080055795A KR20080055795A KR1020087003601A KR20087003601A KR20080055795A KR 20080055795 A KR20080055795 A KR 20080055795A KR 1020087003601 A KR1020087003601 A KR 1020087003601A KR 20087003601 A KR20087003601 A KR 20087003601A KR 20080055795 A KR20080055795 A KR 20080055795A
- Authority
- KR
- South Korea
- Prior art keywords
- fragment
- replication
- fragments
- primary
- update
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2097—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements maintaining the standby controller/processing unit updated
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/40—Data acquisition and logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/2053—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
- G06F11/2094—Redundant storage or storage space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/80—Database-specific techniques
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
데이터베이스 프래그먼트 복제 및 관리를 위한 메커니즘 및 기법들이 제공된다. 테이블 또는 인덱스와 같은, 데이터베이스 개체가 프래그먼트들로 분할된다. 각 프래그먼트는 복제되어 복제 프래그먼트(cloned fragment)들을 생성하고, 이들은 조작상 서로 동일하다. 복제 프래그먼트들 중 하나 이상이 데이터베이스 조작(database operations)을 수행하기 위한 주(primary) 복제 프래그먼트로서 또는 백업으로서 기능하기 위한 부(secondary) 복제 프래그먼트로서 지정될 수 있다. 각 프래그먼트에 대한 업데이트들은 주 복제 프래그먼트에서 구현되고 그 후 주 복제 프래그먼트로부터 대응하는 부 복제 프래그먼트들로 전파된다. 복제 프래그먼트는 오프라인으로 가서, 업데이트되기 위해 사용 불가능하게 될 수 있다. 그 복제 프래그먼트가 온라인으로 되돌아오면, 그것은 주 복제 프래그먼트에 포함된 데이터를 이용하여 새로 고쳐진다(refreshed). 새로 고쳐지는 동안, 그 복제 프래그먼트는 업데이트될 수 있다. 새로 고침 프로세스(refreshing process)가 완료되면 그 복제 프래그먼트는 주 복제 프래그먼트로서 지정될 자격이 있다.
데이터베이스, 프래그먼트, 복제, 업데이트, 새로 고침(refresh)
Description
데이터베이스 시스템들은 전형적으로 접근성(accessibility)을 위하여 조직되어 있는 정보를 효과적으로 관리하기 위해 이용된다. 접근성을 보장하기 위해, 시스템은 주 사본(primary copy)이 손상을 입거나 분실되는 경우 데이터베이스의 백업 사본들을 포함할 수 있다. 데이터베이스 백업을 위한 하나의 일반적인 기법은 전체 데이터베이스를 컴퓨터 판독가능 매체 상에 주기적으로 복사하는 것이다. 예를 들면, 정보 시스템 관리자가 주말마다 데이터베이스를 디스크 또는 테이프 상에 복사할 수 있다. 데이터베이스의 사본은 이런 식으로 보전될 수 있지만, 전체 데이터베이스를 복사하는 것은 시간 소모적이고 다른 수단을 통하여 추적되지 않으면 백업 간격들 간의 활동들이 분실된다.
데이터베이스 백업의 또 다른 기법은 상이한 컴퓨팅 머신들 상에 동일한 데이터베이스의 사본들을 유지하는 것을 수반한다. 그 데이터베이스들 중 하나가 사용 불가능하게 되는 경우에, 다른 컴퓨팅 머신 내의 데이터베이스의 다른 사본은 여전히 액세스될 수 있다. 이러한 유형의 장애 조치 백업(failover backup)은 데이터베이스 접근성을 보장할 수 있다. 그러나, 상이한 머신들 내의 전체 데이터베이스의 다수의 사본들을 실시간으로 동기화하는 것은 복잡하고 고비용의 프로세스 이다.
과도한 복잡성 또는 불필요한 데이터의 손실 없이 데이터베이스의 사용 가능성을 보장하는 효과적인 방법을 숙련된 당업자들은 여전히 알지 못하고 있다.
<발명의 요약>
다음은 독자에게 기본적인 이해를 제공하기 위하여 명세서의 단순화한 요약을 제공한다. 이 개요는 명세서의 광범위한 개요가 아니며 발명의 중요한/필수적인 요소들을 식별하거나, 발명의 범위를 기술하는 것이 아니다. 이 개요의 유일한 목적은 뒤에 제공되는 상세한 설명의 서론으로서 본 명세서에 개시된 일부 개념들을 단순화한 형태로 제공하기 위한 것이다.
본 예는 데이터베이스 프래그먼트 복제 및 관리를 위한 메커니즘 및 기법들을 제공한다. 테이블, 로우세트(rowset), 인덱스, 또는 테이블 또는 인덱스의 파티션과 같은, 데이터베이스 개체가 프래그먼트들로 분할된다. 로우세트는 테이블 내의 행(row)들 또는 인덱스 내의 힝목(entry)들의 세트로 간주된다는 것에 유의한다. 행 및 레코드의 용어들은 실질적으로 동일한 것으로 간주된다. 따라서,로우 세트는 또한 레코드세트(recordset)에 상당한다. 각 프래그먼트는 복제되어 복제 프래그먼트(cloned fragment)들을 생성하고, 이들은 조작상 서로 실질적으로 동일하다. 복제 프래그먼트들 중 하나는 데이터베이스 조작(database operations)을 수행하기 위한 주(primary) 복제 프래그먼트로서 지정될 수 있고 하나 이상의 복제 프래그먼트들은 상기 주 복제 프래그먼트에 대한 백업으로서 기능하기 위한 부(secondary) 복제 프래그먼트들로서 지정될 수 있다. 각 프래그먼트에 대한 업 데이트들은 주 복제 프래그먼트에서 구현되고 그 후 주 복제 프래그먼트로부터 대응하는 부 복제 프래그먼트들로 전파된다.
복제 프래그먼트는 오프라인으로 가서, 업데이트에 대해 사용 불가능하게(unavailable to updates) 될 수 있다. 그러한 오프라인의 사용 불가능한 복제 프래그먼트는 진부한(stale) 복제 프래그먼트라고 정의되는데, 그러한 복제 프래그먼트 내의 데이터는 더 이상 대응하는 주 복제 프래그먼트와 트랜잭션적으로 최신으로(transactionally up-to-date) 될 수 없기 때문이다. 진부한 복제 프래그먼트가 온라인으로 되돌아오면, 그 복제 프래그먼트는 주 복제 프래그먼트에 포함된 데이터를 이용하여 새로 고쳐진다(refreshed). 새로 고쳐지는 동안, 그 복제 프래그먼트는 계속해서 업데이트될 수 있다. 새로 고침 프로세스(refreshing process)가 완료되면 그 복제 프래그먼트는 즉시 주 복제 프래그먼트로서 지정될 후보로서 자격이 있게 된다.
다수의 부수적인 특징들은 첨부 도면들과 함께 고려되는 이하의 상세한 설명을 참고함으로써 더 잘 이해될수록 더 쉽사리 인식될 것이다.
본 설명은 이하의 상세한 설명을 첨부 도면들에 비추어 읽음으로써 더 잘 이해 될 것이다.
도 1은 데이터베이스 시스템에 의해 관리되는 데이터베이스 개체의 예시적 복제 데이터 구조(cloning data structure)를 도시한다.
도 2는 데이터베이스 개체의 예시적 복제 프래그먼트들을 도시한다.
도 3은 데이터베이스 개체의 복제 프래그먼트들을 업데이트하기 위한 예시적 조작들을 도시한다.
도 4는 데이터베이스 개체와 관련된 진부한 복제 프래그먼트를 새로 고치기 위한 예시적 조작들을 도시한다.
도 5는 복제 프래그먼트를 식별하기 위한 예시적 데이터 구조들을 도시한다.
도 6은 데이터베이스 개체의 복제 프로그먼트 내의 레코드를 식별하기 위한 예시적 데이터 구조들을 도시한다.
도 7은 부 복제 인덱스 프래그먼트들 및 부 복제 데이터 프래그먼트들을 업데이트하기 위한 예시적 프로세스들을 도시한다.
도 8은 진부한 복제 프래그먼트를 새로 고칠 때의 상태들의 진행을 도시한다.
도 9는 복제 데이터베이스 프래그먼트들을 갖는 예시적 데이터베이스 시스템이다.
도 10은 데이터베이스 개체를 업데이트하기 위한 예시적 프로세스를 도시한다.
도 11은 데이터베이스 개체의 진부한 복제 프래그먼트를 새로 고치는 예시적 새로 고침 프로세스를 도시한다.
도 12는 복제 업데이트 식별자(CUID : clone update identifier)들을 변경하기 위한 예시적 프로세스를 도시한다.
도 13은 도 12에 도시된 프로세스에 따라서 할당된 CUID 값을 할당하기 위한 예시적 프로세스를 도시한다.
도 14는 CUID 값들에 대한 예시적 전파 경로들을 도시한다.
도 15는 설명된 시스템들 및 방법들을 구현하기 위한 예시적 컴퓨터 장치를 도시한다.
도 16은 레코드에 대한 업데이트들을 전파 및 적용하고 주 복제 프래그먼트로부터의 구(old) CUID 값을 모든 부 복제 데이터 프래그먼트들에는 물론, 해당 레코드의 사본을 포함하는 모든 복제 인덱스 프래그먼트들에도 전파하는 예시적 프로세스를 도시한다.
도 17은 도 11에 도시된 새로 고침 프로세스의 일부로서 진부한 복제(stale clone)를 커런트(current)로 만드는 예시적 프로세스를 도시한다.
첨부 도면들에서 유사한 참조 부호들은 유사한 부분들을 지시하는 데 이용된다.
첨부 도면들과 관련하여 아래에서 제공되는 상세한 설명은 본 예의 설명으로서 의도된 것이고 본 예가 구성되거나 이용될 수 있는 유일한 형태들을 기술하려는 것은 아니다. 이 설명은 본 예의 기능들 및 본 예를 구성하고 동작시키기 위한 단계들의 시퀀스를 제시한다. 그러나, 동일 또는 동등한 기능들 및 시퀀스들이 상이한 예들에 의해 달성될 수도 있다.
본 예들은 데이터베이스 프래그먼트 복제 및 관리 시스템에서 구현되는 것으로 설명 및 예시되어 있지만, 설명된 시스템은 한정이 아니라 예로서 제시되어 있다. 숙련된 당업자들이라면 이해하겠지만, 본 예들은 각종의 서로 다른 유형의 데이터베이스 프래그먼트 복제 및 관리 시스템들에서 적용하기에 적합하다.
도 1은 데이터베이스 시스템에 의해 관리되는 데이터베이스 개체(105)의 예시적 복제 데이터 구조(100)를 도시한다. 데이터베이스는 그 데이터베이스 내의 원하는 데이터들이 신속히 선택 및/또는 업데이트될 수 있게 하는 방식으로 조직된 정보의 컬렉션이다. 데이터베이스 개체는 그 데이터베이스의 전체 또는 임의의 부분일 수 있다. 예를 들면, 데이터베이스 개체(105)는 전체 테이블, 인덱스, 열들의 세트(즉, 로우세트), 또는 그와 유사한 것일 수 있다.
데이터베이스 개체(105)는 파티션들(111-113)로 분할될 수 있다. 전형적으로, 데이터베이스 개체(105)는 편리함 또는 성능의 이유로 분할된다. 예를 들면, 데이터베이스 개체(105)는 다수의 연도(year)와 관련된 데이터를 포함할 수 있다. 데이터베이스 개체(105)는 각 파티션이 특정 연도와 관련되는 파티션들(111-113)로 분할될 수 있다. 데이터베이스 개체(105)의 파티션 분할(partitioning)은 실제 구현에서 구현될 수도 있고 또는 구현되지 않을 수도 있는 옵션인 단계이다.
데이터베이스 개체(105)의 각 파티션(111-113)(또는 전체, 파티션 분할되지 않은 개체(105))은 전형적으로 프래그먼트들(121-124)과 같은 프래그먼트들로 분할된다. 프래그먼트들(121-124)은 조작 베이스로(on an operational basis) 데이터베이스 시스템에 의해 분할된 데이터베이스 개체(105)의 부분들이다. 예를 들면, 병렬로 작동하는 서로 다른 컴퓨팅 장치들에 의해 프래그먼트들(121-124)에 대하여 데이터베이스 개체(105)와 관련된 쿼리가 수행될 수 있도록 프래그먼트들(121-124)은 서로 다른 컴퓨팅 장치들에 할당될 수 있다.
데이터베이스 개체(105) 내의 프래그먼트들은 또한 복제되어 복제 프래그먼트들을 생성한다. 도 1에 도시된 바와 같이, 논리적으로 분할된 프래그먼트들(121-124) 각각이 복제되어 예시적인 복제 프래그먼트들(131, 140-146)을 생성한다. 전형적으로, 데이터베이스 개체의(또는 데이터베이스 개체의 파티션의) 프래그먼트들은 그러한 개체를 (테이블들에 대한) 행들 또는 (인덱스들에 대한) 인덱스 항목들의 별개의 세트들로 분할함으로써 생성된다. 테이블 또는 인덱스의 키에 대한 해싱(Hashing)은 그러한 분할을 달성하기 위한 하나의 베이스(basis)이다. 행들의 세트들은 때때로 로우세트들 또는 레코드들의 세트들로 불린다. 복제 프래그먼트들에 대해서는 도 2와 관련하여 더 상세히 설명한다. 간단히 말해서, 적절히 업데이트될 경우, 데이터베이스 개체(105)의 특정 프래그먼트와 관련된 복제 프래그먼트들은 조작상 동일하여 그 복제 프래그먼트들은 데이터베이스 시스템에 의해 즉시 이용될 수 있다. 복제 프래그먼트들의 사용은 특정 프래그먼트의 2 이상의 사본들이, 예컨대 높은 레벨의 데이터 사용 가능성을 유지하거나, 쿼리 및 기타 데이터베이스 조작의 속도를 향상시키거나, 로드 균형 조정(load balancing)을 수행하는 등의 용도로 사용 가능하게 할 수 있다. 예를 들면, 높은 레벨의 데이터 사용 가능성을 유지하기 위하여, 적어도 하나의 복제 프래그먼트가, 데이터베이스 조작을 위하여 이용되는 또 다른 복제 프래그먼트의 백업으로서 기능할 수 있다. 검색 속도를 향상시키기 위하여, 다수의 조작상 동일한 복제 프래그먼트들이 데이터베이스 쿼리들에 대하여 동시에 이용될 수 있다. 로드 균형 조정을 수행하기 위하여, 서로 다르지만 조작상 동일한 복제 프래그먼트들의 사본들이 작업 부하(workload) 조건에 기초하여 활성화될 수 있다.
도 2는 데이터베이스 개체의 예시적 복제 프래그먼트들(131-139)을 도시한다. 도면에 도시된 바와 같이, 복제 프래그먼트들(131-139)은 3개의 그룹(151-153)으로서 고찰될 수 있다. 복제 프래그먼트들의 각 그룹은 데이터베이스 개체의 특정 프래그먼트에 관련된다. 각 그룹 내의 복제 프래그먼트들은 조작상 서로 동일한 것으로서 생성된다. 따라서, 적절히 업데이트될 경우, 복제 프래그먼트들(131-139) 각각은 대응하는 프래그먼트들(151-153)에 적용 가능한 데이터베이스 조작들을 위하여 이용될 수 있다.
일 실시예에서, 복제 프래그먼트들(131-139)은 높은 레벨의 데이터 사용 가능성을 제공하도록 구성될 수 있다. 이 실시예에서, 그룹들(151-153) 각각으로부터의 하나의 복제 프래그먼트는 데이터베이스 조작을 위한 주 복제 프래그먼트로서 지정될 수 있다. 그룹 내의 다른 복제 프래그먼트들은 즉시 사용 가능한 백업들로서 기능하는 부 복제 프래그먼트들이다. 도 2에서, 복제 프래그먼트들(131, 135 및 139)은 주 복제 프래그먼트들로서 도시되어 있는 반면 나머지 복제 프래그먼트들은 부 복제 프래그먼트들로서 지정되어 있다.
높은 레벨의 데이터 사용 가능성을 제공하기 위하여, 그룹 내의 복제 프래그먼트들 각각은 서로 다른 장치들에 포함될 수 있고 그에 따라서 장치들 중 하나가 고장나면, 또 다른 장치 내의 부 복제 프래그먼트가 주 복제 프래먼트로서 고장난 장치 내의 복제 프래그먼트를 매우 신속히 대체할 수 있도록 한다. 예를 들면, 복제 프래그먼트들(131-133)은 각각 개별 장치들에 포함될 수 있고 그에 따라서 주 복제 프래그먼트(131)가 포함되어 있는 장치가 고장나면, 부 복제 프래그먼트들(132-133) 중 어느 하나가 주 복제 프래그먼트로서 지정될 수 있도록 한다.
복제 프래그먼트들을 관리하는 데이터베이스 시스템은 복제 프래그먼트들에 대하여 각종 조작을 수행할 수 있다. 이들 조작들은 전형적으로 데이터 조작 언어(DML: Data Manipulation Language) 또는 다른 구조적 쿼리 언어(SQL: structured query language) 문장(statements) 등의 표준 데이터베이스 조작들을 이용하여 수행된다. 복제 프래그먼트들을 업데이트하고 새로 고치는 예시적 조작들에 대해서는 도 3 및 4와 관련하여 더 상세히 논의할 것이다. 하나의 예시적 구현에서, 조작들은 다음을 포함할 수 있다:
1. 복제 프래그먼트 생성
복제 프래그먼트는 데이터베이스 내의 통상의 테이블 또는 인덱스 로우세트와 구별할 수 없도록 생성된다.
2. 복제 프래그먼트 삭제
복제들은 데이터베이스 내의 로우세트들처럼 삭제될 수 있다.
3. 복제 프래그먼트의 데이터를 완전히 초기화
복제 프래그먼트는, 스크래치(scratch)로부터, 복제 프래그먼트에 로딩되는 새로운 로우세트를 포함하도록, 완전히 초기화될 수 있다.
4. 데이터 변경들을 복제 프래그먼트에 전파
주 복제 프래그먼트에 대한 변경들은 하나 이상의 부 복제 프래그먼트들에 전파된다. 전파는 주 복제 프래그먼트에 대한 업데이트들과 동일한 트랜잭션 컨텍스트(transactional context) 내에서 발생한다.
5. 진부한 복제 프래그먼트 새로 고침
복제 프래그먼트가 오프라인이었거나 또는 주 복제 프래그먼트로부터 업데이트들의 트랜잭션 전파를 수신하지 않았을 때, 그것은 진부한(stale) 복제 프래그먼트인 것으로 정의된다. 진부한 복제 프래그먼트들은 또한 구식(outdated) 프래그먼트 복제들로 묘사될 수도 있다. 진부한 복제를 주 프래그먼트 복제와의 트랜잭션적 일관성(transactional consistency)으로 되돌리는 프로세스는 새로 고침(refresh)이라 불린다.
6. 복제 프래그먼트 판독
복제 프래그먼트는 통상의 테이블들 또는 인덱스들이 판독 및 액세스되는 것처럼 데이터 검색(테이블 액세스)을 위하여 또는 조회(lookup)(인덱스 액세스)를 위하여 판독될 수 있다. 이 구현에서, 사용자 작업 부하들은 주 복제 프래그먼트들로부터 판독할 뿐이다. 이 제한은 시스템에서의 불필요한 교착 상태를 회피하기 위한 메커니즘을 단순화하는 목적으로 이용될 수 있다. 그러나, 이 제한은 교착 상태가 문제가 아니거나 주어진 시스템에서 다른 수단을 통하여 회피된다면 완화될 수 있다.
7. 복제 프래그먼트 업데이트
사용자 작업 부하들은 주 복제 프래그먼트를 업데이트하고 데이터베이스 시스템은 그 변경들을 동일한 트랜잭션 내에서 그 주 프래그먼트에 대응하는 부 복제들에 전파하여 적용한다. 변경을 전파하는 것은 주 복제에 적용된 실질적으로 동일한 DML 조작을 부 복제에 적용하는 것을 의미한다.
도 3은 데이터베이스의 복제 프래그먼트들(131-139)을 업데이트하기 위한 예시적 조작들(300)을 도시한다. 데이터 업데이트들은 데이터 추가, 삭제 및 변경과 같은 임의의 유형의 변경들을 포함할 수 있다. 데이터베이스와 관련된 변경들이 결정되면, 업데이트될 필요가 있는 데이터베이스 개체 내의 프래그먼트들이 식별된다. 식별된 프래그먼트들에 대응하는 주 복제 프래그먼트들이 업데이트된다. 도면에 도시된 바와 같이, 조작들(301-303)은 각각 주 복제 프래그먼트들(131, 135 및 139)을 업데이트하는 조작들이다. 주 복제 프래그먼트들(131, 135 및 139)이 업데이트된 후에, 그 업데이트들은 대응하는 부 복제 프래그먼트들에 전파된다. 도 3에서, 조작들(311-313)은 업데이트된 주 복제 프래그먼트들에 대응하는 부 복제 프래그먼트들을 업데이트하는 조작들이다.
전형적으로, 조작들(301-303 및 311-313)은 DML 문장 시맨틱(statement semantic)들을 구현하는 삽입, 업데이트 및 삭제의 표준 데이터베이스 조작들을 통하여 구현된다. 일관성(consistency)을 달성하기 위하여, 주 복제 프래그먼트를 업데이트하는 조작들 및 그 주 복제 프래그먼트에 대응하는 부 복제 프래그먼트들을 업데이트하는 조작들은 조작들의 원자 세트(atomic set of operations)로서 구성될 수 있다.
도 4는 데이터베이스 개체와 관련된 진부한 복제 프래그먼트(133)를 새로 고치기 위한 예시적 조작들(400)을 도시한다. 복제 프래그먼트가 그것에 대응하는 데이터베이스 개체와 관련된 전파된 업데이트 조작들을 실행하기 위해 사용 가능하지 않았다면 그 복제 프래그먼트는 진부한 것이다. 예를 들면, 복제 프래그먼트(133)가 장치 고장, 연결 상실(loss of connectivlty), 시스템 업데이트 등의 여러 가지 이유로 인해 업데이트를 위해 사용 가능하지 않았을 수 있다. 유용하려면, 부 복제 프래그먼트(133)는 새로 고침 프로세스를 통하여 주 복제 프래그먼트(131)와의 트랜잭션적 일관성으로 되돌려져야 할 것이다.
복제 프래그먼트(133)가 온라인으로 되돌아가서 업데이트 조작들을 실행하기 위해 사용 가능하게 되면, 복제 프래그먼트(133)는 현재 및 과거의 모든 업데이트들을 포함하는 현재의 주 복제 프래그먼트에 포함된 데이터에 기초하여 새로 고쳐진다. 예를 들면, 도 4에서, 주 복제 프래그먼트(131)에 포함된 데이터를 이용하여 복제 프래그먼트(133)를 새로 고치는 복제 새로 고침 조작(413)이 실행된다. 이런 식으로, 복제 프래그먼트(133)는 복제 프로그먼트(133)가 사용 불가능하였던 동안에 발생한 업데이트들로 새로 고쳐질 수 있다. 효율성을 위하여, 복제 새로 고침 조작(413)은 진부한 행들을 제거하는 SQL 삭제 조작들 및 주 복제 프래그먼트로부터 복사된 새로운 행들을 추가하는 SQL 삽입 조작들을 통하여 구현될 수 있다. 그러한 구현은 여분의 프로세스들을 추가하지 않고 데이터베이스 시스템에서 통상의 SQL 문장 실행들에 의해 사용되는 것들과 유사한 실행 경로들을 통하여 새로 고침 조작이 관리될 수 있게 한다.
주 복제 프래그먼트(131)에 대한 업데이트 조작(401)은 데이터베이스 개체에 대한 업데이트가 주 복제 프래그먼트(131)에 대응하는 개체의 부분에 영향을 미칠 경우 발생한다. 그 후 업데이트는 주 복제 프래그먼트(131)와 관련된 부 복제 프래그먼트들에 전파된다. 도 4에 도시된 바와 같이, 부 복제 프래그먼트(132)는 주 복제 프레그먼트(131)와 관련된 조작(411)에 의해 업데이트된다. 복제 프래그먼트를 업데이트하는 필요성은 복제 프래그먼트가 새로 고쳐지는 동안에 발생할 수 있다. 예를 들면, 복제 프래그먼트(133)에 대한 업데이트는 복제 새로 고침 조작(413)이 실행 중인 동안에 발생할 수 있다. 복제 새로 고침 조작(413)이 실행 중인 동안에 복제 프래그먼트(133)에 대해 업데이트 조작(412)이 수행될 수 있다. 전형적으로, 사용자의 업데이트 조작(412)은 복제 새로 고침 조작(413)보다 우선 순위가 더 높은 데이터베이스 조작이다. 업데이트 조작(412) 및 복제 새로 고침 조작(413)은 서로에 대하여 여러 가지 방법 및 타이밍으로 구현될 수 있다. 예를 들면, 업데이트가 필요한 경우, 복제 프래그먼트(133)에 대한 업데이트 조작(412)은 복제 새로 고침(413)이 계속되기 전에 완료될 수 있다. 또한, 복제 새로 고침(413)은 임의의 주어진 업데이트 조작(412)에 대한 잠금(locking)으로 인해 야기되는 임의의 지연의 빈도 및 지속 기간 둘 다를 최소화하도록 설계된다. 복제 새로 고침은 짧은 시간 간격 동안만 잠금들을 취하고 유지하는 작은 트랜잭션 배치들의 시퀀스(a sequence of small, transactional batches)로서 실행함으로써 그것을 달성한다. 조작(412)은 조작(413)에 의해 이미 새로 고쳐졌거나 또는 진부한 복제가 오프라인이었던 동안에 주 복제 프래먼트에서 불변인 채로 있었던 진부한 복제 내의 행들 또는 항목들만 업데이트한다. 즉, 조작(412)은 진부한 복제에서 구식인(out-of-date) 행을 업데이트하지 못하게 된다. 전파된 업데이트 조작은 진부한 복재 내의 일관성 없는(inconsistent) 행이 최신인(up-to-date) 것처럼 보여지게 하도록 허용되지 않는다. 이 제한은 업데이트(412)로 전체 행이 전파되는 구현에서는 완화될 수 있을 것이다. 그러나, 성능 이유 때문에, 소수의 열(column) 값들만 변하였는지 여부에 관계없이, 모든 DML 조작들에 대하여 전체 행들을 전파한 그러한 조작(412)은 억제되는 경향이 있을 것이다. 새로운, 최신의 행들을 진부한 복제에 도입하는 것은 복제 새로 고침 조작(413)의 책임이다.
도 4에 도시된 진부한 복제 프래그먼트를 새로 고치는 조작들(400)은 데이터베이스 시스템이 진부한 복제 프래그먼트를 대응하는 주 프레그먼트와의 트랜잭션적 일관성으로 새로 고침과 동시에, 표준 데이터베이스 조작들을 이용하여 주 프래그먼트의 온라인 상태를 유지할 수 있게 한다. DML 문장들을 표현하는 것들과 같은, 표준 데이터베이스 조작들의 사용으로 복제 새로 고침은 특별한 프로세스들에 대한 필요 없이, 데이터베이스 상의 여분의, 그러나 표준 SQL 문장 부하로서 관리될 수 있게 된다. 조작들(400)은 또한 전체 프래그먼트를 배타적으로 잠글 필요도 없고 새로 고침 프로세스 동안 발생하였을 수 있는 업데이트들을 따라잡기(catch up) 위한 필요로 새로 고침 프로세스를 연장(prolong)할 필요도 없이 진부한 복제 프래그먼트의 새로 고침을 가능케 하는데, 그 이유는 그러한 업데이트들은 새로 고침 조작(413)이 진행되는 동안 계속해서 적용되기 때문이다. 중요하게는, 조작들(400)은 또한 진부한 부 복제 프래그먼트가 효율적으로 업데이트됨으로써 신속히 주 복제 프래그먼트가 될 자격이 되도록 할 수 있다.
하나의 예시적 구현에서, 복제 새로 고침 조작(413)은 새로 고침 조작들의 다수의 작은 배치들(multiple small batches of refreshing operations)을 포함한다. 새로 고침 조작들의 작은 배치들을 이용함으로써 동시(concurrent) 사용자 작업 부하들을 많은 시간 기간 동안 차단하는 것이 회피된다. 따라서, 새로 고침 프로세스는 증분식(incremental fashion)으로 수행되어, 그 프로세스가 사용자 작업 부하들과 온라인으로 공존하는 것을 허용한다.
도 4에 도시된 복제 새로 고침 조작(413)의 다수의 인스턴스들은 임의의 데이터베이스 개체의 동일한 또는 상이한 프래그먼트들 내의 상이한 진부한 복제 프래그먼트들에 대하여 동시에 실행할 수 없다. 즉, 그러한 새로 고침 조작들은 서로 독립적이다.
도 5는 복제 프래그먼트(500)를 식별하기 위한 예시적 데이터 구조들(511-514)을 도시한다. 데이터 구조(500)는 데이터베이스 개체에 대응하는 복제 프래그먼트를 식별하는 데 이용된다. 이 예에서, 데이터 구조는 데이터베이스와 관련된 테이블에 대응하는 복제 프래그먼트(500)를 식별한다. 도 5에 도시된 바와 같이, 복제 프래그먼트(500)에 대한 식별자는 테이블 식별자(table identifier)(511), 파티션 식별자(partition identifier)(512), 프래그먼트 식별자(fragment identifier)(513) 및 복제 식별자(clone identifier)(514)를 포함할 수 있다. 테이블 식별자(511)는 복제 프래그먼트(500)에 대응하는 데이터베이스 개체(이 경우 테이블)를 식별한다. 데이터베이스 개체는 편리함 또는 성능의 이유로 데이터를 분리하는 파티션들로 분할될 수 있다. 파티션 식별자(512)는 복제 프래그먼트(500)에 대응하는 파티션을 식별한다.
데이터베이스 개체를 관리하는 데이터베이스 시스템은 자동으로 데이터베이스 개체를 프래그먼트들로 분리하고 그 프래그먼트들을 복제하도록 구성된다. 프래그먼트 식별자(513)는 복제 프래그먼트(500)에 대응하는 데이터베이스 개체의 특정 프래그먼트를 식별한다. 복제 식별자(514)는 데이터베이스 개체의 특정 프래그먼트와 관련된 다수의 복제 프래그먼트들 중에서 복제 프래그먼트(500)를 식별한다.
도 6은 데이터베이스 개체의 복제 프래그먼트 내의 레코드(600)를 식별하기 위한 예시적 데이터 구조들(611-612)을 도시한다. 복제 프래그먼트는 데이터베이스의 레코드들(또는 인덱스 항목들)을 포함할 수 있다. 예를 들면, 복제 프래그먼트는 데이터베이스와 관련된 테이블의 일부분에 행들로서 구현된 레코드들을 포함할 수 있다. 레코드(600) 내의 데이터 구조들(611-612)은 복제 프래그먼트 내의 레코드(600) 및 그 레코드의 업데이트 상태가 식별될 수 있게 한다.
도 6에 도시된 바와 같이, 레코드(600)는 복제 레코드 식별자(cloned record identifier)(611) 및 복제 업데이트 식별자(clone update identifier)(612)를 포함할 수 있다. 복제 레코드 식별자(611)는 대응하는 테이블 또는 인덱스 내의 레코드(600)를 고유하게 식별한다. 인덱스 레코드들 내의 복제 레코드 식별자들은 대응하는 복제 데이터 프래그먼트들로부터 업데이트들과 함께 전파된다. 사용자 정의 고유 키(user-defined unique key)가 복제 레코드 식별자로서 사용될 수도 있고 또는 시스템 정의 고유 키가 추가(또는 사용자 정의 키에 증가(augment))됨으로써 그 합성 키가 충분히 고유하게 복제 레코드 식별자로서 기능하도록 할 수도 있다. 예를 들면, 추가 고유성을 제공할 목적으로 프래그먼트 식별자가 키에 추가될 수 있다. 복제 업데이트 식별자는 레코드(600)의 업데이트 상태를 식별한다. 이 예시적 구현에서, 복제 레코드 식별자(611)는 주어진 테이블의 컨텍스트 내에서 고유해야 한다. 복제 업데이트 식별자(612)는 시간에 걸쳐서 고유하게 주어진 데이터베이스 개체에 대하여 동일한 복제 레코드 식별자(611)를 갖는 다른 레코드들의 업데이트 상태에 대하여 레코드의 업데이트 상태를 고유하게 식별하기만 하면 된다.
일 실시예에서, 데이터베이스 시스템은 주 복제 프래그먼트들 및 부 복제 프래그먼트들을 포함하고 이 복제 프래그먼트들은 행들을 포함한다. 복제 레코드 식별자(611) 및 복제 업데이트 식별자(612) 모두는 복제 프래그먼트들의 행들 내에 열들로서 포함될 수 있다. 복제 레코드 식별자(611) 및 복제 업데이트 식별자(612)의 열들은 부 복제 프래그먼트들에 포함될 수 있고, 부 복제 프래그먼트가 트랜잭션적으로 일관성이 있을 때 주 복제 프래그먼트 상에 포함하는 것과 동일한 값들을 포함할 수 있다. 따라서, 복제 레코드 식별자(611)는 주 복제 프래그먼트와 부 복제 프래그먼트 간에 행들의 매핑을 가능케 하고, 복제 업데이트 식별자(612)는 행들이 일관성이 있는지 여부의 확인을 가능케 한다.
진부한 복제 프래그먼트에 대한 새로 고침 프로세스는 그 복제 프래그먼트 내의 특정 레코드가 새로 고쳐져야 하는지 여부를 판정하기 위해 복제 레코드 식별자(CRID) 및 복제 업데이트 식별자(CUID)를 이용한다. 예를 들면, 진부한 복제 프래그먼트 내의 레코드는 다음을 포함할 수 있다:
CRID = x 및 CUID = y
진부한 복제 프래그먼트와 판련된 주 복제 프래그먼트 내의 대응하는 레코드는 다음을 포함할 수 있다:
CRID = x 및 CUID = z
새로 고침 프로세스는 CRID를 이용하여 진부한 복제 프래그먼트 내의 각 레코드를 식별하고 주 복제 프래그먼트 내의 대응하는 레코드(만일 그것이 존재한다면)를 찾아낸다(locate). 그 후 새로 고침 프로세스는 진부한 복제 프래그먼트 내의 그러한 각 레코드를 주 복제 프래그먼트 네의 대응하는 레코드(만일 그것이 존재한다면)와 비교하여, 진부한 복제 프래그먼트 내의 레코드가 업데이트되어야 하는지를 판정한다.
데이터베이스 개체의 프래그먼트들은 데이터 프래그먼트, 인덱스 프래그먼트 등, 임의의 유형의 프래그먼트들일 수 있다. 인덱스 프래그먼트의 경우, 인덱스 내의 각 행은 그것의 데이터 프래그먼트 식별자를 인덱스 키의 일부로서 저장함으로써 그 행이 어디로부터 온 것인지를 특정한다. 인덱스 자체는 기본(base) 테이블 프래그먼트의 복제들 중 어느 것이 현재 주 복제인지를 알 필요가 없다. 주어진 프래그먼트에 대하여 하나의 주 복제 프래그먼트가 있으므로, 인덱스 레코드는, 임의의 주어진 시간에, 액세스를 위해 특정 프래그먼트에 매핑될 수 있다. 따라서, 인덱스 프래그먼트들은 테이블의 상이한 프래그먼트들을 참조하는 분리(disjoint) 부 로우세트들(또는 인덱스 항목들)의 공존하는 컬렉션을 포함할 수 있다. 그러한 각 부 로우세트가 동일 인덱스 프래그먼트 내의 다른 것들과 별개로 취급되는 한, 위에 개설한 기법 및 가정들이 계속해서 적용된다. 구현을 위하여, 임의의 특정 기본 테이블 프래그먼트에 대응하는 인덱스 프래그먼트 내의 행들을 잠그는 것이 (그 기본 테이블 프래그먼트에 대응하지 않는) 인덱스 프래그먼트 내의 다른 행들에 대하여 어떠한 잠금도 초래해서는 안 된다.
인덱스 프래그먼트들은 데이터 프래그먼트들과 유사하게 복제될 수 있다. 업데이트 전파를 목적으로, 복제 인덱스 프래그먼트들은 기본 테이블 프래그먼트들의 동일 세트 상의 추가 인덱스들로서 취급된다. 즉, 모든 복제 인덱스 프래그먼트들에 대한 업데이트들은 그 복제 인덱스 프래그먼트들이 구성되어 있는 기본 테이블의 주 복제 데이터 프래그먼트들로부터 직접 전파한다. 하나의 인덱스 프래그먼트로부터 다른 것으로 업데이트들을 전파하는 것이 가능하지만, 이 프로세스는 추가적인 대기 시간 단계(latency step)를 도입할 수 있다. 만일 주어진 데이터 프래그먼트 내의 레코드들에 대응하는 주어진 인덱스 프래그먼트 내의 인덱스 항목들의 세트가 부 로우세트로서 취급된다면, 대응하는 주 로우세트는 기본 테이블 프래그먼트와 실질적으로 동일하다. 따라서 인덱스 프래그먼트의 복제 내의 각 부 로우세트는 업데이트 전파를 위해 그 동일 복제 내의 모든 다른 부 로우세트들에 독립적이다.
도 7은 복제 인덱스 프래그먼트들 및 복제 데이터 프래그먼트들을 업데이트하기 위한 예시적 프로세스들을 도시한다. 위에서 논한 바와 같이, 데이터 프래그먼트의 최신의(또는 현재의) 부 복제 프래그먼트는 주어진 데이터 프래그먼트에 대한 주 복제 프래그먼트와 실질적으로 동일하다. 유사하게, 인덱스 프래그먼트의 최신의 부 복제 프래그먼트는 그 인덱스 프래그먼트에 대한 주 복제 프래그먼트와 실질적으로 동일하다. 복제 인덱스 프래그먼트들은 2 이상의 데이터 프래그먼트 내의 레코드들을 참조하는 인덱스 항목들을 포함하도록 허용된다. 따라서, 복제 인덱스 프래그먼트들은 2 이상의 복제 데이터 프래그먼트로부터 전파된 업데이트들을 수신할 수 있다.
도 7의 예는 인덱스 프래그먼트 I1이 2개의 별개의 데이터 프래그먼트들인 D1 및 D2 내의 레코드들을 참조하는 인덱스 항목들을 포함하는 것을 보여준다. 이 예에서는, 주 복제 인덱스 프래그먼트 I1.a(705) 및 부 복제 인덱스 프래그먼트 I1.b(706) 모두가 주 복제 데이터 프래그먼트 D1.a(702) 및 주 복제 데이터 프래그먼트 D2.a(703) 모두로부터 직접 전파된 업데이트들을 수신한다.
데이터 프래그먼트들과 인덱스 프래그먼트들 간의 매핑은 물리적 데이터베이스 설계(physical database design)라 불리는 표준 데이터베이스 조작의 결과를 나타낸다. 테이블의 입의의 주어진 인덱스된 열에 대하여, 열 값들은 그 인덱스의 파티션 분할(partitioning) 및 프래그먼트화(fragmentation)에 기초하여 1 또는 그 이상의 인덱스 프래그먼트들에 이산적으로 매핑(discretely mapped)될 수 있다. 테이블들 및 인덱스들에 대한 파티션 분할 정의들은, 예컨대, 값들의 범위(ranges), 값들의 해싱(hashing)에 의해 또는 라운드-로빈(round-robin) 할당을 통하여, 레코드들을 세트들로 분할하는 전통적인 데이터베이스 방법들 중 어느 하나를 특정할 수 있다. 시스템 정의 프래그먼트화 정의(system defined fragmentation definition)는 테이블 또는 인덱스의 키에 대한 해싱을 통하여 달성된다. 그러나, 만일 해시 기반 프래그먼트화(hash based fragmentation)가 고도로 불균형의, 데이터-비대칭 방식(highly disproportionate, data-skewed fashion)으로 행들(또는 인덱스 항목들)로 프래그먼트들을 포퓰레이트(populate)한다면, 프래그먼트들로의 행들의 라운드-로빈 할당이 이용될 수 있다.
복제 인덱스 프래그먼트가 진부한 것이 되어 새로 고쳐질 필요가 있는 경우, 그 새로 고침을 달성하는 2가지의 가능한 방법들이 있다. 만일 주 복제 인덱스 프래그먼트가 존재한다면, 진부한 부 복제 인덱스 프래그먼트는 그 주 복제 인덱스 프래그먼트로부터 직접 새로 고쳐질 수 있다. 대안적으로, 진부한 부 복제 인덱스 프래그먼트는 인덱스된 테이블의 주 복제 데이터 프래그먼트들의 세트로부터 직접 새로 고쳐질 수 있다. 후자의 경우, 새로 고쳐지는 인덱스 프래그먼트에 매핑하는 키 값들을 갖는 주 복제 데이터 프래그먼트 내의 레코드들만이 새로 고침에서 이용된다.
예시적 구현에서, 복제 업데이트 식별자(CUID) 값들은 테이블마다의 베이스로(on a per-table basis) 유지될 수 있다. 즉, 주어진 주 복제 프래그먼트를 업데이트하는 DML 문장에 대하여, 그 프래그먼트의 테이블에 특정한 메타데이터로부터 CUID 값이 판독된다. 그 문장에 의해 업데이트되는 레코드들에는 그 CUID 값이 할당된다. 그 레코드들에 대한 업데이트들이 부 복제 프래그먼트에 전파될 때, 할당된 새로운 CUID 값들도 전파된다.
이 예시적 구현에서, CUID 값들은 시간에 걸쳐서 주어진 테이블에 고유하다. 현 CUID 값은 주어진 테이블을 기술하는 메타데이터 내에 트랜잭션적으로 존속(persisted transactionally)된다.
CUID 값들이 최대 값으로부터 최소 값으로 랩 어라운드(wrapping around)하는 지점과 마주치는 시점에서, CUID 값들을 일관된 최소 값으로 리셋하기 위해 다양한 기법들이 이용될 수 있다. CUID들에 대한 값들의 바이트 범위(예컨대, 약 6 바이트)가 주어지면, 이 경우는 역사적 시간 규모로(on a historical scale of time) 발생할 것이다. CUID 값들을 리셋하기 위한 한 가지 간단한 기법은 테이블에 대한 배타적 잠금을 취하고 그 테이블의 주 복제 프래그먼트들 내의 모든 레코드들 내의 CUID 값들을 최소 CUID 값으로 리셋할 것이다. 그 후, 통상의 업데이트 전파 메커니즘이 부 복제 프래그먼트들 내의 CUID들을 효과적으로 리셋할 것이다.
테이블에 대한 CUID 값들은 테이블의 프래그먼트가 오프라인으로 갈 때마다 증가된다. 이 구현에 대해서는 도 12와 관련하여 아래에서 논의하겠다.
다른 CUID 할당 정책들이 가능하지만, 각각은 복제 새로 고침을 위한 기본적인 기법에 영향을 미칠 가능성을 갖고 있다. 예를 들면, 트랜잭션 ID들은 CUID 값들에 대한 베이스(basis)로서 이용될 수 있지만, 업데이트 전파 및 복제 새로 고침이 정확히 상호 작용하도록 하기 위하여 다소 덜 유리한 복제 새로 고침 기법을 요구할 수 있다. 구체적으로, 전파 대기(WaitForPropagation) 단계(아래에서 설명됨)에서, 기본적인 복제 새로 고침 기법은 단지 모든 현재의 DML 문장들이 완료하기를 기다리는 대신, 모든 현재의 활성 트랜잭션들이 완료하는 것을 기다려야 할 것이다.
일반적으로, CUID 값들을 관리하기 위한 기법이 다음의 필요 조건들을 만족시킬 수 있다면 그 기법이 구현될 수 있다:
a) 프래그먼트 내에서 사용되는 주어진 CRID 값에 대하여, 트랜잭션적으로 일관성 있는 부 복제 프래그먼트들에서 그 CRID 값에 의해 식별된 모든 레코드들은 주 복제 프래그먼트에서 그 CRID 값에 의해 식별된 레코드 내의 CUID 값과 동일한 CUID 값들을 가져야 한다.
b) 주어진 프래그먼트에 대하여, 진부한 부 복제 프래그먼트(새로 고침 전)에서는 물론 주 복제 프래그먼트에서 CRID가 발견되면, CUID들은 그 부 복제 프래그먼트가 진부한 것이 되었기 때문에 주 복제 프래그먼트에서 행이 업데이트되지 않은 경우에만 동일할 수 있다.
복제 프래그먼트를 업데이트하기 위한 예시적 DML 문장이 아래에 제시되어 있다. 이 예시적 DML 문장은 3의 CUID 값을 이용하여 업데이트되는 Sales.2004.1.a 내의 2개의 레코드들(복제 레코드 식별자들(CRID들): 5 및 3)을 포함한다.
예시적 Sales 2004.1 a 주 복제 프래그먼트가 표 1에 제시되어 있다.
CRID | CUID | 다른 열들 |
1 | 2 | ..... |
5 | 3 | ..... |
7 | 1 | ..... |
3 | 3 | ..... |
8 | 1 | ..... |
주 복제 프래그먼트 Sales.2004.1.a가 업데이트된 후에, 그 업데이트들은 표 2에 제시된 바와 같이 부 복제 프래그먼트 Sales.2004.1.b에 전파되어 적용된다.
주어진 시점에서, 사용 가능한 프래그먼트는 하나의 주 복제 프래그먼트(복제 새로 고침을 위한 잠재적 소스) 및 N개의 부 복제들(새로 고침의 잠재적 대상들)을 갖는다. 주 복제 프래그먼트 내의 대응하는 행들과 트랜잭션적으로 일관성이 없는 행들을 갖는 부 복제 프래그먼트는 구식 또는 진부한 복제 프래그먼트이다. 진부한 복제 프래그먼트 내의 행들(레코드들 또는 인덱스 항목들)은 다음의 예시적 상태들 중 하나의 상태에 있을 수 있다. 주 행(primary row)이라는 용어는 주 복제 프래그먼트 내의 행을 가리킨다. 진부한 복제 프래그먼트 내의 행들은 다음의 상태에 있을 수 있다.
1. 일관성 있음(Consistent)
진부한 부 복제 프래그먼트가 오프라인이었던 동안 주 행이 변하지 않았다. 그렇지 않으면, 새로 고침 프로세스가 진부한 부 복제 프래그먼트 내의 행을 대응하는 주 행과 일관성이 있도록 이미 업데이트하였다. 부 복제 프래그먼트 내의 일관성 있는 행은 동일한 CRID 및 CUID 값들을 갖는 주 복제 프래그먼트 내의 행에 대응한다.
2. 일관성 없음(Inconsistent)
진부한 부 복제 프래그먼트가 오프라인이었던 동안 주 행이 업데이트되었다. 진부한 부 복제 프래그먼트 내의 일관성 없는 행은 동일한 CRID 값을 갖지만, 상이한 CUID 값을 갖는 주 복제 프래그먼트 내의 행에 대응한다.
3. 실종(Missing)
진부한 부 복제 프래그먼트가 오프라인이었던 동안 새로운 주 행이 생성되었다. 진부한 부 복제 프래그먼트 내의 실종 행은 동일한 CRID 값을 갖는 진부한 부 복제 프래그먼트 내에 대응하는 행이 없는 CRID 값을 갖는 주 행이 존재하는 경우를 설명한다.
4. 여분(Extra)
진부한 부 복제 프래그먼트가 오프라인이었던 동안 주 행이 삭제되었다. 진부한 부 복제 프래그먼트 내의 여분 행은 동일한 CRID 값을 갖는 주 복제 프래그먼트 내에 대응하는 행이 없는 CRID 값을 갖는 진부한 부 복제 프로그램 내의 행이 존재하는 경우를 설명한다.
일관성이 없는 진부한 복제의 행들의 CRID들은 새로 고침 기법의 초기 단계에서 임시 파일(StaleCloneCRIDs)에 캡처된다. 그 임시 파일은 새로 고쳐질 필요가 있는, 예컨대, 일관성이 없는, 실종, 또는 여분인 레코드들을 식별하는 값들을 갖는 열인 Stale_CRID를 갖는다. 임시 파일(StaleCloneCRIDs)의 일 구현에서, 추가 Batch_ID 열이 추가될 수 있고 다수의 작은, 증분식 배치 조작들(small, incremental batch operations)에서 StaleCloneCRIDs 내의 별개의 행 세트들(discrete sets of rows)을 액세스하는 프로세스를 단순화하는 값들로 초기화될 수 있다.
도 8은 진부한 복제 프래그먼트를 새로 고칠 때의 상태들의 진행을 도시한다. 도 8에 도시된 바와 같이, 부 복제 프래그먼트(805)는 오프라인(Offline) 상태로부터 프리리프레시(PreRefresh) 상태로 진행한다. 진부한 복제가 프리리프레시 상태에 있는 동안, 진부한 복제에 새로 고침 조작의 성능을 최적화하기 위한 조작들이 적용될 수 있다. 다음으로, 부 복제 프래그먼트(805)는 온라인인 것으로 간주되어 인리프레시(InRefresh) 상태에 놓여진다. 진부한 복제 프래그먼트는 새로 고쳐지는 동안 인리프레시 상태에 머무른다. 이 상태에서, 부 복제 프래그먼트(805)는 주 복제 프래그먼트(803)로부터 전파된 변경들에 의해 업데이트될 수 있다.
새로 고침 프로세스가 수행된 후에, 부 복제 프래그먼트(805)는 커런트(Current) 상태에 들어간다. 일단 부 복제 프래그먼트(805)가 커런트 상태에 들어가면, 그것은 주 복제가 될 자격이 있다.
도 11은 데이터베이스 개체의 진부한 복제 프래그먼트를 새로 고치는 예시적 새로 고침 프로세스(1100)를 도시한다.
0. 진부한 복제 온라인(StaleCloneOnline)(1150):
블록 1102에서, 진부한 복제가 복제 새로 고침(Clone Refresh)을 위한 대상이 될 경우(예컨대, 그것이 오프라인 후에 시스템이 그것에 액세스 가능하게 될 경우), 그것은 프리리프레시 상태에 놓인다. 다음으로, 블록 1104에서, 복제 프래그먼트가 프리리프레시 상태에 있는 동안 프리-패스 최적화(pre-pass optimization)들이 실행될 수 있다. 그러한 최적화들은 새로 고침 프로세스(1100)의 나머지의 후속 성능을 최적화하도록 설계된다.
1. 업데이트 전파 인에이블(EnableUpdatePropagation)(1160):
진부한 복제 프래그먼트는 블록 1106에서 인리프레시 상태에 있는 것으로 표시(mark)된다. 그 후, 블록 1108에서, 주 복제 프래그먼트로부터 진부한 복제 프래그먼트로 업데이트들의 전파가 인에이블된다. 전파된 업데이트들을 진부한 복제 프래그먼트에 적용하는 것은 선택적일 수 있다. 예를 들면, 전파된 업데이트들의 적용은 이미 새로 고쳐졌거나 또는 새로 고침을 필요로 하지 않는 것으로 판정될 수 있는 레코드들에 대해서만 수행된다. 즉, 전파된 업데이트들은 주어진 CRID 값에 대한 그 CUID 값들이 주 복제 프래그먼트 내의 대응하는 레코드의 것에 매칭하는 레코드들에만 적용된다. 다른 예시적 구현에서, 만일 업데이트들에 의해 전체 행 값들이 전파되면, 진부한 복제 프래그먼트가 새로 고쳐지는 동안 그 복제 프래그먼트의 임의의 레코드에 업데이트들이 전파되어 적용될 수 있다.
2. 전파 대기(WaitForPropagation)(1110):
다음 블록 1110에서, 새로 고침 프로세스(1100)는 주 복제 프래그먼트 상의 모든 활성 DML 문장들이 진부한 복제 프래그먼트에 업데이트들을 전파하기 시작할 때까지 대기한다. (또는 주 복제에 대한 모든 후속 DML이 진부한 복제 프래그먼트에 일관성 있게 전파되도록 하는 동등한 메커니즘이 이용된다). 블록 1110은, 임의의 새로이 활성화된 DML 문장이 인리프레시 상태에 있는 진부한 복제 프래그먼트들을 포함하여 모든 온라인 복제 프래그먼트들에 업데이트들을 전파할 것임이 보증될 때, 모든 현재 실행중인 DML 문장들이 완료되는 것을 기다림으로써 달성될 수 있다.
3. 진부한 복제 CRID 작성(BuildStaleCloneCRlDs)(1112):
블록 1112에서, 커밋된 데이터 읽기(ReadCommitted) 모드에서, StaleCloneCRIDs 임시 테이블이 생성되어 초기화된다. StaleCloneCRIDs는 진부한 복제 프래그먼트 내의 최신이 아닌(non-up-to-date) 모든 행들(일관성이 없는, 실종 및 여분 행들)을 커버할 것임이 보증되지만, 커밋된 데이터 읽기 분리(ReadCommitted isolation) 모드에서 실행하는 것으로 인해, StaleCloneCRIDs는 이따금 실제로 일관성이 있는 CRID 행들을 포함할 수 있다. StaleCloneCRIDs 임시 테이블을 포퓰레이트하는 일 구현에서, 대응하는 복제 업데이트 식별자(cuid) 열 값들이 매칭하지 않거나 널(null)인 주 복제 및 진부한 복제 프래그먼트들의 대응하는 복제 레코드 식별자(crid)에 대하여 SQL 외부 조인 조작(outer join operation)이 이용될 수 있다. 다음의 의사 코드는 하나의 그러한 외부 조인의 예를 제공한다. 이 예에서는, 주어진 크기의 새로 고침 배치들을 생성하는 데 이용될 수 있는 예시적 베이스를 제공하기 위해 StaleCloneCRIDs 테이블에 추가적인 Batch_Id 열이 추가된다는 것에 유의한다.
4. 커런트화(MakeCurrent)(1170):
도 17은 진부한 복제를 커런트로 만들기 위한 예시적 프로세스(1170)를 도시한다. 프로세스(1170)는 도 11에 도시된 예시적 새로 고침 프로세스(1100)의 일부이다.
블록 1114에서 StaleCloneCRIDs 임시 테이블로부터의 Stale_CRIDs의 제1 작은 배치(first small batch)(BatchOfStaleCRIDs)가 초기화된다. 블록 1114의 일례에서, BatchOfStaleCRIDs는 그 Batch_Id 열 값들이 @start_Id와 @end_Id의 매개 값들(parameterized values) 사이에 있는 StaleCloneCRIDs 임시 테이블 내의 행들의 CRID들인 것으로 정의된다. 초기(initial), 실제 @start_Id 값은 StaleCloneCRIDs 임시 테이블 내의 가장 작은 Batch_ID 열 값(예컨대, IDENITY 함수에 의해 1의 씨드(seed) 값으로 초기화된 Batch_ID)의 것으로 설정된다. 그 후 초기, 실제 @start_Id 값은 원하는 BatchSize의 값으로 설정된다. BatchSize의 값은 상이한 새로 고침 목표들을 달성하기 위해 변경될 수 있다. 보다 작은 BatchSize의 값은 진행하는 사용자 작업 부호들과의 보다 큰 동시성(concurrency)을 제공할 수 있다. BatchSize에 대한 보다 큰 값은 잠재적으로 보다 나은 새로 고침 성능을 가져올 수 있다. 판정 블록 1116에서, BatchOfStaleCRIDs가 비어 있는지를 판정하는 확인(check)이 행해진다. 만일 BatchOfStaleCRIDs가 비어 있다면, 새로 고침 프로세스(1100)는 블록 1118로 진행하고 새로 고쳐진 복제 프래그먼트를 커런트 상태에 있는 것으로 표시한다. 커런트 상태에 있는 부 복제 프래그먼트는 주 복제 프래그먼트가 될 자격이 있다. 그 후, 프로세스(1100)는 블록 1120에서 종료(exit)한다.
만일 판정 블록 1116에서, BatchOfStaleCRIDs가 비어 있지 않은 것으로 판정되면,
a. 블록 1122에서, 반복 읽기(Repeated Read) 모드에서 새로운 트랜잭션이 시작된다.
b. 블록 1124에서, BatchOfStaleCRIDs에 의해 식별된 주 복제 프래그먼트 내의 행들에 대해 읽기 잠금(read locks)이 설정된다. 이 단계는 기능적으로 요구되지는 않지만, 전파된 업데이트들과의 잠재적인 교착 상태들(potential deadlocks)을 피하기 위하여 중요하다.
c. 블록 1126에서, 진부한 복제 프래그먼트에서 BatchOfStaleCRIDs 내의 CRID들에 의해 식별되는 행들이 삭제된다. 다음의 의사 코드는 진부한 복제 프래그먼트로부터 구식인 행들을 삭제하는 하나의 예시적 구현을 기술한다. @start_Id와 @end_Id의 실제 값들은 커런트화(MakeCurrent) 프로세스(1170)에서 초기에(블록 1114 또는 블록 1132에서) 설정된 것들이다.
d. 블록 1128에서, 주 복제로부터 BatchOfStaleCRIDs에 의해 식별되는 행들이 진부한 복제 프래그먼트에 삽입된다. 주 프래그먼트로부터 진부한 복제 프래그먼트로 새로운 행들을 삽입하는 하나의 예시적 구현의 예시적 의사 코드 기술이 다음에 온다. @start_Id와 @end_Id의 실제 값들은 커런트화(MakeCurrent) 프로세스(1170)에서 초기에(블록 1114 또는 블록 1132에서) 설정된 것들이다.
e. 블록 1130에서, 트랜잭션이 커밋(commit)된다.
f. 블록 1132에서, StaleCloneCRIDs 임시 테이블로부터의 CRID들의 다음 배치가 다음 BatchOfStaleCRIDs로서 식별된다. @start_Id와 @end_Id의 실제 값들은 각각 원하는 BatchSize의 값에 의해 증가된다.
g. 그 후 새로 고침 프로세스(1100)는 다시 블록 1116으로 진행한다.
만일 BatchOfStaleCRIDs의 처리 중에 오류가 발생하면, 트랜잭션은 중단되고 새로 고침 프로세스(1100)는 종료한다.
만일 새로 고침 프로세스(1100)가 성공적으로 완료되지 않으면, 진부한 복제 프래그먼트는 프리리프레시 상태로(또는 만일 진부한 복제 프래그먼트에의 액세스가 완전히 상실되었다면 오프라인 상태로) 옮겨진다.
예시적 복제 프래그먼트 새로 고침 기법은 연속적인 전방 진행(continuous forward progress)을 행함과 동시에, 작은, 짧은 트랜잭션들을 통하여 현존하는 작업 부하들과의 충돌을 최소화한다. 위에서 논의된 복제 새로 고침 기법은 또한, 복제 데이터 프래그먼트들에 적용되는 것과 마찬가지로, 복제 인덱스 프래그먼트들에도 적용될 수 있다. 하나의 예시적 구현에서, 진부한 복제 인덱스 프래그먼트들은 대응하는 주 복제 인덱스 프래그먼트로부터 새로 고쳐질 수 있다.
만일 기본 테이블 프래그먼트에 대한 모든 복제 데이터 프래그먼트들이 오프라인으로 가면, 모든 각 인덱스 프래그먼트 내의 해당 프래그먼트에 대응하는 행들도 효과적으로 오프라인이다. 기본 테이블 주 복제 프래그먼트가 온라인으로 돌아오면, 새로 고침 기법은 임의의 진부한 테이블 복제 데이터 프래그먼트들에 대해서뿐만 아니라 임의의 진부한 복제 인덱스 프래그먼트들에 대해서도 작용한다. 그 시점에서, 업데이트 조작들은 새로 고쳐지는 진부한 부 복제 인덱스 및 데이터 프래그먼트들에 전파된다. 유사하게, 만일 인덱스 프래그먼트에 대한 모든 복제 프래그먼트들이 오프라인으로 가면, 그 인덱스 프래그먼트를 이용하는 인덱스 액세스 경로는 오프라인일 것이다. 진부한 복제 인덱스 프래그먼트는 일단 다시 액세스 가능하게 되면 복제 새로 고침을 통하여 복원된다. 하나의 예시적 구현에서, 진부한 복제 인덱스 프래그먼트들은 기본 테이블 프래그먼트들의 행들을 이용하여 직접 새로 고쳐진다. 그러나, 진부한 부 복제 인덱스 프래그먼트도 대응하는 주 복제 인덱스 프래그먼트로부터 새로 고쳐질 수 있다.
위에서 논한 데이터베이스 프래그먼트 복제 및 관리 메커니즘의 성능은 아래에서 논의되는 예시적 최적화들에 의해 향상될 수 있다:
a) 복제 새로 고침의 프리리프레시 단계(PreRefresh Step of Clone Refresh)
복제 새로 고침 기법을 실행하기 전에, (도 11의 프로세스(1100)에 대하여 기술된) 동일한 새로 고침 기법은, 완전히 커밋된 데이터 읽기 모드(read committed mode)에서 실행될 수 있다. (예를 들면, 프리리프레시 단계 동안 실행되는 경우, 프로세스(1100)의 블록 1122는 커밋된 데이터 읽기(Read Committed) 모드에서 트랜잭션을 시작한다.) 다수의 병렬 업데이트들의 부재 시에, 이 프리-패스(pre-pass)는 복재 프래그먼트 내의 행들의 대다수를 청소(clean up)하여, 일관성이 없는 소수만을 남기고, 잠재적으로 소수를 더 도입할 것이다. 이 아이디어는 프리-패스를 행한 후에, 반복 가능한 읽기 모드에서 엄격한 새로 고침 단계(strict refresh phase)(도 17의 프로세스(1170))는 훨씬 더 빨리 동작할 것이라는 것이다. 전체적으로, 보다 짧은 시간 기간 동안 보다 적은 수의 행들이 잠길 것이고(보다 적은 수의 배치들 때문에), 따라서 시스템에서의 동시성이 증가한다.
주 복제 프래그먼트가 새로 고침을 필요로 하는 다수의 부 복제 프래그먼트들을 갖는 경우, 모든 복제 프래그먼트들에 대한 새로 고침 패스들은 서로 독립적으로 실행될 수 있다. 병렬처리(parallelism)의 정도는 얼마나 많은 동시성 히트(concurrency hit)를 시스템에 부과할지에 대하여 복제 프래그먼트들이 얼마나 신속히 온라인으로 되돌려지는지를 절충하는 것에 기초하여 제어될 수 있다.
b) 부 복제 프래그먼트의 장애에 대한 트랜잭션 탄력성(resilience)
부 복제 프래그먼트에의 전파된 업데이트가 시스템 원인으로 실패하면, 그 복제 프래그먼트는 오프라인으로 표시될 것이다. 진행하는 트랜잭션들의 결과는 주 복제 프래그먼트의 행들에 직접 보전된다. 이전 트랜잭션들의 결과를 보전하기 위하여 미처리 작업(pending work)의 어떤 추가적인 대기(queue)도 요구되지 않는다. 오류 처리의 편의를 위하여, 그 업데이트들이 전파되고 있던 문장은 롤백(roll back)될 수 있다. 그러나 장애가 생긴 부 복제 프래그먼트에의 업데이트 전파의 장애가 문장의 실행에 다른 부작용을 일으키지 않는다면 이것이 불필요하다. 해당 문장에 대한 업데이트들은 주 복제 프래그먼트에 이미 적용되어 그것에 보전되었을 것이다.
c) 주 복제 프래그먼트의 장애에 대한 트랜잭션 탄력성
주 복제 프래그먼트에 장애가 생길 경우, 그 복제 프래그먼트에 액세스하는 사용자 트랜잭션은, 새로운 주 프래그먼트로서 즉시 지정될 수 있는 온라인의, 일관성 있는 부 복제 프래그먼트가 있다면, 중단될 필요가 없다. 그러나, 그 장애가 생긴 주 복제 프래그먼트에 현재 액세스하는 문장은 모두 롤백될 것이다.
d) 복제 새로 고침 탄력성
만일 부 복제 프래그먼트 내의 레코드에 대한 복제 새로 고침 업데이트들이 시스템 원인으로 실패하면, 복제 새로 고침 패스는 처음부터 다시 시작하거나, 현재 활성인 커런트화(MakeCurrent) 배치를 재시도하거나, StaleCloneCRIDs의 전체 커런트화(MakeCurrent) 처리를 되풀이할 수 있다.
도 9는 복제 데이터베이스 프래그먼트들을 갖는 예시적 데이터베이스 시스템(900)이다. 데이터베이스 시스템(900)은 전형적으로 작업 부하를 분배하고 로드 균형 조정뿐만 아니라 데이터베이스에 액세스하는 신뢰할 만한 사용 가능성을 제공하는 다수의 컴퓨팅 장치들(911-914)을 포함한다. 예시적 데이터베이스 내의 개체는 복제 프래그먼트들로 분할되고, 이것들은 컴퓨팅 장치들(911-914) 사이에 분배된다. 이런 식으로, 컴퓨팅 장치들(911-914)은 예시적 데이터베이스 내의 개체의 상이한 부분들에 대한 조작들을 동시에 수행할 수 있다. 컴퓨팅 장치들(911-914)은 SQL 서버와 같은, 임의의 유형의 데이터베이스 시스템으로 구성될 수 있다.
도면에 도시된 바와 같이, 컴퓨팅 장치들(911-914)은 주 복제 프래그먼트들(923-926) 및 부 복제 프래그먼트들(934-937)을 포함할 수 있다. 일 실시예에서, 주 복제 프래그먼트들(923-926)은 컴퓨팅 장치들(911-914)에 의해 데이터베이스 개체, 쿼리, 보고서 등을 추가, 삭제, 또는 변경하는 등의 생산성 관련 작업들을 수행하는 데 이용된다. 부 복제 프래그먼트들(934-937)은 주 복제 프래그먼트들(923-926)의 백업으로서 기능한다.
전형적으로, 각 컴퓨팅 장치 내의 주 복제 프래그먼트들은 그 장치 내의 부 복제 프래그먼트들에 대응하지 않는다. 만일 컴퓨팅 장치들(911-914) 중 하나가 고장나면, 다른 컴퓨팅 장치가 고장난 장치에 의해 관리되는 주 프래그먼트들에 대응하는 부 복제 프래그먼트들을 이용하여 조작들을 인계받을 수 있다. 이런 식으로, 데이터베이스 시소템(900)은 데이터베이스 개체의 프래그먼트의 적어도 하나의 복제가 여전히 액세스 가능한 한 그 프래그먼트가 여전히 액세스 가능하다는 것을 보증할 수 있다.
다른 실시예에서, 컴퓨팅 장치들(911-914)은 중복(overlapping) 주 복제 프래그먼트들을 포함할 수 있다. 이런 식으로, 다수의 컴퓨팅 장치들은 데이터베이스의 동일 부분에 대해, 쿼리와 같은, 조작들을 수행할 수 있다.
도 10은 데이터베이스 개체를 업데이트하기 위한 예시적 프로세스(1000)를 도시한다. 데이터베이스 개체는 전체 데이터베이스 또는, 테이블, 인덱스 등과 같은 데이터베이스의 일부의 데이터를 포함할 수 있다. 업데이트는 프래그먼트들 중 하나 이상의 변경을 수반할 수 있다. 블록 1001에서, 업데이트에 의해 영향을 받는 데이터베이스 개체의 프래그먼트들이 식별되고, 이들은 프로세스(1000)에 대한 로컬 데이터 구조인 SetOfFragments라 불리는 세트를 형성한다. 이 세트 내의 각 요소는 처음에는 미처리(unprocessed)로서 표시된다(이것은 바로 로컬 데이터 구조 내의 요소인, 실제 프래그먼트를 변경하지 않는다). 프로세스(1000)는 판정 블록 1002로 계속되고, 거기서 세트 SetOfFragments 내에 미처리 요소들이 여전히 남아 있는지에 대한 판정이 행해진다. 만일 아니라면, 프로세스(1000)는 종료 블록 1012로 계속되어 프로세스가 종료된다.
판정 블록 1002로 돌아가서, 만일 세트 SetOfFragments 내에 미처리 요소들이 여전히 남아 있다면, 프로세스(1000)는 블록 1003으로 계속되고, 거기서 세트 SetOfFragments로부터 미처리 요소들이 획득되고, 이것은 다음에 업데이트되어야 할 프래그먼트를 나타낸다. 블록 1004에서, 대응하는 주 복제 프래그먼트가 결정되고, 업데이트될 필요가 있는 주 복제 프래그먼트 내의 레코드들의 세트가 식별되어, 프로세스(1000)에 대한 로컬 데이터 구조인 SetOfRecords라 불리는 세트를 형성한다. 이 세트 내의 각 요소는 처음에는 미처리로서 표시된다(이것은 로컬 데이터 구조 내의 요소인, 실제 레코드를 변경하지 않는다). 판정 블록 1005에서는, 세트 SetOfRecords 내에 미처리 요소들이 여전히 남아 있는지에 대한 판정이 행해진다. 만일 아니라면, 프로세스(1000)는 블록 1006으로 계속되고, 거기서 세트 SetOfFragments 내의 현재 요소는 처리 완료(processed)로서 표시된다(이것은 로컬 데이터 구조 내의 요소인, 실제 프레그먼트를 변경하지 않는다). 그 후 프로세스(1000)는 판정 블록 1002로 되돌아간다.
판정 블록 1005로 돌아가서, 만일 세트 SetOfRecords 내에 미처리 요소들이 여전히 남아 있다면, 프로세스(1000)는 블록 1007로 계속되고, 거기서 세트 SetOfRecords로부터 미처리 요소가 획득된다. 그 요소는 다음에 업데이트되어야 할 레코드를 나타낸다. 블록 1008에서, 그 레코드에 대하여 CUID가 획득된다. (CUID 값 유지 및 할당에 대해서는 도 12 및 13과 관련하여 이 명세서의 다른 곳에서 더 설명한다.)
프로세스(1000)는 블록 1009로 계속되고, 거기서 레코드는 새로운 CUID뿐만 아니라 새로운 값들로 업데이트된다. 블록 1010에서, (새로운 CUID를 포함하는) 업데이트된 레코드뿐만 아니라 구(old) CUID는 모든 부 복제 데이터 프래그먼트들에는 물론, 이 레코드의 사본을 포함하는 모든 복제 인덱스 프래그먼트들, 주 및 부 프래그먼트들 모두에 전파된다. 도 16은 이 블록을 보다 상세히 설명한다.
업데이트가 전파되어 적용된 후에, 프로세스(1000)는 블록 1011로 계속되고, 거기서 세트 SetOfRecords 내의 현재 요소는 처리 완료(processed)로서 표시된다(이것은 로컬 데이터 구조 내의 요소인, 실제 레코드를 변경하지 않는다). 그 후 프로세스(1000)는 판정 블록 1005로 되돌아간다.
도 12는 복제 업데이트 식별자들(CUID들)을 변경하기 위한 예시적 프로세스(1200)를 도시한다. 프로세스(1200)는 데이터베이스의 테이블과 같은, 각 데이터베이스 개체에 대하여 구현될 수 있다. 블록 1203에서, 프로세스(1200)는 테이블과 관련된 복제 프래그먼트들의 구성에 대한 변경들을 기다린다. 판정 블록 1205에서, 복제 프래그먼트가 사용 불가능하게 되었는지에 대한 판정이 행해진다. 만일 복제 프래그먼트들이 모두 사용 가능하다면, 프로세스(1200)는 블록 1203의 대기 상태로 되돌아간다.
판정 블록 1205로 되돌아가서, 만일 복제 프래그먼트가 사용 불가능하게 되었다면, 프로세스(1200)는 블록 1207로 이동하고 거기서 테이블의 CUID 값이 증가된다. 블록 1209에서, 테이블의 새로운 CUID 값이 트랜잭션적으로 존속된다(transactionally persisted).
도 13은 도 12에 도시된 프로세스(1200)에 따라서 할당된 CUID 값을 할당하기 위한 예시적 프로세스(1300)를 도시한다. 데이터베이스 시스템은 데이터베이스에 대해 작용하는 문장들에 대한 프로세스(1300)를 실행하도록 구성될 수 있다. 블록 1302에서, 프로세스는 데이터베이스에 대하여 새로운 문장을 실행하기 위해 준비한다. 판정 블록 1304에서, 새로운 문장이 DML 문장인지에 대한 판정이 행해진다. DML 문장은 전형적으로 데이터베이스 내의 항목들을 삽입, 삭제 및 변경하는 등의 조작들을 포함한다. 문장이 DML 문장이 아니면, 프로세스(1300)는 블록 1320으로 가고 거기서 DML이 아닌 문장이 데이터베이스에 대하여 실행된다. 그 후, 프로세스는 블록 1302로 되돌아간다.
판정 블록 1304로 돌아가서, 만일 문장이 DML 문장이라면, 프로세스(1300)는 블록 1306으로 계속되고 거기서 업데이트되고 있는 데이터베이스의 테이블에 대한 CUID 값이 판독된다. 블록 1308에서, CUID 값은 DML 문장과 관련된다. 블록 1310에서, CUID 값은 DML 문장에 의해 업데이트된 모든 주 복제 프래그먼트마다의 각 행에 저장된다. 블록 1312에서, CUID 값은 DML 문장의 전파된 업데이트에 의해 영향을 받은 복제 프래그먼트 내의 각 행 또는 인덱스 항목 내에 저장된다. CUID 값은 업데이트와 함께 복제 데이터 및 인덱스 프래그먼트들 모두에 전파될 수 있다. CUID 값들에 대한 예시적 전파 경로들에 대해서는 도 14와 관련하여 논하겠다. CUID 값이 전파되면, 프로세스(1300)는 블록 1302로 되돌아간다.
도 14는 CUID 값들에 대한 예시적 전파 경로들을 도시한다. 도 14에서, 주 복제 데이터 프래그먼트(1403)는 DML 문장 내에 포함된 업데이트를 구현하였다. 위에서 논한 바와 같이, DML 문장과 관련된 CUID 값은 주 복제 데이터 프래그먼트(1403) 내의 DML 문장에 의해 업데이트된 각 행에 저장된다. 주 복제 데이터 프래그먼트(1403)는 업데이트와 함께 CUID 값을 경로(1411)를 통하여 부 복제 데이터 프래그먼트들(1405)에 전파할 수 있다. 특히, DML 문장과 관련된 CUID 값은 업데이트 전파에 의해 영향을 받은 각 행에 할당된다. 일 구현에서, CUID 값은 주 복제 데이터 프래그먼트로부터 경로들(1412 및 1413)을 통하여 각각 주 복제 인덱스 프래그먼트(1407) 및 부 복제 인덱스 프래그먼트(1409)에 전파된다. 다른 구현에서, CUID 값은 주 복제 인덱스 프래그먼트(1407)로부터 경로(1415)를 통하여 부 복제 인덱스 프래그먼트(1409)로 전파된다.
도 16은 업데이트된 레코드 및 구 CUID 값을 주 복제 프래그먼트로부터 모든 부 복제 프래그먼트들에는 물론, 이 레코드의 사본을 포함하는 모든 복제 인덱스 프래그먼트들에 전파하여 적용하기 위한 예시적 프로세스(1600)를 도시한다. 전파된 업데이트들을 수신하는 복제 프래그먼트들은 커런트(Current) 상태에 있거나, 또는 인리프레시(InRefresh) 상태에 있을 수 있다. 프로세스(1600)는 전형적으로 이 명세서의 다른 부분에서 설명된, 보다 큰 업데이트 프로세스 내의 한 단계를 형성한다. 블록 1601에서, 모든 부 복제 데이터 프래그먼트들은 물론, 이 레코드의 사본을 포함하는 모든 복제 인덱스 프레그먼트들(주 및 부 프래그먼트 모두)이 식별된다. 이 복제 프래그먼트들은 프로세스(1600)에 대한 로컬 데이터 구조인, SetOfSecondaries라 불리는 세트를 형성한다. 이 세트 내의 각 요소는 처음에는 미처리로서 표시된다(이것은 로컬 데이터 구조 내의 요소인, 실제 복제 프래그먼트를 변경하지 않는다). 프로세스(1600)는 판정 블록 1602로 계속되고, 거기서 세트 SetOfSecondaries 내에 미처리 요소들이 여전히 남아 있는지에 대한 판정이 행해진다. 만일 아니라면, 프로세스(1600)는 종료 블록 1063으로 계속되어 거기서 프로세스가 종료되고, 그 후 프로세스(1600)를 단계로서 포함하는 임의의 보다 큰 프로세스가 그 프로세스 내의 다음 단계로 계속 진행한다.
판정 블록 1602로 돌아가서, 만일 세트 SetOfSecondaries 내에 미처리 요소들이 여전히 남아 있다면, 프로세스(1600)는 블록 1604로 계속되고, 거기서 세트 SetOfSecondaries로부터 미처리 요소가 획득된다. 그 요소는 다음에 업데이트되어야 할 부 복제 프래그먼트를 나타낸다. 그 부 복제 프래그먼트는 부 복제 데이터 프래그먼트, 주 복제 인덱스 프래그먼트, 또는 부 복제 인덱스 프래그먼트일 수 있다. 판정 블록 1605에서, 부 복제 프래그먼트 내에 주 복제 프래그먼트로부터의 레코드와 동일한 CRID를 갖고, 또는 주 복제 프래그먼트로부터의 레코드의 구 CUID와 매칭하는 CUID를 갖는 레코드가 존재하는지에 대한 판정이 행해진다. 만일 그렇다면, 프로세스(1600)는 블록 1606으로 계속되고, 거기서 그 레코드는 새로운 값들 및 새로운 CUID로 업데이트된다. 그 후 프로세스(1600)는 블록 1609로 계속된다.
판정 블록 1605로 돌아가서, 만일 매칭하는 레코드가 발견되지 않으면, 프로세스(1600)는 판정 블록 1607로 계속되고, 거기서 부 복제 프래그먼트가 인리프레시(InRefresh) 상태에 있는지에 대한 판정이 행해진다. 만일 아니라면, 블록 1608에서, 부 복제 프래그먼트는 오프라인으로 표시된다. 그 부 복제 프래그먼트는 더 이상 주 복제 프래그먼트와 일관성이 없기 때문이다. 그 후 프로세스(1600)는 블록 1609로 계속된다.
판정 블록 1607로 돌아가서, 만일 부 복제 프래그먼트가 인리프레시 상태에 있다면, 프로세스(1600)는 블록 1609로 계속되고, 거기서 세트 SetOfSecondaries 내의 현 요소는 처리 완료로서 표시된다(이것은 로컬 데이터 구조 내의 요소인, 실제 복제 프래그먼트를 변경하지 않는다). 그 후 프로세스(1600)는 판정 블록 1602로 되돌아간다.
도 15는 설명된 시스템들 및 방법들을 구현하기 위한 예시적 컴퓨팅 장치(1500)를 도시한다. 가장 기본적인 구성으로, 컴퓨팅 장치(1500)는 전형적으로 적어도 하나의 중앙 처리 장치(CPU)(1505) 및 메모리(1510)를 포함한다.
컴퓨팅 장치의 정확한 구성 및 유형에 따라서, 메모리(1510)는 휘발성(예컨대 RAM), 비휘발성(예컨대, ROM, 플래시 메모리 등) 또는 이 둘의 어떤 조합일 수 있다. 또한, 컴퓨팅 장치(1500)는 추가 특징들/기능성을 가질 수도 있다. 예를 들면, 컴퓨팅 장치(1500)는 다수의 CPU들을 포함할 수 있다. 설명된 방법들은 컴퓨팅 장치(1500) 내의 임의의 처리 장치에 의해 임의의 방식으로 실행될 수 있다. 예를 들면, 설명된 프로세스는 다수의 CPU들에 의해 병렬로 실행될 수 있다.
컴퓨팅 장치(1500)는 또한 추가 저장 장치(이동식 및/또는 비이동식)를 포함할 수 있고, 이 추가 저장 장치는 자기 또는 광 디스크 또는 테이프를 포함하지만, 이에 제한되는 것은 아니다. 그러한 추가 저장 장치는 도 15에서 저장 장치(1515)에 의해 예시되어 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어들, 데이터 구조들, 프로그램 모듈들 또는 기타 데이터 등의 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 이동식 및 비이동식 매체들을 포함한다. 메모리(1510) 및 저장 장치(1515)는 모두 컴퓨터 저장 매체의 예들이다. 컴퓨터 저장 매체는, RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD(digital versatile disks) 또는 다른 광 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치 또는 다른 자기 저장 장치들, 또는 원하는 정보를 저장하는 데 이용될 수 있고 컴퓨팅 장치(1500)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이에 제한되는 것은 아니다. 그러한 컴퓨터 저장 매체는 어떤 것이라도 컴퓨팅 장치(1500)의 일부가 될 수 있다.
컴퓨팅 장치(1500)는 또한 그 장치가 다른 장치들과 통신하게 하는 통신 장치(들)(1540)를 포함할 수 있다. 통신 장치(들)(1540)는 통신 매체의 일례이다. 통신 매체는 전형적으로 반송파(carrier wave) 또는 기타 전송 메커니즘(transport mechanism)과 같은 피변조 데이터 신호(modulated data signal)에 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등을 구현하고 모든 정보 전달 매체를 포함한다. "피변조 데이터 신호"라는 용어는, 신호 내에 정보를 인코딩하도록 그 신호의 특성들 중 하나 이상을 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 배선 접속(direct-wired connection)과 같은 유선 매체, 그리고 음향, RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함하지만, 이들에 제한되는 것은 아니다. 여기서 사용되는 컴퓨터 판독가능 매체(computer-readable medium) 또는 장치 판독가능 매체(device-readable media)라는 용어는 컴퓨터 저장 매체 및 통신 매체 둘 다를 포함한다. 설명된 방법들은 데이터, 컴퓨터 실행가능 명령어 등과 같은 임의의 형태로 임의의 컴퓨터 판독가능 매체에 인코딩될 수 있다.
컴퓨팅 장치(1500)는 또한 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치 등과 같은 입력 장치(들)(1535)를 가질 수 있다. 또한 디스플레이, 스피커, 프린터 등과 같은 출력 장치(들)(1530)가 포함될 수도 있다. 모든 이들 장치들은 해당 기술 분야에서 잘 알려진 것들이므로 장황하게 설명될 필요가 없다.
숙련된 당업자들은 프로그램 명령어들 저장하는 데 이용되는 저장 장치들이 네트워크를 가로질러 분포될 수 있다는 것을 알 것이다. 예를 들면, 원격 컴퓨터가 소프트웨어로서 기술된 프로세스의 일례를 저장할 수 있다. 로컬 또는 단말 컴퓨터는 그 원격 컴퓨터에 액세스하여 그 소프트웨어의 일부 또는 전부를 다운로드하여 프로그램을 실행할 수 있다. 대안적으로, 로컬 컴퓨터는 필요에 따라 소프트웨어의 부분들을 다운로드하거나, 일부 소프트웨어 명령어들을 로컬 단말에서 일부는 원격 컴퓨터(또는 컴퓨터 네트워크)에서 실행할 수 있다. 숙련된 당업자들은 또한 그들에게 알려진 종래의 기법들을 이용함으로써, 소프트웨어 명령어들의 일부 또는 전부가 DSP, PLA(programmable logic array) 등과 같은 전용 회로에 의해 수행될 수 있다는 것도 알 것이다.
Claims (28)
- 데이터베이스 개체와 관련된 주 복제 프래그먼트(primary cloned fragment)를 식별하는 단계 - 상기 주 복제 프래그먼트는 상기 데이터베이스 개체와 관련된 데이터베이스 조작들을 위하여 선택됨 - ;상기 주 복제 프래그먼트에 대응하는 부 복제 프래그먼트(secondary cloned fragment)를 식별하는 단계 - 상기 부 복제 프래그먼트는 상기 주 복제 프래그먼트에 대하여 진부한(stale) 것임 - ; 및데이터베이스 조작을 수행함으로써 상기 주 복제 프래그먼트 내의 데이터를 이용하여 상기 진부한 부 복제 프래그먼트를 새로 고치는(refreshing) 단계를 포함하는 단계들을 수행하기 위한 장치 실행가능 명령어들(device-executable instructions)을 갖는 하나 이상의 장치 판독가능 매체(device-readable media).
- 제1항에 있어서, 상기 진부한 부 복제 프래그먼트를 새로 고치는 상기 데이터베이스 조작은 상기 진부한 부 복제 프래그먼트를 증분식으로(incrementally) 새로 고치는 조작들의 배치들(batches of operations)을 포함하는 하나 이상의 장치 판독가능 매체.
- 제2항에 있어서, 상기 진부한 부 복제 프래그먼트들을 새로 고치는 상기 조 작들의 배치들은 구조적 쿼리 언어(SQL) 조작들인 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서, 상기 주 복제 프래그먼트에 대해 수행된 업데이트에 응답하여, 상기 진부한 부 복제 프래그먼트가 새로 고쳐지는 동안 상기 진부한 부 복제 프래그먼트를 업데이트하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제4항에 있어서, 상기 업데이트하는 단계는 상기 진부한 부 복제 프래그먼트의 최신인 행들(up-to-date rows)은 업데이트하지만, 상기 진부한 부 복제 프래그먼트의 최신이 아닌 행들(non-up-to-date rows)은 업데이트하지 않는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서, 상기 새로 고치는 단계는,상기 주 복제 프래그먼트에 포함된 제1 레코드와 관련된 제1 업데이트 식별자(update identifier)를 식별하는 단계;상기 제1 레코드에 대응하는 상기 진부한 부 복제 프래그먼트 내의 제2 레코드와 관련된 제2 업데이트 식별자를 식별하는 단계; 및적어도 부분적으로, 상기 제1 업데이트 식별자와 상기 제2 업데이트 식별자를 비교하는 것에 기초하여, 동일한 복제 레코드 식별자(cloned record identifier)들을 갖는 상기 제1 레코드 및 제2 레코드가 일관성이 있 는(consistent)지를 판정하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제6항에 있어서, 상기 새로 고치는 단계는, 상기 제1 및 제2 레코드들이 일관성이 없는(inconsistent) 것으로 판정되면,상기 제1 레코드 내의 데이터를 이용하여 상기 제2 레코드를 새로 고치는 단계; 및상기 제1 업데이트 식별자의 값을 상기 제2 업데이트 식별자에 할당하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제7항에 있어서, 상기 부 복제 프래그먼트에 포함된 레코드들 각각에 대하여 상기 판정하는 단계, 새로 고치는 단계 및 할당하는 단계를 수행하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서, 상기 새로 고치는 단계는 커밋된 데이터 읽기 모드(read committed mode)에서 상기 부 복제 프래그먼트에 대한 프리-리프레싱(pre-refreshing) 조작을 실행하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제9항에 있어서, 상기 프리-리프레싱 조작은 상기 주 복제 프래그먼트에 대응하는 다른 부 복제 프래그먼트들에 대하여 병렬로 수행되는 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서,업데이트 동안에 상기 진부한 부 복제 프래그먼트가 오프라인인 것에 응답하여, 상기 주 복제 프래그먼트에 업데이트를 보전하는 단계: 및상기 진부한 부 복제 프래그먼트가 온라인으로 되돌아갈 경우 상기 보전된 업데이트를 이용하여 상기 진부한 부 복제 프래그먼트를 새로 고치는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서, 상기 부 복제 프래그먼트를 새로 고치는 상기 데이터베이스 조작은 상기 부 복제에서 레코드들을 삽입, 삭제 및 업데이트하는 데이터 조작 언어(DML: Data Manipulator Language) 조작들을 포함하는 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서, 상기 주 복제 프래그먼트는 복제 데이터 프래그먼트(cloned data fragment) 또는 복제 인덱스 프래그먼트(cloned index fragment) 중 적어도 하나인 하나 이상의 장치 판독가능 매체.
- 제1항에 있어서, 상기 진부한 부 복제 프래그먼트는 복제 인덱스 프래그먼트이고 상기 진부한 부 복제 프래그먼트는 각각이 상기 진부한 부 복제 프래그먼트 내의 적어도 하나의 항목(entry)과 관련된 복수의 복제 데이터 프래그먼트들에 의해 새로 고쳐지는 하나 이상의 장치 판독가능 매체.
- 데이터베이스 개체의 프래그먼트를 식별하는 단계;상기 식별된 프래그먼트로부터 대응하는 복제 프래그먼트들을 생성하는 단계;상기 복제 프래그먼트들을 컴퓨팅 장치들의 그룹에 분배하는 단계; 및상기 복제 프래그먼트들 중 적어도 하나를 상기 데이터베이스 개체와 관련된 조작들을 위하여 이용되도록 구성된 주 복제 프래그먼트로서 지정하는 단계를 포함하는 단계들을 수행하기 위한 장치 실행가능 명령어들을 갖는 하나 이상의 장치 판독가능 매체.
- 제15항에 있어서,상기 데이터베이스 개체의 식별된 프래그먼트에 대한 업데이트를 판정하는 단계;상기 주 복제 프래그먼트에 대하여 상기 업데이트를 수행하는 단계; 및다른 대응하는 부 복제 프래그먼트들에 상기 업데이트를 전파하여 적용하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제16항에 있어서,상기 부 복제 프래그먼트들 중 하나를 상기 업데이트를 포함하지 않는 진부한 부 복제 프래그먼트로서 식별하는 단계; 및상기 주 복제 프래그먼트 내의 데이터를 이용하여 상기 식별된 진부한 부 복제 프래그먼트를 새로 고치는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제17항에 있어서, 상기 새로 고치는 단계는 표준 SQL 데이터베이스 조작들을 이용하여 수행되는 하나 이상의 장치 판독가능 매체.
- 제17항에 있어서,상기 식별된 프래그먼트에 대한 다른 업데이트를 판정하는 단계;상기 주 복제 프래그먼트에 대해 상기 다른 업데이트를 수행하는 단계; 및상기 진부한 부 복제 프래그먼트 내의 레코드들이 상기 다른 업데이트 전에 상기 주 복제 프래그먼트 내의 대응하는 레코드들과 최신(up-to-date with)이었던 경우에만 상기 진부한 복제 프래그먼트에 대해 상기 다른 업데이트를 선택적으로 수행하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제19항에 있어서, 상기 선택적으로 수행하는 단계는, 새로 고쳐진 상기 진부한 복제 프래그먼트의 부분에 대해 상기 다른 업데이트를 수행하는 단계를 포함하는 하나 이상의 장치 판독가능 매체.
- 제20항에 있어서,상기 진부한 복제 프래그먼트가 새로 고쳐진 것을 판정하는 것에 응답하여, 상기 새로 고쳐진 복제 프래그먼트를 주 복제 프래그먼트가 될 자격이 있는 것으로 즉시 지정하는 단계를 더 포함하는 하나 이상의 장치 판독가능 매체.
- 제17항에 있어서, 상기 새로 고치는 단계는 소수의 레코드들을 짧은 시간 간격 동안 잠그고(lock) 다른 사용자 작업 부하(workload)들과 동시에 실행하는 작업 부하로서 구현되는 하나 이상의 장치 판독가능 매체.
- 제17항에 있어서, 상기 새로 고치는 단계는 복수의 진부한 부 복제 프래그먼트들에 대해 병렬로 수행되는 하나 이상의 장치 판독가능 매체.
- 제17항에 있어서, 상기 복수의 진부한 부 복제 프래그먼트들은 공통의 주 복제 프래그먼트, 상이한 주 복제 프래그먼트, 또는 상이한 데이터베이스 개체들 중 적어도 하나에 대응하는 하나 이상의 장치 판독가능 매체.
- 제15항에 있어서, 상기 복제 프래그먼트들은 데이터베이스 조작들에 대하여 실질적으로 동일한 것으로서 생성되는 하나 이상의 장치 판독가능 매체.
- 상호작용하는 컴퓨팅 장치들의 시스템에서의 컴퓨팅 장치로서, 상기 컴퓨팅 장치는 데이터베이스 개체와 관련된 데이터를 포함하고, 상기 컴퓨팅 장치는,업데이트하기 위한 상기 데이터베이스 개체의 부분을 식별하는 단계;제1 데이터베이스 조작을 이용하여 상기 데이터베이스 개체의 상기 식별된 부분과 관련된 주 복제 프래그먼트를 업데이트하는 단계;상기 주 복제 프래그먼트와 관련된 부 복제 프래그먼트를 식별하는 단계; 및상기 제1 데이터베이스 조작과 관련된 제2 데이터베이스 조작을 이용하여, 적어도 부분적으로, 상기 주 복제 프래그먼트에 포함된 데이터에 기초하여, 상기 부 복제 프래그먼트를 업데이트하는 단계를 포함하는 단계들을 수행하도록 구성되어 있는 컴퓨팅 장치.
- 제26항에 있어서, 상기 컴퓨팅 장치는,상기 부 복제 프래그먼트가 상기 주 복제 프래그먼트에 대하여 진부한 것임을 판정하는 단계;상기 주 복제 프래그먼트에 포함된 데이터를 이용하여 상기 부 복제 프래그 먼트를 새로 고치는 단계, 및상기 부 복제 프래그먼트가 새로 고쳐지고 있을 때 상기 부 복제 프래그먼트를 선택적으로 업데이트하는 단계를 포함하는 단계들을 수행하도록 더 구성되어 있는 컴퓨팅 장치.
- 데이터베이스 개체와 관련된 복제 프래그먼트들을 모니터하는 단계 - 상기 복제 프래그먼트는 주 복제 프래그먼트 및 부 복제 프래그먼트를 포함함 - ;상기 복제 프래그먼트들 중 적어도 하나가 사용 불가능하게 된 것을 판정하는 단계;상기 데이터베이스 개체와 관련된 업데이트 식별자를 증가시키는(increment ing) 단계;상기 업데이트 식별자를 트랜잭션적으로 존속시키는(transactionally persisting) 단계;상기 데이터베이스 개체와 관련된 DML 문장(statement)을 식별하는 단계 - 상기 DML 문장은 상기 데이터베이스 개체에 대한 업데이트를 포함함 - ;상기 존속된 업데이트 식별자를 상기 DML 문장과 관련시키는 단계;상기 DML 문장에 의해 영향을 받는 상기 주 복제 프래그먼트들에 대해 상기 업데이트를 구현하는 단계;상기 업데이트에 의해 영향을 받는 상기 주 복제 프래그먼트들 내의 각 행에 상기 DML 문장과 관련된 상기 업데이트 식별자를 저장하는 단계;상기 업데이트 및 상기 업데이트 식별자를 상기 영향을 받은 주 복제 프래그먼트들과 관련된 부 복제 프래그먼트들에 전파하는 단계; 및상기 부 복제 프래그먼트들에 상기 업데이트 식별자를 저장하는 단계를 포함하는 장치 실행가능 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/207,482 | 2005-08-19 | ||
US11/207,482 US7890508B2 (en) | 2005-08-19 | 2005-08-19 | Database fragment cloning and management |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20080055795A true KR20080055795A (ko) | 2008-06-19 |
Family
ID=37768395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020087003601A KR20080055795A (ko) | 2005-08-19 | 2006-07-20 | 데이터베이스 프래그먼트 복제 및 관리 |
Country Status (15)
Country | Link |
---|---|
US (1) | US7890508B2 (ko) |
EP (1) | EP1915668B1 (ko) |
JP (1) | JP5259404B2 (ko) |
KR (1) | KR20080055795A (ko) |
CN (1) | CN101268439B (ko) |
AU (1) | AU2006284498B2 (ko) |
BR (1) | BRPI0615028A2 (ko) |
CA (1) | CA2615421A1 (ko) |
IL (1) | IL188664A (ko) |
MX (1) | MX2008002168A (ko) |
NO (1) | NO20080234L (ko) |
NZ (2) | NZ565641A (ko) |
RU (1) | RU2417426C2 (ko) |
WO (1) | WO2007024376A2 (ko) |
ZA (1) | ZA200800962B (ko) |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5068062B2 (ja) * | 2006-10-30 | 2012-11-07 | インターナショナル・ビジネス・マシーンズ・コーポレーション | データベースを統合するためのシステム、方法、およびプログラム |
US20080313136A1 (en) * | 2007-06-13 | 2008-12-18 | International Business Machines Corporation | Method and apparatus for producing up-to-date query results from tables including data from a data warehouse |
US20100057787A1 (en) * | 2008-08-28 | 2010-03-04 | International Business Machines Corporation | Method, system, and computer program product for cloning of distributed and stateful systems |
US8131700B2 (en) * | 2008-09-25 | 2012-03-06 | Microsoft Corporation | Transitioning clone data maps and synchronizing with a data query |
US8626709B2 (en) | 2008-09-26 | 2014-01-07 | Codefutures Corporation | Scalable relational database replication |
US20100082551A1 (en) * | 2008-09-26 | 2010-04-01 | Microsoft Corporation | Data placement transparency for high availability and load balancing |
US20100082546A1 (en) * | 2008-09-30 | 2010-04-01 | Microsoft Corporation | Storage Tiers for Database Server System |
US8990161B1 (en) * | 2008-09-30 | 2015-03-24 | Emc Corporation | System and method for single segment backup |
JP5387015B2 (ja) * | 2009-02-02 | 2014-01-15 | 株式会社リコー | 情報処理装置、および情報処理装置の情報処理方法 |
US20100306591A1 (en) * | 2009-06-01 | 2010-12-02 | Murali Mallela Krishna | Method and system for performing testing on a database system |
EP2542986A4 (en) | 2010-03-05 | 2014-02-26 | Hewlett Packard Development Co | SYSTEM AND METHOD FOR ROWSET INSERTIONS |
NZ603057A (en) * | 2010-03-18 | 2014-10-31 | Nuodb Inc | Database management system |
JP2012079100A (ja) * | 2010-10-01 | 2012-04-19 | Canon Inc | ディスク制御装置及びディスク制御方法、並びにプログラム |
US8832028B2 (en) | 2011-08-25 | 2014-09-09 | Oracle International Corporation | Database cloning |
CN103917971B (zh) * | 2011-12-06 | 2017-02-22 | 华为技术有限公司 | 具有老化机制的数据库和管理数据库的方法 |
US9805107B2 (en) * | 2011-12-09 | 2017-10-31 | Telduráðgevin Sp/f | Systems and methods for dynamic partitioning in a relational database |
US8620924B2 (en) | 2012-03-06 | 2013-12-31 | International Business Machines Corporation | Refreshing a full-text search index in a partitioned database |
US10740323B1 (en) | 2013-03-15 | 2020-08-11 | Nuodb, Inc. | Global uniqueness checking in distributed databases |
US11176111B2 (en) | 2013-03-15 | 2021-11-16 | Nuodb, Inc. | Distributed database management system with dynamically split B-tree indexes |
US9501363B1 (en) | 2013-03-15 | 2016-11-22 | Nuodb, Inc. | Distributed database management system with node failure detection |
US10037348B2 (en) | 2013-04-08 | 2018-07-31 | Nuodb, Inc. | Database management system with database hibernation and bursting |
US9632878B1 (en) | 2013-09-20 | 2017-04-25 | Amazon Technologies, Inc. | Verification of database table partitions during backup |
US9633051B1 (en) | 2013-09-20 | 2017-04-25 | Amazon Technologies, Inc. | Backup of partitioned database tables |
US10025673B1 (en) | 2013-09-20 | 2018-07-17 | Amazon Technologies, Inc. | Restoring partitioned database tables from backup |
JPWO2015141219A1 (ja) | 2014-03-20 | 2017-04-06 | 日本電気株式会社 | ストレージシステム、制御装置、データアクセス方法およびプログラム |
US10025710B2 (en) | 2014-04-30 | 2018-07-17 | Walmart Apollo, Llc | Pattern for integrating primary and secondary data stores in a sharded data domain |
GB2532039B (en) | 2014-11-06 | 2016-09-21 | Ibm | Secure database backup and recovery |
WO2016118361A1 (en) | 2015-01-23 | 2016-07-28 | Servicenow, Inc. | Distributed computing system with resource managed database cloning |
US10884869B2 (en) | 2015-04-16 | 2021-01-05 | Nuodb, Inc. | Backup and restore in a distributed database utilizing consistent database snapshots |
US10067969B2 (en) | 2015-05-29 | 2018-09-04 | Nuodb, Inc. | Table partitioning within distributed database systems |
US10180954B2 (en) | 2015-05-29 | 2019-01-15 | Nuodb, Inc. | Disconnected operation within distributed database systems |
US10747753B2 (en) | 2015-08-28 | 2020-08-18 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US9529923B1 (en) | 2015-08-28 | 2016-12-27 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US9390154B1 (en) | 2015-08-28 | 2016-07-12 | Swirlds, Inc. | Methods and apparatus for a distributed database within a network |
US20180074967A1 (en) * | 2016-09-09 | 2018-03-15 | Sap Se | Paging Mechanism for In-Memory Data Management System |
PT3539026T (pt) | 2016-11-10 | 2022-03-08 | Swirlds Inc | Métodos e aparelhos para uma base de dados distribuída que inclui entradas anónimas |
KR102433285B1 (ko) | 2016-12-19 | 2022-08-16 | 스월즈, 인크. | 이벤트들의 삭제를 가능하게 하는 분산 데이터베이스를 위한 방법 및 장치 |
KR102348418B1 (ko) | 2017-07-11 | 2022-01-07 | 스월즈, 인크. | 네트워크 내의 분산 데이터베이스를 효율적으로 구현하기 위한 방법들 및 장치 |
SG11202001323XA (en) | 2017-08-15 | 2020-03-30 | Nuodb Inc | Index splitting in distributed databases |
CA3076257A1 (en) | 2017-11-01 | 2019-05-09 | Swirlds, Inc. | Methods and apparatus for efficiently implementing a fast-copyable database |
RU2703961C1 (ru) * | 2018-07-25 | 2019-10-22 | федеральное государственное бюджетное образовательное учреждение высшего образования "Российский государственный университет им. А.Н. Косыгина (Технологии. Дизайн. Искусство)" | Система репликации информации в базах данных |
US11048692B2 (en) * | 2019-04-02 | 2021-06-29 | Sap Se | Partition move in case of table update |
CN110111203A (zh) * | 2019-05-05 | 2019-08-09 | 北京阿尔山金融科技有限公司 | 业务数据的批量操作方法、装置及电子设备 |
KR20220011161A (ko) | 2019-05-22 | 2022-01-27 | 스월즈, 인크. | 분산 데이터베이스에서 상태 증명들 및 원장 식별자들을 구현하기 위한 방법들 및 장치 |
EP3896579A1 (de) * | 2020-04-17 | 2021-10-20 | Allianz Deutschland AG | Verfahren zur integration und koordination von mess- und/oder steuersystemen |
US11809591B1 (en) | 2023-02-22 | 2023-11-07 | Snowflake Inc. | Column hiding management system |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4432057A (en) | 1981-11-27 | 1984-02-14 | International Business Machines Corporation | Method for the dynamic replication of data under distributed system control to control utilization of resources in a multiprocessing, distributed data base system |
CA1307919C (en) | 1988-10-06 | 1992-09-29 | Dean S. Liu | Method and apparatus for making electrical heater pad |
US5170480A (en) | 1989-09-25 | 1992-12-08 | International Business Machines Corporation | Concurrently applying redo records to backup database in a log sequence using single queue server per queue at a time |
US5440727A (en) | 1991-12-18 | 1995-08-08 | International Business Machines Corporation | Asynchronous replica management in shared nothing architectures |
US5555404A (en) | 1992-03-17 | 1996-09-10 | Telenor As | Continuously available database server having multiple groups of nodes with minimum intersecting sets of database fragment replicas |
JP2740105B2 (ja) * | 1993-03-19 | 1998-04-15 | 日本電信電話株式会社 | 分散データベース制御方法 |
JP2708386B2 (ja) | 1994-03-18 | 1998-02-04 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 同時更新及び複写手順を通して重複データベースを回復させる方法及び装置 |
JPH0877053A (ja) * | 1994-09-08 | 1996-03-22 | Nippon Telegr & Teleph Corp <Ntt> | 複製データベース反映装置及び複製データベース反映方法 |
US6101497A (en) * | 1996-05-31 | 2000-08-08 | Emc Corporation | Method and apparatus for independent and simultaneous access to a common data set |
US5937414A (en) * | 1997-02-28 | 1999-08-10 | Oracle Corporation | Method and apparatus for providing database system replication in a mixed propagation environment |
US6209002B1 (en) * | 1999-02-17 | 2001-03-27 | Emc Corporation | Method and apparatus for cascading data through redundant data storage units |
US6539381B1 (en) | 1999-04-21 | 2003-03-25 | Novell, Inc. | System and method for synchronizing database information |
JP4046893B2 (ja) * | 1999-05-28 | 2008-02-13 | 富士通株式会社 | データベース複写装置及びデータベース複写方法並びにデータベース複写プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6643669B1 (en) * | 2000-03-14 | 2003-11-04 | Telefonaktiebolaget Lm Ericsson (Publ) | Method for optimization of synchronization between a client's database and a server database |
JP2001290687A (ja) * | 2000-04-04 | 2001-10-19 | Nec Eng Ltd | データ同期化制御方式 |
JP4895437B2 (ja) * | 2000-09-08 | 2012-03-14 | 株式会社日立製作所 | データベース管理方法およびシステム並びにその処理プログラムおよびそのプログラムを格納した記録媒体 |
US6694337B1 (en) * | 2000-10-26 | 2004-02-17 | Intel Corporation | Synchronizing databases |
US7164676B1 (en) * | 2001-03-21 | 2007-01-16 | Cisco Technology, Inc. | Method and apparatus for a combined bulk and transactional database synchronous scheme |
JP3714184B2 (ja) * | 2001-03-29 | 2005-11-09 | 富士通株式会社 | 記憶装置のデータ領域間複写処理方法、及び記憶システム |
US6839564B2 (en) * | 2001-04-25 | 2005-01-04 | Nokia Corporation | Synchronization of database data |
US7373362B2 (en) * | 2001-11-19 | 2008-05-13 | Extended Systems, Inc. | Coordinated synchronization |
US6820180B2 (en) * | 2002-04-04 | 2004-11-16 | International Business Machines Corporation | Apparatus and method of cascading backup logical volume mirrors |
JP3991760B2 (ja) * | 2002-04-26 | 2007-10-17 | 株式会社日立製作所 | データベース管理方法および装置およびその処理プログラム |
JP2003345640A (ja) * | 2002-05-28 | 2003-12-05 | Mitsubishi Electric Corp | データベースバックアップシステム |
GB0308264D0 (en) | 2003-04-10 | 2003-05-14 | Ibm | Recovery from failures within data processing systems |
JP4331970B2 (ja) * | 2003-05-07 | 2009-09-16 | 株式会社日立製作所 | データベースのスナップショット方法及びシステム |
US20050149582A1 (en) * | 2003-12-29 | 2005-07-07 | Wissmann Joseph T. | Method and system for synchronization of copies of a database |
US20080126439A1 (en) * | 2006-09-25 | 2008-05-29 | International Business Machines Corporation | Change verification in a configuration management database |
-
2005
- 2005-08-19 US US11/207,482 patent/US7890508B2/en active Active
-
2006
- 2006-07-20 EP EP06800192.4A patent/EP1915668B1/en active Active
- 2006-07-20 CA CA002615421A patent/CA2615421A1/en not_active Abandoned
- 2006-07-20 RU RU2008106228/08A patent/RU2417426C2/ru not_active IP Right Cessation
- 2006-07-20 WO PCT/US2006/028346 patent/WO2007024376A2/en active Application Filing
- 2006-07-20 BR BRPI0615028-4A patent/BRPI0615028A2/pt not_active IP Right Cessation
- 2006-07-20 MX MX2008002168A patent/MX2008002168A/es active IP Right Grant
- 2006-07-20 KR KR1020087003601A patent/KR20080055795A/ko not_active IP Right Cessation
- 2006-07-20 NZ NZ565641A patent/NZ565641A/en not_active IP Right Cessation
- 2006-07-20 NZ NZ593162A patent/NZ593162A/en not_active IP Right Cessation
- 2006-07-20 CN CN2006800296061A patent/CN101268439B/zh active Active
- 2006-07-20 AU AU2006284498A patent/AU2006284498B2/en not_active Ceased
- 2006-07-20 JP JP2008526946A patent/JP5259404B2/ja not_active Expired - Fee Related
- 2006-07-20 ZA ZA200800962A patent/ZA200800962B/xx unknown
-
2008
- 2008-01-08 IL IL188664A patent/IL188664A/en not_active IP Right Cessation
- 2008-01-15 NO NO20080234A patent/NO20080234L/no unknown
Also Published As
Publication number | Publication date |
---|---|
IL188664A (en) | 2014-02-27 |
RU2417426C2 (ru) | 2011-04-27 |
NZ565641A (en) | 2011-06-30 |
MX2008002168A (es) | 2008-04-22 |
CA2615421A1 (en) | 2007-03-01 |
JP5259404B2 (ja) | 2013-08-07 |
NO20080234L (no) | 2008-03-14 |
CN101268439A (zh) | 2008-09-17 |
EP1915668A4 (en) | 2009-10-28 |
AU2006284498A1 (en) | 2007-03-01 |
CN101268439B (zh) | 2012-04-25 |
BRPI0615028A2 (pt) | 2011-05-03 |
WO2007024376A2 (en) | 2007-03-01 |
AU2006284498B2 (en) | 2011-04-14 |
JP2009505281A (ja) | 2009-02-05 |
IL188664A0 (en) | 2008-08-07 |
ZA200800962B (en) | 2009-05-27 |
US20070043749A1 (en) | 2007-02-22 |
NZ593162A (en) | 2012-04-27 |
US7890508B2 (en) | 2011-02-15 |
EP1915668B1 (en) | 2018-07-04 |
EP1915668A2 (en) | 2008-04-30 |
WO2007024376A3 (en) | 2007-11-29 |
RU2008106228A (ru) | 2009-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20080055795A (ko) | 데이터베이스 프래그먼트 복제 및 관리 | |
US11429641B2 (en) | Copying data changes to a target database | |
KR102307371B1 (ko) | 데이터베이스 시스템 내의 데이터 복제 및 데이터 장애 조치 | |
US5625815A (en) | Relational database system and method with high data availability during table data restructuring | |
US9922075B2 (en) | Scalable distributed transaction processing system | |
US7257689B1 (en) | System and method for loosely coupled temporal storage management | |
US11263236B2 (en) | Real-time cross-system database replication for hybrid-cloud elastic scaling and high-performance data virtualization | |
US9418094B2 (en) | Method and apparatus for performing multi-stage table updates | |
Lipcon et al. | Kudu: Storage for fast analytics on fast data | |
WO2010104902A2 (en) | Composite hash and list partitioning of database tables | |
US11226985B2 (en) | Replication of structured data records among partitioned data storage spaces | |
EP3391243A1 (en) | Promoted properties in relational structured data | |
US12007971B2 (en) | Pageable hash index for document store | |
US11714794B2 (en) | Method and apparatus for reading data maintained in a tree data structure | |
VanBenschoten et al. | Enabling the next generation of multi-region applications with cockroachdb | |
US11106698B2 (en) | Multi-master with ownership transfer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
SUBM | Surrender of laid-open application requested |