使用DB_LINK直接访问另一个数据库的表数据

DBLINK的作用:跨域访问数据库,可以直接访问对应的数据库表,在备份时可以直接迁移数据库表

建DBLINK语句:

CREATE [SHARED] [PUBLIC] database link link_name
  [CONNECT TO [user] [current_user] IDENTIFIED BY password] 
  [AUTHENTICATED BY user IDENTIFIED BY password] 
  [USING 'connect_string']

public :public表示所创建的dblink所有用户都可以使用,如果dblink中的连接用户有select any table权限,那么所有用户都可以访问dblink的任何表,不加任何参数则只有创建的用户可以使用。

查看数据库已有DBLINK

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

或者

select * from dba_db_links;

查看是否有创建DBLINK的权限

以scott用户为例

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

查询没有数据返回,则使用sys或者system用户登陆赋予权限

grant create public database link to scott;

创建DBLINK

创建名为 testlink的链接,对应的数据库为用户名为scott,密码123456

1.在数据库的配置文件tnsnames.ora已有数据库别名:orcl(用户名:scott,密码:123456)

         

           创建方式如下,using中直接使用别名:

create public database link testlink connect to scott identified by '123456' USING 'ORCL'

2.在数据库的配置文件tnsnames.ora没有对应的数据库别名:orcl(用户名:scott,密码:123456)

           创建方式如下,using中填写对应的数据库IP地址

create database link 'linkname' connect to scott identified by '123456'
  using '(DESCRIPTION =
                (ADDRESS_LIST =
                  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
                )
                (CONNECT_DATA =
                  (SERVICE_NAME = orcl)
                )
              )';

删除对应的DBLINK

drop databse link testlink
drop public databse link testlink

使用对应的DBLINK

在本地数据库中访问另外一个数据库的student表,语句如下,其他testlink是DBLINK的名称,其他的DML操作也是也是一样吗,使用student@testlink代替对应的表名即可。

select * from student@testlink

1.插入

insert into student@testlink values('id','name');

2.修改

update student@testlink set name='name' where id='id';

3.删除

delete from student@testlink where id='id';

为对应的DBLINK创建同义词,方便使用以及可以不让人知道DBLINK的名称

create synonym student for student@testlink;

在执行DQL和DML语句中直接使用student代替student@tesklink即可

select * from student;
insert into student values('id','name');
delete from student where id='id';
create synonym student for student;

猜你喜欢

转载自blog.csdn.net/springlan/article/details/106293124