Oracle 查询局域网内其他电脑上的Oracle数据库表

Oracle 查询局域网内其他电脑上的Oracle数据库表,第1张

--创建 CREATE public database link test_link CONNECT TO scott IDENTIFIED BY tiger using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127001)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = LEE) ) )'; --使用 select ename from emp@test_link; --删除 drop public database link TEST_LINK;

一:dblink创建:

1、已经配置本地服务

create public database

link toBeJing connect to scott

identified by tiger using 'BEJING'

数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMESORA文件里定义的别名名称可以用NET8 EASY CONFIG或者直接修改TNSNAMESORA里定义

2、直接建立链接

create database link toBeJing

connect to scott identified by tiger

using '(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = XXXX )(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = BJORCL)

)

)';

host=数据库的ip地址,service_name=数据库的ssid。

其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。

注意: 假如创建全局dblink,则必须使用systm或sys用户,在database前加public。

1先创建PUBLIC DATABASE LINK,不用指定用户和密码 

scott@TEST>conn system/test

Connected

system@TEST>CREATE PUBLIC DATABASE LINK orcl USING 'BEJING';

Database link created

2再在各个用户下创建私有DATABASE LINK(同PUBLIC DATABASE LINK名称相同),指定用户和密码

system@TEST>conn scott/tiger

Connected

scott@TEST>CREATE DATABASE LINK orcl CONNECT TO scott IDENTIFIED BY tiger;

Database link created

实际上相当于: 

 CREATE DATABASE LINK orcl USING 'BEJING' CONNECT TO scott IDENTIFIED BY tiger;

db link 有3种类型,我这里只讨论其中两种,connected user和fixed user。

connected user,简单来说,连接方数据库以connected的用户来连接远程数据库。

fixed user,简单来说,连接方数据库以fixed(指定的)用户来连接远程数据库。

看看创建db link语法,你对这两种类型就比较清楚了。

创建connected user的db link语法:

create databas link foo connect to scott identified by tiger using 'BEJING' ;

创建fixed user的db link语法:

create databas link foo using 'BEJING' ;

db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。数据库名称是db_name。数据库名称一般都取得比较短,我的习惯一般取长度4个字符,重名概率高。

所以,oracle模仿域名搞出一个global_name,global_name=db_name+db_domain。

有了global_name,就可以实现数据库命名的全局唯一。例:ORCLREGRESSRDBMSDEVUSORACLECOM

数据库全局名称可以用以下命令查出

SELECT FROM GLOBAL_NAME;

如果global_names=true,那么db link的命名要和远程数据库的global_name相同;

如果global_names=false,那么你可以随便命名db link。

查询global_names是true还是false,在pl/sql中的命令窗口(不是sql窗口)执行:show parameter global_names

二、dblink查询:

查看所有的数据库链接,进入系统管理员SQL> *** 作符下,运行命令:

SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';

三、dblink删除:

DROP PUBLIC DATABASE LINK toBeJing

四、dblink使用:

SELECT……FROM表名@数据库链接名;

查询、删除和插入数据和 *** 作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。

例:查询北京数据库中emp表数据 select from emp@toBeJing;

五、同义词配合:

第四点中from emp@toBeJing可以创建同义词来替代:

CREATE SYNONYM同义词名FOR 表名;

CREATE SYNONYM同义词名FOR 表名@数据库链接名;

如:create synonym bj_scott_emp for emp@toBeJing;

于是就可以用bj_scott_emp来替代带@符号的分布式链接 *** 作emp@toBeJing

DB LINK是独立于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。

1、首先在使用的电脑上,添加想要查询数据库的服务和监听,通过Oracle客户端管理工具中的Net Manager来完成。

2、创建两个数据库的连接---DBLink,可以通过指令完成,也可以通过图形界面完成。

3、在Oracle管理工具中开启一个新的SQL windows窗口,测试 *** 作我们连接的异地Oracle数据库。

4、编写一个查询语句来测试,这里做一个select *** 作。

5、最后运行,如下图可以看到查询结果。

创建公开数据库链接

CREATE

PUBLIC

DATABASE

LINK

“数据库链接别名”

CONNECT

TO

“登陆用户”

IDENTIFIED

BY

“登陆密码”

USING

'(DESCRIPTION

=(ADDRESS_LIST

=(ADDRESS

=(PROTOCOL

=

TCP)(HOST

=

IP)(PORT

=

1521)))(CONNECT_DATA

=(SID

=

SID)))';

例如:

CREATE

PUBLIC

DATABASE

LINK

MYDBLINK

CONNECT

TO

USER1

IDENTIFIED

BY

PASSWORD1

USING

'(DESCRIPTION

=(ADDRESS_LIST

=(ADDRESS

=(PROTOCOL

=

TCP)(HOST

=

10101010)(PORT

=

1521)))(CONNECT_DATA

=(SID

=

ORA10)))';

测试条件

假设某公司总部在北京 新疆有其下属的一个分公司 在本次测试中 新疆的计算机为本地计算机 即本要的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的方法:

1首先创建一个dblink,可以访问远程数据库

2在本地创建一个快照,映射远程数据表,当远程数据表有变化时,会反应到快照中

3由于快照类似于视图表,所以在本地为快照创建一个触发器,当快照有变化时,会触发相应事件

4在触发器中写同步数据的代码。

以下是触发器代码:

createorreplacetriggerTRI_test_user_AFR

afterinsertorupdateordeleteonsn_test_user

foreachrow

begin

if deleting then

deletefromtest_userwhereid=:oldid;

endif;

if inserting then

insertintotest_user(id,name,age)

values(:newid,:newname,:newage);

endif;

if updating then

updatetest_usersetname=:newname,age=:newagewhereid=:oldid;

endif;

endTRI_test_user_AFR;

以上就是关于Oracle 查询局域网内其他电脑上的Oracle数据库表全部的内容,包括:Oracle 查询局域网内其他电脑上的Oracle数据库表、oracle怎样查询两个表格中的全部数据、oracle 数据库 dblink怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9717437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存