2009-05-16 2 views
3

우리의 응용 프로그램은 다른 데이터베이스 (다른 상업적 공급 업체)를 가리키는 몇 개의 다른 지속성 단위를 사용 (읽기 전용)해야합니다.XA가 아닌 트랜잭션에서 둘 이상의 지속성 단위를 사용할 수 있습니까?

(Sybase) 중 하나에서 2pc를 사용할 수있는 예산이 없습니다. XA 트랜잭션이 아니어도 트랜잭션에서이를 사용할 수 있습니까?

우리는 Websphere 6.1, Sybase 12.5.3, Oracle 10g, Java EE 5 및 JPA와 Hibernate Entity Manager를 사용하고 있습니다.

업데이트 : 오라클 PU는 거의 매월 1-2 회 업데이트되며, sybase PU는 매우 자주 업데이트됩니다. 하루에 여러 번. 격리는 확실히 후자에 대한 관심사이며, 둘 사이의 일관성은 시행 할 필요가 없습니다.

답변

3

조심성.
읽기 전용이 항상 2PC가 적용되지 않는다는 것을 의미하지는 않습니다. 두 개의 데이터베이스가 있고 둘 다 읽고 하나만 갱신하는 경우 일관된 결과를 보장하려면 트랜잭션이 필요합니다. 데이터베이스 A를 읽은 다음 해당 결과를 사용하여 데이터베이스 B를 읽고 업데이트하는 시나리오가 있다고 가정하십시오. 데이터베이스 A와의 트랜잭션을 사용하지 않을 경우, 작업이 활성화되어있는 동안 읽은 데이터 데이터베이스 A는 일 수 있으며 다른 응용 프로그램에서을 읽고 업데이트했습니다. 이 경우 데이터베이스 B에서 일치하지 않는 데이터를 얻을 수 있습니다.

두 데이터베이스를 모두 읽고 실제로 읽지 않으면 분산 트랜잭션과 이에 따르는 잠금이 필요 없다고 생각할 수 있습니다. 다시 한번, 어쩌면 아닙니다. 다른 응용 프로그램이 동일한 데이터베이스를 업데이트하는 경우이 시나리오에서도 일치하지 않는 읽기가 발생할 수 있습니다. 요구 사항과 데이터베이스의 다른 사용자에 따라 다릅니다.

데이터베이스와 같은 모든 내구성 저장소에 대해 읽기 작업 중에도 적용되는 잠금에 대한 통찰력을 얻기 위해 reading up on isolation levels을 제안합니다. 트랜잭션 잠금은 불필요 할 수 있습니다. 예를 들어 효과적으로 변경되지 않는 데이터를 처리하는 경우에는 필요하지 않습니다 (로 작성하지 않고 모든 데이터는입니다).

어쩌면 여기에 비즈니스 솔루션이 있습니다. 공급 업체와 협상하여 XA 인 에이블먼트의 가격을 내고 지불하십시오. 경제와 더불어, 당신은 당신이 감당할 수있는 거래를 얻을 수 있습니다. 참고 자료 : 데이터베이스에 라이센스를 부여하고 거래를 할 수 없다는 사실에 놀랐습니다. 그런 식으로 사이베이스의 라이센스를 취득 할 수 있다는 사실을 알지 못했습니다.

+0

예, 매우 중요한 포인트를 제시합니다. OP에서 두 PU의 분리 및 일관성 요구 사항을 명확히했습니다. 우리는 별도로 공급 업체와 협상 중입니다. 참고 : 분명히 데이터베이스에는 트랜잭션이 포함되어 있지만 XA 트랜잭션에 대한 추가 가격표가 있습니다. sybase가 가격을 책정하는 방식에 오신 것을 환영합니다. –

1

Atomikos TransactionsEssentials은 JDBC (및 JMS) 용 연결 풀을 가진 무료 오픈 소스 JTA/XA입니다.

비영어권 데이터 소스에 대한 지원 기능이 추가되었습니다. readonly (귀하의 경우) Sybase를 JTA 트랜잭션에 포함시키기 위해 non-xa 데이터 소스를 사용하는 것이 안전하고 쉽습니다.

최고 가이

관련 문제