Table Replication Using Trigger
##############################################################################################################################################
-- Table Replication Using Trigger in Databases in Different Server
##############################################################################################################################################
-- The given procedure will replicate Table "Student" and the schema name use here is "School"
-- The replication will work in both way
##############################################################################################################################################
-- Server 1
##############################################################################################################################################
CREATE TABLE Student
(
ID NUMBER(4),
NAME VARCHAR2(64 CHAR)
);
CREATE UNIQUE INDEX PK_STUDENT_ID ON STUDENT(ID);
ALTER TABLE Student ADD (
CONSTRAINT PK_Student_id
PRIMARY KEY
(ID)
USING INDEX PK_STUDENT_ID
ENABLE VALIDATE);
CREATE DATABASE LINK server2 CONNECT TO SCHOOL IDENTIFIED BY password USING 'server2'; -- Use your TNS entry
-- Trigger for replication
CREATE OR REPLACE TRIGGER STUDENT_I_U_D
BEFORE INSERT OR UPDATE OR DELETE ON STUDENT
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO SCHOOL.STUDENT@server2(ID,NAME) VALUES (:NEW.ID,:NEW.NAME);
ELSIF UPDATING THEN
UPDATE SCHOOL.STUDENT@server2 SET ID=:NEW.ID,NAME=:NEW.NAME where ID=:OLD.ID;
ELSIF DELETING THEN
DELETE FROM SCHOOL.STUDENT@server2 WHERE ID=:OLD.ID;
END IF;
END;
/
##############################################################################################################################################
-- Server 2
##############################################################################################################################################
CREATE TABLE Student
(
ID NUMBER(4),
NAME VARCHAR2(64 CHAR)
);
CREATE UNIQUE INDEX PK_STUDENT_ID ON STUDENT(ID);
ALTER TABLE Student ADD (
CONSTRAINT PK_Student_id
PRIMARY KEY
(ID)
USING INDEX PK_STUDENT_ID
ENABLE VALIDATE);
CREATE DATABASE LINK server1 CONNECT TO SCHOOL IDENTIFIED BY password USING 'server1'; -- Use your TNS entry
-- Trigger for replication
CREATE OR REPLACE TRIGGER STUDENT_I_U_D
BEFORE INSERT OR UPDATE OR DELETE ON STUDENT
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO SCHOOL.STUDENT@server1(ID,NAME) VALUES (:NEW.ID,:NEW.NAME);
ELSIF UPDATING THEN
UPDATE SCHOOL.STUDENT@server1 SET ID=:NEW.ID,NAME=:NEW.NAME where ID=:OLD.ID;
ELSIF DELETING THEN
DELETE FROM SCHOOL.STUDENT@server1 WHERE ID=:OLD.ID;
END IF;
END;
/