2009-11-19 28 views
8

Chúng tôi gặp lỗi này mỗi ngày một lần trên tập lệnh chạy hai giờ một lần, nhưng vào các thời điểm khác nhau trong ngày.Lỗi thường gặp trong Oracle ORA-04068: trạng thái gói hiện tại đã bị loại bỏ

ERROR at line 1: 
ORA-04068: existing state of packages has been discarded 
ORA-04061: existing state of package body "PACKAGE.NAME" has been 
invalidated 
ORA-06508: PL/SQL: could not find program unit being called: 
"PACKAGE.NAME" 
ORA-06512: at line 1 

Ai đó có thể liệt kê những điều kiện nào có thể gây ra lỗi này để chúng tôi có thể điều tra?

Cảm ơn.

CẬP NHẬT: Việc thực thi 'ALTER SESSION CLOSE DATABASE LINK DBLINK' có làm mất hiệu lực trạng thái của gói không?

+0

Cũng giống như một phần thông tin khác, biên soạn thân gói không làm cho các gói gọi "không hợp lệ" - nghĩa là từ điển dữ liệu sẽ vẫn hiển thị tất cả các gói và trình kích hoạt và bất kỳ thứ gì là "VALID". Thứ không hợp lệ là PGA của mỗi người dùng. Vì vậy, nếu có mười người dùng sử dụng gói khi nó được biên dịch lại thì mỗi người dùng sẽ gặp vấn đề này lần lượt khi họ tham khảo gói đó. –

Trả lời

12

này lót mọi thứ thực sự giải quyết:

PRAGMA SERIALLY_REUSABLE; 

Hãy chắc chắn rằng các biến toàn cục của bạn là quốc tịch để tránh bất kỳ vấn đề.

+6

để chính xác hơn, pragma này làm cho trạng thái gói được đặt lại trên mỗi yêu cầu đối với cơ sở dữ liệu (khởi tạo gói được thực hiện lại). –

12

Gói có các biến công khai hoặc riêng tư. (Phải không?) Các biến này tạo thành trạng thái một gói. Nếu bạn biên dịch gói trong phiên thứ ba. Việc truy cập tiếp theo gói này sẽ ném ORA-04068.

Dấu thời gian xây dựng của gói phải cũ hơn trạng thái phiên gói.

Nếu trạng thái gói không cần thiết để chạy tập lệnh, hãy gọi DBMS_SESSION.RESET_PACKAGE ở đầu tập lệnh của bạn. Điều này làm sạch tất cả các trạng thái gói của phiên của bạn.

+0

Sẽ thử cuộc gọi được chỉ định. Cảm ơn. – jonasespelita

+0

Một câu hỏi đặt ra, làm thế nào để biên dịch một gói trong phiên thứ 3 làm mất hiệu lực nó? – jonasespelita

+2

martilyo: phiên bản mới của gói có thể có nhiều/ít hơn/các biến gói khác. Trong thực tế, nếu bạn biên dịch một gói không có biến gói nào cả, những lỗi ORA-04068 này không xảy ra. Những kẻ liều mạng làm điều đó trên các hệ thống sản xuất, trong giờ làm việc bận rộn. –

0

Dường như bạn đang thực hiện các thay đổi đối với các đối tượng của mình khiến các đối tượng khác không hợp lệ. Thả một chỉ mục ví dụ có thể đưa vào trạng thái không hợp lệ tất cả các gói phụ thuộc vào bảng đó. Nó có thể có một thác ec. Nếu gói không hợp lệ, thì funciton phụ thuộc vào gói và khung nhìn sử dụng hàm có thể trở thành không hợp lệ. Cố gắng biên dịch lại tất cả các đối tượng sau mỗi truy vấn DDL.

4

Bạn cũng có thể kiểm tra dba_dependencies hoặc user_dependencies.

select * 
from dba_dependencies 
where name = 'YOUR_PACKAGE' 
and type = 'PACKAGE' --- or 'PACKAGE_BODY' 
and owner = USER --- or USERNAME 

Điều này sẽ cung cấp cho bạn các đối tượng mà gói của bạn phụ thuộc. Kiểm tra những gì đang xảy ra trong đó.

+0

Cảm ơn thông tin. Bạn học được điều gì đó mỗi ngày :). – jonasespelita

1

Chúng tôi đã gặp phải sự cố này trong vài lần và trong thời gian tới, chúng tôi đã biên soạn giản đồ để giải quyết vấn đề này tạm thời. Trong vài ngày, chúng tôi đã tìm kiếm giải pháp lâu dài.

Chúng tôi tìm thấy bên dưới truy vấn cho thấy sự khác biệt dấu thời gian trong từ đồng nghĩa của chúng tôi. chúng tôi biên dịch lại từ đồng nghĩa và nó hoạt động !!! Đã gần một tuần và cho đến nay chúng tôi không có vấn đề gì. Đây là truy vấn đã giúp trong trường hợp của chúng tôi.

**

select do.obj# d_obj,do.name d_name, do.type# d_type, po.obj# p_obj,po.name p_name, 
to_char(p_timestamp,'DD-MON-YYYY HH24:MI:SS') "P_Timestamp", 
to_char(po.stime ,'DD-MON-YYYY HH24:MI:SS') "STIME", 
decode(sign(po.stime-p_timestamp),0,'SAME','*DIFFER*') X 
from sys.obj$ do, sys.dependency$ d, sys.obj$ po 
where P_OBJ#=po.obj#(+) and D_OBJ#=do.obj# 
and do.status=1 /*dependent is valid*/ 
and po.status=1 /*parent is valid*/ 
and po.stime!=p_timestamp /*parent timestamp not match*/ 
order by 2,1; 

**

Tôi hy vọng điều này sẽ giúp những người có thể gặp phải vấn đề này.

Các vấn đề liên quan