oracle dbLink创建实例

2025-04-06 18:10:48

工作中会经常遇到要访问或操作远程服务器数据库数据的问题,当本地应用程序无法直接连接远程数据库服务器时,oracle dblink提供了一种较为安全简单快捷地数据库访问方式。下面以oracle本地数据库A用户访问远程数据库B用户中的balance表为例来讲述下dblink创建过程。

工具/原料

PL/SQL Developer

方式1:在A用户里创建访问B用户的dblink连接

1、首先保证B用户蝮舟湛搁至少要拥有connect权限。A用户要通过dblink与B用户连接,则B用户要首先具备co荏鱿胫协nnect权限,否则是不会连接成功的(dba权限最高,当然具备connect权限)。我们可以在pl/sql中,找到Users,找到B用户然后右键“view/查看"来查看用户B(HANHUACBS_TEST_0228)所拥有的权限。如下图所示:

oracle dbLink创建实例
oracle dbLink创建实例
oracle dbLink创建实例

2、在本地创建访问远程B用户的本地网络服务。我们可以利用安装的oracle的Net Configuration Assistant工具来配置连接。操作步骤较多,我们这里不再一一展开,具体可以查看我的上一篇经验《oracle本地网络服务名配置》,如下图所示:

oracle dbLink创建实例

3、在A用户里创建dblink。从上一步配置网络服务中我们可以得到连接远程数据B用户的连接串,创建dblink的时候我们需要用到这个连接串、远程数据库的B用户名和密码。我们在pl/sql中执行下创建dblink语句即可,创建语句如下:

oracle dbLink创建实例

4、通过创建的dblink查询B用户中的balance表。上一步我们已经在A用户中创建了名称为"HANHUACBS_LINK"的dblink后,此时我们就可以在pl/sql中登录A用户通过dblink查询到B用户的balance表啦,查询语句如下:

oracle dbLink创建实例

5、创建同义词。从上一步我们可以看到A用户查询B用户的balance表的sql查询写起来比较翱务校肢复杂,因为里面要以@dblink方式才能查询成功。幸好oracle提供了同义词的概念,我们可以将"BALANCE@HANHUACBS_LINK"这个长串用一个更简单的词(如balance,只要不跟A用户中的表名冲突就行)来代替,这样我们就能像查询普通表一样的对balance表进行查询了,如下图所示:

oracle dbLink创建实例
oracle dbLink创建实例

方式2:在A用户里创建访问C用户的dblink连接

1、首先,我们来描啄醴荇侧述下C用户。C用户是新增的拥有B用户部分数据访问权限的远程用户。在方式1中我们看到,A用户想访问B用户的balance表,我们直接通过创建与B用户的颊俄岿髭dblink方式成功在A用户中查询到balance用户了,但是这样一来B用户中的所有表或视图A用户这下都可以通过上面创建的dblink来访问了,而这点是对于B用户来说是不安全的,很多情况下远程数据库是不会开放整个用户B来给A用户访问的,所以这里我们需要引入C用户的来解决这个问题。

2、在B用户中创建C用户并授权。既然需求是实现A用户能成功访问B用户的balance表,那么我们就在B用户中执行创建C用户并给C用户授权B用户balance表的相关权限,当然connect权限是必须要有的。C用户创建完成后我们同样可以以方式1里步骤1中讲的方式来查看C(HANHUA_CBS1)用户的权限,如下图所示:

oracle dbLink创建实例
oracle dbLink创建实例
oracle dbLink创建实例

3、在A用户中创建与C用户连接的dblink。上一步中我们已经看到C用户已经具备了connect权限和select(查询)、update(更新)、insert(插入)balance表的权限,这样我们就可以在A用户创建dblink了,创建语句同方式1中的,只不过我们现在要连接C用户,再来看下创建语句:

oracle dbLink创建实例

4、通过dblink查询balance表。创建完dblink(HANHUACBS_LINK1)后,我们还用同样方式查询下balance表,看到查询结果并非我们所期望的,如下图所示。

oracle dbLink创建实例

5、重新调整查询下balance表。上一步为什么会报表或视图不存在呢?原因是balance表并非C用户所拥有,而是B(HANHUACBS_TEST_0228)用户,所以这里我们需要在balance表前面添加所属用户B,这样才能查询成功,调整后的查询sql如下所示:

oracle dbLink创建实例

6、创建同义词。与方式1中最后一步一样,为了避免查询或操作B用户中balance标时写起来太复杂,我们同样需要创建同义词来代替复杂的长串,与方式1中的写法略有不同,创建同义词语句如下所示:

oracle dbLink创建实例

7、查询balance表。通过上一步创建的同义词balance1,我们又可以成功查询到B用户balance表的数据啦,如下图所示:

oracle dbLink创建实例
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢