Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Trình kích hoạt không hợp lệ trong Oracle

Bất cứ khi nào chúng tôi triển khai một thay đổi đối với một đối tượng cơ sở dữ liệu, bất kỳ mã nào phụ thuộc vào nó sẽ bị vô hiệu. Điều này ảnh hưởng đến trình kích hoạt, chế độ xem và các thủ tục được lưu trữ. Tuy nhiên, lần tới khi một thứ gì đó gọi mã đó, cơ sở dữ liệu sẽ tự động biên dịch lại nó.

Vì vậy, chúng ta không cần phải lo lắng về điều này, phải không? Vâng, có, cho đến một thời điểm. Vấn đề là, sự vô hiệu của trình kích hoạt (hoặc bất cứ điều gì) là một dấu hiệu cho chúng tôi biết rằng một thay đổi đã được thực hiện có thể ảnh hưởng đến hoạt động của trình kích hoạt đó, điều này có thể có tác dụng phụ. Tác dụng phụ rõ ràng nhất là trình kích hoạt sẽ không biên dịch. Tinh vi hơn, trình kích hoạt biên dịch nhưng không thành công trong quá trình hoạt động.

Do đó, bạn nên bắt buộc biên dịch lại các trình kích hoạt trong môi trường phát triển, để đảm bảo rằng sự thay đổi của chúng ta về cơ bản không phá vỡ bất cứ điều gì. Nhưng chúng tôi có thể bỏ qua bước đó khi triển khai thay đổi trong sản xuất, bởi vì chúng tôi tự tin rằng mọi thứ sẽ được biên dịch lại theo yêu cầu. Tùy thuộc vào thần kinh của chúng tôi :)

Oracle cung cấp các cơ chế để tự động biên dịch lại tất cả các đối tượng không hợp lệ trong một lược đồ.

  • Đơn giản nhất là sử dụng DBMS_UTILITY.COMPILE_SCHEMA() . Nhưng điều này đã bị hạn chế kể từ 8i (vì hỗ trợ cho Thủ tục lưu trữ Java đã tạo ra tiềm năng cho các phụ thuộc vòng tròn) và không còn được đảm bảo để biên dịch tất cả các đối tượng thành công lần đầu tiên.

  • Trong 9i Oracle đã cung cấp cho chúng ta một tập lệnh $ORACLE_HOME/rdbms/admin/utlrp.sql những thứ đã được biên dịch lại. Thật không may, nó yêu cầu quyền truy cập SYSDBA.

  • Trong 10g, họ đã thêm gói UTL_RECOMP, về cơ bản nó thực hiện mọi thứ mà tập lệnh đó làm. Đây là cách tiếp cận được khuyến nghị để biên dịch lại số lượng lớn các đối tượng. Thật không may, nó cũng yêu cầu quyền truy cập SYSDBA. Tìm hiểu thêm .

Vào 11g Oracle đã giới thiệu quản lý phụ thuộc chi tiết. Điều này có nghĩa là các thay đổi đối với bảng được đánh giá ở mức độ chi tiết tốt hơn (về cơ bản là cấp cột chứ không phải cấp bảng) và chỉ các đối tượng bị ảnh hưởng trực tiếp bởi các thay đổi mới bị ảnh hưởng. Tìm hiểu thêm .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Vòng lặp các giá trị, tạo truy vấn động và thêm vào tập kết quả

  2. Chọn các giá trị khác biệt từ ba cột với giá trị lớn nhất là một phần tư, nơi có các giá trị trùng lặp

  3. Truy cập phần tử thứ 2 trong cột varray

  4. Cách kết nối với Oracle bằng JRuby &JDBC

  5. Oracle có cung cấp cách trả về nhiều chuỗi con từ một hàng chuỗi / khối đã được phân tích cú pháp không?