MSSQL连接ORACLE实例
- 格式:doc
- 大小:374.50 KB
- 文档页数:17
SQLServer链接服务器至Oracle1. 我方服务器必须安装msdtc服务,并进行相应配置。
2. 我方服务器必须安装oracle client,这个要对应中心站oracle版本的客户端。
3. 我方服务器必须安装Oracle Services For Microsoft Transaction Server [版本]Oracle Provider for OLE DB [版本]这2个可以在Oracle官方网站下载[/technology/software/tech/windows/odpnet/index.html]此文件为分布式事务必须的插件。
4. Oracle给我们分配一个Oracle的用户名和密码,具有写入/读取表的权限。
5. 在我方系统的SQLServer服务器上建立链接服务器,指向Oracle数据库,链接服务器访问接口必须为[Oracle Provider for OLE DB](否则无法启动分布式事务)。
1. 在写存储过程向oracle数据库中 insert、delete、update的时候,一定要加上SET XACT_ABORT ON此为开启镶嵌事务标志,否则分布式事务会失败。
2. 对于从oracle或sqlserver中select数据的时候没有必要加入事务范围内,会锁表浪费时间。
3. 查询语句格式为:SELECT * FROM openquery(ORA_DBENSIS, 'select ID from TEST_TRANS')或者SELECT * FROM ORA_DATABASE..TEST_USER.TEST_TRANS用户名TEST_USER、表名TEST_TRANS必须大写4. 插入语句格式为:INSERT openquery(ORAENSIS, 'select ID from TEST_TRANS where 1=0')values (1)在SQL SERVER中访问ORACLE表的方法在SQL SERVER中,能否访问ORACLE表,进行查询操作呢?答案无疑是可以的,下面就为你介绍在SQL SERVER中访问ORACLE表的实现方法,供您参考。
无法创建链接服务器“XXXXX”的OLE DB 访问接口“OraOLEDB.Oracle”的实例。
(Microsoft SQL Server,错误: 7302)老外给出了一个解决这个问题的步骤,相当详细严谨,几乎面面俱到。
可以作为参考学习的好资料:Ran into this issue where the linked server would work for users who were local admins on the server, but not for anyone else. After many hours of messing around, I managed to fix the problem using the following steps:1:Run “dcomcnfg.exe”. Navigate to “Component Services -> Computers -> My Computer -> DCOM Config”.2:Open the properties page of “MSDAINITIALIZE”.3:Copy the “Application ID” on the properties page.4:Close out of “dcomcnfg”.5:Run “regedit”. Navigate to “HKEY_CLASSES_ROOT\AppID\{???}” with the ??? representing the application ID you copied in step #3.6:Right click the “{???}” folder and select “Permissions”7:Add the local administrators group to the permissions, grant them full control. 8:Close out of “regedit”.9:Reboot the server.10:Run “dcomconfig”. Navigate to “Component Services -> Computers -> My Computer -> DCOM Config”.11:Open the properties page of “MSDAINITIALIZE”.12:On the “Security” tab, select “Customize” under “Launch and Activation Permissions”, then click the “Edit” button.13:Add “Authenticated Users” and grant them all 4 launch and activation permissions.14:Close out of “dcomcnfg”.15:Find the Oracle install root directory. “E:\Oracle” in my case.16:Edit the security properties of the Oracle root directory. Add “Authenticated Users” and grant them “Read & Execute”, “List folder contents” and “Read”permissions. Apply the new permissions.17:Click the “Advanced Permissions” button, then click “Change Permissions”. Select “Replace all child object permissions with inheritable permissions from this object”. Apply the new permissions.18:Find the “OraOLEDB.Oracle” provider in SQL Server. Make sure the “Allow Inprocess” parameter is checked.19:Reboot the server.。
一、创建sqlserver链接服务(sqlserver链接oracle)首先sqlserver 链接oracle可以通过两个访问接口:“MSDAORA” 和“OraOLEDB.Oracle”1、“MSDAORA”访问接口是由Microsoft OLE DB Provider for Oracle提供的,这里建议不使用此接口进行链接。
通过该访问接口建立的链接服务器在进行查询oracle表(带数据类型CLOB、BLOB字段)时会报这个错误“链接服务器""的 OLE DB 访问接口 "MSDAORA" 返回了消息 "发生了一个Oracle 错误,但无法从 Oracle 中检索错误信息。
"。
链接服务器""的 OLE DB 访问接口 "MSDAORA" 返回了消息 "数据类型不被支持。
"。
消息 7321,级别 16,状态 2,第 1 行准备对链接服务器 "" 的 OLE DB 访问接口 "MSDAORA" 执行查询"select * from SYS_MESSAGE"时出错。
”链接服务器 "LINK2ORACLE" 的 OLE DB 访问接口 "MSDAORA" 为列提供的元数据不一致。
对象 ""CMCC"."OS2_GIS_CELL"" 的列 "ISOPENED" (编译时序号为20)在编译时有 130 的 "DBTYPE",但在运行时有错。
2、“OraOLEDB.Oracle” 访问接口是由oracle 的Oracle Probider forOLE DB 驱动提供的。
它解决了两个数据库类型不一致的的问题。
SQL Server 是微软公司推出的一种关系型数据库管理系统(RDBMS),而 Oracle 则是甲骨文公司的一种商业关系型数据库管理系统。
在实际应用中,有时候需要进行跨库查询,即在 SQL Server 中查询 Oracle 数据库的数据。
本文将介绍如何编写 SQL 语句来实现跨库查询。
1. 连接 Oracle 数据库在 SQL Server 中进行跨库查询,首先需要建立与 Oracle 数据库的连接。
可以通过使用“信息服务器”功能来实现这一步骤。
在 SQL Server Management Studio 中,找到“服务器对象”下的“信息服务器”,右键单击后选择“新建信息服务器”,在弹出的对话框中选择“Oracle Provider for OLE DB”,并填写相应的连接信息,如Oracle 数据库的位置区域、用户名、密码等。
注意要确保 SQL Server 和 Oracle 数据库之间网络畅通,并且有相应的权限。
2. 执行跨库查询连接建立完成后,就可以在 SQL Server 中编写跨库查询的 SQL 语句了。
在执行查询时,可以使用四部分限定名来指定 Oracle 数据库中的表。
如果在 Oracle 数据库中有一个叫做“EMPLOYEE”的表,可以通过以下方式在 SQL Server 中进行查询:```sqlSELECT * FROMOracleServerName.OracleDatabaseName.dbo.EMPLOYEE```其中,“OracleServerName”是在连接服务器时设置的名称,“OracleDatabaseName”是Oracle 数据库的名称,“EMPLOYEE”是要查询的表名。
3. 使用 OPENQUERY 函数另一种执行跨库查询的方法是使用 SQL Server 中的 OPENQUERY 函数。
这个函数可以在 SQL Server 中直接执行一个在远程服务器上的查询。
SQL连接,Oracle关联加号(+)等相关知识hebo2005:假设有a表id1234b表id123希望出来结果a.idb.id1 12 23 34用left join 的SQL codeselect a.id,b.idform a left jion b on a.id=b.id用(+)的SQL codeselect a.id,b.idform a ,bwhere a.id=b.id(+)用(+)的语法简洁,容易读懂,但只是ORACLE支持,LEFT JOIN是通用的,其它没有差别zengdan84:select * from a, b where a.id = b.id;对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。
1. LEFT OUTER JOIN:左外关联SELECT st_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id);等价于SELECT st_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id=d.department_id(+);结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。
2. RIGHT OUTER JOIN:右外关联SELECT st_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id);等价于SELECT st_name, e.department_id, d.department_nameFROM employees e, departments dWHERE e.department_id(+)=d.department_id;结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。
sqlserver 连接oracle 配置详解2011-12-21 10:29 229人阅读评论(0) 收藏举报方法一:一、安装配置oracle客户端要访问orcale数据,必须在访问的客户端机器上安装oracle客户端。
Orcale有两种形式的客户端:l 完整的客户端包括访问服务器端数据库的基本Oracle 的 Microsoft OLE DB 访问接口需要 Oracle Client Software Support File以及SQL*Net 。
还包括用于配置客户端设置的工具、sqlplus、企业管理器等一系列的工具。
l 立即客户端(instant client)这个客户端体积很小,但是只包括了访问orcale服务器的最基本的支撑驱动,没有设置管理工具,也找不到可用的图形界面。
对客户端的设置需要手工就行。
目前orcale比较新的是oracle 10g版本,以这个版本为例。
1、下载oracle 10 的客户端可以到orcale官方网站下载,需要先注册,然后下载。
下载适用于Microsoft Windows (32-bit)的Oracle Database 10g Client Release 2的客户端,下载地址:/otn/nt/oracle10g/10201/10201_client_win32.zip2、安装oracle 10 客户端下载好后,解压,安装。
安装时有四个选项:l Instantclient,相当于最小化安装。
l 管理员,完整安装。
l 运行时l 自定义为了管理方便,一般以管理员方式安装。
3、配置oracle 10 客户端在客户端主要需要配置两个设置,命名方法和服务器别名,还有一个监听程序是服务端需要用的,用来监听客户端的访问,客户端不必设置监听程序。
这些设置都能在net manager工具中进行,在oracle程序组中的“配置和移植工具”中的“net manager”。
如图所示:概要文件就是用来设置命名方法和验证方式的的3.1. 命名方法在窗口左面的上部下拉列表中选“命名”,左边窗口显示目前可用的方法,右边是已经选择的命名方法,几个主要的命名方法有:l TNSNAMES表示采用TNSNAMES.ORA文件来解析l ONAMES表示Oracle使用自己的名称服务器(Oracle Name Server)来解析,目前Oracle建议使用轻量目录访问协议LDAP来取代ONAMESl HOSTNAME表示使用host文件,DNS,NIS等来解析一般使用本地命名方式来解析服务器名,即使用TNSNAMES.ORA中设置的服务器名。
记录SQLServer2019链接Oracle11gR2的过程前言基于作者项目特性,需要从A方Oracle导出数据到SQL Server 中,A方使用Oracle 11g R2,我方使用SQL Server 2019,在搜集相关资料以及结合项目进展,提出使用SQL Server链接Oracle的方式,便于简化开发环境。
操作过程简述1.安装配置OracleClient在服务器上安装SQL Server和Oracle Client(如win64_11gR2_client),配置tnsnames.ora(以下为测试环境配置)1 ORCLDB=2 (DESCRIPTION =3 (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))4 (CONNECT_DATA =5 (SERVER = DEDICATED)6 (SERVICE_NAME = ORCL)7 )8 )9 #其中HOST = 127.0.0.1输入Oracle服务器IP,PORT输入Oracle端口,SERVICE_NAME输入目标Oracle的服务名。
2.配置SQL Server(非必要配置)打开 SQL Server <version> Configuration Manager选择SQL Native Client <all version> Configuration设置[TCP/IP]为Enable配置SQL Server Network Configuration配置Protocols For MSSQLSERVER中[TCP/IP]为Enable打开MSSM,选择目标数据库,右键[属性]选择[连接],确认勾选[允许远程连接到此服务器]3.配置链接数据库MSSM中目标数据库->服务器对象->链接服务器展开Providers,双击OraOLEDB.Oracle(该选项需要在SQL Server服务器上预装OracleClient),确认勾选[允许进程内]和[支持"Like"运算符],其它不勾选,确认保存右键[链接服务器],选择[新建链接服务器]选择[常规]左侧边栏,提供程序选择[Oracle Profider for OLE DB],产品名称输入Oracle,数据源输入:1)输入tnsnames.ora中配置的数据源,访问接口字符串(以下为测试环境配置):[IP地址]:1521/orcl数据源格式为IP:端口/实例选择[安全性]左侧边栏,单选[使用此安全上下文建立连接(M):],在[远程登录:]和[使用密码:]对应的输入框中输入Oracle访问的用户名和密码。
如何实现SQLServer2008R2连接Oracle11gR2(64位版)一、实现连接前的准备软件准备1、SQLServer2008R2点击下载2、win64_11gR2_client点击下载3、ODAC112021Xcopy_x64点击下载二、连接方法通过SQLServer的LinkedServer功能连接Oracle三、实际操作1.1首先配置Client在SQLServer的主机上安装完Oracle的客户端后,可以在数据源里面看到Oracle的ODBC驱动,注意客户端的版本,最注意的是要根据操作系统来选择是64位或32位(此处选择64位),(在64位操作系统必须安装64位Oracle客户端才会在windows的数据源中才能显示出如下图所示驱动)PS.在64位操作系统中可以同时安装64位和32位Oracle客户端,其中默认配置文件已后面安装的目录和文件为准。
两个客户端都生效。
安装完成后在Oracle_Home(64位)下面查看的NETWORK\ADMIN找到tnsnames并加入如下内容注:ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)))1.2安装ODBC驱动先解压安装包ODAC112021Xcopy_x64,把里面的文件都解压到一个文件夹里,我是解压到D:\ODAC112040Xcopy_64bit,然后打开cmd,进入到这个文件夹。
如图输入"install.bat all D:\OracleClient ODAC"(不含双引号)。
这里有几个参数需要特别注意,这里我们传入了三个参数,但最多可以传入四个。
注:后面的“D:\OracleClient ODAC”是安装目录,按照需求更改安装成功后会在SQLServe->Linked Servers中找到OraOLEDB.Oracle 服务,表示安装成功。
sql server连接Oracle方法(一)在SQL Server所在服务器中安装Oracle客户端程序,并设定好TNS(二)在SQL Server中添加Link Server,设置方法如下:以上设置也可以透过执行sql server的存储过程实现。
sp_addlinkedserver & sp_addlinkedsrvlogin(三)连接建立完成后,就可以执行查询语句了,查询的示例如下:/*查询*/select * from openquery(TESTORA, 'SELECT t01,t02 FROM tex_file')/*插入数据*/INSERT OPENQUERY(TESTORA, 'select t01 from tex_file')select 'testabc'/*更新数据*/update OPENQUERY(TESTORA, 'select t01 from tex_file') set t01='hellowo'where t01='testabc'/*删除数据*/delete from OPENQUERY(TESTORA, 'select t01 from tex_file')where t01='hellowo'(四)到此基本上无什么问题了,但是把这些语句放在sql server的触发器中的时候,问题产生了。
放入触发器中之后,一开始提示:“服务器'XXXXX' 上的MSDTC 不可用”,于是打开MSDTC服务(方法:切换到cmd窗口,运行net start msdtc,或者到控制台的服务里面启动DTC服务),不再提示这个错误,而是提示“MSDTC不能启动分布式事务”。
Oh my God,还是不行,于是再次去问谷歌,发现是因为微软提供的驱动不支持分布式事务,于是参照网上的方法(点此查看原始解决方案),修改注册表。
mysql连接oracle原理
MySQL是一个开源的关系型数据库管理系统,而Oracle是一个商业的关系型数据库管理系统。
它们之间的连接是通过使用ODBC(Open Database Connectivity)标准来实现的。
具体来说,连接MySQL和Oracle的过程如下:
1. 首先,需要在MySQL和Oracle中分别创建一个数据库和相应的表格。
这些表格需要具有相同的结构和字段类型。
2. 在MySQL中,需要安装ODBC驱动程序,以便能够与Oracle进行通信。
ODBC是一个标准的接口,用于在不同的数据库管理系统之间进行通信。
3. 在MySQL中,使用ODBC连接字符串来连接到Oracle。
这个连接字符串包括了连接Oracle数据库的相关信息,如服务器名称、用户名、密码等。
4. 一旦连接建立,就可以通过执行SQL查询语句在MySQL中访问Oracle数据库中的数据。
查询语句将会被封装成ODBC命令并发送到Oracle数据库以获取结果。
5. 获取到的结果将会被返回给MySQL,并可以在MySQL中进行进一步的处理和操作。
需要注意的是,连接MySQL和Oracle可能存在一些性能上的差异和限制。
MySQL和Oracle是不同厂商提供的不同数据库管理系统,它们具有不同的优化和功能特性。
在连接和数据传输过程中,可能需要进行一些数据类型转换和性能调优,以提高连接的效率和性能。
总之,通过使用ODBC标准,可以连接MySQL和Oracle数据库,并在MySQL 中访问和操作Oracle中的数据。
MS SQL Server 连接Oracle 实例1. 数据库的部署及总体同步模型2. 前置机的相关配置操作系统:Windows 2000 Server 数据库: MS SQL Server 2000Oracle 客户端:Oracle 10.2.0.1.0(安装完毕后建议重启计算机)3. 前置机的数据库配置 3.1. 创建数据库数据库名:CommonData数据文件和事务日志建议存放在C盘之外的其他分区,并且保证有足够的空间。
注意:存放数据文件和事务日志的目录必须在创建数据库之前提前建好,本例中为D:\MSSQL\DA TA。
数据文件:D: \ MSSQL\DA TA \CommonData_Data.MDF事务日志:D:\ MSSQL\data\CommonData_Log.LDF3.2.创建数据表参照标院数据库中组织机构代码表的表结构在CommonData建表,本示例中表名为SQLORGAN。
表结构如下:建表语句:create table sqlorgan(organ_code varchar(10),organ_name varchar(80));4.标院系统至前置机之间的数据同步标院系统至前置机之间建议采用实时同步的方式,新增/修改的组织机构数据实时同步到前置机数据库中。
具体实现由标阮完成。
5.前置机至业务系统之间的数据同步前置机至业务系统采用实时同步的方式,新增/修改的组织机构数据一旦由标院同步到前置机数据库中即触发前置机和业务系统之间的数据同步,保证业务数据库中的数据与前置机中的有效数据持续一致。
5.1.同步模型①标院同步数据5.2.涉及到的关键技术分布式事务协调器(Distributed Transaction Coordinator)因为SQL Server的触发器要更新Oracle数据库中的数据,属于跨数据库操作,必须使用分布式事务,分布式事务在Windows平台上要用到MSDTC(MicroSoft Distributed Transaction Coordinator,参与分布式事务的各方都必须启用MSDTC服务并正确配置。
SQL Server中的链接服务器(Linked Server)Linked Server是SQL Server中访问其他同构或异构数据库的主要手段,通过建立Linked Server,可以在SQL Server中对Linked Server对应的数据库执行除DDL之外的所有操作。
5.3.分布式事务的相关配置1、确保Distributed Transaction Server服务正常启动。
①在命令行中输入“services.msc”,在服务中查看DTS是否已启动,并且启动类型设为自动(即开机时自动运行该服务):②确保“登录”中所使用的帐户为“NT AUTHORITY\NetworkService”:2、确保“组件服务”中MSDTC的配置正确。
①在命令行中输入“dcomcnfg”:②确保选中了“使用本地协调器”:③单击“安全性配置……”,确保做了如下图的设置:3、如果启用了防火墙,确保MSDTC没有被防火墙阻止。
开始\设置\控制面板\防火墙,如果防火墙为“启用”状态,需做如下设置:即能过下面的方式分别添加msdtc.exe和135端口到“例外”中的“程序和服务”中:4、注册表设置1~3的设置在SQL Server端(前置机)和Oracle端(业务数据库服务器)都要执行,本部分的设置仅针对SQL Server端(前置机)。
①MSDTC:HKEY_LOCAL_MACHINE\SOFTWARE\Microsfot\MSDTCHKEY_LOCAL_MACHINE\SOFTWARE\Microsfot\MSDTC\MTxOCIHKEY_LOCAL_MACHINE\SOFTWARE\Microsfot\MSDTC\XADLL②MSSQLServer:HKEY_LOCAL_MACHINE\SOFTWARE\Microsfot\MSSQLServer\Providers\MSDAORA5.4.创建链接服务器1、在前置机上利用Oracle客户端工具中的Net Configuration Assistant创建业务系统Oracle数据库的本地Net服务名,本例中为SHZJ。
可在命令行中输入“tnsping SHZJ”,来测试本地Net服务名是否配置成功。
2、利用SQL Server的企业管理器创建链接服务器,本例中链接服务器名为SHZJ。
①新建链接服务器:②设置“常规”属性:③设置“安全性”:④设置“服务器选项”:⑤确定,创建链接服务器SHZJ完毕。
建议此时重启SQL Server服务。
⑥链接服务器的测试在业务系统的Oracle数据库中以CommonData中的SQLORGAN表为原型,创建结构一致的数据表ORAORGAN:create table oraorgan(organ_code varchar2(10),organ_name varchar2(80));在SQL Server企业管理器中,调出SQL查询分析器“工具/SQL查询分析器”,依次输入以下命令:--切换到CommonData数据库use commondata--查询Oracle数据库中的创建数据表,测试链接服务器是否配置成功--注意:模式名及表名必须大写,如能正确查询,表明配置无误Select * from SHZJ..GDSTD.ORAORGAN;5.5.同步测试1、在CommonData数据库中为SQLORGAN表创建触发器。
--Insert触发器create trigger tri_insert_organon sqlorganfor insertasif @@rowcount>0beginset xact_abort oninsert into SHZJ..GDSTD.ORAORGANselect * from inserted;end;--Update触发器create trigger tri_update_organon sqlorganfor updateasif @@rowcount>0beginif update(organ_name)beginset xact_abort onupdate SHZJ..GDSTD.ORAORGAN set organ_name=an_namefrom SHZJ..GDSTD.ORAORGAN so,inserted iwhere an_code=an_code;endend--delete触发器create trigger tri_delete_organon sqlorganfor deleteasif @@rowcount>0beginset xact_abort ondelete SHZJ..GDSTD.ORAORGANfrom SHZJ..GDSTD.ORAORGAN so,deleted dwhere an_code=an_code;end;2、测试--测试insertinsert into sqlorgan values('1001','张三');insert into sqlorgan values('1002','李四');insert into sqlorgan values('1003','王五');insert into sqlorgan values('1004','赵六');select * from sqlorgan;select * from SHZJ..GDSTD.ORAORGAN;--测试updateupdate sqlorgan set organ_name='刘三' where organ_code='1001';select * from sqlorgan;select * from SHZJ..GDSTD.ORAORGAN;--测试deletedelete from sqlorgan where organ_code='1004'; select * from sqlorgan;select * from SHZJ..GDSTD.ORAORGAN;附录:异构数据库的连接及分布式事务在大型系统的开发中非常普遍,一种情况是大型系统可能由多家开发商开发,采用了多个数据库,此时就涉及到跨数据库操作(可能是同构,也可能是异构),即使是同一个开发商也会存在建多个数据库的可能(例如内、外网系统分设数据库);另一种情况是新建系统与原有系统的数据交换,往往会涉及到异构数据库,例如Oracle与SQL Server、Access、DB2等。
在安全性要求不是非常严格的情况下,从快速实现的角度出发,可以利用数据库的底层异构服务机制完成相关的任务,例如Oracle的透明网关、数据库链(Oracle中的数据库链用来实现Oracle同构数据库之间的连接)、SQL Server中的Linked Server等。
无论是开发还是实施,如果要把技术能力提高到较高的水平,是离不开对数据库的深入研究的,多掌握这方面的知识对我们的数据迁移、实施维护、灵活开发工作很有帮助。