日期:2014-05-16  浏览次数:20426 次

oracle dblink使用
orcle dblink 的使用
两台不同的数据库服务器,从一台数据库服务器的一个用户读取另一台数据库服务器下的某个用户的数据,这个时候可以使用dblink。



例如:数据库服务器A,数据库服务器B,数据库客户端C;通过客户端C连到A,在A上操作访问B。



1、在数据库客户端C的tnsnames中配置数据库服务器A的服务



LMISDX_LOCAL=

(DEscrīptION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = LMISdx)

   )

)



  2、这样就可以通过客户端访问到数据库A的用户



  3、在数据库服务器A的tnsnames中配置数据库服务器B的服务



LMISSD=

(DEscrīptION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.123)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = LMIS)

   )

)



4.通过客户端C访问到数据库A的用户,在A上创建数据库链接

-- Create database link

create public database link “LMIS_SDTEST”

connect to LMIS_SDTEST identified by “LMIS_SDTEST”

using 'LMISSD';



   Create DATABASE LINK数据库链接名CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;

注意:oracle 11g一定要将数据库链接名、用户名、密码用“”,否则会报错。
      数据库链接名(link名称)一定要和tnsname里面一致


5、查询远端数据库里的表(通过客户端C登陆到数据库服务器A访问数据库B)


  Select …… FROM 表名@数据库链接名;

    SELECT * FROM SPKFK@LMIS_SDTEST



注意:创建是很简单,但是在使用中后台却出现锁,查看这个锁的方法可以去console中看到或者查询数据库。每次使用dblink查询的时候,均会与远程数据库创建一个连接,
dblink应该不会自动释放这个连接,如果是大量使用dblink查询,会造成web项目的连接数不够,导致系统无法正常运行,导致系统无正常运行。

创建oracle dblink

数据库之间的链接建立在DATABASE LINK上。要创建一个DB LINK,必须先
在每个数据库服务器上设置链接字符串。

1、  链接字符串即服务名,首先在本地配置一个服务名,地址指向远程的数据库地址,服务名取为将来你要使用的数据库链名:

2、  创建数据库链接,
进入系统管理员SQL>操作符下,运行命令:

SQL>create public database link beijing connect to scott identified by tiger using 'tobeijing';
命令说明:
CREATE PUBLIC DATABASE LINK 数据库链接名 CONNECT TO 用户名 IDENTIFIED BY 密码 USING ‘本地配置的数据的实例名’;
如果建立成功,会提示:Database link created.

则创建了一个以scott用户和北京数据库的链接beijing,我们查询北京的scott数据:

SQL>select * from emp@beijing;

这样就可以把深圳和北京scott用户的数据做成一个整体来处理。

3、建立同义词,为了使有关分布式操作更透明,ORACLE数据库里有同义词的对象synonym

SQL>create synonym bjscottemp for emp@beijing;

于是就可以用bjscottemp来替代带@符号的分布式链接操作emp@beijing。

4、查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:

SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';


5、查看数据库连接
sql> select owner, db_link from dba_db_links;
ower    db_link
public   TEST.US.ORACLE.COM

6、删除数据库连接
先从第5步中查看数据库连接,取得其db_link的名称
sql>drop public database link TEST.US.ORACLE.COM
数据库连接巳丢弃


一般创建(Database Link Name 和 Service Name 一致)
A: 先在 Server 端的tnsname.ora 中增加要访问的 database的连接字符串格式如下:
NICK = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = Ip Address)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = nick) ) )
B: 再用SQL /或OEM 创建 为某用户的DBlink  
CREATE DATABASE LINK "nick" CONNECT TO "BQY" IDENTIFIED BY "********" USING 'nick'     

特殊创建(Database Link Name 和Service Name 不一致)
A: 首先要在Server 端的 tnsname.ora 中增加要访问的 database的连接字符串格式如下
nickc = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IpAddress)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = nick) ) )  
B: 要将 Global_name=false
(如果Global_name =true 则在使用创建好的 Databaselink 时会出现如下错误提示)
/* ORA-02085 database link strin conects to strings Cause: The database link attempted