【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
来源:互联网 发布:澳大利亚旅游 知乎 编辑:程序博客网 时间:2024/04/30 05:07
从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 sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期四 3月 13 16:11:03 2014Copyright (c) 1982, 2010, Oracle. All rights reserved.连接到:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> 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 statusLSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 13-3月 -2014 16:16:21Copyright (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 AuthenticationSNMP 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'goselect * from openquery(ORCL_SCOTT, 'SELECT * FROM scott.emp')
还可以用?表示绑定变量:
EXEC ( 'SELECT * FROM scott.emp') AT ORCL_SCOTT;GOEXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', 7902) AT ORCL_SCOTT;GODECLARE @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')
返回结果:
- 【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
- 【SQL Server数据迁移】32位的机器:SQL Server中查询ORACLE的数据
- 关于Oracle与SQL Server中数据迁移的办法
- Oracle与SQL Server之间的数据迁移
- Oracle与SQL Server之间的数据迁移
- SQL Server 的数据查询
- 从Sql Server迁移数据到Oracle
- SQL SERVER数据迁移到ORACLE
- 【SQL Server数据迁移】链接服务器、分布式查询:SQL Server、ORACLE、Excel、txt、Access
- SQL SERVER查询一个月的数据
- sql anywhere 的unload和reload(数据迁移) 用微软sql server 的DTS实现从 ORACLE导出数据到Sql Anywhere数据库中
- 数据迁移(sql server 迁移到 oracle)
- sql server 查询出来的数据中带单引号
- SQL server表中查询重复的数据
- 【SQL Server数据迁移】把csv文件中的数据导入SQL Server的方法
- sql,oracle,sql server数据迁移(差别)
- SQL Server至DB2的数据迁移(1)
- SQL Server向Oracle迁移的解决方案
- Hibernate调用Oracle的存储过程
- [Linux/Ubuntu] vi/vim 使用方法讲解
- 总结了Struts1与Struts2的11点区别
- 剑指offer(35)-两链表的第一个公共结点[数据结构]
- Ubuntu12.04搭建BigBlueButton
- 【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据
- u-boot.lds 如何定位代码在flash和内存中地址
- 2014.03.13-生命的意义到底在于什么?
- 我们为什么要使用NodeJS
- POJ 2125 最小点权覆盖集(输出方案)
- UDP用打洞技术穿透NAT的原理与实现
- Android 自动编译、打包生成apk文件 2 - 使用原生Ant方式
- Oracle 学习笔记 查询(重点,也是基础)
- 为何要学习MFC?