oracle - multiple - Cómo importar un volcado de oráculo en un espacio de tabla diferente
sql transponer columnas a filas (9)
¿Qué versión de Oracle estás usando? Si es 10g o superior, deberías mirar usar Data Pump en lugar de importar / exportar de todos modos. No estoy 100% seguro de si puede manejar este escenario, pero esperaría que pudiera hacerlo.
Data Pump es el reemplazo de exp / imp por 10g o superior. Funciona muy similar a exp / imp, excepto que (supuestamente, no lo uso ya que estoy atrapado en 9i land) mejor.
Quiero importar un volcado de Oracle en un tablespace diferente.
Tengo un tablespace A utilizado por el usuario A. He revocado DBA en este usuario y le he dado las concesiones connect y resource. Luego he descargado todo con el comando
exp a / *** owner = a file = oracledump.dmp log = log.log compress = y
Ahora quiero importar el volcado en el espacio de tabla B utilizado por el usuario B. Por lo tanto, le he otorgado las concesiones de conexión y recursos (sin DBA). Luego ejecuté la siguiente importación:
imp b / *** file = oracledump.dmp log = import.log fromuser = a touser = b
El resultado es un registro con muchos errores:
IMP-00017: la siguiente instrucción falló con el error 20001 de ORACLE: "BEGIN DBMS_STATS.SET_TABLE_STATS IMP-00003: el error 20001 de ORACLE encontró ORA-20001: valores de entrada no válidos o incoherentes
Después de eso, probé el mismo comando de importación pero con la opción statistics = none. Esto dio lugar a los siguientes errores:
ORA-00959: tablespace ''A_TBLSPACE'' no existe
¿Cómo debe hacerse esto?
Nota: muchas columnas son de tipo CLOB. Parece que los problemas tienen algo que ver con eso.
Nota 2: las versiones de Oracle son una mezcla de 9.2, 10.1 y 10.1 XE. Pero no creo que tenga que ver con las versiones.
--- Crear nuevo espacio de tabla:
CREATE TABLESPACE TABLESPACENAME DATAFILE ''D: / ORACL / ORADATA / XE / TABLESPACEFILENAME.DBF'' SIZE 350M AUTOEXTEND ON NEXT 2500M MAXSIZE ILIMITED LOGGING PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL FLASHBACK ON;
--- y luego importar con el comando debajo
CREAR UN USUARIO DE VIVIENDA IDENTIFICADO POR LOS VALORES ''bvuser'' TABLES DEFAULTPACE TABLESPACENAME
- donde D: / ORACL es la ruta de instalación de Oracle
El problema tiene que ver con las columnas CLOB. Parece que la herramienta imp no puede reescribir la instrucción create para usar otro tablespace.
Fuente: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:66890284723848
La solución es: crear el esquema a mano en el espacio de tabla correcto. Si no tiene un script para crear el esquema, puede crearlo usando el archivo indexFile = de la herramienta imp.
Tienes que deshabilitar todas las restricciones tu mismo, la herramienta imp Oracle no las desactivará.
Después de eso, puede importar los datos con el siguiente comando:
imp b / *** file = oracledump.dmp log = import.log fromuser = a touser = b statistics = none ignore = y
Nota: Todavía necesitaba las estadísticas = ninguna debido a otros errores.
información extra sobre la bomba de datos
A partir de Oracle 10, se mejora la importación / exportación: la herramienta de extracción de datos ([ http://www.oracle-base.com/articles/10g/OracleDataPump10g.php][1] )
Usando esto para volver a importar los datos en un nuevo tablespace:
Primero crea un directorio para el volcado temporal:
CREAR O REEMPLAZAR DIRECTORIO tempdump AS ''/ temp / tempdump /'';
LEYENDO LEER, ESCRIBIR EN DIRECTORIO tempdump A a;Exportar:
expdp a / * schemas = a directory = tempdump dumpfile = adump.dmp archivo de registro = adump.log
Importar:
impdp b / * directorio = tempdump archivo_de_paquete = adump.dmp archivo de registro = bdump.log REMAP_SCHEMA = a: b
Nota: los archivos de volcado se almacenan y se leen desde el disco del servidor, no desde el disco local (cliente)
La respuesta es difícil, pero factible:
La situación es: usuario A y tablespace X
- importe su archivo de volcado en una base de datos diferente (esto solo es necesario si necesita conservar una copia de la original)
renombrar tablespace
Alterar tablespace X renombrar a Y
crear un directorio para el comando expdp en derechos de concesión
- crear un volcado con expdp
- eliminar el usuario anterior y el antiguo tablespace ( Y )
- crear el nuevo tablespace ( Y )
- crear el nuevo usuario (con un nuevo nombre) - en este caso B - y otorgar derechos (también al directorio creado con el paso 3)
importar el volcado con impdp
impdp B / B directory = DIR dumpfile = DUMPFILE.dmp archivo de registro = LOGFILE.log REMAP_SCHEMA = A : B
y eso es...
Para mí, este trabajo está bien (Oracle Database 10g Express Edition Versión 10.2.0.1.0):
impdp B/B full=Y dumpfile=DUMP.dmp REMAP_TABLESPACE=OLD_TABLESPACE:USERS
Pero para una nueva restauración necesita un nuevo tablespace
PS Quizás sea útil http://www.oracle-base.com/articles/10g/OracleDataPump10g.php
Quiero mejorar para dos usuarios en diferentes tablespaces en diferentes servidores (bases de datos)
1. Primero cree un directorio para el volcado temporal para ambos servidores (bases de datos):
servidor 1:
CREATE OR REPLACE DIRECTORY tempdump AS ''/temp/old_datapump/'';
GRANT READ, WRITE ON DIRECTORY tempdump TO old_user;
servidor n. ° 2:
CREATE OR REPLACE DIRECTORY tempdump AS ''/temp/new_datapump/'';
GRANT READ, WRITE ON DIRECTORY tempdump TO new_user;
2. Exportar (servidor n. ° 1):
expdp tables=old_user.table directory=tempdump dumpfile=adump.dmp logfile=adump.log
3. Importar (servidor n. ° 2):
impdp directory=tempdump dumpfile=adump_table.dmp logfile=bdump_table.log
REMAP_TABLESPACE=old_tablespace:new_tablespace REMAP_SCHEMA=old_user:new_user
Si está utilizando Oracle 10g y datapump, puede usar la cláusula REMAP_TABLESPACE. ejemplo:
REMAP_TABLESPACE=A_TBLSPACE:NEW_TABLESPACE_GOES_HERE
Tienes un par de problemas aquí.
En primer lugar , las diferentes versiones de Oracle que está utilizando son la razón del error de estadísticas de la tabla. Tuve el mismo problema cuando algunas de nuestras bases de datos Oracle 10g se actualizaron a la versión 2, y algunas todavía estaban en la versión 1 y yo estaba intercambiando. Archivos DMP entre ellos.
La solución que funcionó para mí fue utilizar la misma versión de herramientas exp
y imp
para exportar e importar en las diferentes instancias de la base de datos. Esto fue más fácil de hacer utilizando la misma PC (u Oracle Server) para emitir todos los comandos de exportación e importación.
En segundo lugar , sospecho que está obteniendo el ORA-00959: tablespace ''A_TBLSPACE'' does not exist
porque está tratando de importar un archivo .DMP de una base de datos completa de Oracle a la base de datos 10g Express Edition (XE), que, de forma predeterminada, crea un único espacio de tabla predefinido llamado USERS
para usted.
Si ese es el caso, entonces deberá hacer lo siguiente ...
Con su archivo .DMP, cree un archivo SQL que contenga la estructura (tablas):
imp <xe_username>/<password>@XE file=<filename.dmp> indexfile=index.sql full=y
Abra el archivo de índice (index.sql) en un editor de texto que puede buscar y reemplazar en un archivo completo, y emita las siguientes instrucciones de búsqueda y reemplazo EN ORDEN (ignore las comillas simples .. ''):
Find: ''REM<space>'' Replace: <nothing>
Find: ''"<source_tablespace>"'' Replace: ''"USERS"''
Find: ''...'' Replace: ''REM ...''
Find: ''CONNECT'' Replace: ''REM CONNECT''
Guarde el archivo de índice y luego ejecútelo con su cuenta de Oracle Express Edition (creo que es mejor crear una nueva cuenta de usuario de XE en blanco, o soltar y volver a crear si estoy actualizando):
sqlplus <xe_username>/<password>@XE @index.sql
Finalmente ejecute el mismo archivo .DMP con el que creó el archivo de índice contra la misma cuenta para importar los datos, los procedimientos almacenados, las vistas, etc.
imp <xe_username>/<password>@XE file=<filename.dmp> fromuser=<original_username> touser=<xe_username> ignore=y
Puede obtener páginas de errores de Oracle al intentar crear ciertos objetos, como trabajos de base de datos, ya que Oracle intentará utilizar el mismo identificador de base de datos, que probablemente fallará ya que se encuentra en una base de datos diferente.
mi solución es usar la utilidad GSAR para reemplazar el nombre del espacio de tabla en el archivo DUMP. Cuando responda, asegúrese de que el tamaño del archivo de volcado no haya cambiado agregando espacios. P.ej
gsar -f -s"TSDAT_OV101" -r"USERS " rm_schema.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ ENABLE STORAGE IN ROW CHUNK 8192 RETENTION" -r" " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ LOGGING" -r" " rm_schema.n1.dump rm_schema.n.dump
gsar -f -s"TABLESPACE """USERS """ " -r" " rm_schema.n.dump rm_schema.n1.dump