Oracle 10g의 트리거는 일반 테이블의 행 서브 세트에 대한 upsert 및 delete 메시지를 생성합니다. 이 메시지는 두 개의 필드로 구성됩니다.Oracle AQ dequeue order
- 고유 한 행 ID입니다.
- 고유하지 않은 ID입니다.
나는 다음과 같은 제약을 존중 양단 큐 과정에 주문을 부과하려는 이러한 메시지 소모 :
- 메시지가 삽입 순서대로 대기열에서 제거되어야합니다.
- 동일한 ID에 속하는 메시지는 다른 대기열에없는 프로세스가이 ID를 사용하여 잠재적 후계자 메시지를 큐에서 제거 할 수 없도록 대기열에서 제거되어야합니다. 메시지는 트리거를 사용하여 생성되므로이 용도로 그룹을 사용할 수 없습니다.
AQ 용 Oracle Java 인터페이스를 사용하고 있습니다. 어떻게 달성 할 수 있었는지에 대한 조언이 있습니까?
N 개의 대기열은 옵션이 아닙니다 (상대적으로 수명이 짧은 많은 다른 ID가 많습니다). dequeue 옵션 접근법의 문제점은 큐에 아직없는 (같은 id의) 향후 메시지에 대해 어떤 종류의 잠금을 필요로한다는 것입니다. 그렇지 않으면 다른 소비자 C2는 소비자 C1이 1 (둘 다 'a'유형의 메시지)을 소비하기 전에 메시지 2를 소비 할 수 있습니다. ATM 문제는 NOWAIT (시간 초과 => 0) 사용자 잠금으로 해결할 수 있다고 생각하지만 AQ에서이 문제에 대한 '기본'솔루션이 없다고 확신하지는 않습니다. – yawn