#분산 트랜잭션

오라클은 분산 트랜잭션을 투명하게 처리 함, 그냥 DB LINK 를 사용하면 됨
{code:sqlborderStyle=solid}
select * from T@another_database;
create synonym T for T@another_database;

update local_table set x = 5;
update remote_table@another_database set y = 10;
commit;

– 2PC (two-phase commit) : 분산된 여러 데이터베이스에 원자적으로 커밋할 때 사용하는 분산 프로토콜
– 1. DB 중 하나가 분산 트랜잭션의 코디네이터가 됨
– 2. 코디네이터 DB가 다른 DB들에게 커밋 준비를 물어봄
– 3. 다른 DB들은 코디네이터 DB에게 커밋 준비 상태를 응답함 (YES/NO)
– 4. 다른 DB들이 모두 YES 로 응답 하면 코디네이터는 다른 DB들에 커밋 전송 (아닐 경우 롤백 전송)

-- 오류케이스 : 위에서 3번 단계를 지난 후 코디네이터 DB에 오류가 발생하면, 다른 DB들은 의심되는 분산 트랜잭션을 갖게된 상태로 대기

|
||제한사항||
|{code:sql|borderStyle=solid}
- COMMIT@remote_site
- DDL@remote_site (DBMS_JOB, DBMS_SCHEDULER 활용 가능)
- SAVEPOINT@remote_site (어떤 트랜잭션 제어문도 DB LINK 를 통해 전송 불가, COMMIT_POINT_STRENGTH)

|