Oracle database link

1、dblink的概念

dblink主要是用于查询远程数据库上相应的数据,同时也可以采用select * into的方式采集远程库上的数据至本地,且创建好的dblink都是单向访问的。

2、dblink的分类

  • Connected user,使用此种类型的dblink,要求在远端有同样的用户,且用户密码一致。
***************
创建dblink用户
***************
SQL> create user dblink identified by dblink;

User created.

SQL> 
SQL> grant connect,resouce to dblink;
grant connect,resouce to dblink
              *
ERROR at line 1:
ORA-01919: role 'RESOUCE' does not exist

***************
创建database link
***************
SQL> grant connect,resource to dblink;

Grant succeeded.


SQL> create database link dblink_1 using 'ocm1';

Database link created.

***************
使用database link进行查询
***************
SQL> select sysdate from dual@dblink_1;
select sysdate from dual@dblink_1
                         *
ERROR at line 1:
ORA-01017: 用户名/口令无效; 登录被拒绝 ORA-02063:
preceding line from DBLINK_1

***************
在远端同样创建用户dblink
***************
SQL> create user dblink identified by dblink;

User created.

SQL> grant connect,resource to dblink;

Grant succeeded.


SQL> select sysdate from dual@dblink_1;

SYSDATE
------------------
04-JUL-19
  • Current global user【未测试】

current_user使用该选项是为了创建global类型的dblink。在分布式体系中存在多个数据库的话。如果想要在每一个数据库中都可以使用同样的名字来访问数据库a,那在每个数据库中都要创建一个到数据库a的db_link,太麻烦了。所以现在有这个选项。你只要创建一次。所有的数据库都可以使用这个db_link来访问了。要使用这个特性,必须有oracle nameserver或者ORACLE目录服务器。并且数据库a的参数global_names=true.具体我也没有创建过,没有这个环境。

  • private fixed user
SQL> create database link dblink3 connect to scott identified by scott using 'ocm1';

Database link created.

SQL> show user;
USER is "DBLINK"
SQL> select sysdate from dual@dblink3;

SYSDATE
------------------
04-JUL-19

*************
其他用户是不能使用这个dblink的
*************
SQL> show user;
USER is "DAYU"
SQL> select sysdate from dual@dblink3;
select sysdate from dual@dblink3
                         *
ERROR at line 1:
ORA-02019: connection description for remote database not found
  • public fixed user
SQL> grant CREATE PUBLIC DATABASE LINK to dblink;

Grant succeeded.

SQL> conn dblink/dblink
Connected.
SQL> create public database link dblink4 connect to scott identified by scott using  'ocm1';

Database link created.

**********************
其他用户也可以使用这个dblink
**********************
SQL> show user;
USER is "DAYU"
SQL> select sysdate from dual@dblink4;

SYSDATE
------------------
04-JUL-19
  • Shared public fixed user【未测试】

使用shared方式的 database link是数据库会限制到远程数据库的连接的数量,这样以避免过多的连接对远程数据库造成太大的压力。在使用shared database link的时候,到database link的连接会在连接以后与本地连接断开,为防止未授权的session使用此链接而要求在创建shared database link的时候必须要指定database link_authentication。

3、dblink的常见问题

 

posted @ 2019-07-04 11:10  dayu.liu  阅读(617)  评论(0)    收藏  举报