응용 프로그램 시작 중에 사용자 테이블을 저장소 (다른 DB)와 동기화해야합니다. Apache mod_jk가있는 Tomcat 노드가 두 개 있습니다. 그래서 둘 다 다시 시작할 때 이중 삽입과 이중 업데이트를합니다. 는 T1 T1이 T2는Java Hibernate + Oracle 11.2 Locking
때 T1의 수정을 확약 는 T2 T1이 T1 T2 인서트를 삽입 T2는 데이터 T1이 동일한 데이터를 수정 데이터를 T2를 수정 읽기 데이터를 읽기 시작 시작 : 것 같다 데이터 및 다음 T2 업데이트 손실 된 같은 데이터를 수정합니다. 물론 삽입 작업 중에 중복 된 부분이 있습니다. 동기화는 어떻게해야합니까?
- "select * for update"(예 :)를 사용하여 모든 테이블을 잠그고 두 개의 동기화를 수행 할 수 있다고 가정합니다. 하나는 가득 찼고 다른 하나는 비어 있습니다.
- 여기에 특수 테이블을 만들고 거기에 STATUS 열을 넣을 수 있습니다. 한 노드가 시작되면 STATUS 필드의 SELECT FOR UPDATE를 수행하고이를 "RUNNING"으로 변경합니다. 다른 트랜잭션이 STATUS를 읽을 때 "RUNNING"으로 설정된 경우 동기화를 수행하지 않습니다.
최상의 해결책은 무엇입니까? 다른 제안. 감사합니다.
고마워요! 그러나 나는 시작시에 그것을 할 필요가 있습니다. 비즈니스에서 '동기화'버튼을 누르기를 원하지 않음))) – Nick