Dapatkah saya mengetahui kapan pernyataan INSERT, UPDATE, atau DELETE terakhir dilakukan pada tabel di database Oracle dan jika demikian, bagaimana caranya?
Sedikit latar belakang: Versi Oracle adalah 10g. Saya memiliki aplikasi batch yang berjalan secara teratur, membaca data dari satu tabel Oracle dan menulisnya ke dalam file. Saya ingin melewatkan ini jika datanya belum berubah sejak terakhir kali pekerjaan dijalankan.
Aplikasi ini ditulis dalam bahasa C++ dan berkomunikasi dengan Oracle melalui OCI. Aplikasi ini masuk ke Oracle dengan pengguna normal, jadi saya tidak bisa menggunakan admin khusus.
Edit: Oke, "Special Admin Stuff &" bukanlah deskripsi yang baik. Maksud saya adalah: Saya tidak bisa melakukan apa pun selain SELECT dari tabel dan memanggil prosedur tersimpan. Mengubah apa pun tentang database itu sendiri (seperti menambahkan pemicu), sayangnya bukan pilihan jika ingin menyelesaikannya sebelum 2010.
Dapatkah Anda menjalankan checksum semacam itu pada hasilnya dan menyimpannya secara lokal? Lalu, ketika aplikasi Anda menanyakan database, Anda bisa membandingkan checksumnya dan menentukan apakah Anda harus mengimpornya?
Sepertinya Anda mungkin bisa menggunakan fungsi ORA_HASH untuk menyelesaikan ini.
Update: Sumber lain yang bagus: Fungsi ORA_HASH 10g untuk menentukan apakah data dua tabel Oracle sama
Anda perlu menambahkan pemicu pada insert, update, delete yang menetapkan nilai di tabel lain ke sysdate.
Ketika Anda menjalankan aplikasi, ia akan membaca nilai dan menyimpannya di suatu tempat sehingga pada saat aplikasi dijalankan, ia memiliki referensi untuk dibandingkan.
Apakah Anda akan menganggap itu "Special Admin Stuff &"?
Akan lebih baik untuk menjelaskan apa yang sebenarnya Anda lakukan sehingga Anda mendapatkan jawaban yang lebih jelas.
Berapa lama waktu yang dibutuhkan proses batch untuk menulis file? Mungkin paling mudah untuk membiarkannya berjalan dan kemudian membandingkan file dengan salinan file dari proses sebelumnya untuk melihat apakah keduanya identik.