Oracle DBLink 访问Lob 字段 ORA-22992 解决方法


这篇测试一下通过DBLink 访问含有Blob字段表的方法。

一.模拟问题

1.1  在实例1上操作:

创建含有blob 的测试表:

  1. /* Formatted on 2012/6/19 10:18:05 (QP5 v5.185.11230.41888) */  
  2. CREATE TABLE lob1  
  3. (  
  4.    line   NUMBER primary key,  
  5.    text   CLOB  
  6. );  
  7.   
  8. INSERT INTO lob1  
  9.    SELECT distinct line, text FROM all_source where rownum<500;  
  10.   
  11. SELECT segment_name,  
  12.          segment_type,  
  13.          tablespace_name,  
  14.          SUM (bytes) / 1024 / 1024 || 'M' AS "SIZE"  
  15.     FROM user_segments  
  16.    WHERE segment_name = 'LOB1'  
  17. GROUP BY segment_name, segment_type, tablespace_name;  

LOB 表的信息如下:

  1. SEGMENT_NAME    SEGMENT_TYPE       TABLESPACE_NAME                SIZE  
  2. --------------- ------------------ ------------------------------ ----------   
  3. LOB1            TABLE              SYSTEM                         9M  
  4.   
  5. SQL> set wrap off;  
  6. SQL> select * from lob1 where rownum=1;  
  7.   
  8.    LINE TEXT  
  9. ---------- ---------------------------------------------------------------------   
  10.    1 package STANDARD AUTHID CURRENT_USER is              -- care  

1.2 在实例2上操作

创建DBLINK:

  1. CREATE PUBLIC DATABASE LINK lob_link CONNECT TO dave IDENTIFIED BY dave  
  2. USING '(DESCRIPTION =  
  3.           (ADDRESS_LIST =  
  4.            (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.222)(PORT = 1521))  
  5.         )  
  6.            (CONNECT_DATA =  
  7.          (SERVICE_NAME = dave)  
  8.      )  
  9.   )';  
  10.   
  11. SQL> select * from v$version;  
  12.   
  13. BANNER  
  14. ----------------------------------------------------------------   
  15. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod  
  16. PL/SQL Release 10.2.0.1.0 - Production  
  17. CORE    10.2.0.1.0      Production  
  18. TNS for Linux: Version 10.2.0.1.0 - Production  
  19. NLSRTL Version 10.2.0.1.0 - Production  
  20.   
  21. SQL> select count(*) from lob1@lob_link;  
  22.   COUNT(*)  
  23. ----------   
  24.      58228  

这边查询总记录数正常。但是当我们查询具体LOB字段里的内容的时候,就会报错,如下:

  1. SQL> select * from lob1@lob_link where rownum=1;  
  2. ERROR:  
  3. ORA-22992: cannot use LOB locators selected from remote tables  
  4.   
  5. no rows selected  
  6.   
  7. [oracle@localhost ~]$ oerr ora 22992  
  8. 22992, 00000, "cannot use LOB locators selected from remote tables"  
  9. // *Cause:  A remote LOB column cannot be referenced.  
  10. // *Action:  Remove references to LOBs in remote tables.  
  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容