Oracle Apex:如何将含Blob列的表从Workspace 1复制到Workspace 2
复制带Blob列的表到另一个Workspace的方法
方法一:用数据库自带的导出/导入工具(以SQL Server为例)
- 在Workspace1里打开导出向导,选中目标表,务必勾选包含Blob列的选项,保证二进制数据被完整导出。
- 导出格式选支持Blob的类型,比如
bacpac(Azure SQL)或完整备份文件,别用CSV这类不兼容二进制数据的格式。 - 切换到Workspace2,用导入向导加载导出的文件,完成表结构和Blob数据的同步。
方法二:SQL脚本+批量Blob导出导入
- 先导表结构:在Workspace1生成目标表的创建脚本,到Workspace2执行脚本建空表。
- 导出Blob数据:用
bcp命令把Blob列内容存到本地,示例:bcp "SELECT BlobColumn FROM Workspace1.dbo.TargetTable WHERE Id = @Id" queryout "C:\Blobs\file.pdf" -S Server1 -d Workspace1 -U username -P password -n - 导入Blob数据:在Workspace2用INSERT语句把本地文件写入新表,示例:
INSERT INTO Workspace2.dbo.TargetTable (Id, BlobColumn) VALUES (1, (SELECT * FROM OPENROWSET(BULK 'C:\Blobs\file.pdf', SINGLE_BLOB) AS BlobData)) - 数据量大的话,用循环或游标批量处理每一行的Blob数据。
方法三:脚本语言批量处理(以Python为例)
- 用数据库连接库(比如pyodbc)分别连Workspace1和Workspace2。
- 查询源表所有数据(包含Blob列),逐行插入到目标表,确保二进制数据正确传递:
import pyodbc # 连接源Workspace src_conn = pyodbc.connect('DRIVER={SQL Server};SERVER=Server1;DATABASE=Workspace1;UID=user;PWD=pass') src_cursor = src_conn.cursor() # 连接目标Workspace dest_conn = pyodbc.connect('DRIVER={SQL Server};SERVER=Server2;DATABASE=Workspace2;UID=user;PWD=pass') dest_cursor = dest_conn.cursor() # 查询源表数据 src_cursor.execute("SELECT Id, BlobColumn, OtherColumns FROM TargetTable") rows = src_cursor.fetchall() # 插入目标表 for row in rows: dest_cursor.execute("INSERT INTO TargetTable (Id, BlobColumn, OtherColumns) VALUES (?, ?, ?)", row.Id, row.BlobColumn, row.OtherColumns) dest_conn.commit() # 关闭连接 src_cursor.close() src_conn.close() dest_cursor.close() dest_conn.close() - Blob数据过大时,分批次处理避免内存溢出。
内容的提问来源于stack exchange,提问作者JB999
相关产品推荐
相关产品推荐

