Sql2008连接访问Oracle 11g

时间:2021-12-13 20:23:56
  1. 连接方法

    通过SQL server 的 linkedserver的功能连接

  2. 实际操作

准备工作

事先在需要访问Oracle 数据库的主机上完成以下工作:

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

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

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

ORADB =  

 (DESCRIPTION =  

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

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

Sql2008连接访问Oracle 11g

创建Linked Server

 

配置OraOLEDB.Oracle 勾选箭头方向

Sql2008连接访问Oracle 11g

打开SQL Server Management Studio 进入服务器对象 列表,右键链接服务器,点击"新建链接服务器…"

Sql2008连接访问Oracle 11g

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

链接服务器: 自定义填写名称

访问接口:选择Oracle Provider for OLE DB

产品名称:自定义填写

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

Sql2008连接访问Oracle 11g

点击安全性 ,点选"使用此安全上下文建立连接",假设Oracle 数据库有一个名称为system的用户ID,在"远程登录"中输入访问帐号,点击"确定"结束创建。

 

完成后链接服务器中会看到刚创建的Oracle 数据库链接。

Sql2008连接访问Oracle 11g

访问Oracle

接下来就可以在SQL Server 端访问Oracle 数据库了,查询语法如下:

  1. SELECT * FROM LINKED_NAME..ACCOUNT_NAME.TABLE_NAME; 

    结合上面的实例,假如要查询system 用户下jobs 表的内容,则相应SQL 语句应为:

  2. SELECT * FROM ORASVR..system.JOBS; 

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

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

  3. SELECT * FROM OPENQUERY(LINKED_NAME,'SELECT * FROM TABLE_NAME'); 

    按照OPENQUERY 的语法上面SQL 语句应变为:

  4. SELECT * FROM OPENQUERY(ORASVR,'SELECT * FROM JOBS'); 

    这样我们就可以在SQL Server 端方便的访问Oracle 数据库,并做相应的数据调整。