Oracle Database Links实现方法解析

数据库 Oracle 数据库运维
Oracle Database Links可以使用户可以通过一个数据库访问到另外一个远程数据库。本文将为大家介绍Oracle Database Links的实现。

什么是Database Links呢? 首先我们阐述下它的作用:使用户可以通过一个数据库访问到另外一个远程数据库。 那么Database Link是存储着远程数据库的连接信息。

如下图所示:

Database

用户Scott可以在本地数据库上查询远程数据库的emp表,我们可以在我们的本地数据库上建立一个别名(Synonym) emp,然后我们就可以直接通过select * from emp来查询远程数据库上的emp表,而无需通过select * from emp@hq.acme.com的方式来查询。

这个远程的数据库可以是任何Oracle支持的远程数据库:Oracle ,DB2, SQL Server, Taradata, MySQL…等等。 后面我还会介绍相关如何连接到非Oracle产品的数据库。

好了,知道了Database Link是什么,干什么用,Database Link的本质等,接下来我们介绍Database Link有哪几种连接方式的Link:

Link类型

说明

Connected user link

看这个类型的名称就可以判断出,用的是当前连接的用户的帐户及其密码来访问远程数据库的。所以这个类型就要求需要在远程数据库上有一个和本地帐户一样的username和password.

Fixed user link

这个类型是说使用指定的帐户和密码来访问远程数据库。所以只需指定的帐户能够有权限访问远程数据库就可以。

Current user link

需要用户连接到本地数据库的时候是全局用户的身份连接的。这样这个全局用户就可以使用指定帐户的上下文,而无需存储密码信息到link中。

上面是用来告诉Database Link,我们用用什么身份连接。

Database Link有以下类型: 

类型

说明

Private

来类型的Database Lin只能由这个Database Link的Owner才能使用它。

Public

在这个数据库里的所有用户均可使用该Database Link

Global

网络中的数据库中的用户均可使用该database link. 因为当Oracle 使用目录服务器的时候,它会在该目录下的所有数据库里都创建这个 global database link,并且统一控制。因此所有在目录下的数据库里的用户均可使用。

好了,让我们看看应该如何创建一个Database Link:

语法:create [type] database link

语句

说明

访问方式类型

连接类型

Create database link dblinkName using ‘NSName’;

创建一个database link ,通过使用网络服务名称创建。其中Database Link的名称为dbLinkName. 网络服务的名称为NSName.

Connected user link

Private

Create public database link dblinkName connect to CURRENT_USER using ‘NSName’;

创建一个database link ,通过使用网络服务名称创建。其中Database Link的名称为dbLinkName. 网络服务的名称为NSName.

Current user link

public

Create database link dblinkName dblinkName connect to username identified by password using ‘NSName’;

创建一个database link ,通过使用网络服务名称创建。其中Database Link的名称为dbLinkName. 网络服务的名称为NSName. 通过用户帐户username及其密码password来访问远程数据库。

Fixed user link

private

上面的地NSName的创建方式是需要在Oracle_home/Network/admin/tnsnames.ora里面配置。超出了本文的范围,我暂不做介绍。

如果不清楚如何配置NSName,那么我们可以按照以下方式写: 

Create database link dblinkName dblinkName connect

to username identified by password using ‘NSNName=

(

Address_List=

(

(Adress=(protocol=TCP)(host=RemoteServerName)(port=1521))

)

(Connect_Data=(services_Name))

)’

其中protocol 是使用得访问协议;RemoteServerName是远程数据库的服务器名称或者IP, port是远程服务器里Oracle监视的端口(可以使另一个Oracle 数据库或者 Oracle Gateway,关于Oracle Gateway会在后续讲解)。 Services_Name是远程服务器提供的服务名称。 例如:远程服务器RemoteA,安装了Oracle Database ,它的监听端口是1521, 并且数据库服务的名称是orcl 则以上的语句改写如下:

Create database link dblinkName dblinkName connect

to username identified by password using ‘NSNName=

(

Address_List=

(

(Adress=(protocol=TCP)(host=RemoteA)(port=1521))

)

(Connect_Data=(orcl))

)’

好了,以上简单的介绍了如何Oracle Database Link的类型和访问方式类型,及如何创建database link.

那么创建完,使用如下: (在访问权限满足的条件下)

Select * from remoteTableName@dblinkName; 

其中remoteTableName是要访问的远程数据库里的表的名称,dblinkName既是先前我们创建的数据库连接。 这样每次访问表,写起来都有点麻烦;而且对于普通用户,这样的接口可能我们并不提供,换句话说,我们可能只让用户知道这里有什么表或者视图就可以了。这个时候我们可以使用别名(synonym)来简化/隐藏接口,语法如下

CREATE [PUBLIC] synonym_name 

FOR [schema.]object_name[@database_link_name];

Synonym支持一下的对象:

◆Tables

◆Types

◆Views

◆Materialized views

◆Sequences

◆Procedures

◆Functions

◆Packages

这里不做过多的讲解,我们为先前我们创造的database link来创建一个synonym,代码如下:

Create public tableName for remoteTableName@dblinkName; 

创建完成后,我们就可以这样访问远程数据库里的表:

Select * from tableName; 

上述语句等价于

Select * from remoteTableName@dblinkName; 

【编辑推荐】

  1. Oracle数据库用户管理和数据导入导出
  2. Oracle性能优化借助分区技术实现
  3. Oracle并发处理机制的简单看法
  4. Oracle中被锁定的解决办法
  5. 让Oracle表列管理更加简单的三个方法
责任编辑:彭凡 来源: cnblogs
相关推荐

2010-04-13 17:10:59

Oracle Data

2011-10-20 13:37:46

OracleNoSQL数据库

2010-10-29 13:34:09

Oracle日志

2022-03-22 18:38:28

数据架构解析

2010-11-19 13:42:38

2009-12-29 17:47:36

Silverlight

2009-12-28 17:33:19

WPF视频音频

2010-11-19 13:14:21

Oracle删除归档日

2010-10-29 14:20:54

Oracle移动控制文

2009-08-07 09:35:40

Oracle发送Ema

2010-11-16 14:15:16

oracle标识列

2014-06-12 08:48:38

Oracle数据库

2011-08-09 14:54:01

OracleDATABASE LI

2011-11-21 11:19:19

Oracle NoSQ

2011-10-13 16:01:22

F5Oracle DataOracle WebL

2010-02-26 16:05:14

寄宿WCF服务

2010-08-03 11:29:09

Flex全屏

2010-01-26 10:10:51

Android模拟SD

2010-10-29 16:12:51

Oracle存储过程

2010-11-15 14:07:16

Oracle取固定记录
点赞
收藏

51CTO技术栈公众号