- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 17 anos, 3 meses atrás por
erivelton.
-
AutorPosts
-
15 de dezembro de 2008 às 6:20 pm #84282
erivelton
ParticipanteSQL> grant dba to GS_TESTE;
Grant succeeded.
SQL> ALTER TABLE ALVO_UI
ADD CONSTRAINT ALVO_UI_TIPO_PELE_FK1 FOREIGN KEY
( SK_TIPO_PELE ) REFERENCES TIPO_PELE
( ID_TIPO_PELE ) ; 2 3 4
ALTER TABLE ALVO_UI
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privilegesAlguém tem alguma idéia do que pode ser?
(Release 10.2.0.1.0)
15 de dezembro de 2008 às 6:54 pm #84284Leonardo Litz
ParticipantePor acaso esta tabela na esta lockada?
15 de dezembro de 2008 às 8:30 pm #84286erivelton
ParticipanteVerifiquei e a tabela não está locked.
Em outro objetos o problema também acontece:
ALTER TABLE TIPO_PELE
MODIFY CONSTRAINT TIPO_FLG__CHK__621141764 ENABLE;
Error report:
SQL Error: ORA-00604: ocorreu um erro no nível 1 SQL recursivo
ORA-01031: privilégios insuficientes
00604. 00000 - "error occurred at recursive SQL level %s"
*Cause: An error occurred while processing a recursive SQL statement
(a statement applying to internal dictionary tables).
*Action: If the situation described in the next error on the stack
can be corrected, do so; otherwise contact Oracle Support.Na sessão do user GS_TESTE:
select * from user_sys_privs;USERNAME PRIVILEGE ADMIN_OPTION
GS_TESTE UNLIMITED TABLESPACE NO
GS_TESTE CREATE SEQUENCE NO
GS_TESTE CREATE ANY DIRECTORY NO
GS_TESTE CREATE TABLE NO
GS_TESTE DEBUG ANY PROCEDURE NO
GS_TESTE ALTER SESSION NO
GS_TESTE DEBUG CONNECT SESSION NO
GS_TESTE CREATE ANY TABLE YES
GS_TESTE SELECT ANY DICTIONARY NO
15 de dezembro de 2008 às 9:15 pm #84287Leonardo Litz
ParticipanteVerifique se não há nenhuma trigger de sistema que ao se executar uma ddl log o registro.
15 de dezembro de 2008 às 9:56 pm #84288erivelton
ParticipanteLitz,
Já tinha observado isso, sendo que a única trigger
de sistema que eu tenho é AFTER LOGON:create or replace TRIGGER data_logon_trigger
AFTER LOGON ON DATABASE
BEGIN
IF (USER IN ('GS_TESTE')) THEN
execute immediate 'alter session set nls_date_format = "YYYY-MM-DD HH24:MI:SS"';
END IF;
END;15 de dezembro de 2008 às 10:04 pm #84289Leonardo Litz
ParticipanteTente dar o privilegio de alter table diretor, para este usuario.
grant alter any table on user;16 de dezembro de 2008 às 2:43 pm #84292Marcio68Almeida
ParticipanteO que está acontecendo não é um problema de privilégio e sim de lógica.
Ao que tudo indica, você está tentando criar uma recursividade em algum lugar…
Por exemplo, a tabela A tem FK apontando para B e você está tentando criar uma FK em B apontando para A
É claro que isso pode ser um pouco mais complexo, por exemplo, A apontando para B que aponta para C que tenta apontar para A
Procure algo nesse sentido…16 de dezembro de 2008 às 3:45 pm #84294erivelton
ParticipanteObrigado pela atenção.
Márcio,
Não era problema de lógica, pois não tinha ninguém apontando para está tabela
SELECT other.TABLE_NAME,
other.owner,
other.constraint_name
FROM sys.dba_constraints this,
sys.dba_constraints other
WHERE this.constraint_name = other.r_constraint_name
AND this.owner = 'GS_TESTE'
AND this.TABLE_NAME = 'TIPO_PELE'
AND other.constraint_type = 'R'
AND other.r_owner = this.owner;
TABLE_NAME OWNER CONSTRAINT_NAME
0 rows selected
Apesar disso, descobri o problema:
Era um índice funcional (uma função determinística) na tabela TIPO_PELE,
sendo que está função estava em outro schema:
CREATE UNIQUE INDEX GS_TESTE.XIE1TIPO_PELE ON GS_TESTE.TIPO_PELE (GS.TO_KEY(TIPO_PELE)) ;
Criei a função no mesmo schema e ficou assim:
CREATE UNIQUE INDEX XIE1TIPO_PELE ON TIPO_PELE ( TO_KEY(TIPO_PELE)) ;
Obrigado a todos.
-
AutorPosts
- Você deve fazer login para responder a este tópico.