¿Hay alguna forma de copiar registros BLOB entre bases de datos en Oracle 10g?

Tenemos una tabla de producción que tiene millones de filas y contiene un campo BLOB, me gustaría copiar una selección más pequeña de estos registros en nuestra base de datos de desarrollo sin involucrar a un DBA si es posible. Probé el siguiente comando COPY pero recibí un CPY-0012: Datatype cannot be copied

COPY FROM user/password@prod_db TO user/password@dev_db -
INSERT TABLE_A (COL1, COL2, COL3, BLOB_COL) USING -
SELECT COL1, COL2, COL3, BLOB_COL -
FROM TABLE_A WHERE COL1='KEY' 

¿Hay alguna forma de copiar registros con un campo BLOB entre bases de datos a través de SQL?

preguntado el 16 de mayo de 11 a las 20:05

3 Respuestas

Desafortunadamente no puedes copiar BLOB valores usando el COPY mando.

Una alternativa es configurar un enlace DB en la base de datos de origen y ejecutar un SQL INSERT declaración:

CREATE DATABASE LINK link_to_prod CONNECT TO prod_user IDENTIFIED BY prod_password USING 'prod_db';

INSERT INTO TABLE_A@link_to_prod (COL1, COL2, COL3, BLOB_COL) SELECT COL1, COL2, COL3, BLOB_COL FROM TABLE_A

Respondido el 03 de enero de 17 a las 14:01

Gracias, eso es un fastidio. Debido a la auditoría interna, no tengo "permiso" para crear un enlace DB de una base de datos a otra, especialmente desde la producción a otra ubicación. Parece que necesito involucrar a un DBA pase lo que pase. - ProfesionalAmateur

Bomba de datos de Oracle (comenzó 10g +) admite el movimiento de datos BLOB.

contestado el 17 de mayo de 11 a las 02:05

Data Pump aún requiere que se cree un enlace DB y se especifique con el parámetro network_link si la copia debe realizarse entre servidores. - Datajam

@Datajam Ltd: Sí, creo que el enlace proporcionado aborda eso, ¿cuál es tu punto? - Ponis dios mio

Se me ocurrió una solución que me gusta: esta versión tiene una limitación de 4000 caracteres en el CLOB.

1) en la base de datos COPY TO:

create TABLE_A_TMP as 
select COL1, COL2, COL3, cast(BLOB_COL as varchar2(4000)) BLOB_COL
from TABLE_A
where 1=0;

2) luego ejecute el comando de copia

COPY FROM user/password@prod_db TO user/password@dev_db -
 INSERT TABLE_A_TMP (COL1, COL2, COL3, BLOB_COL) USING -
 SELECT COL1, COL2, COL3, cast(BLOB_COL as varchar2(4000)) -
 FROM TABLE_A WHERE COL1='KEY' 

3) en la base de datos COPY TO:

INSERT TABLE_A (COL1, COL2, COL3, BLOB_COL)
SELECT COL1, COL2, COL3, BLOB_COL
FROM TABLE_A_TMP

4) luego suelte la tabla tmp

Había estado luchando con esta limitación y esta solución me ha ayudado mucho.

Respondido el 07 de junio de 12 a las 06:06

¿Alguna vez ha tenido escenarios en los que necesita más de 4000 caracteres? Me gusta esta idea, pero en mi caso el campo de blobs puede ser bastante grande. - ProfesionalAmateur

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.