当前位置:首页 > 开发教程 > 数据库 >

通过SQL Server 2008 访问Oracle 10g

时间:2013-05-06 17:44 来源: 作者: 收藏

  准备工作

  事先在需要访问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 数据库。

通过SQL Server 2008 访问Oracle 10g

  创建Linked Server

  打开SQL Server Management Studio 进入Server Objects 列表,右键Linked Servers,点击“New Linked Server...”

通过SQL Server 2008 访问Oracle 10g

  在General 界面中填写下面几项内容:

  Linked server: 填写Linked Server 名称

  Provider:选择Microsoft OLE DB Provider for Oracle

  Product name:填写Oracle

  Data source:填写上面提到的数据库别名ORADB

通过SQL Server 2008 访问Oracle 10g

  点击Security ,点选“Be made using this security context”,假设Oracle 数据库有一个名称为admin 的用户ID,在“Remote login”中输入访问帐号,点击“OK”结束创建。

通过SQL Server 2008 访问Oracle 10g

  完成后Linked Servers 中会看到刚创建的Oracle 数据库链接。

通过SQL Server 2008 访问Oracle 10g

  访问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 数据库,并做相应的数据调整。

0 0   标签: SQL Server 2008Oracle 10g   

数据库阅读排行

最新文章