database link概述
database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。
database link分类
1.PrivateOwner:创建database link的user拥有该database link
描述:在本地数据库的特定的schema下建立的database link。只有建立该database link的schema的session能使用这个database link来访问远程的数据库。
同时也只有Owner能删除它自己的private database link。
2.Public
Owner:PUBLIC
描述:Public的database link是数据库级的,本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link来访问相应的远程数据库。
3.Global
Owner:PUBLIC
描述:Global的database link是网络级的,当Oracle网络使用目录服务器时,目录服务器会自动为网络中的每个Oracle数据库创建和管理Global database link(作为网络服务名)。
任何数据库中的用户和pl/sql子程序都可以使用全局链接访问相应的远程数据库中的对象。
注意:在Oracle数据库的早期版本中,一个Global database link引用了一个database link,该链接是在Oracle名称服务器上注册的。
Oracle名称服务器的使用已经被弃用。在这个文档中,全局数据库链接指的是来自目录服务器的网络服务名的使用。
创建dblink所需的权限
CREATEDATABASE LINK 本地数据库 创建一个私有的DBLinkCREATEPUBLIC DATABASE LINK 本地数据库 创建一个共有的DBLink
CREATESESSION 远程数据库 创建一个任意类型的DBLink
database link创建语法
CREATE [SHARED][PUBLIC] database link link_name
[CONNECT TO [user][current_user] IDENTIFIED BY password]
[AUTHENTICATED BY user IDENTIFIED BY password]
[USING 'connect_string']
简要说明:
connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串,也可以在创建dblink的时候直接指定。
username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库
使用实例:
创建私有的DBLink
create database link dblink_name
connect to username identified by "password"
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.1.18 )(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl)))';
创建公共的DBLink
create public database link dblink_name
connect to username identified by "password"
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST = 192.168.1.18 )(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME = orcl)))';
database link的使用
最简单的用法
SELECT* FROM table_name@dblink_name;
包装dblink_name名称
CREATE SYNONYM table_name FOR table_name@dblink_name;
SELECT * FROM table_name;
建立一个视图来封装
CREATE VIEW table_name AS SELECT * FROM table_name@dblink_name;
database link删除
删除public类型的database link
DROP PUBLIC database link dblink_name;
删除非public类型的database link
注意:只有owner自己能删除自己的非public类型database link
DROP database link dblink_name;
查询database link
select * from dba_db_links;