Setiap kali kami menerapkan perubahan ke objek database, kode apa pun yang bergantung padanya akan dibatalkan. Ini memengaruhi pemicu, tampilan, dan prosedur tersimpan. Namun, saat berikutnya sesuatu memanggil kode itu, database akan mengkompilasi ulang secara otomatis.
Jadi kita tidak perlu khawatir tentang ini, kan? Ya, sampai titik tertentu. Masalahnya, pembatalan pemicu (atau apa pun) adalah tanda bagi kami bahwa perubahan telah dibuat yang dapat memengaruhi pengoperasian pemicu itu, yang mungkin memiliki efek samping. Efek samping yang paling jelas adalah pemicunya tidak dapat dikompilasi. Secara lebih halus, pemicu dikompilasi tetapi gagal selama operasi.
Oleh karena itu, merupakan ide yang baik untuk memaksa kompilasi ulang pemicu di lingkungan pengembangan, untuk memastikan bahwa perubahan kami tidak merusak apa pun secara mendasar. Namun kami dapat melewati langkah itu saat menerapkan perubahan dalam produksi, karena kami sangat yakin bahwa semuanya akan dikompilasi ulang sesuai permintaan. Tergantung nyali kita :)
Oracle menyediakan mekanisme untuk mengkompilasi ulang semua objek yang tidak valid dalam skema secara otomatis.
-
Yang paling mudah adalah menggunakan
DBMS_UTILITY.COMPILE_SCHEMA()
. Tapi ini sudah cerdik sejak 8i (karena dukungan untuk Java Stored Procedures memperkenalkan potensi dependensi melingkar) dan tidak lagi dijamin untuk mengkompilasi semua objek dengan sukses pertama kali. -
Di 9i Oracle memberi kami skrip
$ORACLE_HOME/rdbms/admin/utlrp.sql
yang mengkompilasi ulang hal-hal. Sayangnya itu membutuhkan akses SYSDBA. -
Dalam 10g mereka menambahkan paket UTL_RECOMP, yang pada dasarnya melakukan semua yang dilakukan skrip itu. Ini adalah pendekatan yang disarankan untuk mengkompilasi ulang sejumlah besar objek. Sayangnya itu juga membutuhkan akses SYSDBA. Cari tahu lebih lanjut .
Di 11g Oracle memperkenalkan manajemen ketergantungan yang halus. Ini berarti bahwa perubahan pada tabel dievaluasi pada perincian yang lebih baik (pada dasarnya tingkat kolom daripada tingkat tabel), dan hanya objek yang secara langsung terpengaruh oleh perubahan yang terpengaruh. Cari tahu lebih lanjut .