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;
/


Comments