我们如何使用 dblink 从一台服务器到另一台服务器选择 blob 数据

问题描述 投票:0回答:1

我有两个数据库,一个用于数据加载,另一个用于数据监控器,我需要使用 dblink 显示来自数据加载服务器的 blob 内容数据,我尝试过但无法执行,有任何选项可以下载 blob使用 dblink 将内容从一台服务器传输到另一台服务器。

Oracle中普通的select语句

sql oracle dblink
1个回答
0
投票

只要您在表之间移动,而不仅仅是选择,就可以通过数据库链接移动 LOB。这避免了使用临时 LOB 定位器,而这正是限制所在。

因此,您可以通过多种方式通过数据库链接选择 LOB(CLOB 或 BLOB)内容:

  1. 使用 CTAS (

    CREATE TABLE AS SELECT ...
    ) 提取数据并将其写入本地。在内部,通过数据移动,Oracle 能够使用远程 LOB 定位器,尽管典型的错误消息与此相反。

  2. 在现有本地表上使用 MERGE 或 UPDATE 来更新具有远程 LOB 的列。

  3. 如果您的 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
    限制的情况下,它可能很有用。

© www.soinside.com 2019 - 2024. All rights reserved.