sqlserver查询到oracle,SQLServer数据迁移在32位的机器上:从SQLServer中查询ORACLE中的数据...

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

在32位的机器上,通过访问接口:Microsoft OLE DB Provide for Oracle,来实现。

1、机器环境和软件环境

机器是一台虚拟机,安装了windows xp,SQL Server 20008R2,Oracle 10g 10.2.0.1.0。

2、ORACLE环境的设置

连接oracle:

C:Documents and SettingsAdministrator>sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 3月 13 15:22:29 2014

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

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

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

SQL> alter user scott identified by tiger;

用户已更改。

SQL> alter user scott account unlock;

用户已更改。

SQL> connect scott/tiger

已连接。

SQL> select count(*) from emp;

COUNT(*)

----------

14

查看listener.ora是否正确:

# listener.ora Network Configuration File: C:oracleproduct.2.0db_1

etworkadminlistener.ora

# Generated by Oracle configuration tools.

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = C:oracleproduct.2.0db_1)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME=orcl)

(ORACLE_HOME = C:oracleproduct.2.0db_1)

(SID_NAME =orcl)

)

)

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

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

)

)

要特别注意里面的:

(SID_DESC =

(GLOBAL_DBNAME=orcl)

(ORACLE_HOME = C:oracleproduct.2.0db_1)

(SID_NAME =orcl)

)

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

# tnsnames.ora Network Configuration File: C:oracleproduct.2.0db_1

etworkadminnsnames.ora

# Generated by Oracle configuration tools.

ORCL =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

EXTPROC_CONNECTION_DATA =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

)

(CONNECT_DATA =

(SID = PLSExtProc)

(PRESENTATION = RO)

)

)

特别是:

ORCL =

(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

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

SQL> host lsnrctl status

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 13-3月 -2014 15:23:31

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

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))

LISTENER 的 STATUS

------------------------

别名 LISTENER

版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production

启动日期 13-3月 -2014 14:20:27

正常运行时间 0 天 1 小时 3 分 6 秒

跟踪级别 off

安全性 ON: Local OS Authentication

SNMP OFF

监听程序参数文件 C:oracleproduct.2.0db_1

etworkadminlistener.ora

监听程序日志文件 C:oracleproduct.2.0db_1

etworkloglistener.log

监听端点概要...

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\.pipeEXTPROC1ipc)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

服务摘要..

服务 "PLSExtProc" 包含 1 个例程。

例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

服务 "orcl" 包含 1 个例程。

例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...

命令执行成功

3、设置链接服务器。

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

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

4da3a29a73cfdaf8050a5af2ffd8bbfe.png

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

bdaccf3ef718008f8b2847c609ef26d6.png

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

e112c26e5186db0967d4501a0c501765.png

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

f6437123b496e9320636539bff715756.png

4、测试查询

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

返回结果:

ee8632be47f863b89e47a7f0c624ae61.png

5、用代码实现:

EXEC master.dbo.sp_addlinkedserver

@server = N'ORACLE_SCOTT',

@srvproduct=N'ORACLE',

@provider=N'MSDAORA',

@datasrc=N'orcl'

go

/* For security reasons the linked server remote logins password is changed with ######## */

EXEC master.dbo.sp_addlinkedsrvlogin

@rmtsrvname=N'ORACLE_SCOTT',

@useself=N'False',

@locallogin=NULL,

@rmtuser=N'scott',

@rmtpassword='tiger'

GO

select * from openquery(xxx, 'SELECT * FROM scott.emp')

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

select *

from openrowset('MSDAORA','orcl';'scott';'tiger','select * from SCOTT.EMP')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值