两台服务器

目标ip 192.168.122.132 数据库名称orcl 用户scott 密码tiger

----------------------------------------------------------------------------------------------------------------------------------------

首先要给当前本地oracle的用户授权

GRANT CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK TO SCOTT;

创建dblink

密码注意用双引号,避免版本不同引起意外问题

CREATE PUBLIC DATABASE LINK my_link  CONNECT TO SCOTT IDENTIFIED BY "tiger" USING '192.168.122.132/orcl';

创建好dblink后

select * from 目标库的表@my_link

我的创建后在dblink名字后还有一串字符

select * from zhucs2@bendi_scott.regress.rdbms.dev.us.oracle.com

亲测使用的时候加不加都无所谓。 

 

 

摘抄节选

 

1.查看dblink

1
2
3
SELECT OWNER,OBJECT_NAME 
FROM DBA_OBJECTS 
WHERE OBJECT_TYPE='DATABASE LINK';

 或者

1
SELECT FROM DBA_DB_LINKS; 

 

2.创建dblink

前提:

创建dblink的用户有对应的数据库权限 create public database link 或者create database link

可以使用

1
grant create public database link,create database link to myAccount;

来授权.

1
2
3
4
5
6
create public database link dblinkname connect to username identified by password 
using '(DESCRIPTION = 
       (ADDRESS_LIST = 
       (ADDRESS = (PROTOCOL = TCP)(HOST = database_ip)(PORT = 1521))) 
       (CONNECT_DATA = 
       (SERVICE_NAME =servicename)))'

如果在create之后不加public,则创建的dblink就不是公共的,就只有创建者可以使用了.

补充:

如何确定数据库的servicename:
1.在sqlplus中使用
show parameter[s] service_names;
注意parameter和parameters都可以
2.使用

1
select name,value from v$parameter where name='service_names'

3.使用dblink

例如,在本机数据库上创建了一个scott_rmthost的public dblink(使用远程主机的scott用户连接),则用sqlplus连接到本机数据库,执行select * from scott.emp@scott_rmthot即可以将远程数据库上的scott用户下的emp表中的数据获取到.
也可以在本地建一个同义词来指向scott.emp@scott_rmthost,这样取值就方便多了.

4.删除dblink

注意:用户有create public database link 或者create database link 权限.

1
drop public database link dblinkname;
posted on 2020-01-09 09:25  我有我的信仰  阅读(558)  评论(0)    收藏  举报