问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何通过代理服务器访问oracle数据库

发布网友 发布时间:2022-04-10 16:05

我来回答

2个回答

懂视网 时间:2022-04-10 20:26

--建立数据库链接服务器 2 EXEC sp_addlinkedserver 3 @server =N‘OraclePolice‘, --要创建的链接服务器别名 4 @srvproduct=N‘Oracle‘, --产品名称 5 @provider=N‘OraOLEDB.Oracle‘, --OLE DB 驱动名称 6 @datasrc=N‘ORCL‘ --数据源oracle"ora10g"network"admin"tnsnames.ora查看 7 8 EXEC sp_addlinkedsrvlogin 9 ‘OraclePolice‘, --已建立的链接服务器名 10 ‘false‘, -- 固定 */ 11 NULL, --为每个登陆SQL SERVER的用户使用此链接服务器,则写用户名*/ 12 ‘TESTDB‘, --帐号(oracle) 13 ‘TESTDB123‘ --密码 14 15 exec sp_serveroption ‘OraclePolice‘,‘rpc out‘,‘true‘ 16 exec sp_serveroption ‘OraclePolice‘,‘rpc‘,‘true‘ 17 --这两个是打开rpc,rpc out的,默认为False,打开后可以支持远程更改分布式事务。(如有分布式事务操作必须要设置)

这样我们就建好了链接服务器,已经可以通过它对oracle数据库进行查询,这里有两种查询方式。

1、SELECT * FROM OraclePolice..TESTDB.TABLE_TEST

(链接服务器别名..Oracle名.oracle表,注意使用大写)

这种方式可以进行操作,优点是使用简单,一目了然,而缺点是性能太差,查询大数据量表很慢。效率太差。

2、SELECT * FROM openquery(OraclePolice,‘SELECT * FROM  TABLE_TEST‘)
经试验,这种查询方式速度几乎和在Oralce中一样快。并且我们可以将openquery() 当做表来用。例如
insert into openquery(OraclePolice,‘SELECT * FROM TABLE_TEST‘)

values();--向oracle数据表插入数据
SELECT * FROM openquery(OraclePolice,‘SELECT * FROM TABLE_TEST‘)

where TEST_NAME=‘‘ (TEST_NAME为TABLE_TEST表中的字段)
故推荐这种查询方式。

二、通过sqlserver链接服务器调用oracle 存储过程
在oracle里数据库里写了一个测试存储过程,需要一个传入参数和传出参数。
下面是创建和调用这个存储过程的代码:

 1 -- oracle 中创建存储过程
 2 create or replace procedure A_TEST_NQ
 3  (
 4 namecode varchar2,
 5 namevalue out varchar2
 6  )
 7 is
 8 c varchar2(200);
 9 begin
10 c:=‘‘;
11 select NAME_VALUE into c FROM ALINK_SERVER_TEST WHERE NAME_CODE=namecode;
12 namevalue:=c;
13 end;
14 
15 -- ----------------------------------------------
16 -- 邪恶的分割线
17 -- ----------------------------------------------
18 
19 -- sqlserver 中调用存储过程
20 declare @namecode varchar(200)-- 传入参数
21 declare @namevalue varchar(5000)-- 传出参数
22 
23 set @namecode=‘01‘
24 -- 调用存储过程
25 EXEC(‘begin A_TEST_PRC(?,?);end;‘,@namecode,@namevalue output) at OraclePolice

这里要注意传出参数,一定要加上Output,不然会报错。

技术分享图片

“链接服务器"OraclePolice"的 OLE DB 访问接口 "OraOLEDB.Oracle" 返回了消息 "ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在 "SACON.A_TEST_NQ", line 11
ORA-06512: 在 line 1"。
消息 7215,级别 17,状态 1,第 6 行
无法在远程服务器 ‘OraclePolice‘ 上执行语句。”

三、通过sqlserver链接服务器实现分布式事务

   许许多多的同行就是在这一步中躺下的,因为这一步配置繁琐,同时和sqlserver、oracle数据库版本,甚至是操作系统版本等都有关,驱除睡意,和我一步步来进行配置吧。

 

1、首先必须安装好

Oracle Services For Microsoft Transaction Server

(版本与你的oracle版本一致)

它是ODAC中的一部分,因为oracle本身是不支持分布式事务的,通过这个驱动开放与微软的事务服务。 我想绝大多数人配置好MSDTC并解析好名称后仍会报“无法启动分布式服务”就是因为这个驱动没装。

消息 7391,级别 16,状态 2,第 5 行
无法执行该操作,因为链接服务器 "oracletest" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 无法启动分布式事务。

 
2、必须用Oracle Probider for OLE DB 驱动提供的OraOLEDB.Oracle访问接口来创建链接服务。(这个可能是因为microsoft提供的访问接口并不存在oracle事务机制,所以只能通过oracle提供的访问接口)


3、MSDTC设置。
   打开"管理工具--组件服务",依次打开"组件服务--计算机",在"我的电脑"上点击右键。在MSDTC选项卡中,点击"安全配置"按钮,在安全配置窗口中做如下设置: 
    -->选中"网络DTC访问"; 
    -->在客户端管理中选中"允许远程客户端""允许远程管理";
    -->在事务管理通讯中选"允许入站""允许出站""不要求进行验证";
    -->保证DTC登陆账户为:NT AuthorityNetworkService ;


4、双方启动MSDTC服务 
   MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须

在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。


5、打开双方135端口
   MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。

 
6、在事务开始前加入set xact_abort ON语句
   对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。

 
7、服务器名解析
  在创建链接服务器时@server或者@datasrc设置为sql server服务器名时,需要做名称解析,就是把服务器名解析为ip地址。

在"C:WINDOWSsystem32driversetchosts"文件中增加一条记录:

   xxx.xxx.xxx.xxx 服务器名


8、远程服务器上的名称解析
  分布式事务的参与服务器是需要相互访问的,发起查询的服务器要根据机

器名或ip查找远程服务器的,同样远程服务器也要查找发起服务器,远程服务器通过发起服务器的机器名查找服务器,所以要保证远程服务器能够通过发起服务器的机器名访问到发起服务器。一般的,两个服务器在同一网段机器名能就行很好的解析,但是也不保证都能很好的解析,所以比较保险的做法是:
在远程服务器的在"C:WINDOWSsystem32driversetchosts"文件中增加一条记录:
     xxx.xxx.xxx.xxx 发起服务器名

通过以上的一些列操作应该差不多了,这期间的操作你会抓狂,时而崩溃,时而暴走,笔者唯一的建议就是:将试验、探索坚持到底,因为笔者已经证实SQLSERVER通过链接服务器到oracle能够使用分布式事务。

 1 -- 分布式事务测试
 2 set xact_abort ON
 3 begin tran
 4 insert into openquery(OraclePolice,‘SELECT * FROM ALINK_SERVER_TEST ‘) values(‘456000‘,‘TESTtest‘,‘‘);
 5 
 6 if @@ERROR <>0
 7 rollback tran;
 8 else
 9 commit TRAN;
10 -- 语句执行成功

技术分享图片

【转】Sqlserver通过链接服务器访问Oracle的解决办法

标签:出错   调用   eval   必须   更改   分割线   st表   soft   建议   

热心网友 时间:2022-04-10 17:34

做端口映射,在代理服务器上安装端口映射工具,例如PortMap。然后进行配置,把代理服务器的数据库端口映射到数据库服务器的数据库端口上。例如sqlserver是1433,oracle是1521.
这样你访问代理服务器的数据库端口就等于访问数据库服务器的对应端口了。

为了更加安全,你还可以在客户端上设置使用非默认的端口访问代理服务器,然后在代理服务器上把你指定的端口映射到数据库服务器的数据库端口。比如在代理服务器上把8000端口映射到服务器1433端口,然后在客户端上配置为使用8000端口来访问数据库。这样你就可以通过代理服务器的8000端口来连接sqlserver数据库了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胶原蛋白线双眼皮是不是永久性 双眼皮埋线是蛋白质还是尼龙绳-双眼皮埋线蛋白线多久能吸收 人体输液的“港口”完全植入式输液港 双眼皮宽变窄修复的方法 同心保家庭重疾险靠不靠谱?便宜吗? 做完双眼皮一宽一窄怎么办 喝全脂奶粉对长高有没有什么好处? redmine中“选择一个项目..."下拉列表框中为什么只列出一个项目,我建... 南充市龙门中学实力现在怎样?他的奥赛班是重点班么? 感情中为什么总是不知足呢? 75日历天与75个日历天的区别 中国银行信用卡被银行冻结了该怎么办? 信用卡冻结注销 中国银行长城人民币信用卡 被冻结 想要销卡 中国银行信用卡冻结了卡也丢了 我想注销该怎么办? 做app代理选择一个平台需要注意什么? 做微信公众平台代理的?求详细介绍下 金烽3平台代理怎么做? 什么外汇平台可以做代理,平台可以做个人代理吗 PT平台代理好做吗? 有什么平台做可以做代理的? 使命召唤4 Keygen 谁能告诉我我国关于禁狗令的具体内容是什么呀? 重庆省道S444歌石路是一条什么样的公路,重庆出四川后又将通向各处? 基站s444 请问444k/s是多少兆宽带 yoga 13自带的固态硬盘,持续读速度444m&#47;s,写入48m&#47;s,as SSD benchma 麻辣烫的做法,本人以前是做米线的,现在想做麻辣烫,有那位可以教我一下吗、在这里谢过了 求!!麻辣烫或者米线 汤的配料!要详细 点的!!! 求,过桥米线和麻辣烫,烫的配方和做发。老婆喜欢吃这些。想自己做给她吃 我在SqlServer上新建了一个针对oracle数据库的链接服务器,通过它可以查到表数据,却查不到视图 联想r70002020有几个m2 股票的业绩非常好,股息率也是非常的高,但是股价就是不涨,这是为什么? 创建QQ群成为群主有什么好处吗? 建群有什么用啊? 如果你迷路了.你会怎么办 创立一个QQ群对群主和管理员有啥好处 要是你迷路了,你会怎样做? 三星s7edge 插上sd卡要怎么用啊 有什么好办法防止骚扰电话打进来? SQLServer2000数据库如何访问远程ORACLE数据库 做好的考勤表忘了再下个月咋更改了? 考勤记录表修改后 重新下载会被覆盖嘛 求助怎么修改考勤表? 哪位帮我修改一个EXCEL考勤表格,谢谢! 吃柿子多久可以吃鸡蛋饭 本人准备去上海的icon酒吧,那里女生能不能进入,去过的人请明确告诉我。谢谢,在线等啊啊啊啊啊啊啊 上海同志酒吧哪个人去的多啊!icon是同志酒吧吗? 上海体育馆的ICON酒吧营业吗? 吉利ICON怎么样呀,想搞台小SVU?