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