
dblink内的计算是消耗的服务器2的资源,然后在服务器1上显示dblink内的查询结果。
其实dblink只是数据库访问数据库的方式,它和你用客户端访问数据库一样。数据库2的服务器会划分部分内存给他使用,就相当于你用一台机器远程的访问数据 库,是一样的。
可以做一个假设,假设dblink消耗的是数据库1的资源,那么数据来源于数据库2,那么网络是不是要传输所有用到的数据,这样的话,如果数据量稍微大一点,就很容易造成网络拥堵,而且如果查询条件很多会有大量网络浪费,而且会占用很大的服务器1的内存,这样的话,我想不会有人想用dblink的。
database link(简称DBLINK)是定义一个数据库到另一个数据库的路径的对象,database link允许查询其他数据库的远程表及执行远程程序。
database link是单向的连接。在创建database link的时候,Oracle在数据字典中保存相关的database link的信息。
在使用database link的时候,Oracle通过预先定义好的连接信息,访问相应的远程数据库以完成相应的工作。
dblink(Database Link)就像电话线一样是一个通道,如果要访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
扩展资料
1、建立dblink之前需要确认的事项:
1)、确认从local database到remote database的网络连接是正常的,tnsping要能成功。
2)、确认在remote database上面有相应的访问权限。
2、database link分类:
1)、Private类型,创建database link的user拥有该database link,只有建立该database link的schema的session能使用这个database link来访问远程的数据库。同时也只有Owner能删除该private database link。
2)、Public类型,Owner是PUBLIC。Public的database link是数据库级的,本地数据库中所有的拥有数据库访问权限的用户或pl/sql程序都能使用此database link来访问相应的远程数据库。
3)、Global类型,Owner是PUBLIC。Global的database link是网络级的。
参考资料
百度百科-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
一 实现结果:在一个数据库中某个用户下编写一个存储过程,在存储过程中使用DBLINK连接另一个数据库,从此数据库中的一个用户下取数,然后插入当前的数据库中的一个表中。
二 实现方法步骤:
1 创建存储过程
2 在存储过程中先创建database link
3 创建成功
4 从另一个数据库取出数据插入到当前数据库中
5 任务完成
三 创建DBLINK的方法:
1 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 = prdgdc)
)
)';
语法解释:create public database link DBLINK名字(自己随便起)
connect to 用户名 identified by 密码
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 要连接的数据库所在服务器的IP地址)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = 要连接的数据库的在本地的服务名(即要连接的数据库的SID))
)
)';
2 如果创建private的DBLINK
create database link dblink
connect to totalplant identified by totalplant
using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = prdgdc)
)
)';
Oracle中的Dblink和同义词有什么区别吗
dblink:当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
同义词:同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系,此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问。
因为dblink会引起以下问题:
1不支持LOB 大对象的 *** 作
2特别是通过DB_LINK 调用PROCDURE
3通过DB_LINK连接的DB 不能有COMMIT
以上就是关于oracle数据库的相关问题, 服务器1中使用dblink访问服务器2的数据库资源时,消耗的是哪台全部的内容,包括:oracle数据库的相关问题, 服务器1中使用dblink访问服务器2的数据库资源时,消耗的是哪台、oracle里的DBLINK是做什么的、Oracle建立DBLINK的详细步骤记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)