选择奋斗,选择挑战

DBLINK测试

上一篇 / 下一篇  2012-08-07 14:25:33 / 个人分类:Oracle

DBLINK测试:

测试条件:
1、本地IP:172.168.2.249,SID:orcl,用户名:system,密码:orcl;
2、远程IP:172.168.2.130,SID:beeload,用户名:beeload,密码:beeload;
将本地orcl数据库访问远程beeload数据库。

测试环境:
两台机器都是windows xp,oracle都是10g;
建立环境时,要关闭两台计算机的防火墙,否则,会出现能PING通,但是oracle连接不通的情况;
1、返回数据库的global_name select * from global_name;
本地:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
远程:BEELOAD.REGRESS.RDBMS.DEV.US.ORACLE.COM
2、查看global_name参数是TRUE还是FALSE
执行SQL>show parameter global_name;
该参数为TRUE时,你在本地建立的DBLINK的名称必须和远程的global_name一致;
3、查看远程数据库是否支持高级复制功能通过查看v$option视图,如果其中Advanced replication为TRUE,则支持高级复制功能;否则不支持。
执行语句为:select * from v$option; 也可以执行select * from v$option where PARAMETER='Advanced replication'语句,如何返回值为True,那么就是支持,否则就是不支持。在两个数据库中都是检查是否支持才行。

建立步骤:
1、在本地建立一个Oracle的客户端连接beeload,用于连接远程数据库。
在远程的数据库中,建立一个表用于测试。
create table RM_TEST ( STU_ID NUMBER, STU_NAME VARCHAR2(100) ) 在其中增加一条记录: insert into RM_TEST (STU_ID, STU_NAME) values (1, '李可宇');
2、新建一个连接system(具有权限的用户),用于连接本地的数据库。下面开始创建连接到远程数据连接DBLink。
create database link BEELOAD.REGRESS.RDBMS.DEV.US.ORACLE.COM connect to BEELOAD identified by beeload using 'beeload';
其中:BEELOAD.REGRESS.RDBMS.DEV.US.ORACLE.COM是远程的数据库的global_name,beeload是连接BEELOAD的用户名,beeload是beeload的密码, beeload是本地建立的连接到北京的数据库的服务名。
3、测试连接是否成功: select * from dual@BEELOAD.REGRESS.RDBMS.DEV.US.ORACLE.COM 如果返回结果如下则表示连接成功了。
DUMMY
X
4、在本地数据库中查询已经建立的远程连接名:
SQL> select owner,object_name from dba_objects where object_type='DATABASE LINK';
OWNER OBJECT_NAME
SYSTEM BEELOAD.REGRESS.RDBMS.DEV.US.ORACLE.COM
5、至此,在本地的计算机上建立了一个DBLINK,用于连接到远程的数据库上,在本地的数据库中查询北京的数据库中表的信息: select * fromRM_TEST@BEELOAD.REGRESS.RDBMS.DEV.US.ORACLE.COM查询结果:
STU_ID STU_NAME
1 李可宇
表示查询是正常的。
6、关于global_name参数的测试
create database link a connect to BEELOAD identified by beeload using 'beeload'; 建立了一个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;(注意是修改本地数据库,通过测试修改过程的参数不行,过程的global_names参数为TRUE还是为FALSE没有关系) 使用下面的语句修改该参数:
SQL> alter system set global_names=false;
再执行下面的几步即可查询出数据: create database link a connect to BEELOAD identified by beeload using 'beeload';
--创建DBLINK select owner,object_name from dba_objects where object_type='DATABASE LINK';
--查询现有的DBLINK select * frombj_test@a--查询远程表
7、下面在本地建立存储过程,通过DBLINK检索远程数据库, 存储过程如下: CREATE OR REPLACE PROCEDURE test_cur as strSql1 varchar2(1000); t_stu_name varchar2(100); TYPE TCUR IS REF CURSOR; CUR TCUR; begin strSql1:='select stu_name from bj_test@a'; OPEN CUR FOR strSql1; 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的值。


TAG:

 

评分:0

我来说两句

kexi1314

kexi1314

想和做,两者都具备的情况下,才会有你想要的结果!!!

日历

« 2024-05-02  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 7743
  • 日志数: 5
  • 图片数: 1
  • 建立时间: 2008-12-17
  • 更新时间: 2012-08-07

RSS订阅

Open Toolbar