通过SQL Server 访问Oracle

来源:互联网 发布:sqlserver培训学校 编辑:程序博客网 时间:2024/05/02 01:13

方法1. 通过oracle 客户端tnsnames.ora直接oracle

1. 安装SQL Server 数据库:SQL Server 2008 R2 Express

2. 安装Oracle 客户端访问程序:Oracle 10g Client

3. 配置Oracle 客户端tnsnames.ora 文件,其中需要注意文件中的数据库别名“ORADB”,该名称在下文创建Linked Server 时将会使用到。

ORADB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTIP)(PORT = 1521)) (CONNECT_DATA = (SID = DBNAME)) )

4. 确保主机可以通过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 数据库链接。

SQL的写法有两种,用户名和表名必须大写

a) 使用T-SQL语法:

SELECT * FROM Orasvr..SCOTT.EMP;

使用上述方法进行数据查询时,若Oracle 表有NUMBER 列时会出现转化错误,这时可以将NUMBER 类型转化为字符串(也有将该列属性修改成NUMBER(10),为NUMBER 列设定好位数)。考虑到View 查询等因素个人感觉还是转为字符串的方式较为通用。

当然如果查询的列过多,每个NUMBER 列都转为VARCHAR 的话工作量也的确不小,这时最好的方法就是使用OPENQUERY 函数:

b) 使用PLSQL语法:
SELECT * FROM openquery(Orasvr,'SELECT * FROM  SCOTT.EMP')

c)第二种访问方式比第一种约快50%;第二种访问方式跟直连ORACLE的速度相当;第一种访问方式可能会导致一些意外错误,如:
该表不存在,或者当前用户没有访问该表的权限等等一些信息。

d)如果需要访问的column中使用没有精度的数据类型,这两种查询方式都可能会报错,这是ORACLE的BUG,无法修正,只能通过查询语句的特殊处理规避这一问题:
OLE DB 提供程序 'OraOLEDB.Oracle' 为列提供的元数据不一致。执行时更改了元数据信息。

上面的调试过程中完成后。当SQL访问oracle 时报如下错误:

无法初始化链接服务器 "Orasvr" 的 OLE DB 访问接口 "MSDAORA" 的数据源对象。
链接服务器"Orasvr"的 OLE DB 访问接口 "MSDAORA" 返回了消息 "未找到 Oracle 客户端和网络组件。这些组件是由 Oracle 公司提供的,是 Oracle 8i 版 (或更高) 客户软件安装的一部分。

解决方法:需要将ORACLE安装后的目录设为所使用的用户有权可运行、可添加、可删除(添加Everyone用户,完全控制即可),重新启动操作系统,就可以了,网上还有改注册表的方法。

方法2. 通过OBDC 连接oracle

1. 安装SQL Server 数据库:SQL Server 2008 R2 Express

2. 安装Oracle 客户端访问程序:Oracle 10g Client

3. 配置Oracle 客户端tnsnames.ora 文件,其中需要注意文件中的数据库别名“ORADB”,该名称在下文创建Linked Server 时将会使用到。

ORADB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = HOSTIP)(PORT = 1521)) (CONNECT_DATA = (SID = DBNAME)) )

4. 确保主机可以通过SQLPlus 访问远程Oracle 数据库。

5..配置windows的ODBC数据源

                   开始菜单—》设置—》管理工具—》数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:添加—》选择Microsoft ODBC for oracle—》自定义数据源名称(最好跟tns中连接串同名!)—》服务器名称(必填!填写tns文件中的连接串名称)—》完成。

    此配置过程有如果是64bit 操作系统,添加  数据源(ODBC)通过这个目录下的文件添加(C:\Windows\SysWOW64\odbcad32),此问题是由于64bit系统默认是32bit 的ODBC驱动。

创建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 数据库链接。

  完成之后要记得重新启动!