Tabela SYS.NOEXP$

Esses dias encontrei um erro no banco de um cliente bem curioso:
 EXP-00056: ORACLE error 3113 encountered
 ORA-03113: end-of-file on communication channel
 EXP-00056: ORACLE error 24324 encountered
 ORA-24324: service handle not initialized
 

  Ai vocês devem estar se questionando, o porque não coloquei o tópico 
deste post com estes erros? Por que é simples, não quero falar sobre o erro, quero falar sobre algo que
descobri com ele ;), no caso a tabela NOEXP$. Neste erro a solução da oracle é mudar a rotina de backup para DataPump, pois
há um bug no exp para a versão 10.2.0.4 que não consegue exportar alguns tipos
de tabelas com XML. Porem no DataPump ele não exporta tabelas com XML.

ORA-39139: Data Pump does not support XMLSchema objects.

TABLE_DATA:"LANA"."LANA_XML" will be skipped.

Foi ai que eu descobri a tabela NOEXP$ Esta tabela faz com que o export da oracle
simplesmente não exporte a tabela.

Exemplos:

Lana-> exp teikobkp/******* file=teste.dmp log=teste.log owner=LANA

...
Current user changed to LANA
. . exporting table LANA_LANA 7 rows exported
. . exporting table LANA_XML
EXP-00056: ORACLE error 3113 encountered
ORA-03113: end-of-file on communication channel
EXP-00056: ORACLE error 24324 encountered
ORA-24324: service handle not initialized

...

Vamos adicionar a tabela LANA_XML na tabela sys.noexp$.

SQL> insert into NOEXP$ values ('LANA','LANA_XML','2');

1 row created.

SQL> commit;

Commit complete.

SQL> exit

Agora vamos fazer um backup do owner lana que é onde se encontra a tabela
cadastrada na sys.noexp$

Lana-> exp teikobkp/******* file=teste.dmp log=teste.log owner=LANA
...
. about to export LANA's tables via Conventional Path ...
. . exporting table LANA_LANA 7 rows exported
. . exporting table TESTE_SEQUENCE 0 rows exported
. . exporting table TESTE_TRIGGER 3 rows exported
...

. exporting statistics
Export terminated successfully with warnings.

Podemos observar que não existe mais a tabela lana_xml no export.

Segue o describe da tabela:

SQL> desc NOEXP$
Name Null? Type
--------------------- -------- ------------

OWNER                 NOT NULL VARCHAR2(30)
NAME                  NOT NULL VARCHAR2(30)
OBJ_TYPE              NOT NULL NUMBER

Onde OBJ_TYPE você pode pegar na "obj$" com a seguinte query.

SQL> select name,type# from obj$ where name = 'LANA_XML';

NAME TYPE#
------------------------------ ----------
LANA_XML 2

Dica: Este OBJ_TYPE é o tipo do objeto, logo se for tabela sempre será 2.

%name Tabela SYS.NOEXP$

Autor: Leandro Lana

Trabalho com banco de dados Oracle desde 2006, já trabalhei com as plataformas 9i, 10G, 11G, 12C, 18C, 19C e 21(ainda em testes).

Trabalhando atualmente como consultor Oracle na MigraTI Soluções em TI como administrador de banco de dados Oracle, SQL-Server, MySQL e Postgresql.

Contato: leandro.lana@migrati.com.br

Fone: (47) 9191-6052 / (47) 3328 0996

Certificações:

OCA 10G.

OCP 10G.

OCE Linux.

OCE RAC/Cluster.

MCP SQL-Server 2008.

MCITP SQL-Server 2008.

DB2 Fundamentals.