Есть ли способ скопировать BLOB-записи между базами данных в Oracle 10g? - PullRequest
6 голосов
/ 17 мая 2011

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

7 голосов
/ 17 мая 2011

К сожалению, вы не можете скопировать BLOB значения с помощью команды COPY.

Альтернативой является установка ссылки на БД в исходной базе данных и выполнение оператора 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
4 голосов
/ 17 мая 2011

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

1 голос
/ 06 июня 2012

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

1) в базе данных 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) затемвыполните команду копирования

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) в базе данных COPY TO:

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

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

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

...