Есть ли способ скопировать записи BLOB между базами данных в Oracle 10g?

У нас есть производственная таблица, в которой есть миллионы строк и содержит поле BLOB, я хотел бы скопировать меньший выбор этих записей в нашу базу данных разработки, не привлекая DBA, если это возможно. Я попробовал следующую команду копирования, но получил 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' 

есть ли способ скопировать записи с полем BLOB между базами данных через SQL?

3 ответов


к сожалению вы не можете копировать BLOB значений с помощью .

альтернативой является настройка ссылки DB на исходную базу данных и выполнение SQL INSERT о себе:

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

насос данных Oracle (запущен 10g+) поддерживает перемещение данных BLOB.


Я придумал решение, которое мне нравится-эта версия имеет ограничение 4000 символов на CLOB.

1) на копии в базу данных:

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

2) затем запустите команду copy

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) на копии в базу данных:

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

4) затем отбросьте таблицу tmp

Я боролась с этим ограничением, и это решение помогло мне много.