ORA-02030: can only select from fixed tables/views

Postado em Janeiro 24th, 2012 sobre Erros,Literatura,Performance,PL/SQL,Scripts,Segurança por Leandro Lana

Pra quem não conhece, o oracle possue algumas tabelas que podem visualizar os dados brutos no banco de dados.
Estas tabelas começão com a string “x$â€.
Muita gente nem nunca ouviu falar sobre as tabelas x$ pois estas tabelas raramente são mencionadas na documentação do oracle ou na comunidade de usuários.

Mas suponhamos que você precise de alguma informação no oracle e por motivos de performance você encontrou alguma solução ideal utilizando essas tabelas?
Porem você precisa ter permisões para acessa-las com outro usuário sem ser o sysdba.

Ao efetuar os grants você recebe esta mensagem de erro.

Enter user-name: / as sysdba

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> grant select on x$kgllk to lana;
grant select on x$kgllk to lana
                *
ERROR at line 1:
ORA-02030: can only select from fixed tables/views

Conforme documentado na próprio oracle. As tabelas x$ não podem receber nenhum comando dml de nenhum usuário, nem mesmo o famoso sys.
Então não se preocupe, em trabalhar com estas tabelas, pois as mesmas tem seus dados inalterados.
Porem você não pode efetuar grant destas tabelas para ninguém.
Então a solução deste problema vem abaixo.
Primeiro precisaremos criar uma visão desta tabela.

SQL> create view v_x$kgllk as select * from x$kgllk;

View created.

Após este procedimento devemos efetuar o grant sobre a visão recem criada.


SQL> grant select on v_x$kgllk to lana;

Grant succeeded.
Agora esta liberado o acesso a esta tabela.
Para acessar as outras tabelas você deverá efetuar o mesmo procedimento.
Caso você queira efetuar isso para todas as tabelas x$ segue abaixo um pequeno script.


select
  'create or replace view X_$' || substr(name, 3) ||
  ' as select * from ' || name || ';'
from sys.v_$fixed_table
where name like 'X$%';

OBS:
Este erro “ORA-02030: can only select from fixed tables/viewsâ€
Também pode ocorrer caso você tente efetuar os grants para as visões v$ ou gv$
conforme abaixo.


SQL> conn / as sysdba
Connected.
SQL> grant select on gv$session_wait to lana;
grant select on gv$session_wait to lana
                *
ERROR at line 1:
ORA-02030: can only select from fixed tables/views

Neste caso basta você adicionar um _ (underline) antes da string “$â€, que resolverá seu problema.

SQL> grant select on gv_$session_wait to lana;

Grant succeeded.

Qualquer duvida favor comentar.

Sobre Leandro Lana Lana

Trabalho a 6 anos com banco de dados Oracle, ja trabalhei com as plataformas 9i, 10G e 11G.

Trabalhando atualmente como consultor Oracle.

Administrador e cofundador do site www.oraclehome.com.br

Certificações:

Oracle OCP 10G

Oracle OCE linux.

Oracle Rac 10G.

Oracle Partner Especialist.

Contato: leandro_lana@terra.com.br

Fone: 91916052

Tags: , , , , , , ,

Deixe um comentario




XHTML::
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>