ORA-02030: can only select from fixed tables/views 오류는 사용자가 고정된 테이블이나 뷰에서만 데이터를 선택할 수 있도록 제한된 권한으로 쿼리를 실행할 때 발생하는 오류입니다. 이 오류는 V$ 또는 V_$로 시작하는 뷰에 대해 권한이 부족할 때 나타나요.
해당 오류는 주로 시스템 뷰(예: V$OPEN_CURSOR, V$SESSION 등)에 접근하려고 할 때 발생합니다. 이러한 뷰들은 오라클 데이터베이스의 성능 및 내부 상태를 모니터링하는 데 사용하지요? 그러나 이 뷰들은 기본적으로 사용자에게 권한을 부여하지 않기 때문에, 이를 사용하려면 추가적인 권한 부여가 필요합니다.
문제 해결 방법
- 권한 부여: 오라클에서
V$뷰는SYS사용자만 접근할 수 있습니다. 이를 해결하려면 시스템 관리자가SYS사용자로부터 권한을 부여해야 합니다.예를 들어,V$OPEN_CURSOR에 대해 권한을 부여하려면 다음과 같은 명령을 실행해야 합니다:GRANT SELECT ON SYS.V_$OPEN_CURSOR TO user_name;V$로 시작하는 뷰는 사실V_$와 동일한 이름을 가집니다. 그래서V$를 사용하려면SYS스키마에서 직접 접근해야 하므로, 권한을 부여할 때SYS.V_$를 사용해야 합니다. 따라서 오류가 발생하는 이유는,V$OPEN_CURSOR와 같은 뷰를 직접 참조할 수 없기 때문입니다. - 사용자 권한 부여 확인:
GRANT명령을 실행한 후에도 해당 사용자에게 충분한 권한이 있는지 확인해야 합니다. 확인하려면DBA_TAB_PRIVS뷰를 통해 권한이 정상적으로 부여되었는지 체크할 수 있습니다.SELECT * FROM DBA_TAB_PRIVS WHERE TABLE_NAME = 'V_$OPEN_CURSOR' AND GRANTEE = 'user_name'; - 고정 뷰의 사용: 기본적으로
V$와V_$뷰들은 고정 뷰(또는 고정 테이블)로 간주되므로,SYS사용자가 이를 관리합니다. 이러한 뷰는 시스템의 성능이나 상태 정보를 제공하므로, 일반 사용자가 임의로 접근할 수 없습니다. 따라서 적절한 권한 부여 없이는 이 뷰를 사용할 수 없습니다.
결론
권한을 부여할 때 V$ 뷰 대신 SYS.V_$ 뷰를 사용해야 합니다. 이를 통해 사용자는 오류를 피하고 해당 뷰에 정상적으로 접근할 수 있습니다. 만약 여전히 문제가 발생한다면, 해당 사용자에게 적절한 역할이나 권한을 추가로 부여해야 할 수 있습니다.
