Friday, November 29, 2024

.::: Enable Change Data Capture (CDC) Oracle Database using TRIGGER :::.


Berikut adalah langkah-langkah untuk mengaktifkan Change Data Capture (CDC) di Oracle menggunakan Trigger, termasuk contoh tabel, isi tabel, dan implementasi trigger untuk melacak perubahan data:

1. Membuat Tabel Sumber

Tabel ini adalah tabel utama tempat data disimpan, dan perubahan pada tabel ini akan dilacak.

CREATE TABLE EMPLOYEES (
    EMP_ID NUMBER PRIMARY KEY,
    EMP_NAME VARCHAR2(50),
    DEPARTMENT_ID NUMBER,
    SALARY NUMBER
);
 
2. Masukkan Data Sampel ke Tabel

INSERT INTO EMPLOYEES VALUES (1, 'Alice', 101, 5000);
INSERT INTO EMPLOYEES VALUES (2, 'Bob', 102, 6000);
INSERT INTO EMPLOYEES VALUES (3, 'Charlie', 103, 7000);
COMMIT;


3. Membuat Tabel Log untuk Menyimpan Perubahan
Buat tabel tambahan untuk mencatat perubahan yang dilakukan pada tabel EMPLOYEES.

CREATE TABLE EMPLOYEES_CHANGE_LOG (
    LOG_ID NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    EMP_ID NUMBER,
    OPERATION VARCHAR2(10), -- INSERT, UPDATE, DELETE
    OLD_SALARY NUMBER,
    NEW_SALARY NUMBER,
    CHANGE_DATE TIMESTAMP DEFAULT SYSTIMESTAMP
);


4. Membuat Trigger untuk Melacak Perubahan
Trigger ini akan secara otomatis mencatat operasi INSERT, UPDATE, dan DELETE ke tabel log.

CREATE OR REPLACE TRIGGER EMPLOYEES_CDC_TRIGGER
AFTER INSERT OR UPDATE OR DELETE ON EMPLOYEES
FOR EACH ROW
BEGIN
    IF INSERTING THEN
        INSERT INTO EMPLOYEES_CHANGE_LOG (EMP_ID, OPERATION, OLD_SALARY, NEW_SALARY, CHANGE_DATE)
        VALUES (:NEW.EMP_ID, 'INSERT', NULL, :NEW.SALARY, SYSTIMESTAMP);
        
    ELSIF UPDATING THEN
        INSERT INTO EMPLOYEES_CHANGE_LOG (EMP_ID, OPERATION, OLD_SALARY, NEW_SALARY, CHANGE_DATE)
        VALUES (:OLD.EMP_ID, 'UPDATE', :OLD.SALARY, :NEW.SALARY, SYSTIMESTAMP);
        
    ELSIF DELETING THEN
        INSERT INTO EMPLOYEES_CHANGE_LOG (EMP_ID, OPERATION, OLD_SALARY, NEW_SALARY, CHANGE_DATE)
        VALUES (:OLD.EMP_ID, 'DELETE', :OLD.SALARY, NULL, SYSTIMESTAMP);
    END IF;
END;
/


5. Uji Trigger dengan Operasi DML
Lakukan beberapa perubahan pada tabel EMPLOYEES untuk melihat hasilnya di tabel log.

a. Operasi INSERT

Tambahkan data baru:

INSERT INTO EMPLOYEES VALUES (4, 'Diana', 104, 8000);
COMMIT;

b. Operasi UPDATE
Perbarui data karyawan:

UPDATE EMPLOYEES SET SALARY = 9000 WHERE EMP_ID = 1;
COMMIT;


c. Operasi DELETE


DELETE FROM EMPLOYEES WHERE EMP_ID = 2;
COMMIT;

6. Periksa Tabel Log

Query tabel log untuk melihat catatan perubahan:

SELECT * FROM EMPLOYEES_CHANGE_LOG;

or

select log_id,emp_id,operation,old_salary,new_salary, (SELECT i.host_name FROM V$INSTANCE i) AS HOST_NAME,
       (SELECT i.version FROM V$INSTANCE i) AS ORACLE_VERSION,
       (SELECT v.banner FROM V$VERSION v WHERE ROWNUM = 1) AS BANNER
FROM EMPLOYEES_CHANGE_LOG;


 

No comments:

Post a Comment

Popular Posts