Importar esquema a un espacio de tabla nuevo o diferente


13

¿Hay una manera conveniente de importar un esquema en Oracle 11gR2 usando un único espacio de tabla nuevo o diferente al que se originó la información?

Como ejemplo, he exportado BLOG_DATA de OLDDB, donde todos los datos del usuario se almacenan en el espacio de tabla USERS.

En NEWDB, me gustaría importar el esquema BLOG_DATA, pero almacenar los objetos de usuario en el espacio de tabla BLOG_DATA, creado específicamente para este usuario.

Creé el usuario BLOG_DATA, creé el espacio de tabla BLOG_DATA y lo configuré como el espacio de tabla predeterminado para ese usuario y agregué una cuota ilimitada apropiada.

CREATE TABLESPACE blog_data DATAFILE SIZE 1G;

CREATE USER blog_data IDENTIFIED BY secretpassword DEFAULT TABLESPACE blog_data QUOTA UNLIMITED ON blog_data;

GRANT connect,resource TO blog_data

El esquema se exportó desde OLDDB con algo como

exp blog_data/secretpassword@OLDDB file=blog_data.dmp 

Después de leer la excelente respuesta de Phil a continuación, me pregunté :

Dado que los datos no tienen otro lugar al que ir que el espacio de tabla predeterminado, el único espacio de tabla en el que el usuario tiene una cuota, ¿esto obligará efectivamente a imp a colocar todos los objetos de usuario en ese espacio de tabla predeterminado?

imp blog_data/secretpassword@NEWDB file=blog_data.dmp

¿Esto colocaría todo el esquema blog_data en el espacio de tabla blog_data en NEWDB? ¿Hay alguna razón por la que esto no funcionaría o que tendría problemas con ciertos objetos, etc.?

actualizar:

Hice una prueba rápida y descubrí que este era el caso. Impcoloca objetos en el espacio de tabla predeterminado para ese usuario, siempre que no pueda colocarlo en el espacio de tabla original (por ejemplo, el espacio de tabla no existe). Explicación completa: http://www.dolicapax.org/?p=57

Aún así, supongo que usar Data Pump como Phil sugiere podría ser la opción preferida.


¿Se exportó utilizando la exputilidad heredada o con expdp(bomba de datos)?
Philᵀᴹ

En el ejemplo, se exportó con la utilidad exp convencional, como se muestra arriba. Supongo que uno podría usar expdp con la misma facilidad y recoger el archivo del antiguo servidor db, ¿facilitaría la transición a un nuevo espacio de tabla?
Roy

He cubierto ambos en mi respuesta. Use la bomba de datos: es más fácil realizar esta tarea
Philᵀᴹ

Respuestas:


15

En realidad, no es posible especificar un espacio de tabla diferente al importar utilizando la imputilidad oracle . Sin embargo, como solución alternativa, puede crear previamente las tablas haciendo una ROWS=Nimportación en el USERSespacio de tablas, luego alter table mytable move tablespace BLOG_DATA;para que cada tabla las mueva al nuevo espacio de tablas, luego vuelva a importar con el IGNORE=Yparámetro para ignorar los errores de creación de tablas e importar todos de los datos.

Si los datos se exportaron usando Data Pump ( expdp), (como un aparte, todos deberían estar usando esto en estos días, en lugar del antiguo legado exp/ imputilidades) puede importar fácilmente a otro espacio de tabla usando el REMAP_TABLESPACEparámetro.

p.ej:

impdp scott/tiger@ZOMG file=blog_data.dmp directory=mydir remap_tablespace=USERS:BLOG_DATA

Muchas gracias Phil. Me preguntaba: si el usuario que se está importando exclusivamente tiene una cuota en el espacio de tabla predeterminado, ¿eso obligará a colocar todos los objetos importados en ese espacio de tabla predeterminado independientemente del diseño en la fuente de los datos?
Roy

Estoy trabajando en algo similar, pero es una migración de DB completa usando expdp / impdp porque quiero que nuestro control de calidad coincida con la producción. Si uso remap_tablespace, reasignaría cada esquema en otro espacio de tabla único, sin embargo, creo que puedo ejecutar el comando impdp una vez por esquema y usar remap_tablespace. Esto debería lograr el trabajo.
Nicolas de Fontenay

0

Debe seguir los pasos que se mencionan a continuación:

  • Exportar al usuario
  • Realice la importación utilizando el comando
    imp system/manager file=export.dmp indexfile=newfile.sql
    Esto importará los datos y guardará todas las definiciones newfile.sql.
  • Suelta los objetos necesarios.
  • Ejecute el script newfile.sqldespués de alterar los espacios de tabla.
  • Importar desde la copia de seguridad para los objetos necesarios.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.