怎么通过database links

怎么通过database links,第1张

通过database links的方法具体如下:

假设DB1、DB2两个数据库,现在要在DB1中使用DB2的表,那么在DB1数据库中创建db link的命令如下:

一、创建database link

-- Create database link

create database link db_1

connect to db_2_user identified by "db_2_user_password"

using 'DEMO =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = db_2_ip)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = db_2_server)

)

)';

其中,

db_1是db link的名称;

db_2_user是DB2这台机器上源数据库的用户名;

db_2_user_password是密码;

db_2_ip是DB2数据库地址,

db_2_server是DB2数据库服务名。

这样就可以,如果要访问B数据库的test表,可以“表名@数据链接名”这样用,如:

select from test@db_1;

二、使用

注意点:如果在DB1的oracle clinet上通过database links访问DB2的表,需要在DB1的服务器的tnsnames正确指向DB2。假设DB_LINK是想从DB1连接到DB2,需要配置DB1机器上的tnsnames正确指向DB2。如果确认DB1上的tnsnames中配置正确;那么再确认正确的tnsnames被使用了,也就是说DB1机器上系统的环境变量指向哪个oracle的bin目录,使用的是不是配置正确的那个tnsnames文件。两个tnsnames正确配置完成后就可以使用了。

SQL> CREATE DATABASE LINK mydblink

2 CONNECT TO test IDENTIFIED BY test123

3 USING '(DESCRIPTION =

4 (ADDRESS_LIST =

5 (ADDRESS = (PROTOCOL = TCP)(HOST = 1921681210)(PORT = 1521)))

6 (CONNECT_DATA = (SERVICE_NAME = orcl)

7 )

8 )';

Database link created

SQL> select count(1) from user_tables@mydblink;

COUNT(1)

----------

6

注:

如果创建全局dblink,必须使用systm或sys用户,在database前加public。

create synonym table_name for user table_name;

其中第一个user_table和第二个user_table可以不一样

此外如果要创建一个远程的数据库上的某张表的同义词 需要先创建一个Database Link(数据库连接)来扩展访问 然后在使用如下语句创建数据库同义词 create synonym table_name for table_name@DB_Link;

当然 你可能需要在user用户中给当前用户(user )授权 grant select/delete/update on user

创建好同义词之后 你可以对它进行DML(insert update delete) *** 作 当然select语句时肯定支持的 删除同义词 drop synonym table_name;这里的table_name是指同义词的表名

同义词拥有如下好处 节省大量的数据库空间 对不同用户的 *** 作同一张表没有多少差别 扩展的数据库的使用范围 能够在不同的数据库用户之间实现无缝交互 同义词可以创建在不同一个数据库服务器上 通过网络实现连接

查看所有同义词

select from dba_synonyms

在oracle中创建同义词我们都知道 在oracle中对用户的管理是使用权限的方式来管理的 也就是说 如果我们想使用数据库 我们就必须得有权限 但是如果是别人将权限授予了我们 我们也是能对数据库进行 *** 作的 但是我们必须要已授权的表的名称前键入该表所有者的名称 所以这就是比较麻烦的 遇到这种情况 我们该怎么办呢?创建个同义词吧!这样我们就可以直接使用同义词来使用表了

创建同义词的具体语法是 create [public] SYNONYM synooym for object;其中synooym表示要创建的同义词的名称 object表示表 视图 序列等我们要创建同义词的对象的名称

CREATE PUBLIC SYNONYM public_emp FOR jward emp; jward 用户名

删除同义词

使用DROP SYNONYM语句删除不再需要的同义词 要想删除私有同义词 就省略 PUBLIC 关键字要想删除公共同义词就要包括PUBLIC 关键字

DROP SYNONYM emp; 删除名为emp 的私有同义词

lishixinzhi/Article/program/Oracle/201311/18310

1、优点:1,方便解耦,简化开发:通过spring提供的IOC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免原编码所造成过度程序耦合。有了spring,用户不再为了单列模式类,属性文件解析等这些很底层的需求编写代码,可以专注于上层的应用的2,AOP编程的支持:通过spring提供的AOP功能方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付spring的AOP支持允许将一些通用任务如安全,事务,日志等进行集中式管理,从而提供了更好的复用3,声明事务的支持:在spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明方式灵活地进行事务的管理,提高开发效率和质量4,方便程序的测试:可以用非容器依赖编程方式进行几乎所有的测试工作,在spring里,测试不在是昂贵的 *** 作,而是随手课做的事情没列入spring对junit4支持,可以通过注解方便的测试spring程序5,方便集成各种框架:spring不排斥各种优秀的开源框架,相反,spring可以降低各种框架的使用难度,spring提供了对各种哟毓秀框架

2、缺点:-从应用层面来说暂时没有缺点-因为简化开发,如果需要深入给底层去了解就非常困难(上层使用的越简单,底层的封装就越复杂)-源码的缺点:由于spring大并且全(要集成很多框架,提供非常多的扩展点)代码非常庞大,对于学习源码具有一定困难

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

这个远程的数据库可以是任何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/tnsnamesora里面配置。超出了本文的范围,我暂不做介绍。

如果不清楚如何配置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;

以上就是关于怎么通过database links全部的内容,包括:怎么通过database links、oracle中的database link如何使用、Oracle中创建同义词等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9493592.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存