본문 바로가기

Server Oriented/DB-Oracle

프로시저 ... 를 사용할 수 없습니다..

프로시저 사용이 불가할 때의 메시지는,

대체로 '프로시저를 찾을 수 없습니다' 나

프로시저 ooo 에서 오류가 발생하였습니다.

 

그럼, '사용할 수 없습니다' 는 뭔 소리지..?

 

배경 설명을 해 보면,

DB 사용자 A 가 만든 '프로시저A' 를,

DB 사용자 B 가 '시너님A' 로 등록하여 실행해 왔던 것인데..

('프로시저A' 는 DB 사용자 A 가 만든 '테이블A' 를 select/update/insert)

 

DB 사용자 C 가 해당 프로시저를 컴파일 하는 시점에서

DB 사용자 B 가 만든 '시너님A' 로는
DB 사용자 C 가 컴파일한 '프로시저A' 와의 owner 관계가 끊어졌던 것.

다만, synonym 관계는 끊어지지 않음.

연결 관계가 끊어졌으면 오류 메시지가 '찾을 수 없습니다' 였을듯.

 

'프로시저A' 의 권한관계에는

DB 사용자 A 와 DB 사용자 B와 DB 사용자 C 가 모두 들어 있음.

그래서, DB 사용자 C 로 컴파일 해도 되는 줄 알았는데..

DB 사용자 C 로 컴파일 했을 때,

'프로시저A' 의 소유관계가 DB 사용자 C 로 넘어감.

프로시저의 이름만 같았지 owner 가 바뀐거.

DB 사용자 A 로 '프로시저A' 를 다시 컴파일 했지만,

DB 사용자 B 의 '프로시저A' 에 대한 '시너님A' 는 정상작동 하지 않음.

 

그래서, DB 사용자 B 의 '프로시저A' 에 대한 '시너님A' 를 drop 하고,

DB 사용자 A 가 컴파일한 '프로시저A' 에 대하여

DB 사용자 B 가 '시너님A' 를 재생성 하니 정상작동 함..

 

DB 사용자 A 로 작업해야 하는 것을,

DB 사용자 C 로 작업한 것이 패착..

 

DB 작업할 때는,

해당 사용자로 작업하자.. ^^;