我有两个数据库,一个用于数据加载,另一个用于数据监控器,我需要使用 dblink 显示来自数据加载服务器的 blob 内容数据,我尝试过但无法执行,有任何选项可以下载 blob使用 dblink 将内容从一台服务器传输到另一台服务器。
Oracle中普通的select语句
只要您在表之间移动,而不仅仅是选择,就可以通过数据库链接移动 LOB。这避免了使用临时 LOB 定位器,而这正是限制所在。
因此,您可以通过多种方式通过数据库链接选择 LOB(CLOB 或 BLOB)内容:
使用 CTAS (
CREATE TABLE AS SELECT ...
) 提取数据并将其写入本地。在内部,通过数据移动,Oracle 能够使用远程 LOB 定位器,尽管典型的错误消息与此相反。
在现有本地表上使用 MERGE 或 UPDATE 来更新具有远程 LOB 的列。
如果您的 CLOB 是 < 4KB or BLOB < 2KB, (using remote
dbms_lob
调用测试并对其进行子串dbms_lob.getlength@dblink(...)
、dbms_lob.substr@dblink(...)
),那么您可以 将其转换为 varchar2(4000) 或 raw(2000),这在任何普通 SQL 中都会非常快。例如:
SELECT CAST(dbms_lob.substr@dblink(myblobcol,2000,1) AS raw(2000))
FROM remotetable@dblink
WHERE dbms_lob.getlength@dblink(myblobcol) <= 2000
显然这对超大值没有帮助,但加速通过链接进行大量 LOB 传输的一种技术是首先将没有实际 LOB 但带有
ROWID
的数据提取到临时表中,然后提取小 LOB 值这样,更新临时表并清除这些行的 ROWID,然后合并所有剩余的 ROWID
,拉出完整的 LOB,这将只是超大的 LOB。由于复杂性可能不值得通常使用此技术,但在体积特别高且大多数值小于 varchar2/raw
限制的情况下,它可能很有用。