Oracle DBLINK 简单使用

         oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入、修改、删除等操作

         首先了解下环境:在tnsnames.ora中配置两个数据库别名:orcl(用户名:wangyong 密码:1988)、orcl2(用户名:wangyong 密码:123456),在orcl中     创建database link来访问orcl2

        

       

 第一步:赋予权限

         在创建database link之前,我们需要判断,登陆的用户是否具备创建database link 的权限,所以我们执行以下的语句(用wangyong用户登陆orcl):

-- 查看wangyong用户是否具备创建database link 权限

select * from user_sys_privs where privilege like upper('%DATABASE LINK%') AND USERNAME='WANGYONG';

        如果查询有返回行,则表示具备创建database link权限,否则,则需要使用sys登陆orcl为WANGYONG用户赋予创建权限

-- 给wangyong用户授予创建dblink的权限

grant create public database link to wangyong;

         此时,再执行上面查看是否具备权限的sql语句,会发现有返回行,表示,WANGYONG这个用户已经具备创建database link的权限

 

 第二步;创建database link

         我所了解到的创建方式有两种:1)通过pl/sql developer图形化创建、2)通过sqlplus中的sql语句创建,依次来看

         1)pl/sql developer 图形化创建

   

     填写完成后点击“Apply”按钮即可创建成功。

 

         2)sql语句创建

-- 注意一点,如果密码是数字开头,用“”括起来

create public database link TESTLINK2 connect to WANGYONG identified by "123456" USING 'ORCL21'

       这样,就完成了简单database简单的创建

 

   第三步:操作

          首先,我们需要在ORCL2库中新建一张表,并插入部分数据,如下图:

           

 

        现在,我们通过database link 在orcl中访问这张属于orcl2库中WANGYONG的表COMPANY

          

     从截图中可以看到,在ORCL中可以成功访问到ORCL2中用户WANGYONG的表

     下面,利用同样的方式,进行插入,修改,删除操作,依次看截图,每一次操作后均执行查询语句,可对比执行效果:

     1)插入

     

  2)修改

    

3)删除

    

     至此,简单的dblink操作就可以了,对于上面的链接字符串,还可以创建同义词代替,会稍微省点事

-- 创建同义词
create synonym TESTSYNONYM FOR company@TESTLINK1;

     那么上面的查询、插入、修改、删除中可直接用WYSYNONYM代替company@TESTLINK1即可,例如查询语句可改成如下方式(插入,修改,删除类似):

-- 查询ORCL2中WANGYONG用户的表COMPANY

SELECT * FROM TESTSYNONYM order by id

 

DBLINK详解

1.创建dblink语法:

CREATE [PUBLIC] DATABASE LINK link 

CONNECT TO username IDENTIFIED BY password

USING ‘connectstring’

说明:

1) 权限:创建 数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。

2)link :  当GLOBAL_NAME=TRUE时,link名必须与远程数据库的全局数据库名global_name)相同;否则,可以任意命名。

3)connectstring:连接字符串,tnsnames.ora中定义远程数据库的连接串。

4)username、password:远程数据库的用户名,口令。如果不指定,则使用当前的用户名和口令登录到远程数据库。

2.删除数据库链接的语句:

DROP [PUBLIC] DATABASE LINK zrhs_link

3.查看已创建的dblink

select owner,object_name from dba_objects where object_type='DATABASE LINK';

4.dblink的引用:

[user.]table|view@dblink

如:

SELECT * FROM worker@zrhs_link;

SELECT * FROM camel.worker@zrhs_link ;

5.创建同义词:

对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:

CREATE SYNONYM worker_syn FOR worker@zrhs_link;

6.创建远程视图:

CREATE VIEW worker AS SELECT * FROM worker@zrhs_link where…;

现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户访问此视图,但该用户必须有访问数据库链接的权限。

其他:

修改GLOBAL_NAME的方法:

1.在远程数据库的init.ora文件中将global_names设为false。

或者

2.用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;

修改后重新启动数据库设置才能生效。

数据库全局名称可以用以下命令查出:SELECT * FROM GLOBAL_NAME;



===== dblink 实战 ======

1.dblink分为公有和私有两类。

公有dblink使用public修饰关键字。在create和drop的时候都需要使用public关键字。

公有dblink对所有人开放,在该dblink之上创建的同义词也会随之对所有人开放。( 测试并确认,不过测试是在一个实例多个用户之间进行)

私有dblink只有创建者可以访问,其上的同义词不能被其他用户访问。需为用户创建视图,并将视图授权给所需用户后,用户才可访问该视图。

另外,不能将带有dblink的同义词直接授权给用户。否则报错,其等价于:

grant select on table1@user1 to user2                           *

ERROR at line 1:

ORA-02021: DDL operations are not allowed on a remote database

2.创建dblink时,可以使用连接字符串(与tnsname.ora中的),效率较高。

posted on 2022-08-11 09:08  root-123  阅读(909)  评论(0编辑  收藏  举报