해당 작업을 위해서는 create database link 권한이 필요하다.
create database link [link 객체 이름]
connect to [원격 DB 아이디] identified by [원격 DB 비밀번호]
using '[네트워크 서비스 이름(Net service name)]';
ex)
create database link dw
connect to ldw identified by pass
using 'partner';
그럼 아래와 같은 쿼리로 dw user 내에 있는 emp table을 가져올 수 있다.
select * from emp@[link 객체 이름]
select * from emp@dw
먼저 기존에 있던 table들은 많은 insert 및 update 명령으로
테이블에 할당 된 버퍼가 모두 찼을 수도 있으니 새로운 table을 하나 만들어 준다.
create table sample(id number(3), name varchar2(10), pay number(10));
대충 이런식으로 trigger용 sample 테이블을 하나 만들어준다.
그 다음 ed [트리거 파일명]
명령으로 테이블 복제 트리거를 하나 만들어 준다.
0. ed copy_table ->로 trigger를 만들 파일을 생성한다.
1. sample table에 insert가 발생하면 dw컴퓨터 sample table에 같은 행이 insert
create trigger in_sample
after insert on sample
for each row
begin
insert into sample@dw values(:new.id, :new.name, :new.pay);
end;
/
--내 계정의 sampel table에 insert가 발생할 시
--내가 insert한 내용과 같은 내용이 insert 될 link객체의 명을
--insert 할 table 뒤에 @[link 객체명] 형태로 넣어 주면 된다.
--ex) insert into sample@dw values(:new.id, :new.name, :new.pay);
2. sample table에 delete가 발생하면 dw컴퓨터 sample table에 같은 행이 delete
create trigger del_sample
after delete on sample
for each row
begin
delete from sample@dw p where p.id=:old.id;
end;
/
3. sample table에 update가 발생하면 dw컴퓨터 sample table에 같은 행이 update
create trigger up_sample
after update on sample
for each row
begin
delete from sample@dw p where p.id=:old.id;
insert into sample@dw values(:new.id, :new.name, :new.pay);
end;
/
4. @ [trigger 파일명] ->으로 트리거를 생성한다.
cf) 원래 이거 모두 합쳐 하나의 트리거로 만들 수 있는데
나중에 해보고 확인한 다음에 수정을 해보겠다.
원격 오라클서버에 있는 프로시저를 수행하려면 반드시 OUT 모드
가 필요하다.
OUT 모드
는 오라클 서버에서 값을 반환해주는 것을 말한다.
원격 오라클 서버에 아래와 같이
사번을 입력하면 이름을 출력해주는 프로시저가 있다고 해보자
-- out 모드가 있는 프로시저
create or replace procedure p_sawon_name
(v_bun sawon.sabun%type,
v_name out sawon.saname%type)
--sawon 테이블에 saname은 v_name을 통해 값이 반환 된다.
is
begin
select saname into v_name from sawon where sabun=v_bun;
--입력된 v_bun에 대한 saname이 v_name에 담겨 반환이 된다.
end;
/
프로시저 호출은 이와 같이 한다.
variable name varchar2(100)
-- OUT 모드로 설정되어진 re에 들어간 값을 보기 위해서는 전역변수 name을 설정 한다.
exec p_sawon_name@dw(16, :name)
-- 사번이 16인 사람의 이름을 보고자 한다.
-- 근데 dw라는 원격 오라클 서버에 있는 프로시저를 가져올 것이기 때문에
-- 프로시저 명 뒤에 @[link객체 명]을 붙여 호출한다.
print name
-- 이름을 출력한다.
결과
NAME
----------
김유신