文章目录
oracle DBLink 连接到其它数据库
禁用dblink(需要重启数据库)
show parameter open_links;
> open_links integer 4
> open_links_per_instance integer 4
alter system set open_links=0 scope=spfile;
alter system set open_links_per_instance=0 scope=spfile;
GLOBAL_NAMES(立即生效)
GLOBAL_NAMES参数设置为TRUE时,使用DATABASE LINK时,DATABASE LINK的名称必须与被连接库的GLOBAL_NAME一致
查看global_name名字
select * from global_name;
修改参数
show parameter global_names;
alter system set global_names=false;
为用户授权
查询用户有没有创建dblink的权限
select * from user_sys_privs t where t.privilege like upper('%link%');
授权
grant create database link to username;
grant create public database link to username;
创建dblink
配置tnsname.ora
test =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=testserver)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=orcl)
)
)
# test:数据库别名
# service_name:服务名
- 客户机上的using中的连接一定要记得重写,只有服务端的链接配置才能在dblink中引用,配置在oracle客户端的tnsnane.ora中的链接配置是不能在dblink中使用的
用户名和密码不要加’'或者""
-- 创建private的dblink
create database link ydccs_link
connect to 用户名 identified by 密码
using ' (DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 11.11.11.11)(PORT = 1521))
)
(CONNECT_DATA =
-- (SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)';
-- 创建public的dblink
create public database link dblink
connect to totalplant identified by totalplant
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = prd.gdc)
)
)';
如果是在数据库主机上,使用tnaname.ora中配的引用就行了
例如
create database link ydccs_link
connect to 用户名 identified by 密码
using ' TESTS';
create database link dblink_120 connect to zhan identified by "zhan" using '192.168.50.120:1521/bond';
- sys用户为其它用户创建dblink
因为dblink的创建和删除只能是它的所属用户来操作,所以我们无法直接使用sys用户创建其他用户下的dblink,当遇到有这样的需求时,可以先建立该用户下存储过程,再通过调用这个存储过程来间接实现。
使用sys用户创建JY2用户下的dblink “TO_11G_JY1”,连接远端“WINORA”的jy1用户:
--Create other user's dblink
--grant create database link to jy2;
-- 创建存储过程
create or replace procedure jy2.createlink
is
begin
execute immediate 'create database link TO_11G_JY1 connect to jy1 identified by jy1 using ''WINORA''';
end;
/
--create database link using above procedure
-- 执行存储过程
exec jy2.createlink;
使用sys用户删除JY2用户下的dblink “TO_11G_JY1”
--Drop other user's dblink
-- 创建存储过程
create or replace procedure jy2.droplink
is
begin
execute immediate 'drop database link TO_11G_JY1';
end;
/
--drop database link using above procedure
-- 执行存储过程
exec jy2.droplink;
查看数据库中的dblink
select * from dba_db_links;
为dblink创建同义词
create synonym TESTSYNONYM for company@TESTLINK1;
删除dblink
drop database link test;
关闭dblink
如果使用dblink,我们需要及时显示的关闭dblink。
commit; --先提交才能关闭
alter session close database link test;
dbms_session.close_database_link(test);
参考链接:
https://blog.csdn.net/it_taojingzhan/article/details/50171095
http://blog.itpub.net/9932141/viewspace-631509/
https://www.cnblogs.com/wangyong/p/6354528.html