找回密码
 FreeOZ用户注册
查看: 4815|回复: 20
打印 上一主题 下一主题

[数据库] 如何从MS SQL通过Linked Server / OpenrowSet / OpenQuery访问Oracle (找到答案!)

[复制链接]
跳转到指定楼层
1#
发表于 19-8-2010 02:13:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除, 无法发言

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
这个问题困扰了我好几天,在公司屡试不爽。最后只好在自己家的环境下安装虚拟机,安装Oracle和MS SQL,终于实验通过!

结论:公司的笨蛋,安装的系统,毛病多多,竟是奇怪的问题,找不出答案的问题。我自己的新环境,一次试验成功!!!

所以说:公司还是要有一个有用网管和DBA,否则真是好事多磨,什么也不行,还这个也不答应,那个也不让你做。

举例:我说需要重启服务器,居然要发邮件,还要发一个工作流请求,然后Team Leader告诉我:等一两周!!!!

举例:我们公司测试服务器升级,居然搞了一个新的服务器名,我被迫更新所有代码设计到路径和机器名的部分!!!原来都是硬件更换,机器名不变,这样一个好处是不需要更改应用的路径,另外一方面,升级不成功,可以来回切换!!!

我无语了!!!!连续加班好几天,居然都是别人的错误,搞死我了。
回复  

使用道具 举报

2#
 楼主| 发表于 19-8-2010 02:22:36 | 只看该作者

使用Openrowset的准备工作

提示: 作者被禁止或删除, 无法发言
从MS Server 配置中打开OpenrowSet的支持,这个缺省是关闭的(安全性考虑),需要在配置中打开这个选项就好,不需要重启服务器也不需要重启SQL服务。

具体看这里:
http://www.kodyaz.com/articles/e ... ibuted-Queries.aspx

两种方法,通过在配置界面中修改设置,或者通过命令行。自己看,命令行修改如下:

sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure

sp_configure 'show advanced options', 1
reconfigure
回复  

使用道具 举报

3#
 楼主| 发表于 19-8-2010 02:23:28 | 只看该作者

测试是否支持Openrowset

提示: 作者被禁止或删除, 无法发言
准备一个文本文件,运行这个语句,如果看到结果就说明这个打开了。

SELECT  *
FROM OPENROWSET
       ( BULK 'D:\DataExchange\Input\Batch01.csv',SINGLE_CLOB)
AS a
回复  

使用道具 举报

4#
 楼主| 发表于 19-8-2010 02:27:51 | 只看该作者

测试Oracle客户端是否安装正确

提示: 作者被禁止或删除, 无法发言
安装Oracle客户端

开启Oracle自带的命令行SQL PLUS,输入用户名口令和SID测试,如果测试通过说明,驱动安装没有问题。

查看SQL控制台,Server Objecs \ Linked Servers \ Providers \ 这下边可以看到两个驱动。

MSDAORA   微软的OLE DB驱动
OraOLEED.Oracle    Oracle的OLE DB驱动

两个都好用,哪一个都行!!!当然微软的用起来对自家的系统支持更好。
回复  

使用道具 举报

5#
 楼主| 发表于 19-8-2010 02:32:11 | 只看该作者

测试 OpenrowSet 访问Oracle

提示: 作者被禁止或删除, 无法发言
SELECT *
FROM OPENROWSET('OraOLEDB.Oracle'
,'orcl';'yourusename';'yourpassword'
, 'select * from all_tables')


orcl 是我的ORA文件里面应用的链接名:(ora文件如下,供你参考)
  1. ORCL =
  2.   (DESCRIPTION =
  3.     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  4.     (CONNECT_DATA =
  5.       (SERVER = DEDICATED)
  6.       (SERVICE_NAME = orcl.0.2.15)
  7.     )
  8.   )
复制代码
你需要一个oracle的用户名和口令,这个用户的权限不需要特殊设置!!!(我原来还以为权限需要特殊设置什么的呢)

最后的那个SQL语句是Oracle的标准语句,查询是所有表信息。
回复  

使用道具 举报

6#
 楼主| 发表于 19-8-2010 02:35:59 | 只看该作者

建立Linked Server

提示: 作者被禁止或删除, 无法发言
  1. EXEC sp_addlinkedserver   'ls_orcl',  'Oracle',  'OraOLEDB.Oracle',  'orcl'
  2. EXEC sp_addlinkedsrvlogin 'ls_orcl', 'FALSE',NULL, 'yourusername', 'yourpassword'
复制代码
第一行是建立Linked Server
第二行是给这个Linked Server加入权限


ls_orcl 是你随便起的一个名字,以后就用这个名字引用这个Linked Server了,这个名字没有要求
orcl 同上,是你的ora中的那个oracle服务器的名字
其他的不用解释了吧?
回复  

使用道具 举报

7#
 楼主| 发表于 19-8-2010 02:40:19 | 只看该作者

如何使用这个Linked Server

提示: 作者被禁止或删除, 无法发言
  1. select top 10 * from ls_orcl..HR.JOBS
复制代码
ls_orcl 是你给这个Linked Server起的名字

HR 是Oracle数据库下面的一个Shema

JOBS是HR下面的一个表

你注意到了那个TOP 10 了么?这可是标准的MS SQL语句啊!!!!!爽了吧?
使用LINKED Server 来即使查询太方便了!!!!!

当然不适合做报表或者服务或者数据仓库之类的解决方案(这些应该还用SSIS,SSRS之类的工具或者其他ETL)

但是这个适合自己做数据分析使用,这样Oracle和MS SQL就无缝的链接到一起了!!!!用起来超级方便!
回复  

使用道具 举报

8#
 楼主| 发表于 19-8-2010 02:42:21 | 只看该作者

Openrowset OpenQuery的功能强大

提示: 作者被禁止或删除, 无法发言
  1. select *
  2. from OPENROWSET
  3. ('Microsoft.Jet.OLEDB.4.0'
  4. ,'Excel 8.0;Database=D:\DataExchange\PersonsContacts.xls;'
  5. ,'SELECT * FROM [EmployeeeTest$]')
复制代码
可以用来查询各种数据来源的语句,甚至可以更新,最适合处理Flat File文件的导入导出啦!不应该忽视这个功能,这个功能是通过Linked Serer包装实现的,不过并不需要显式建立这个 linked server
回复  

使用道具 举报

9#
 楼主| 发表于 19-8-2010 02:45:08 | 只看该作者

扩展阅读材料

提示: 作者被禁止或删除, 无法发言
回复  

使用道具 举报

10#
 楼主| 发表于 19-8-2010 02:48:15 | 只看该作者

今天成绩很大!!!

提示: 作者被禁止或删除, 无法发言
在公司加班到半夜11点回家,搞定了所有SSIS和SSRS的异构数据库的连接

在家接着加班,搞定了Openrowset 和 Linked Server的建立!

臭骂我们公司的IT。。。。。。。。。。。。&*(%^&$(^&%&^&^%%&%%^%^$$E$%$%$%$^%^ 一群笨蛋!

我下一步的问题是怎么让这群笨蛋帮我。。。。。。。。。。。

还要研究如何同步那些笨蛋系统的数据(因为设计问题,同步也是一个难题,没有主键,也没有更新时间戳!!!!!

评分

参与人数 1威望 +30 收起 理由
ubuntuhk + 30 你太有才了!

查看全部评分

回复  

使用道具 举报

11#
发表于 19-8-2010 05:10:05 | 只看该作者
虫子,你咋这么拼命啊?你就等你们公司的tech support一两周后给你fix problem呗,休息一下
回复  

使用道具 举报

12#
 楼主| 发表于 19-8-2010 07:04:15 | 只看该作者

回复 #11 ubuntuhk 的帖子

提示: 作者被禁止或删除, 无法发言
我也不想这样啊,可是我接手的这个小姑娘一直用她的方法照顾日常事务,正常工作。她马上走了,我有两天路可以选择:接着她的方法干活,自己研究改进方法。我每天都跟着她学习,不过我更想改进。

因为她的实在是。。。。。。。。。根本就是没有过站在理论看过这些问题。(当然我不得不承认人家干活利索)
回复  

使用道具 举报

13#
 楼主| 发表于 19-8-2010 07:19:21 | 只看该作者

疑问

提示: 作者被禁止或删除, 无法发言
我实验的时候使用的是Oracle的样例数据库和样例用户HR,不知道是否和这个有关系。
为了排除这种可能我需要重新建立一个新用户,重新实验一下。

谁知道那个HR用户的权限,请告诉我一下,好么?我对Oracle不熟悉,刚才有进入不了Orcleweb管理界面了。
回复  

使用道具 举报

14#
发表于 19-8-2010 08:45:36 | 只看该作者

回复 #13 xblues 的帖子

sqlplus / as sysdba
grant all privileges to hr;
回复  

使用道具 举报

15#
 楼主| 发表于 19-8-2010 09:55:35 | 只看该作者

回复 #14 coredump 的帖子

提示: 作者被禁止或删除, 无法发言
could you help me to take a look at the user HR and find out what sort of access does this user have? So I can compare this with my user account from my company.
回复  

使用道具 举报

16#
发表于 19-8-2010 10:30:24 | 只看该作者
原帖由 xblues 于 19-8-2010 09:55 发表
could you help me to take a look at the user HR and find out what sort of access does this user have? So I can compare this with my user account from my company.

每次装完ORACLE后,我都是GRANT ALL PRIVILEGES TO HR;所以没有默认的权限可以看,默认情况下HR就是普通用户权限,应该和你直接CREATE USER出来的帐号的权限相同。
回复  

使用道具 举报

17#
发表于 19-8-2010 11:05:55 | 只看该作者
原帖由 xblues 于 19-8-2010 02:13 发表
这个问题困扰了我好几天,在公司屡试不爽。最后只好在自己家的环境下安装虚拟机,安装Oracle和MS SQL,终于实验通过!

结论:公司的笨蛋,安装的系统,毛病多多,竟是奇怪的问题,找不出答案的问题。我自己的新环 ...

举例:我说需要重启服务器,居然要发邮件,还要发一个工作流请求,然后Team Leader告诉我:等一两周!!!!
大哥,bounce a production server,不是一台workstation,要走流程是肯定的,保护公司,主要是保护自己,永远不要以为简单的重启不会有什么问题,莫菲定律大家都知道的。
举例:我们公司测试服务器升级,居然搞了一个新的服务器名,我被迫更新所有代码设计到路径和机器名的部分!!!原来都是硬件更换,机器名不变,这样一个好处是不需要更改应用的路径,另外一方面,升级不成功,可以来回切换!!!
我会建议用DNS,把你要访问的服务器在DNS上设一条entry,比如 ClientDB.xyz.biz之类的,然后所有程序用到这个服务的时候只用DNA Entry,将来再有任何其他的改动(机器名,IP地址等等),只需改动DNS就可以了。。。

评分

参与人数 1威望 +50 收起 理由
coredump + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

18#
发表于 19-8-2010 11:08:15 | 只看该作者
原帖由 xblues 于 19-8-2010 02:48 发表
在公司加班到半夜11点回家,搞定了所有SSIS和SSRS的异构数据库的连接

在家接着加班,搞定了Openrowset 和 Linked Server的建立!

臭骂我们公司的IT。。。。。。。。。。。。&*(%^&$(^&%&^&^%%&%%^%^$$E$%$%$%$ ...


没有Pk,没有办法同步啊。。。
回复  

使用道具 举报

19#
发表于 19-8-2010 11:11:55 | 只看该作者
如果是MS SQL相关的话,这个论坛有不少有用得东东。

http://www.sqlservercentral.com/
回复  

使用道具 举报

20#
发表于 21-8-2010 00:41:59 | 只看该作者
http://www.freeoz.org/ibbs/viewt ... e%3D1&frombbs=1

各位前辈, 请大伙发表发表看法吧,谢谢啦!
回复  

使用道具 举报

21#
发表于 24-8-2010 22:10:17 | 只看该作者
快成DBa版了
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 27-4-2024 14:35 , Processed in 0.064498 second(s), 40 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表