이거 때문에 아주 밤을 샐 뻔 했다.

사내 그룹웨어 서버를 업그레이드 하면서, 타 시스템과 연계를 하는 과정에, 뷰를 생성하면서 이 해당 문제가 생겨서

대략 난감이 난무하는 멘붕 상태가 오고 말았다.

'아놔 실 시스템인데 ㅜㅜ........... 시말서 써야 하나 ㅜㅜ'

네이버님과 구글신을 검색하니 이런 말이 나온다.

뷰테이블을 생성한 권한이 없습니다. select * from user_role_privs; 쿼리로 확인 후 grant create view to
[계정명];
으로 해결하시면 그대 인생이 샤방해 집니다. *^.^*

해도 안된다. -_-;; 다른데를 검색했더니 이런 말이 나온다.

오라클이 이상한거임, 오라클을 재시작해 보셈.

아놔 해당 DB서버엔 여러가지 시스템이 물려있다. 오라클 내렸다 올리면 다른 시스템도 재시작해야 하는데~~~~

그런 시말서를 유도하는 행위는 하기 싫다.

먼저 select * from user_role_privs;로 확인해본 결과 권한은 다 있다. 심지어 DBA권한두 있었다. -_-;;

Oracle Developer에서 뷰생성 기능을 이용해 기존 뷰를 생성해 질의 테스트를 통해 무엇이 문제인가 했더니

타테이블스페이스에 있는 테이블에 대한 접근권한이 없었다.

음...... DBA권한임을 알고 그쪽 테이블 스페이스에 있는 테이블에 grant를 주지 않은 초보적인 실수를 한게

화근이었다.

자 정리해보자 위에 내용은 과감하게 무시해도 좋다.

1. 아무리 관리자 권한이 있더라도 SYNONYM을 주고자 할때는 대상 테이블 스페이스의 권한을 반드시 주는 것이
갑이다. GRANT SELECT ON [대상계정].[해당테이블] TO [권한받고자 하는 계정];

2. 이후 권한을 받고자 하는 계정에서 SYSNONYM을 생성한다. CREATE OR REPLACE SYNONYM
[권한을 받고자 하는계정].[해당테이블명] for [대상계정].[해당테이블];

3. 이후 뷰를 생성하면 제목에서 언급한 오류가 나지 않는다.

여담으로  

뷰 생성시 Oracle developer에서 뷰생성기에 질의 테스트 혹은 구문 확인 기능을 쓰면 쿼리 문법을 확인 할 수 있다.

멘붕이 난무하던 DB삽질기~~~ 끗~!!

Posted by 오달봉
,