2010-06-07 1 views
1

oracle 대기열을 중지 및 삭제할 수 없습니다. 코드Oracle 대기열을 중지 할 수 없습니다. 호출중인 프로그램 장치를 찾을 수 없습니다 : "SYS.DBMS_ASSERT"

BEGIN 
DBMS_AQADM.STOP_QUEUE (
queue_name => 'TEST_QUEUE'); 

DBMS_AQADM.DROP_QUEUE(
queue_name => 'TEST_QUEUE'); 

END; 
/

다음
는 다음과 같은 오류를 생성합니다

ERROR at line 1: 
ORA-04068: existing state of packages has been discarded 
ORA-04065: not executed, altered or dropped stored procedure "SYS.DBMS_ASSERT" 
ORA-06508: PL/SQL: could not find program unit being called: "SYS.DBMS_ASSERT" 
ORA-06512: at "SYS.DBMS_AQADM_SYS", line 3365 
ORA-06512: at "SYS.DBMS_AQADM", line 167 
ORA-06512: at line 5 

이것이 문제의 근본 원인이 될 수 있습니까?

는 업데이트 : 몇 우리의 스키마에 테이블 USER_TAB_PRIVS을 확인했고 나는 테이블 이름 'DBMS_ASSERT'에 그 기록을 볼 수 있습니다

SQL> SELECT * FROM USER_TAB_PRIVS where table_name='DBMS_ASSERT' and GRANTEE='TEST_USER' 
... 
GRANTEE=TEST_USER 
OWNER=SYS 
TABLE_NAME=DBMS_ASSERT 
GRANTOR=SYS 
PRIVILEGE=EXECUTE 
GRANTABLE=NO 
HIERARCHY=NO 

SQL> SELECT * FROM USER_TAB_PRIVS where table_name='DBMS_AQADM' and GRANTEE='TEST_USER' 
... 
GRANTEE=TEST_USER 
OWNER=SYS 
TABLE_NAME=DBMS_AQADM 
GRANTOR=SYSTEM 
PRIVILEGE=EXECUTE 
GRANTABLE=NO 
HIERARCHY=NO 

은 TEST_USER에와 스키마에 존재합니다.
사용자에게는 EXECUTE 권한이 있습니다.

답변

3

DBMS_ASSERT 패키지가 존재하지 않거나 (가능하지는 않겠지 만) 데이터베이스에 로그인 한 사용자에게 실행 권한이없는 것처럼 보입니다. 일반적으로 PUBLIC은 DBMS_ASSERT에 EXECUTE 액세스 권한이 부여되지만 사이트에서 변경되었을 수 있습니다. DBMS_ASSERT 및 DBMS_AQADM에 대한 EXECUTE 권한 부여를 확인하십시오.

+0

그러나 우리는 코드에서 DBMS_ASSERT를 사용하지 않습니다. –

+0

@Vladimir : 원본 메시지에 표시된 오류에 따라 DBMS_ASSERT가 DBMS_AQADM에 의해 호출됩니다. –

+0

@Bob Jarvis : 위 업데이트를 참조하십시오. –

1

문제없이이 호출을 수행했다면 ORA-04068 오류로 인해 호출 체인의 내용이 무효화되었다고 생각됩니다. 최근에 설치에 업그레이드 또는 패치를 적용 했습니까?

오라클은 $ ORACLE_HOME/rdbms/admin에 utlrp 스크립트를 제공합니다.이 스크립트는 모든 패키지를 다시 컴파일하고 나머지는 유효하지 않은 것으로보고합니다. 관리자에게 (SYS로) 실행하십시오.

+0

우리는 하나의 스키마에만 이러한 문제가 있습니다. 동일한 서버의 다른 모든 스키마는 오류없이 오늘 작동합니다. 하지만 우리 DBA 팀에게 묻습니다. –