分布式Oracle的database link --建立数据库间的通迅通道

时间:2022-02-20 16:28:45

分布式Oracle的database link --建立数据库间的通迅通道

url:http://hi.baidu.com/lgh_boffin/blog/item/2ff4f33872b4eb2a97ddd886.html

 

2009年07月26日 星期日 22:24

 

Oracle的database link   --建立数据库间的通迅通道

 

 

数据库链接定义从一个Oracle数据库到另一个数据库的单行通信通道。
   
    建立链接前要先有到远程数据库的命名服务(连接字符串),就是tnsnames.ora中描述的那个,如远程数据库SID名 'ora10g'
    [测试] cmd:tnsping ora10g 
    Attemping to contact(...) OK (810 msec)   // 说明对远程数据库ora10g可访问

   
   创建数据库链接的语法分为 public链接 和 私有链接;

   public链接创建语法:
    CREATE PUBLIC DATABASE LINK org10g USING 'org10g';
    其中 org10g 必须是远程数据库的全局名(SID), ' org10g ' 就是到远程的连接字符串

     全局名可以通过远程登陆数据库执行SQL:

SELECT * FROM global_name@ora10g 查看到.

 

    删除public link :
   drop public database link linkname;   
       
    [注意]登陆名口令就是当前登陆本机的用户名和口令。也就是如果你用的是public链接,那么在远程就要有一个和本机相同的用户/口令才行。如:你以aa/111登录本机,然后执行
    SELECT * FROM bb@ora10g;
    那么对远程数据bb的访问用户为aa口令为11
    也就是在本机和远程机上都有用户aa口令都为11才能执行成功!
   
    私有链接创建语法:
    CREATE DATABASE LINK ora10g CONNECT TO system IDENTIFIED BY aa;
    这就建立了system的私有链接。


    私有链接和public链接的差别就是登录名口令的限制。


    即你不管用什么用户登录本机,执行
    SELECT * FROM bb@ora10g;
    访问远程机数据bb的用户和口令都为system/aa
   
    建好的数据链接放在系统表SYS.link$表中

    删除私有 link :
   drop database link linkname;  

    或者: 当然,直接删除SYS.link$表中的记录一样可行。
 

 

 

 

 

oracle创建db link访问远程数据库中LOB表 url:http://hi.baidu.com/chenchendf/blog/item/e0ba57a7f9590790d043586a.html 2008-06-27 16:51

创建语句:

create database link REMOTE.US.ORACLE.COM
connect to REMOTEUSER
identified by "<pwd>"
using 'REMOTEDB';

信息:
Link Owner: LOCALUSER
Link Name: REMOTE.US.ORACLE.COM
Host : REMOTEDB
User Name :REMOTEUSER

查询远程数据库用户表的内容:
select * from tablename@REMOTE.US.ORACLE.COM

 

ora-22992 通过DBLINK 访问远程CLOB表问题(转载)

在本地用select语句访问远程,如果远程表有CLOB字段的话则会有错:ora-22992;
如果真的想看到clob字段的内容的话就得在本地建立一个表,用下面两条语句:
我刚才试验insert into table select * from remote table成功
remote table含有CLOB
总结:在我的环境中成功
(1)create table aaa select * from remote table
(2)insert into table select * from remote table


不过网上也有以下说法,虽然有错,不过也是一种方法,

通过临时表从DBLink中获取Blob对象2006-12-05 20:37做系统集成时,通过Database Link共享数据是不错的选择。不过真正使用DBLink时却碰到一个不小的问题:从远程数据库上查询Blob字段时总返回ORA-22992错误,如下:

select blobcolumn from remoteTable
@dl_remote;

ORA-22992: 无法使用从远程表选择的 LOB 定位器

查找了一下解决方法,有人提出了采用物化视图可以解决这个问题。物化视图唯一的缺陷在于同步机制的问题,如果同步时间设置过短,则占用大量的系统资源,给服务器带来极大的压力;如果设置时间过长,前台用户不可接受。

后来还是AskTom给出了极好的解决方案:使用全局临时表。

SQL
> create global temporary table foo

   2  
(

  
3     X BLOB

   4  
)

  
5   on commit delete rows;

Table created

SQL
> insert into foo select blobcolumn from remoteTable@dl_remote where rownum = 1;

1 row inserted

SQL
>

插入本地临时表之后,在本地的操作就没有任何问题了。

至于为什么临时表可以直接插入,而永久表为什么不能插入,本人未做具体研究?/