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> exitAgora 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 NUMBEROnde 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 2Dica: Este OBJ_TYPE é o tipo do objeto, logo se for tabela sempre será 2.
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.