2009-10-22 3 views
1

지난 밤에 자동 테스트를 실행하는 도중에 내 스무 개의 스레드 중 하나가 울 렸습니다. 응용 프로그램이 INSERT를 시도하고 있습니다. Springframework 리포트 ORA-00942 : 테이블 또는 뷰가 존재하지 않습니다.문제 해결 ORA-00942

엔터 프라이즈 관리자를 통해 데이터베이스 (11.1.0.6.0)에 연결하여 SQL 워크 시트를 당겨 테이블을 쿼리하여 (a) 테이블이 존재 함을 확인하고 (b) 삽입 된 행 (c)이 스레드가 이전에 삽입 한 행이 있음 (d) 오류가 발생한 시간 전후의 행이 표에 있음을 나타냅니다.

오라클 경험이 거의없는 사용자의 경우이 데이터베이스 서버에서 발생한 오류를 확인하려면 어떻게해야합니까? 오류 발생 원인을 근본 원인으로 되돌리려면 어떻게해야합니까?

+0

이 추가 정보를 제공 할 수 있습니까? 1. INSERT 권한이있는 다른 스키마 또는 테이블 소유자가 삽입을 수행 했습니까? 2. 다른 스키마가 테이블에 삽입 된 경우 소유자가 정규화 한 테이블 참조였습니까? 아니면 사설 동의어를 통해 액세스했거나 공용 동의어를 통해 액세스 했습니까? 3.이 데이터베이스에는 이름이 같은 테이블을 포함하는 다른 스키마가 있습니까? 이러한 조건 중 일부가 충족 될 때 오라클에 문제가 있습니다. 버그가 여전히 11g에 있는지 여부는 알 수 없습니다. – dpbradley

답변

1

가능한 한 데이터베이스에 가깝게 시작하여 데이터베이스 자체에서 실행, 커밋, 롤백 등을 확인합니다. TKPROF를 설정했거나 (자세한 내용은 Tom Kyte's site을 방문하십시오.) 앱에서 실제로 실행 된 내용을 확인하십시오. 그것은 적어도 당신이 처형 될 것으로 예상되는 것이 사실상 "도착"하고 있는지 확인하는 데 도움이 될 것입니다.

테이블이 호출 프로그램에 "보이지"면, 즉 권한이 충분하지 않은 경우 ORA-00942가 발생합니다.

1

데이브 케이 (Dave K)가 말했듯이 테이블은 존재했을 수도 있지만 프로세스에 "보이지 않게"되었습니다.

"어젯밤"이라는 문구 때문에 내 생각에 백업 또는 정리 프로세스와 같은 야간 프로세스가있어 테이블을 오프라인 상태로 만들었습니다.

+0

재미있는 생각이지만, 나는 포인트 (d)에 의해 제거 된 것으로 믿습니다. 실패 주변의 창은 매우 짧습니다 (몇 초 정도). 나는 실패한 인서트가 다른 스레드에 의해 제출 된 것과 동일한 타임 스탬프를 가진 행을 실제로 가지고있다. 그렇다면 테이블이 보이지 않게 된 문제는 근본 원인을 어떻게 추적합니까? – VoiceOfUnreason

+0

환경을 모른 채 말하기 힘들다. 제 사무실에서 저는 DBA 나 sysAdmins와 대화하여 그 시간에 프로세스가 정기적으로 실행되는지 확인했습니다. 또한 db 로그가 있는지 물어보십시오. – Prof