dblink访问远程数据库

dblink 访问远程数据库

当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建dblink.

  创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库:

  select * from user_sys_privs t

  where t.privilege like upper('%link%');

  1 SYS CREATE DATABASE LINK NO

  2 SYS DROP PUBLIC DATABASE LINK NO

  3 SYS CREATE PUBLIC DATABASE LINK NO

  可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。

  在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK权限授予给你的用户

  grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;

  然后以scott用户登录本地数据库

  1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。

  create public database link

  to_bylw connect to scott identified by tiger using 'bylw';

  其中to_bylw是你创建的dblink名字,bylw是远程数据库的实例名,scott/tiger是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库'bylw'中scott.tb_test表,sql语句如下所示

  select * from scott.tb_test@to_bylw;

  2.创建dblink的第二种方式,是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库,

  create database link to_test

  connect to scott identified by tiger

  using '(DESCRIPTION =

  (ADDRESS_LIST =

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

  )

  (CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = bylw)

  )

  )';

  第二种是把第一种配置在tnsnames.ora文件中的信息,直接放在创建dblink语句后面。第一种情况tnsnames.ora文件中信息如下:

  bylw =

  (DESCRIPTION =

  (ADDRESS_LIST =

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

  )

  (CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = bylw)

  )

  )

选择使用第二种更容易成功。

1、  在本地(oracle和phd主服务器)建立一个Oracle的客户端连接sxyuniformance,用于连接远程端机器的oracle数据库。

在远程端机器的数据库中,建立一个表用于测试,创建RTDB_TAG表。

create table uniformance.RTDB_TAG

(

          NAME VARCHAR2(30) not null,

          DES VARCHAR2(60),

          UNIT VARCHAR2(15),

          HI   VARCHAR2(20),

          LO   VARCHAR2(10)

)

在其中增加一条记录:

insert into uniformance.RTDB_TAG (NAME, DES, UNIT, HI, LO)

values ('TAG1', 'TAG TEST1', 'M', '10000', '-100');

2、  在本地oralce登录PLSQL,创建远程数据库端的连接dblink

create database link dblink connect to uniformance identified by  uniformance using ‘sxyuniformance’;

dblink:database link的名称

uniformance:远程端oracle数据库的登录名

uniformance:远程端oracle数据库的登录密码

sxyuniformance:本地建立的连接到远程端的服务名称

3、  测试连接是否成功

   select * from dual@dblink

   如果有结果返回则表示连接成功了。

4、在本地数据库中查询已经建立的远程连接名:

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

    OWNER                    OBJECT_NAME

   Public                                 dblink

5、至此,在本地oracle创建一个DBLINK,用于连接到远程端的数据库上,

在本地的数据库中查询远程端数据库中表的信息:

SQL> select * from RTDB_TAG@dblink

查询结果测试是否成功

 6.----如果 ssh  框架开发过程中要用到另一个 oracle 数据库中的表,但是 hibernate 不能直接对 dblink 中的表进行映射导致无法使用 hibernate 创建 pojo 类,解决的办法是在本地数据库创建 dblink 数据库表的 synonymous,再利用 hibernate对此synonymous 进行映射就可以建立映射关系了,需要注意的是创建的 synonymous 不要跟本地表同名这样 hibernate 将会映射本地表了。

猜你喜欢

转载自joezheng123.iteye.com/blog/1831179