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