通过oracle dblink,怎么执行远程数据库的存储过程。或者说可以执行吗?怎么弄?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过oracle dblink,怎么执行远程数据库的存储过程。或者说可以执行吗?怎么弄?相关的知识,希望对你有一定的参考价值。
能不能执行存储过程取决于你的dblink那个数据库的用户的权限,比如你这边的数据库用户A,是另外一个数据库的dblink用户,那么另外那个数据库的用户是利用A用户进行操作的。一般都是select,执行存储过程什么的,是看的A的权限。不过我要梯形下,就选你insert,提示成功,可是实际并咩有插入,因为insert后,那个dblink的session就已经关闭了,commit并不能确认。所以我们一般是通过远程控制存储过程解决的这个问题。 参考技术A 不行,弄不了。追问
只能查询数据,不能对数据进行修改吗?
追答dblink可以select,insert ,update,delete,前提是dblink的用户有这些权限,但是不能做ddl操作,如果存储过程里只是合法的dml操作也是可以通过dblink执行存储过程的。
给个测试例子:
远程服务器上:
create table test_db_link(id number,name varchar2(30));
create procedure p_test_db_link(vn_id number,vc_name varchar)
is
begin
insert into test_db_link values(vn_id,vc_name);
commit;
end;
begin
p_test_db_link(1,'a');
end;
本地创建dblink:
create database link TEST
connect to scott identified by tiger
using 'test';
--通过dblink删除表
delete from test_db_link@TEST
where id=1;
commit;
--通过dblink执行存储过程插入表
begin
p_test_db_link@TEST(2,'b');
end;
--此时查询结果
select * from test_db_link@TEST;
ID NAME
2 b
oracle创建dblink方法
当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建dblink.
创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库:
select * from user_sys_privs t
where t.privilege like upper(‘%link%‘);
1 SYS CREATE DATABASE LINK NO
2 SYS DROP PUBLIC DATABASE LINK NO
3 SYS CREATE PUBLIC DATABASE LINK NO
可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。
在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK权限授予给你的用户
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
然后以scott用户登录本地数据库
1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。
create public database link
to_bylw connect to scott identified by tiger using ‘bylw‘;
其中to_bylw是你创建的dblink名字,bylw是远程数据库的实例名,scott/tiger是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库‘bylw‘中scott.tb_test表,sql语句如下所示
select * from [email protected]_bylw;
2.创建dblink的第二种方式,是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库,
create database link to_test
connect to scott identified by tiger
using ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bylw)
)
)‘;
第二种是把第一种配置在tnsnames.ora文件中的信息,直接放在创建dblink语句后面。第一种情况tnsnames.ora文件中信息如下:
bylw =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bylw)
)
)
以上是关于通过oracle dblink,怎么执行远程数据库的存储过程。或者说可以执行吗?怎么弄?的主要内容,如果未能解决你的问题,请参考以下文章
请问两个oracle数据库,用insert into 学生 select * from 学生 @dblink。发现学生表里面的有一个字段。
oracle 创建好了dblink之后,该如何列出远程数据库中所有表的清单,查询语句是啥。