ORA-02030: can only select from fixed tables/views
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- Web |
- More Posts
Tags: fixed_table, grants, ORA-02030, performance, scripts, tabelas, views, x$kgllk
