数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle建立DBLINK的详细步骤记录


发布日期:2019年04月16日
 
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为SIDBJUSORACLECOM

新疆的数据库的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 USERBJBJ_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 SIDBJUSORACLECOM connect to userbj identified by bj using tns_xj_to_bj;

其中SIDBJUSORACLECOM是远程的数据库的global_nameuserbj是连接SIDBJ的用户名bj是userbj的密码

tns_xj_to_bj是本地建立的连接到北京的数据库的服务名

测试连接是否成功

select * from dual@SIDBJUSORACLECOM

如果返回结果如下则表示连接成功了

DUMMY

X

在本地数据为中查询已经建立的远程连接名

SQL> select ownerobject_name from dba_objects where object_type=DATABASE LINK;

OWNER OBJECT_NAME

SYSTEM SIDBJUSORACLECOM

USERXJ DBLINK_XJ_TO_BJ

USERXJ SIDBJ

至此在新疆的计算机上建立了一个DBLINK用于连接到北京的数据库上

在新疆的数据库中查询北京的数据库中表的信息

select * from bj_test@SIDBJUSORACLECOM

查询结果

STU_ID STU_NAME

钟德荣

表示查询是正常的

关于global_name参数的测试

create database link a connect to userbj identified by bj using tns_xj_to_bj;

建立了一个DBLINK执行下面的查询

select ownerobject_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 ownerobject_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_OUTPUTPUT_LINE(t_stu_name);

END LOOP;

CLOSE CUR;

end test_cur;

测试存储过程显示输出了过程数据库中的STU_NAME的值

以上脚本全部在ORACLE下通过测试

上一篇:Oracle日期时间函数的应用

下一篇:PL/SQL中的几种异常处理方法的源代码