2014-04-03 2 views
2

두 개의 Oracle 11g 데이터베이스가 있습니다. DB1 (스키마에서) 및 다른 테이블 ORDERS (스키마) DB2에서 테이블 TASKS 있습니다. ORDERS 테이블에 (OrderID 및 OrderStatus)가있는 새 주문이 생성 될 때마다 TaskID에 TaskID 및 OrderStatus로 TaskStatus가있는 TASKS 테이블에서 새 작업을 만들어야합니다. 사용자가 TASKS 테이블에서 TaskStatus를 업데이트하면 ORDERS 테이블의 주문에 대한 Order Status가 업데이트됩니다. DBLink를 DB2의 ORDER 테이블에 액세스하기 위해 DB1에 생성했습니다.두 테이블의 Oracle DB Syncronization

이 요구 사항을 구현하려면 두 개의 트리거가 있어야합니다. 새 주문이 생성 될 때마다 TASKS 테이블에 새 작업을 삽입하려면 ORDERS 테이블에서 먼저 트리거하십시오. TASKS 테이블의 두 번째 트리거는 TASKS 테이블에서 태스크 상태가 변경 될 때마다 ORDERS 테이블의 Order Status를 업데이트합니다.

내 관심사이 트리거 솔루션은 두 개의 DB가 작동하는 경우에만 작동합니다. DB1이 종료되고 DB2에서 새 주문이 생성 될 때마다이 솔루션은 DB1에 새 태스크를 삽입하지 못합니다. 나는 ORDERS 테이블에 First 트리거를 생성하는 대신 DB2의 ORDERS 테이블을 위해 DB1에서 생성 된 VIEW에이 트리거를 생성 할 수 있다고 생각합니다. DB1에 VIEW를 생성하는이 솔루션은 DB1이 다운되었을 때 TASKS 테이블에 새로운 TASK를 삽입하는 문제를 해결합니다. 나는보기와 테이블이 같은 DB1에 있기 때문에 작업 상태 변경을위한 TASKS 테이블에서 뷰를 생성하는이 솔루션이 작동하지 않을 것이라고 생각합니다.

이 문제에 대한 더 나은 접근 방법이 있습니까? 도와주세요.

+0

보기가 어떻게 문제를 해결할 수 있는지 이해가되지 않습니다. 데이터베이스가 다운 된 경우 두 가지 옵션이 있습니다. 1. 올라갈 때 - 전체 테이블을 다른 데이터베이스의 작업 테이블과 동기화합니다. 2. 대기열을 유지하고 다른 db가 가동되면 쌓인 내용을 대량 삽입합니다. – haki

+0

@haki - 방금 일부 솔루션을 탐색 한 결과 구체화 된보기를 작성하여이 문제점을 해결할 수있는 방법을 발견했습니다. 심지어 어떻게 작동하는지 모르겠습니다. 실제로 더 나은 대체 솔루션을 찾고 있습니다. 감사합니다. – Ramkumar

+0

보기 (게시물에 적었 듯이)와 구체화 된보기 사이에는 큰 차이가 있습니다. – haki

답변

0

트리거는이 문제에 대한 유효한 해결책입니다. 현실적으로 dbs가 얼마나 자주 다운 될 것입니다. 위에서 언급했듯이 고급 대기열을 사용하면이 문제를 해결할 수 있습니다. 나는 당신이 이런 식으로 데이터베이스를 만드는 것에 대해 아무런 통제력이 없다고 가정하고 있습니다. 같은 스키마에 있어야하거나 최소한 동일한 인스턴스에 대해 실행해야합니다.

http://docs.oracle.com/cd/B10501_01/appdev.920/a96587/qintro.htm