方法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 数据库链接。