Olá
Recentemente tivemos um problema com uma atualização de um fornecedor de software causou um erro recorrente em um banco de dados de um de nossos clientes. Liguei para um amigo meu que trabalha no fornecedor para perguntar a ele, se não haveria a possibilidade da atualização ter algum script do tipo “alter user XXXX” quota 0 naquelas tablespaces. visto que no momento da atualização geralmente concedemos mais privilégios do que o schema tem de costume (em geral a role DBA). Ele me explicou que já havia pego este tipo de comportamento antes, onde o revoke do DBA remove as quotas em tablespaces concedidas previamente e eu fiquei de testar isso.
De fato, o meu grande amigo Daniel Costa estava coberto de razão em partes, como não nunca gostei de perder uma discussão, resolvi testar em pelo menos 3 versões do Oracle (10g, 11g e 12c).
Vale ressaltar que mesmo não gostando de estar errado, dessa vez eu “tive que dar os dois braços a torcer”, pois eu estava errado quanto a isso ocorrer no Oracle 11g, e aparentemente é um BUG que ocorre no Oracle 11g em todas as versões (testamos no 11.2.0.1, 11.2.0.3, 11.2.0.4 mais recente). O “DBA ORA-SAURO”, Daniel é um dos caras que me ensinou a logar no Sqlplus, fazer queries, fazer dumps e etc, quando eu ainda era estagiário e estava começando minha carreira na área de banco de dados, ele é um dos caras que tenho como referência quando o assunto é Banco de dados Oracle.
Sem mais delongas, vamos aos testes:
Como ficou na versão 10g
SQL> select version from v$instance;
VERSION
—————–
10.2.0.5.0
SQL> create user teste_mufalani identified by teste_mufalani quota unlimited on users;
Usuário criado.
SQL> grant dba to teste_mufalani;
Concessão bem-sucedida.
SQL> select * from dba_ts_quotas where username=’TESTE_MUFALANI’;
TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
—————————— —————————— ———- ———- ———- ———- —
USERS TESTE_MUFALANI 0 -1 0 -1 NO
SQL> revoke dba from teste_mufalani;
Revogação bem-sucedida.
SQL> select * from dba_ts_quotas where username=’TESTE_MUFALANI’;
TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
—————————— —————————— ———- ———- ———- ———- —
USERS TESTE_MUFALANI 0 -1 0 -1 NO
Conforme verificamos em cima, na versão 10g, o problema não ocorreu, o usuário TESTE_MUFALANI continua com quota na tablespace USERS.
Agora vamos ver com se comporta no Oracle 11g (11.2.0.4) — Com último PSU e CPU aplicado.
SQL> select version from v$instance;
VERSION
—————–
11.2.0.4.0
SQL> create user teste_mufalani identified by teste_mufalani quota unlimited on users;
Usuário criado.
SQL> grant dba to teste_mufalani;
Concessão bem-sucedida.
SQL> select * from dba_ts_quotas where username=’TESTE_MUFALANI’;
TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
—————————— —————————— ———- ———- ———- ———- —
USERS TESTE_MUFALANI 0 -1 0 -1 NO
SQL> revoke dba from teste_mufalani;
Revogação bem-sucedida.
SQL> select * from dba_ts_quotas where username=’TESTE_MUFALANI’;
não há linhas selecionadas
Podemos notar que tão logo a revogação de DBA é realizada as quotas na tablespace somem.
Agora vamos avaliar o mesmo na versão tipo de acontecimento na versão 12c
SQL> select version from v$instance;
VERSION
—————–
12.1.0.2.0
SQL> create user teste_mufalani identified by teste_mufalani quota unlimited on users;
Usuário criado.
SQL> grant dba to teste_mufalani;
Concessão bem-sucedida.
SQL> select * from dba_ts_quotas where username=’TESTE_MUFALANI’;
TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
—————————— ————————————————————————————————— ———- ———- ———- ———-
USERS TESTE_MUFALANI 0 -1 0 -1 NO
SQL> revoke dba from teste_mufalani;
Revogação bem-sucedida.
SQL> select * from dba_ts_quotas where username=’TESTE_MUFALANI’;
TABLESPACE_NAME USERNAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS DRO
—————————— ————————————————————————————————— ———- ———- ———- ———-
USERS TESTE_MUFALANI 0 -1 0 -1 NO
Podemos concluir que o problema somente ocorre na versão 11g, fizemos testes em pelo menos 4 plataformas distintas do 11g com patchsets diferentes e o mesmo padrão ocorreu, e não deveveria.
Já fazia um longo tempo que não atualizava o blog e espero manter a regularidade.
Daniel, meu grande amigo, de acordo com meus testes vc estava 33% correto. Hahahahahahahah Na verdade, ele que me alertou sobre o problema e está 100% correto sobre sua afirmativa referenciando o 11gR2. Muito Obrigado mesmo!!!
Att,
Mufalani