通过SQL Server访问Oracle
通过SQL Server 2008 访问Oracle 10g
之前写过一篇关于SQL Server 访问MySQL 数据库的文章,最近正好又遇到需要访问Oracle 的情况,将配置过程记录下来也供大家参考。
准备工作
事先在需要访问Oracle 数据库的主机上完成以下工作:
- 安装SQL Server 数据库:SQL Server 2008 R2 Express
- 安装Oracle 客户端访问程序:Oracle 10g Client
- 配置Oracle 客户端tnsnames.ora 文件,其中需要注意文件中的数据库别名“ORADB”,该名称在下文创建Linked Server 时将会使用到。
ORADB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOSTIP)(PORT = 1521))
(CONNECT_DATA = (SID = DBNAME))
) - 确保主机可以通过SQLPlus 访问远程Oracle 数据库。
创建Linked Server
打开SQL Server Management Studio 进入Server Objects 列表,右键Linked Servers,点击“New Linked Server...”
在General 界面中填写下面几项内容:
Linked server: 填写Linked Server 名称
Provider:选择Microsoft OLE DB Provider for Oracle
Product name:填写Oracle
Data source:填写上面提到的数据库别名ORADB
点击Security ,点选“Be made using this security context”,假设Oracle 数据库有一个名称为admin 的用户ID,在“Remote login”中输入访问帐号,点击“OK”结束创建。
完成后Linked Servers 中会看到刚创建的Oracle 数据库链接。
访问Oracle
接下来就可以在SQL Server 端访问Oracle 数据库了,查询语法如下:
SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME;
结合上面的实例,假如要查询admin 用户下jobs 表的内容,则相应SQL 语句应为:
SELECT * FROM ORASVR..ADMIN.JOBS;
使用上述方法进行数据查询时,若Oracle 表有NUMBER 列时会出现转化错误,这时可以将NUMBER 类型转化为字符串(也有将该列属性修改成NUMBER(10),为NUMBER 列设定好位数)。考虑到View 查询等因素个人感觉还是转为字符串的方式较为通用。
当然如果查询的列过多,每个NUMBER 列都转为VARCHAR 的话工作量也的确不小,这时最好的方法就是使用OPENQUERY 函数:
SELECT * FROM OPENQUERY(LINKED_NAME,'SELECT * FROM TABLE_NAME');
按照OPENQUERY 的语法上面SQL 语句应变为:
SELECT * FROM OPENQUERY(ORASVR,'SELECT * FROM JOBS');
这样我们就可以在SQL Server 端方便的访问Oracle 数据库,并做相应的数据调整。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了