oracle跨库 *** 作

oracle跨库 *** 作,第1张

是可以的,方法很多。我就说几种比较常用的方法吧。

1、在程序中实现:如 java 语言, 使用JDBC在B上连接C的数据需要用到如下参数

Driver : oraclejdbcdriverOracleDriver

url: jdbc:oracle:thin:C的iP:1521:orcl

username : 连接数据库的用户名

password: 密码

2、在B上使用工具 如(PLSQL Developer )

先在B上使用 oracle 的 net configuration assistant 工具(安装完ORACLE后就有)配置C的数据库连接,然后用 PLSQL Developer 连接就可以了 注意 数据库这一栏要填刚才配置的别名 不是本地的数据库名

已配置好网络服务名mylinkdb确保可用的

结束创建后,本来名字是mydblink1,

却变成了mydblink1fcrtfgjnet

然后查询时

select from myusermytbl@mydblink1

select from myusermytbl@mydblink1fcrtfgjnet

都提示ora-12154无法解析指定的连接标识符,为什么呢?

急,急! 请大家帮忙!

改成如下:

select from mytbl@mydblink1

或者

select from mydblink1mytbl

。。。。。

--名字会自动加后缀,哪个都能用

但是'mylinkdb'是确保可用的

--你认为的确保可用不是数据库认为的确保可用

NAME TYPE VALUE

------------------------------------ -----------

global_names boolean FALSE

global_names参数并不是用来控制global_name的,而是用来限制dblink的使用global_names参数的作用,简单得说来就是:当global_names参数设置为TRUE时,使用dblink的名称必须与被连接库的GLOBAL_NAME一致

所以,你检查一下这个参数试试

测试条件

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

1、标准接口表2、标准API前者例如AP的发票接口表,供应商、客户接口表,具体实现方式是,将数据按照接口表规格准备到接口表中,然后运行标准的import程序将接口表数据导入到Oracle EBS中(即各接口表对应的正式table中)。

而例如银行、分行、银行帐户相关API,一般通过客户化程序,调用此类API实现将数据导入系统,此时一般也会新建一些客户化staging table,先将外部数据准备到staging table后,再使用客户化程序,调用API将资料导入Oracle EBS中。

通常,“Oracle EBS的接口方式”指的是数据进入Oracle EBS的方式,主要有两类技术:

1、标准接口表

2、标准API

前者例如AP的发票接口表,供应商、客户接口表,具体实现方式是,将数据按照接口表规格准备到接口表中,然后运行标准的import程序将接口表数据导入到Oracle EBS中(即各接口表对应的正式table中)。

而例如银行、分行、银行帐户相关API,一般通过客户化程序,调用此类API实现将数据导入系统,此时一般也会新建一些客户化staging table,先将外部数据准备到staging table后,再使用客户化程序,调用API将资料导入Oracle EBS中。

而DBLINK则是数据库之间的资料交换方式,假如Oracle EBS的数据库需要与其他数据库(例如其他系统的数据库)进行资料交互,那么DBLINK是其中一个选项而已。

以上,两者直接比较没有太大意义,完全可能是应用于不同业务场景下的技术。

以上就是关于oracle跨库 *** 作全部的内容,包括:oracle跨库 *** 作、oracle11g中创建dblink怎么名字变了且不可用、Oracle建立DBLINK的详细步骤记录等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存