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;