【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据

从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 、64位的机器和软件,需要用不同的驱动程序来实现。

在64位的机器上,通过访问接口:OracleProvide for OLE DB,来实现。

1、机器环境和软件环境

操作系统是:windows 7旗舰版 64位,SQL Server 20008R2  64  位,Oracle 11g 11.2.0.1.0   64 位。

2、ORACLE环境的设置

连接oracle,修改scott用户的密码为tiger,并给账户解锁,尝试登录,查询表:

C:\Users\Administrator>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 3月 13 16:11:03 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> alter user scott identified by tiger;

用户已更改。

SQL> alter user scott account unlock;

用户已更改。

SQL> connect scott/tiger
已连接。
SQL> select count(*) from emp;

  COUNT(*)
----------
        12

查看listener.ora是否正确:

# listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
    )

    (SID_DESC =
      (GLOBAL_DBNAME=orcl)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME =orcl)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

要特别注意里面的:

(SID_DESC =

(GLOBAL_DBNAME=orcl)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
      (SID_NAME =orcl)
)

另外,查看tnsnames.ora是否正确:

# tnsnames.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

LISTENER_orcl =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SID = orcl)
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

特别是:

orcl =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SID = orcl)
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

查看监听器的状态是否正常:

SQL> host lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 13-3月 -2014 16:16:21

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名                      LISTENER
版本                      TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
启动日期                  13-3月 -2014 13:17:27
正常运行时间              0 天 2 小时 58 分 58 秒
跟踪级别                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
监听程序参数文件          D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
监听程序日志文件          d:\app\administrator\diag\tnslsnr\ggg-PC\listener\alert\log.xml
监听端点概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
服务摘要..
服务 "CLRExtProc" 包含 1 个实例。
  实例 "CLRExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
  实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功

3、设置链接服务器。

需要特别注意的是,数据源orcl指的是:tnsnames.ora文件中的orcl服务名。

第一步,选择“新建链接服务器”

第二步,一定要选择 Oracle Provide for OLE DB

第三步,输入产品:oracle,数据源:orcl

第四步,输入oracle的用户名和密码,这个需要根据实际情况设置,输入完后,点确定就好。

4、测试查询

select * from openquery(xxx, ‘SELECT * FROM emp‘)

返回结果:

5、用代码实现:

/****** Object:  LinkedServer [ORCL_SCOTT]    Script Date: 03/13/2014 16:25:21 ******/
EXEC master.dbo.sp_addlinkedserver
       @server = N‘ORCL_SCOTT‘,
       @srvproduct=N‘oracle‘,
       @provider=N‘OraOLEDB.Oracle‘,
       @datasrc=N‘orcl‘
GO

 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin
       @rmtsrvname=N‘ORCL_SCOTT‘,
       @useself=N‘False‘,
       @locallogin=NULL,
       @rmtuser=N‘scott‘,
       @rmtpassword=‘tiger‘
go

select * from openquery(ORCL_SCOTT, ‘SELECT * FROM scott.emp‘)

还可以用?表示绑定变量:

EXEC ( ‘SELECT * FROM scott.emp‘) AT ORCL_SCOTT;
GO
EXEC ( ‘SELECT * FROM scott.emp WHERE MGR = ?‘, 7902) AT ORCL_SCOTT;
GO

DECLARE @v INT;
SET @v = 7902;
EXEC ( ‘SELECT * FROM scott.emp WHERE MGR = ?‘, @v) AT ORCL_SCOTT;
GO 

6、通过openrowset函数来实现,更简单。

select *
from openrowset(‘OraOLEDB.Oracle‘,‘orcl‘;‘scott‘;‘tiger‘,
                ‘select * from SCOTT.EMP‘)

返回结果:

时间: 2024-10-25 02:26:54

【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据的相关文章

Win8.1OS64位oracle11安装配置及PL/SQL Developer如何连接64位oracle

Oracle 为什么选择oracle 1.oracle能够在主流的平台上运行,而相对于sql server只支持windows,而windows在wr手里攥着呢,所以你懂的.在安全性上来讲,很多地方oracle和linux就是个不错的选择: 2.支持的连接模式上,oracle能够支持oledb,jdbc,oci等标准进行连接. 3.从80年代起,oracle开始了oracle6的发布.用户群庞大加上多年coder的开发的经验,可以说是历经磨练. 与其他数据库的比较 Oracle11的安装 最新下

Windows Server 2008企业64位版防火墙添加端口的方法

原始地址:http://www.veryhuo.com/a/view/48280.html 什么是防火墙的入站规则和出站规则 简单的说 出站就是你访问外网 入站就是外网访问你 记得在两年前写过一篇教程,是关于windows server 2008下如何给系统防火墙添加端口的,现在来补充一下.因为今天有朋友来咨询烈火网小编,他的windows2008是64位企业版的,找了很久也没有找到添加端口的地方,而在防火墙中的“更改设置”是灰色的按钮,无法点击,如下图: 现在就来教大家在windows ser

PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验

一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL developer中输入中文,保存后,中文变成'??'这样的乱码符号 3.导入带有中文的数据后,中文数据变成'??'这样的乱码符号 环境: 1.windows7 64位系统 2.oracle11g 64位系统 3.PL/SQL developer 9.0 解决方法: 1.下载windows32位的instantclient包,并放到某个目录下,假设D:\instantclient 2.拷贝D:\app\A

PL/SQL Developer如何连接64位的Oracle图解

由于硬件技术的不断更新,Win7系统逐渐成为主流,而且计算机内存逐渐增大,为了充分的利用内存资源(因为32为系统最多只能用到3G左右的内存),提高系统性能,很多人开始使用Win7(64Bit)的系统.在64位系统上安装64位的Oracle数据库,但是没有对应的64位PL/SQL Developer,此时就不能使用PL/SQL Developer来进行直接连接的,所以要想实现连接还得需要其他途径来完成.下面就来说明如何实现连接. 一.下载Oracle客户端 下载地址:http://www.orac

阿里云服务器(windows server 2012 r2 64位)安装MYSQL8.0.18数据库 (小白必备)

今儿中午询问了朋友关于服务器的一些事情后,就开始安装了,从中午大概一点,整到晚上九点,终于装成功了,感觉安装过程能遇到的问题全遇到了,给后面的朋友一些参考意见把. 第一次碰云服务器,措辞不当或不正确之处恳请大家评论指出. 1:登录服务器(对于小白第一次玩服务器有必要说这一步),因为很多教程直接开始安装,可是当时我纠结了很久到底是安装到服务器上面还是本机…,点击远程连接就好啦,注意右边的三角是绿色运行状态. 第一次进入之后会有一个密码,一定一定要记住,因为后期不会重复出现,而后期登录一直需要它!(

[Oracle] - 使用32位 PLSQL(PL/SQL Developer)登陆64位Oracle失败之解决

配置环境 Oracle服务端oracle_winx64_12c_database.iso Oracle客户端instantclient-basiclite-nt-12.1.0.1.0.zip 集成开发环境PL/SQL Developer 10.0.5.1710 配置步骤 确保 Oracle 已经完成配置,并可以使用 SQL Plus 登陆成功. 如果使用 PL/SQL 登陆 Oracle 失败,错误提示如下: 登陆失败原因分析:64位 Oracle 安装路径:E:appAdministrator

oracle 11g 64位使用PL/SQL无法登陆的解决方法(转)

因为要用PL/SQL,所以今天刚安装oracle 11g 64位,结果打开之后PL/SQL没有自动自动配置,登录不了. 然后网上找了如下博文,按照步骤问题解决.分享下博文内容 1)安装Oracle 11g 64位 2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0) 下载instantclient-basic-win32-11.2.0.1.0.zip (一定得是32位的,不要下错了版本,Oracle官网有下载),将其解压至Oracle安

Windows Server 2003 R2 64位简体中文版下载

32位版CD1:SHA1值:d0dd2782e9387328ebfa45d8804b6850acabf520ed2k://|file|cn_win_srv_2003_r2_enterprise_with_sp2_vl_cd1_X13-46432.iso|637917184|284dc0e76945125035b9208b9199e465|h=EH6ISTIVFR5627ONBBNBKELX4VYGJPAW|/ CD2:SHA1值:4b364e848fcc59762dddced1493248e28

Windows Server 2003 sp2 64位认不全大容量硬盘的处理

服务器新安装了一块4T大容量硬盘,已经使用GPT方式分区,但是系统只认到1677.9G. 明明在本地测试的时候是能看到4T的,我安装的也是2003的操作系统,有可能是没安装哪个补丁. 搜索得知KB919117此补丁未安装,这个补丁的作用就是让2003的驱动程序支持64位LBA. 下载地址:https://support.microsoft.com/zh-cn/kb/919117 微软要求你输入邮件地址,发送到你的邮箱. http://hotfixv4.microsoft.com/Windows%