¿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. Imp
coloca 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.
exp
utilidad heredada o conexpdp
(bomba de datos)?Respuestas:
En realidad, no es posible especificar un espacio de tabla diferente al importar utilizando la
imp
utilidad oracle . Sin embargo, como solución alternativa, puede crear previamente las tablas haciendo unaROWS=N
importación en elUSERS
espacio de tablas, luegoalter table mytable move tablespace BLOG_DATA;
para que cada tabla las mueva al nuevo espacio de tablas, luego vuelva a importar con elIGNORE=Y
pará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 legadoexp
/imp
utilidades) puede importar fácilmente a otro espacio de tabla usando elREMAP_TABLESPACE
parámetro.p.ej:
fuente
Debe seguir los pasos que se mencionan a continuación:
imp system/manager file=export.dmp indexfile=newfile.sql
Esto importará los datos y guardará todas las definiciones
newfile.sql
.newfile.sql
después de alterar los espacios de tabla.fuente