Por que o usuário não consegue remover sua própria tabela e por que esse erro é exibido ORA-01017?
SQL> SELECT * FROM V$VERSION; Oracle Database 23ai Free Release 23.0.0.0.0 - Desenvolva, aprenda e execute gratuitamente Oracle Database 23ai Free Release 23.0.0.0.0 - Desenvolva, aprenda e execute gratuitamente Versão 23.7.0.25.01 Oracle Database 23ai Free Release 23.0.0.0.0 - Desenvolva, aprenda e execute gratuitamente
SQL> mostrar usuário USER é "LAB"
SQL> criar tabela TEST1(teste1 varchar2(1)) ;
Tabela criada.
SQL> selecione DBMS_METADATA.GET_DDL('TABLE','TEST1') de DUAL;
CRIAR TABELA "LAB"."TEST1" ( "TEST1" VARCHAR2(1), "TEST2" VARCHAR2(1) ) CRIAÇÃO DE SEGMENTO ADIADO PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "LAB"
SQL> drop table LAB.TEST1; drop table LAB.TEST1 * ERRO na linha 1: ORA-00604: Ocorreu um erro no nível 1 do SQL recursivo. Verifique os erros subsequentes. ORA-01017: credencial inválida ou não autorizada; logon negado
Sua pilha de erros afirma:
ORA-00604: Error occurred at recursive SQL level 1
Observe que se tratava de SQL recursivo — algo que funciona sob o pano como um efeito colateral do seu comando, não o comando em si. É muito provável que seja um gatilho. Em segundo lugar, o erro original é
ORA-01017: invalid credential or not authorized; logon denied
, o que é um erro muito incomum de ocorrer em uma DDL. Algo parece estar tentando estabelecer uma conexão com outro banco de dados Oracle — novamente, algo que provavelmente está acontecendo a partir de um gatilho. Talvez os administradores de banco de dados tenham um gatilho que registra DDL em algum banco de dados de repositório central e esse link esteja quebrado.Para ver os gatilhos, consulte:
Leia o código do gatilho e veja se algum gatilho parece estar tentando se comunicar com um banco de dados remoto. Se você não conseguir consultar essa visualização, precisará falar com seu administrador de banco de dados para que ele verifique o problema. Ele provavelmente terá que corrigir o que estiver errado de qualquer maneira.
Se você não conseguir encontrar um gatilho que explique o problema, habilite o rastreamento 10046 na sua sessão (
ALTER SESSION SET EVENTS '10046 trace name context forever, level 8'
) e execute o comando com erro novamente na mesma sessão. Isso requeralter session
privilégios de sistema, que você pode não ter por padrão. Em seguida, peça ao seu administrador de banco de dados para encontrar o arquivo de rastreamento no servidor de banco de dados e fornecê-lo ou examiná-lo para ver qual foi o último comando antes do ERR ser lançado no rastreamento. Ao comparar o ID do cursor com o último evento PARSE desse mesmo número, ele mostrará o SQL recursivo que lançou o erro.Supondo que a tabela não esteja bloqueada, então possivelmente o usuário, mesmo que seja o proprietário, não tem direitos de sistema para executar operações de exclusão, a menos que sejam concedidos pelo administrador do sistema.
SELECT * FROM dba_tab_privs WHERE table_name = 'TEST1' AND owner = 'LAB';
GRANT DROP ON LAB.TEST1 TO LAB; --if user is not granted drop privileges
Se você estiver usando aplicativos como o dbeaver, certifique-se de que LAB esteja selecionado no catálogo/esquema ativo ao criar a tabela e ao removê-la.
Se o seu 23ai for a versão em execução na VM ORACLE que você baixou, pode faltar a execução do script.
@?/rdbms/admin/catdevrol.sql
É um problema que encontrei com a VM 23c... Mas isso não deveria ser o caso se for o 23ai no OCI.Algum gatilho do sistema bloqueou a queda após essa alteração realizada pelo dba o erro desapareceu