트랜잭션에 원격 데이터베이스가 하나만있는 경우 분산 트랜잭션이 아니므로 여러 원격 데이터베이스의 분산 트랜잭션과 달리 로컬 트랜잭션과 동일하게 작동합니다. 다음 예제에서는 적절한 행 레벨 잠금을 확보하고 필요한 데이터 일관성으로 단일 작업 단위 (UOW)에서 데이터를 이동하는 방법을 보여줍니다.
create table a_rem (aid number, acontent varchar2(10));
create table b_rem (bid number, aid number, bcontent varchar(10));
create table a_loc (aid number, acontent varchar2(10));
create table b_loc (bid number, aid number, bcontent varchar(10));
insert into a_rem values (1, 'A-One');
insert into a_rem values (2, 'A-Two');
insert into a_rem values (3, 'A-Three');
insert into b_rem values (1, 1, 'B-One');
insert into b_rem values (2, 1, 'B-Two');
insert into b_rem values (3, 2, 'B-Three');
insert into b_rem values (4, 3, 'B-Four');
insert into b_rem values (5, 3, 'B-Five');
commit;
-- look Ma, no data integrity! :(
-- let us pretend I want to move a_rem.aid = 2 information from both tables
declare
cursor row_level_locks is
select a.*, b.*
from a_rem a, b_rem b
where a.aid = b.aid and a.aid = 2
for update;
begin
open row_level_locks; -- begins transaction, obtains proper row level locking
insert into a_loc select * from a_rem where aid = 2;
insert into b_loc select * from b_rem where aid = 2;
delete a_rem where aid = 2;
delete b_rem where aid = 2;
commit;
close row_level_locks;
end;
최종 노트 : 데이터 무결성은 두 테이블 사이의 중요하다면, 먼저 가서 B_REM 참조 A_REM에 그 외래 키 제약 조건을 만들 수 있습니다. 당신이/할 수 없다면, 데이터 무결성은 중요하지 않습니다. 그것을 취하지 않는 것이 중요하고 사소한 단계 일 수는 없습니다.
고유 한 복제 솔루션을 구축하려는 것 같습니다. 오라클의 기본 복제 기술을 활용하지 않는 이유가 있습니까? 예를 들어, 별도의 변경 테이블을 유지 관리하지 않고 로컬 시스템에서 구체화 된보기를 작성하고 원격 시스템에서 구체화 된보기 로그를 작성할 수 있습니까? 스트림이나 CDC를 사용할 수 있습니까? –
예, 표준 복제 솔루션이 가장 좋습니다. 그러나 현재로서는 하나를 수립 할 수 없습니다. 감사. – Toru