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;

/