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/dblinkConnected.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的常见问题