Ora10g Exp/Imp Schema - Tipos de Obj. Usuario

Tengo un schema A y un schema B. El schema A tiene un tipo de objeto definido como DATETIME. El schema B esta recién creado. Ambos schemas están en la misma BD. Tengo que exportar e importar todo desde el schema A al B.
El export no presenta ningún problema y se genera el dump en forma correcta.
El import da problemas cuando llega a una tabla que usa el tipo DATETIME dando un error y salteando la creación de dicha tabla.
La pregunta es: alguien sabe como hacer exportar/importar de un schema a otro en la misma BD y poder sortear el problema de que ya existe un tipo definido.
Desde ya muchas gracias por cualquier tipo de ayuda que me puedan brindar.
Pego el error a continuación.
import done in WE8ISO8859P15 character set and AL16UTF16 NCHAR character set
. Importing SCHEMA_A's objects into SCHEMA_B
IMP-00017: following statement failed with ORACLE error 2304:
"CREATE TYPE "DATETIME" TIMESTAMP '2009-01-27:14:31:13' OID '594129DA57AD7DE"
"5E040A8C0C70F4D66' "
" "
 "                 as object (a date)"
" "
IMP-00003: ORACLE error 2304 encountered
ORA-02304: invalid object identifier literal
IMP-00063: Warning: Skipping table "SCHEMA_B"."TABLE_A" because object type "SCHEMA_B"."DATETIME" cannot be created or has different identifier
IMP-00017: following statement failed with ORACLE error 942:
"analyze table "table_a" estimate statistics "
IMP-00003: ORACLE error 942 encountered
ORA-00942: table or view does not exist
Import terminated successfully with warnings.

1 respuesta

Respuesta
1
Puedes probar con el parámetro en el import ignore=y, ya que esto suele pasar cuando se realiza un export e import en la misma base, ya que crea un ID para los objetos en cada esquema: prueba:
1)exp owner=a
2) imp fromuser=a touser=b ignore=y
Es muy probable que ya exista el objeto en el esquema al que lo quieras importar.
Primero que nada quiero agradecerte por haberte involucrado con este tema, en segundo lugar decirte que ya había probado con la opción ignore=yes pero me olvide de comentarlo en la consulta inicial.
Igualmente volví a probarlo hoy para copiarte todo el resultado que me da. Tampoco lo había mencionado pero es bajo linux, creo que esto no afecta al problema que estoy teniendo.
Como podrás ver intento importar unicamente la TABLA1 ya que esta posee el tipo de dato DATETIME
----------------------------------------------------------------------------------------------------------------
[oracle@home]$ imp SchemaA file=entrada.dmp fromuser=SchemaA touser=SchemaB ignore=yes tables=TABLE1
Import: Release 10.2.0.3.0 - Production on Jue Ene 29 09:33:55 2009
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Password:
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Export file created by EXPORT:V10.02.01 via conventional path
Warning: the objects were exported by EXPIMP, not by you
import done in WE8ISO8859P15 character set and AL16UTF16 NCHAR character set
. importing SchemaA's objects into SchemaB
IMP-00017: following statement failed with ORACLE error 2304:
"CREATE TYPE "DATETIME" TIMESTAMP '2009-01-27:14:31:13' OID '594129DA57AD7DE"
 "5E040A8C0C70F4D66'                                                         "
 "                                                                           "
 "                 as object (a date)"
 " "
IMP-00003: ORACLE error 2304 encountered
ORA-02304: invalid object identifier literal
IMP-00063: Warning: Skipping table "SchemaB"."TABLE1" because object type "SchemaB"."DATETIME" cannot be created or has different identifier
IMP-00017: following statement failed with ORACLE error 942:
 "ANALYZE  TABLE "TABLE1"  ESTIMATE STATISTICS "
IMP-00003: ORACLE error 942 encountered
ORA-00942: table or view does not exist
Import terminated successfully with warnings.
Tal vez lo has experimentado, pero Oracle no es muy deductivo con sus errores, como te comente la vez pasada el problema no es exactamente que tenga algún tipo de error con el tipo de dato que estas queriendo importar, asegurate que en el esquema "B" no exista esa tabla que quieres migrar, si ya exista DROPeala e intenta de nuevo el import.
Debido a que este es un problema de discrepancias entre los object ID (OID) como lo referencia en la parte:
"CREATE TYPE "DATETIME" TIMESTAMP '2009-01-27:14:31:13' OID '594129DA57AD7DE"
"5E040A8C0C70F4D66'
...
Pudieras intentar realizar el impor con el parámetro toid_novalidate, cuya sintaxis es así:
toid_novalidate=([schemaname.]typename [, ...])
por ejemplo:
imp scott/tiger table=foo toid_novalidate=bar
imp scott/tiger table=foo toid_novalidate=(fred.type0,sally.type2,type3)
Buena suerte
Hola nuevamente,
Intente con el comando que me pasaste y tampoco funciona. El schema no posee ninguna tabla, es más lo he borrado y lo he creado nuevamente. El problema no es el schema ya que si lo levanto en otra Base de Datos no tengo problema. El problema es que el tipo DATETIME ya esta definido en el primer schema desde donde realizo el export.
No se si me he explicado bien cual es mi problema.
BaseDatos1
     Schema1 ---> tiene definido un tipo de objeto DATETIME
              Tabla1 ---> tiene un campo definido con tipo DATETIME
     Schema2 ---> recien creado
El export se realiza desde el Schema1 sin problemas cuando se intenta realizar el import hacia el Schema2 da el error debido al tipo DATETIME y no importa la tabla, ni siquiera la crea.
BaseDatos2
    Schema2 ----> recien creado
El import se realiza sin ningun tipo de problemas.
Importante !
   Recordar que DATETIME no existe como tipo nativo de oracle y que es un tipo definido por el Usuario/Schema1
Salio un poco más complicado de lo que
En algunas ocasiones se recomienda separar los schemas que poseen los objetos con datos y los que poseen tipos de objeto, tendrías que modificar tu BaseDatos1, así:
1)Primero tendrías que crear un usuario para poner todos los objetos de tipo que tengas definidos en tu base, en tu caso el DATETIME, por ejemplo un usuario ORATYPES.
2)Después usa siempre los tipos haciendo referencia hacia el usuario ORATYPES. Por ejemplo si tuvieras un usuario ORAUSE:
Desde ORAUSE puedes hacer referencia a los tipos así ORATYPES. TYPE_NAME
3)Ahora cuando hagas el export tendrías que exportar ambos schemas ORATYPES y ORAUSE (por ejemplo) y de esa forma no deberías tener problemas con el import.
Prueba de esa forma, aunque no tenga mucho que ver en si con el error del Import pero es una forma efectiva para el manejo de los objetos y que es efectivo para hacer traslados de información en la misma base; y como bien lo has probado no da problemas al realizarlo en otra base. Si no me equivoco es al crear tipos de objetos iguales para distintos schemas dentro de la misma base.
Tal vez te lleve un poco más de trabajo pero debería funcionarte y te servirá para una mejor administración de la base.
Buena Suerte.
Resumiendo si se desean crear tipos de objetos, lo mejor es que estos tipos estén definidos en un Schema dedicado a esto.
Tal como tu lo indicas lo mejor seria crear un schema ORATYPES donde se aljaran todos los tipos especiales que usaran los diferentes schemas definidos en la Base de Datos.
En caso de exportar un schema que posee tipos también se deberá exportar el schema ORATYPES.
Gracias por tu ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas