oracle创建dblink(oracle创建dblink权限不足)
本篇文章给大家谈谈oracle创建dblink,以及oracle创建dblink权限不足对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
oracle 局域网之间的库 datalink怎么创建
当需要在两个Oracle库中取数据进行比较或更新时,就会用到DataLink。
建立方法如下:
Create dababase link 连接名@限定词 connect to 数据库用户 identified by 密码 using 服务名.;
建立时需要注意以下问题:
一、global_names参数
在服务器上创建远程连接,则需要根据服务器中的global_names参数情况来创建DBLink:
a. 如果Global_names=true,则创建的远程连接必需设置如下:
1、创建的连接名必侍棚需是目标数孝谈宽据库中的global_name的值,可以通过:select * From global_name的方式进行获取。
2、如果目标数据库和发起连接的数据库在同一台机器上,则需要在创建的远程连接名后加@和限定词。其格式如上,否则不用加 “@限定词”
b. 如果global_names=false,则创建的远程连接需设置如下:
1、连接名可以任意取。
2、如果连接名取成了与目标数据库实例名或global_name值相同时,而且目标数据库和发起连接的数据库在同一台机器上,也必需加上连接限定巧亮词。
oracle中如何创建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 scott.tb_test@to_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 =
[img]Oracle建立DBLINK的详细步骤记录
测试条件
假设某公司总部在北京 新疆有其下属的一个分公司 在本次测试中 新疆的计算机为本地计算机 即本要的IP地址为
北京的总部有一个集中的数据库 其SID是SIDBJ 用户名 userbj 密码 bj 北京的IP地址是
在本地(新疆)的分公司也有一个数据库 其SID是SIDXJ 用户 userxj 密码 xj 新疆的IP地址是
要将本地新疆的SIDXJ数据库中访问到北京的数据库SIDBJ中的数据
也就返禅握是说 在sidxj的数据库中 用户userxj( )需要建立DBLINK 以userbj的用户身份访问sidBJ( )中的数据
测试环境 两个数据库均建立在WINXP上 ORACLE的版本均为Oracle
建立环境时 要注意关闭两台计算机上的Windows的防火墙 否则 会出现能ping通 但Oracle连接不通的情况
问 如何返回数据库的GLOBAL_NAME?
执行SELECT * FROM GLOBAL_NAME;
北京的数据库的GLOBAL_NAME为SIDBJ US ORACLE
新疆的数据库的GLOBAL_NAME为SIDXJ
问 如何查看Global_name参数是true还是False?
答 执行 SQL show parameter global_name;
执行的结果如下
NAME TYPE VALUE
global_names boolean TRUE
表示该参数是true
该参数为true时 你在本地建立的DBLINK的名称必须和远程的Global_name一致才行
问 查看远程数据袭弯徊是否支持高级复制功能
答 通过查看v$option视图 如果其中Advanced replication为TRUE 则支持高级复制功能 否则不支持
执行语句为 select * from v$option;
也可以执行select * from v$option where PARAMETER= Advanced replication 语句
如何返回值为True 那么就是支持 否则就是不支持 在两个数据库中都是检查是否支持才行
建立步骤
在本地建立一个Oracle的客户端漏庆连接tns_xj_to_bj 用于连接北京的数据库
在北京的数据库中 建立一个表用于测试
create table USERBJ BJ_TEST
(
STU_ID NUMBER
STU_NAME VARCHAR ( )
)
在其中增加一条记录
insert into BJ_TEST (STU_ID STU_NAME)
values ( 钟德荣 );
新建一个连接tnsxj 用于连接本地的sidxj数据库 以tnsxj/userxj/xj 登录到PLSQL中
下面开始创建连接到北京的远程数据连接DBLink
create database link SIDBJ US ORACLE connect to userbj identified by bj using tns_xj_to_bj ;
其中 SIDBJ US ORACLE 是远程的数据库的global_name userbj是连接SIDBJ的用户名 bj 是userbj的密码
tns_xj_to_bj是本地建立的连接到北京的数据库的服务名
测试连接是否成功
select * from dual@SIDBJ US ORACLE
如果返回结果如下则表示连接成功了
DUMMY
X
在本地数据为中查询已经建立的远程连接名
SQL select owner object_name from dba_objects where object_type= DATABASE LINK ;
OWNER OBJECT_NAME
SYSTEM SIDBJ US ORACLE
USERXJ DBLINK_XJ_TO_BJ
USERXJ SIDBJ
至此 在新疆的计算机上建立了一个DBLINK 用于连接到北京的数据库上
在新疆的数据库中查询北京的数据库中表的信息
select * from bj_test@SIDBJ US ORACLE
查询结果
STU_ID STU_NAME
钟德荣
表示查询是正常的
关于global_name参数的测试
create database link a connect to userbj identified by bj using tns_xj_to_bj ;
建立了一个DBLINK 执行下面的查询
select owner object_name from dba_objects where object_type= DATABASE LINK ;
可以看到已经建立了名为 a的DBLINK
但执行下面的查询 检索远程数据时 就会出现错误
select * from bj_test@a
原因是因为本地数据库的global_names的参数值为true 所以 dblink的名称必须和远程数据库的global_names相同
要修改本地数据库的global_names参数为false;(注意是修改本地数据库SIDXJ 通过测试修改过程的参数不行 过程的global_names参数为TRUE还是为FALSE没有关系)
使用下面的语句修改该参数
SQL alter system set global_names=false;
再执行下面的几步即可查询出数据
create database link a connect to userbj identified by bj using tns_xj_to_bj ; 创建DBLINK
select owner object_name from dba_objects where object_type= DATABASE LINK ; 查询现有的DBLINK
select * from bj_test@a 查询远程表
下面在SIDXJ中建立存储过程 通过DBLINK检索远程数据库SIDBJ 存储过程如下
CREATE OR REPLACE PROCEDURE test_cur
as
strSql varchar ( );
t_stu_name varchar ( );
TYPE TCUR IS REF CURSOR;
CUR TCUR;
begin
strSql := select stu_name from bj_test@a ;
OPEN CUR FOR strSql ;
LOOP
FETCH CUR INTO t_stu_name;
EXIT WHEN CUR%NOTFOUND;
DBMS_OUTPUT PUT_LINE(t_stu_name);
END LOOP;
CLOSE CUR;
end test_cur;
测试存储过程显示 输出了过程数据库中的STU_NAME的值
lishixinzhi/Article/program/Oracle/201311/18443
关于oracle创建dblink和oracle创建dblink权限不足的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。