【DB.Oracle】数据库链接 —— Database Link

database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表及执行远程程序。在任何分布式环境里,database都是必要的。另外要注意的是database link是单向的连接。

在创建database link的时候,Oracle在数据字典中保存相关的database link的信息,在使用database link的时候,Oracle通过Oracle Net用用户预先定义好的连接信息访问相应的远程数据库以完成相应的工作。


建立database link之前需要确认的事项

  • 确认从local database到remote database的网络连接是正常的,tns ping要能成功;
  • 确认在remote database上面有相应的访问权限;


database link分类

类型

Owner

描述

PRIVATE

创建database link的user拥有该database link

在本地数据库的特定的schema下建立的database link。只有建立该database link的schema的session能使用这个database link来访问远程的数据库。同时也只有Owner能删除它自己的private database link

PUBLIC

Owner是PUBLIC

Public的database link是数据库级的,本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link来访问相应的远程数据库。

GLOBAL

Owner是PUBLIC

 

创建database link所需的权限

Privilege

Database

Required For

CREATE DATABASE LINK

LOCAL

Creation of a private database link

CREATE PUBLIC DATABASE LINK

LOCAL

Creation of a public database link

CREATE SESSION

SESSION

Creation of any type of database link


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']

  • 权限:

创建数据库链接的账号必须有CREATE DATABASE LINK 或CREATE PUBLIC DATABASE LINK的系统权限;用来登陆到远程数据库的账号必须有CREATE SESSION权限;这两种权限都包含在CONNECT角色中。


  • link_name:

当source端的数据库GLOBAL_NAME = TRUE时,link_name必须与远程数据库的全局数据库名相同;其余可以任意命名。


  • current_user:

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


  • user, password:

远程数据库的用户名,口令。


  • connect_string:

链接字符串;

这个字符串及可以在$ORACLE_HOME/NETWORK/ADMIN/tnsname.ora 中指定,如:

NPTEST01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.193.136)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = nptest01)
)

然后在USING中指定,USING 'TEST01'; 也可以直接写在USING中,如:

USING 'NPTEST01 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.193.136)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = nptest01)
)
)'

  • SHARED选项:

  • 创建一个共享的数据库链接。

    • PUBLIC选项:

    不指定,默认建立一个PRIVATE的database link;指定PUBLIC,创建一个公共链接;

    • AUTHENTICATED选项:

    不指定,默认采取Connected User的验证方法;

    如果前面的选项是CONNECT TO CURRENT_USER,采取CURRENT_USER验证方式;

    如果前面采用的是CONNECT TO user_name IDENTIFIED BY password,采取Fixed User验证方式;


    database link使用示例

    示例1:最简单的用法

    SELECT * FROM table_name@database_link_name

    示例2:创建一个同义词,隐藏database link name

    CREATE SYNONYM table_name FOR table_name@database_link_name;
    SELECT * FROM table_name;

    示例3:删除PUBLIC database link

    DROP PUBLIC DATABASE LINK link_name;

    示例4:删除非PUBLIC database link

    只有owner自己才能删除自己的非PUBLIC类型的database link

    DROP DATABASE LINK link_name;













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值