有没有办法在Oracle 10g中的数据库之间复制BLOB记录?

时间:2011-05-16 20:06:37

标签: sql oracle oracle10g blob

我们有一个生产表,其中包含数百万行并包含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' 

有没有办法通过SQL在数据库之间复制带有BLOB字段的记录?

3 个答案:

答案 0 :(得分:7)

很遗憾,您无法使用BLOB命令复制COPY值。

另一种方法是在源数据库上设置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

答案 1 :(得分:4)

Oracle's Data Pump (started 10g+)支持移动BLOB数据。

答案 2 :(得分:1)

我想出了一个我喜欢的解决方案 - 这个版本在CLOB上有4000个字符的限制。

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表

我一直在努力解决这个问题,这个解决方案帮了我很多。