我们有一个生产表,其中包含数百万行并包含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字段的记录?
答案 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表
我一直在努力解决这个问题,这个解决方案帮了我很多。