Jika Anda memiliki edisi perusahaan 10g, Anda harus melihat Audit Butir Halus Oracle. Ini jelas lebih baik daripada menggulung sendiri.
Tetapi jika Anda memiliki versi yang lebih rendah atau karena alasan tertentu FGA tidak sesuai dengan selera Anda, berikut adalah cara melakukannya. Kuncinya adalah:buat tabel audit terpisah untuk setiap tabel aplikasi .
Saya tahu ini bukan yang ingin Anda dengar karena tidak cocok dengan struktur tabel yang Anda uraikan di atas. Tetapi menyimpan baris dengan nilai LAMA dan BARU untuk setiap kolom yang terpengaruh oleh pembaruan adalah ide yang sangat buruk:
- Itu tidak berskala ( pembaruan tunggal yang menyentuh sepuluh kolom menghasilkan sepuluh sisipan)
- Bagaimana jika Anda memasukkan catatan?
- Sangat sulit untuk mengumpulkan status rekor pada waktu tertentu
Jadi, miliki tabel audit untuk setiap tabel aplikasi, dengan struktur yang identik. Itu berarti memasukkan CHANGED_TIMESTAMP dan CHANGED_USER pada tabel aplikasi, tapi itu bukan hal yang buruk.
Terakhir, dan Anda tahu ke mana arahnya, miliki pemicu di setiap tabel yang menyisipkan seluruh catatan hanya dengan nilai :NEW ke dalam tabel audit. Pemicu harus diaktifkan pada INSERT dan UPDATE. Ini memberikan sejarah yang lengkap, cukup mudah untuk membedakan dua versi catatan. Untuk DELETE, Anda akan memasukkan catatan audit hanya dengan kunci utama terisi dan semua kolom lainnya kosong.
Keberatan Anda adalah bahwa Anda memiliki terlalu banyak tabel dan terlalu banyak kolom untuk mengimplementasikan semua objek ini. Tapi cukup sederhana untuk menghasilkan tabel dan memicu pernyataan DDL dari kamus data (user_tables, user_tab_columns).