2012-08-16 8 views
3

Oracle 데이터베이스의 서로 다른 두 스키마에있는 개체에 대해 DML을 수행하는 단일 연결이 있습니다. 나는 schema A에있는 객체를 포함하는 트랜잭션을 완료 한 다음 schema B에있는 객체로 작업 할 두 번째 트랜잭션을 시작합니다. 두 번째 트랜잭션에서 작업 할 때 오류가 발생하면 두 트랜잭션의 변경 내용을 롤백해야합니다. 그게 가능하니?데이터베이스의 여러 스키마에 걸친 트랜잭션

+2

당신은이 질문에 오라클 태그했습니다. 오라클이 정의한 방식대로 "데이터베이스"라는 용어를 사용하고 있습니까? 그렇다면 다중 데이터베이스에 단일 연결을 할 수 없습니다. 또는 오라클 용어를 사용하여 동일한 데이터베이스의 두 가지 스키마에서 데이터를 수정하는 프로세스를 언급하고 있습니까? –

+0

동일한 데이터베이스의 서로 다른 두 스키마를 참조하고 있습니다. – BALASCJP

+0

좋아요, 당신의 말을 분명히하기 위해 질문을 편집 한 것 같습니다. 질문을 올바르게 이해했는지 확인하십시오. –

답변

2

두 스키마에 대한 변경 사항을 커밋하거나 롤백 할 경우 단일 트랜잭션을 사용해야합니다. 첫 번째 트랜잭션을 커밋하면 두 번째 트랜잭션이 실패 할 경우 롤백 할 수 없습니다 (물론 플래시백 기술을 사용할 수도 있지만 방법이에 더 관여합니다). 그러나 두 스키마에서 수행중인 작업에 대해 단일 트랜잭션을 사용한 경우 모든 변경 사항이 기본적으로 커밋되거나 롤백되는 동작을 얻게됩니다.

+0

정보에 감사드립니다. 간단한 예제를 하나주세요. 초보자로서 제게는 매우 유용합니다. – BALASCJP

+0

@BALASCJP - 정확하게, 예를 들어? 단일 트랜잭션에서 두 개의 서로 다른 테이블 (동일한 스키마에있을 수 있음)에서 데이터 수정? JDBC를 사용하고 있습니까? JPA? 아니면 데이터베이스에 액세스하는 다른 API? –

+0

- 하나의 트랜잭션에서 두 개의 서로 다른 테이블 (동일한 스키마에있는 일이 발생 함)에서 데이터 수정 중 ... Straight JDBC를 사용 중입니다. – BALASCJP

1

당신이 Connection 그래서, 예를 들어 (기본값)하는 자동 커밋하지 않는 설정 :

conn.setAutoCommit(false); 

그런 다음 동일한 연결 개체를 사용하여 첫 번째 스키마에 대해 DML을 실행할 수 있습니다 실행하여 두 번째 스키마에 대한 DML. 뭔가가 실패 할 경우, 예컨대, 다시 모든 롤 : 모두가 성공했을 경우

conn.rollback(); 

그렇지 않으면, 커밋 :

conn.commit(); 
+0

GriffeyDog 단일 연결로 두 개의 스키마에 액세스 할 수 없지만 단일 트랜잭션 잘못된 것이 맞습니다. – BALASCJP

+1

이제 JDBC 데이터베이스 연결을 사용하여 두 스키마 각각에 직접 연결하는 것처럼 들립니다. 응용 프로그램이 Oracle 데이터베이스에 연결하는 데 사용할 수있는 별도의 스키마를 설정하고 액세스 할 필요가있는 데이터베이스 개체에 대해이 스키마에서 기존 스키마와의 적절한 권한을 부여하여 적절하거나 필요한 동의어를 만듭니다. 그런 다음 단일 JDBC 연결 만 필요합니다. – GriffeyDog

관련 문제