Recebi um script que continha isto:
alter table TABLE_1 add constraint pk_1 primary key(ID_1)
using index
tablespace schema1_ind
exceptions into junk;
O problema é que quando executo, ele gera este erro:
ORA-02445: exceptions table not found
Não estou muito familiarizado com tabelas de exceções, e há muito pouca informação que eu possa encontrar online. Encontrei este pedaço de documentação da Oracle, https://docs.oracle.com/cd/A58617_01/server.804/a58312/newch2h5.htm que diz isto:
ORA-02445: tabela de exceções não encontrada
Causa: A tabela de exceções declarada explícita ou implicitamente não existe. Ação: Se o nome correto da tabela de exceções foi usado, crie a tabela e tente novamente o comando enable.
e também encontrei isso https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/EXCEPTIONS.html :
EXCEPTIONS contém informações sobre violações de restrições de integridade. Esta tabela é criada pelo script utlexcpt.sql.
Mas, estranhamente, quando executo um script diferente que também usa "lixo", ele é executado sem erro:
alter table TABLE_2 add constraint PK_2
primary key(ID_2)
using index tablespace schmea1_ind2
storage (initial 8M NEXT 2M)
exceptions into junk;
Todos esses scripts são executados em uma determinada ordem, e o de baixo é executado primeiro, sem problemas, vários outros scripts são executados e, então, o de cima tenta ser executado e falha.
O problema é que não sei como encontrar essa tabela de exceções 'junk'. Tentei executar o primeiro script sozinho e funcionou, mas depois, quando olhei em DBA_OBJECTS, não havia nada chamado 'junk'. Nada mesmo. Em nenhum lugar nada cria ou remove uma tabela chamada 'junk'.
Alguém pode explicar por que estou recebendo esse erro 'exceptions table not found'? Onde estão as exceptions tables, se não em dba_objects? Por que a primeira instrução falha, mas a segunda é bem-sucedida?
Qualquer conhecimento sobre tabelas de exceções seria útil, pois encontrei muito pouca documentação.
Provavelmente porque não há duplicatas naquela tabela. Excepcionalmente, o Oracle não reclama que a tabela exceptions não existe, a menos que precise usá-la.
Este violino demonstra que, se
alter table
for executado quando a tabela principal estiver vazia ou tiver apenas dados únicos, ele não reclama; quando houver um valor PK duplicado, ele reclama.Parece que não existe, então você precisa criá-lo. Usando a versão do artigo Bohemian linkado para :
... sua declaração então recebe "ORA-02437: não é possível validar (schema.PK_1) - chave primária violada".
violino
A estrutura da tabela de exceções é mostrada na documentação , com o nome padrão usado pelo
utlexcpt.sql
script (e colunas maiores do que a versão acima). E você pode ler mais sobre o conceito em outro lugar na documentação , sob o título "Handling Constraint Exceptions".