简介ODAC1120320Xcopy_x64 是面向 64 位系统的 Oracle Data Access Components 免安装版本核心价值在于提供 Oracle Provider for OLE DB 驱动帮助开发者在 SQL Server 中创建指向 Oracle 的链接服务器实现跨库查询与增删改操作同时兼顾 ASP.NET 应用访问 Oracle 的需求适合从事数据集成、异构数据库互通的中高级开发者。压缩包共 194 个文件约 54.16MB以 90 个 dll 动态库为主体辅以 sql 脚本、plb 与 sym 符号文件、exe 可执行程序及 config 配置文件和 bat 批处理脚本另含 instantclient_11_2 轻量客户端与 oledb 组件目录覆盖安装、配置、卸载的完整流程。该资源已有 9201 人学习下载配套 readme 说明与批处理脚本可帮助读者快速完成环境部署理清 OLE DB 驱动注册与链接服务器配置思路减少跨数据库联调中的排错成本。1. 从一次“装完连不上库”的翻车说起上周帮一个做内部报表系统的团队收拾环境机器是干净的 Windows Server目标很简单让一个 .NET 老项目连上 Oracle。结果对方随手从网上抓了个 Oracle 客户端装上tnsnames.ora也配了sqlplus能连偏偏应用一启动就报“提供程序未注册”。折腾一下午才发现装的是精简版 Instant Client缺了 ODP.NET 那层托管驱动而项目里引用的正是Oracle.DataAccess。这类坑在 ODAC 部署里太常见了——ODAC 全称 Oracle Data Access Components是把 ODP.NET、Oracle Providers for ASP.NET 等一整套 .NET 数据访问组件打包在一起的发行包版本号1120320对应的是 11.2.0.3.20 这一支Xcopy_x64则说明它是免安装、直接解压即用的 64 位版本。它适合谁适合那些不想在目标机上跑 Oracle 官方安装器、又需要完整 ODP.NET 能力的 .NET 项目尤其是要跟已有 Oracle 客户端或数据库版本对齐的老系统。装不好会怎样轻则应用找不到提供程序重则 32/64 位混装导致进程直接崩排查起来像开盲盒。2. 装前把环境盘清楚版本、位数与依赖2.1 先确认三件事目标框架、进程位数、数据库版本ODAC 的 Xcopy 包不是“解压就能用”的万能药它对运行环境有明确前提。动手前我一般会让对方先回答三个问题答不上来就先别装。第一应用跑在哪个 .NET 框架上。1120320这一支的 ODP.NET 主要面向 .NET Framework 2.0/4.0如果你的项目是 .NET Core 或 .NET 5那这套托管驱动根本不匹配得换 Oracle.ManagedDataAccess 那条线。第二进程是 32 位还是 64 位。Xcopy_x64只提供 64 位程序集任何 32 位进程加载它都会抛BadImageFormatException。第三数据库服务端版本。11.2 的客户端连 11g/12c 一般没问题但连 19c 以上时部分特性会受限这个要提前跟 DBA 对齐。可以用一条命令快速看清当前进程和框架情况# 查看已安装的 .NET Framework 版本注册表方式最稳 reg query HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full /v Release # 查看目标应用是 32 位还是 64 位看 PE 头PowerShell 一行搞定 [System.Reflection.AssemblyName]::GetAssemblyName(C:\App\YourApp.exe).ProcessorArchitecture第一条命令读的是 .NET 4.x 的 Release 键值数值对应具体版本比如 528040 附近是 4.8。第二条返回Amd64说明是 64 位进程返回X86就是 32 位只有Amd64才能配这套Xcopy_x64。这一步别省我见过太多人装完才发现进程位数不对白忙一场。2.2 版本对照1120320 到底对应什么把版本号拆开看更清楚。11.2.0.3.20里11.2.0.3是 Oracle 11g R2 的补丁集基线末尾的.20是这一支 ODAC 的累积补丁号。它打包的组件大致包括 ODP.NET 托管驱动、Oracle Providers for ASP.NET、Oracle Services for MTS 等。和后续 12c、18c、19c 的 ODAC 相比它的优势是跟 11g 环境贴合度高、体积小、依赖少劣势是不支持较新的 TLS 版本和部分新特性。组件是否包含说明ODP.NETOracle.DataAccess是项目里最常见的引用目标Oracle Providers for ASP.NET是成员资格、角色管理等Oracle Services for MTS是分布式事务场景才用Oracle Instant Client 基础库视包而定Xcopy 包通常需另配客户端这张表的意义在于如果你只是要Oracle.DataAccess.dll那这个包够用但如果你还需要oci.dll这类非托管库就得确认包里带没带没带的话要单独准备 Instant Client否则运行时会报“无法加载 DLL oci”。2.3 依赖与共存别让新旧客户端打架最常见的翻车是机器上已经装了别的 Oracle 客户端PATH里先命中了旧版本的oci.dll。ODAC 的 Xcopy 版本本身不写注册表、不注册 GAC靠的是应用目录下的程序集和PATH里的非托管库。所以部署前要确认两件事目标目录里没有残留的旧Oracle.DataAccess.dll系统PATH里没有指向其他 Oracle 客户端的路径。# 看 PATH 里有没有别的 Oracle 客户端抢先 where oci.dll # 看 GAC 里是否已注册过同名程序集Xcopy 版不该出现在这里 gacutil /l Oracle.DataAccesswhere oci.dll如果返回了非目标目录的路径说明有别的客户端在抢要么调整PATH顺序要么干脆在应用配置文件里用DllPath显式指定。gacutil /l若列出多条同名不同版本记录说明之前有人往 GAC 里装过Xcopy 版和 GAC 版混用极易出现版本绑定错乱建议先清理再部署。3. 解压与落盘目录结构和文件放置3.1 解压后的目录长什么样拿到ODAC1120320Xcopy_x64压缩包后先解到一个固定位置别直接扔桌面。我习惯放在C:\oracle\odac\1120320_x64路径短、无空格省得后面配DllPath时被空格坑。解压后典型结构是odp.net、asp.net、bin几个子目录odp.net下又分bin\2.x和bin\4分别对应 .NET 2.0 和 4.0 的托管程序集。# 解压到固定目录假设用 7-Zip路径按实际调整 7z x ODAC1120320Xcopy_x64.zip -oC:\oracle\odac\1120320_x64 # 看一眼结构确认 2.x 和 4 两个框架目录都在 dir C:\oracle\odac\1120320_x64\odp.net\bin解压命令本身没难度关键是解压后要核对bin\4下有没有Oracle.DataAccess.dll。如果只有2.x没有4说明这个包对 .NET 4.0 支持不全得换包或补丁。路径里带空格是后面DllPath配置出错的头号原因所以从一开始就避开。3.2 托管程序集放哪应用目录优先Xcopy 版的核心思路是“程序集跟着应用走”。把bin\4\Oracle.DataAccess.dll复制到应用的输出目录和你的 exe 同级这样 CLR 加载时会优先从应用基目录找不依赖 GAC。这是最省事也最可控的做法。# 把 4.0 版托管程序集复制到应用目录 copy C:\oracle\odac\1120320_x64\odp.net\bin\4\Oracle.DataAccess.dll C:\App\bin\ # 确认复制成功且版本正确 powershell (Get-Item C:\App\bin\Oracle.DataAccess.dll).VersionInfo.FileVersion复制动作简单但版本核对不能少。FileVersion应该显示4.112.3.20这类与1120320对应的值如果显示的是别的版本说明你复制错了目录或者机器上有同名文件覆盖。应用目录优先的代价是每个应用都要放一份好处是升级和回滚都只影响单个应用不会牵一发动全身。3.3 非托管库怎么配PATH 与 DllPath 二选一托管程序集到位后ODP.NET 运行时还要加载oci.dll等非托管库。两条路把客户端bin目录加进系统PATH或者在应用的app.config里用DllPath显式指定。前者影响全局后者只作用于当前应用我更推荐后者。!-- app.config 中显式指定非托管库目录 -- configuration oracle.dataaccess.client settings add nameDllPath valueC:\oracle\odac\1120320_x64\bin/ /settings /oracle.dataaccess.client /configurationDllPath的值必须指向包含oci.dll的目录注意是目录不是文件。这个配置的好处是绕开PATH顺序问题多个 Oracle 客户端共存时也不会互相干扰。如果不想改配置文件那就把该目录加到PATH最前面但记得改完要重启进程甚至重启机器PATH的变更对已运行进程不生效。4. 配置连接tnsnames、连接串与提供程序注册4.1 tnsnames.ora 放哪、怎么写ODP.NET 找tnsnames.ora的顺序是TNS_ADMIN环境变量指向的目录 → 应用目录 → 默认 Oracle 客户端目录。Xcopy 版没有默认安装目录所以最稳的是设TNS_ADMIN。# 设置 TNS_ADMIN 指向配置目录系统级需管理员 setx TNS_ADMIN C:\oracle\network\admin /Msetx写入的是持久环境变量/M表示系统级。设完后新开的进程才能读到。tnsnames.ora内容按常规写MYDB (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 10.0.0.10)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME ORCL) ) )SERVICE_NAME和SID别写混11g 之后优先用SERVICE_NAME。写完可以用tnsping MYDB验证解析但注意 Xcopy 包不一定带tnsping没有的话就靠应用实际连接来验。4.2 连接串的两种写法与取舍ODP.NET 支持 TNS 别名和 EZConnect 两种连接串。TNS 别名依赖tnsnames.ora适合多环境切换EZConnect 把主机端口服务名直接写进串里适合临时排查。// TNS 别名方式依赖 tnsnames.ora 和 TNS_ADMIN string connStr1 Data SourceMYDB;User Idappuser;Password***;; // EZConnect 方式不依赖配置文件排查时好用 string connStr2 Data Source10.0.0.10:1521/ORCL;User Idappuser;Password***;;两种写法在代码里可以并存生产用别名、排障用 EZConnect 是我常用的组合。注意密码别硬编码进源码走配置中心或加密配置。连接串里如果出现Poolingtrue这类参数11.2 的 ODP.NET 是支持的但连接池大小要结合数据库PROCESSES参数评估别一上来就设几百。4.3 提供程序注册machine.config 还是应用配置老项目常见报错“未能找到在配置中注册的提供程序”根源是DbProviderFactories里没有 Oracle 条目。Xcopy 版不会自动改machine.config需要手动加或者只在应用配置里加。!-- 应用 app.config 中注册提供程序避免动全局 machine.config -- configuration system.data DbProviderFactories add nameOracle Data Provider for .NET invariantOracle.DataAccess.Client descriptionOracle Data Provider for .NET typeOracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version4.112.3.20, Cultureneutral, PublicKeyToken89b483f429c47342/ /DbProviderFactories /system.data /configurationtype里的版本号和PublicKeyToken必须与实际程序集完全一致写错一个数字就会加载失败。PublicKeyToken可以用sn -T或 PowerShell 读出来核对。改应用配置比改machine.config安全回滚也简单这是我默认的选择。5. 避坑与排查五条血泪记录5.1 报“提供程序未注册”但 DLL 明明在现象应用启动即抛System.ArgumentException: 未找到请求的 .NET Framework 数据提供程序。原因多半是DbProviderFactories没配或者配了但type里的版本、公钥令牌与实际 DLL 不符。解决先用 PowerShell 读出真实版本和令牌再逐字对照配置确认配置在应用级而非被上级配置覆盖。5.2 BadImageFormatException位数不匹配现象一加载就崩异常信息指向程序集格式。原因32 位进程加载了Xcopy_x64的 64 位程序集或反之。解决用 2.1 节的命令确认进程位数32 位进程必须换 32 位包别想着“兼容模式”糊弄过去。5.3 找不到 oci.dll非托管库路径没生效现象托管层能加载一连库就报“无法加载 DLL oci”。原因DllPath没配或指错目录PATH里命中了别的客户端。解决where oci.dll看实际命中路径用DllPath显式指定改完重启进程。5.4 版本绑定错乱GAC 里躺着旧版现象明明复制了新 DLL运行时却加载了旧版本。原因GAC 里有同名程序集CLR 按强名称绑定到了 GAC 版本。解决gacutil /l Oracle.DataAccess列出所有记录卸载不需要的旧版或改用应用目录优先并确保绑定重定向正确。5.5 连接超时但 tnsping 通现象tnsping正常应用连接却超时。原因TNS_ADMIN对服务账户不生效服务跑在 SYSTEM 下读不到用户级变量或防火墙只放行了部分端口。解决把TNS_ADMIN设成系统级检查服务账户环境用 EZConnect 直连排除别名解析问题。6. 装完怎么验证三层检查跑通再交付装完不等于跑通我一般按“程序集层 → 连接层 → 应用层”三层验每层都有明确的通过标准任何一层不过就不往下走。第一层验程序集加载。写个最小控制台程序只引用Oracle.DataAccess打印版本号确认 CLR 加载的是你放进去的那份。// 最小验证确认加载的程序集版本与位置 using System; using Oracle.DataAccess.Client; class Program { static void Main() { var asm typeof(OracleConnection).Assembly; Console.WriteLine(版本: asm.FullName); Console.WriteLine(位置: asm.Location); // 应指向应用目录 } }Location是关键它必须指向应用bin目录而不是 GAC 路径否则说明绑定被 GAC 抢了。版本号要和1120320对应。第二层验连接。用OracleConnection打开再关闭捕获异常并打印Number属性ORA 错误码能直接定位是网络、认证还是服务名问题。try { using (var conn new OracleConnection(Data SourceMYDB;User Idappuser;Password***;)) { conn.Open(); Console.WriteLine(连接成功服务器版本: conn.ServerVersion); } } catch (OracleException ex) { Console.WriteLine(ORA- ex.Number : ex.Message); }ServerVersion能顺带确认连到的是不是预期实例。ORA-12154 是别名解析失败ORA-12541 是监听没起ORA-01017 是认证失败按码排查比看整段堆栈快得多。第三层验应用。把真实项目的关键查询跑一遍重点看连接池复用和事务行为。我习惯在验证清单里固定三项一次单表查询、一次带参数的存储过程调用、一次事务提交回滚。三项都过才算这套 ODAC 在这台机器上真正落地。验证层通过标准失败先看程序集Location 指向应用目录版本匹配GAC 残留、绑定重定向连接Open 成功且 ServerVersion 正确ORA 错误码、TNS_ADMIN应用查询/存储过程/事务三项通过连接池参数、权限从那以后我每次部署 ODAC 都强制走一遍这三层哪怕对方说“之前装过没问题”也不跳过——版本绑定和 GAC 残留这种玄学问题只有亲手验过才敢交付。希望帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
SUMO交通仿真软件:原理、架构与高速公路应用 1. SUMO交通仿真软件概述SUMO(Simulation of Urban MObility)是一款开源的微观交通仿真软件,主要用于模拟城市和区域交通网络中的车辆流动。作为交通工程和智能交通系统研究的重要工具,SUMO能够精确模拟单个车辆的运动行为&#x… · 2026/11/13 14:43:22
J2ME雷霆战机源码解析:从工程结构到移植改造的完整指南 简介:这份资源是JAVA ME游戏「9688雷霆战机」的个人移植源码包,面向具备Java基础、希望入门移动端游戏开发的学习者与爱好者,可用于理解J2ME平台下游戏从逻辑到渲染的完整实现路径。压缩包约4.4MB,上游未提供文件总数与类型明细&a… · 2026/11/3 5:26:13
279模式解析:商业增长的三大维度与九大转化环节 1. 279模式的概念解析279模式是一种新兴的商业增长方法论,其核心在于通过三个关键维度(2个杠杆点、7个驱动因素、9个转化环节)构建完整的商业增长闭环。这个命名来源于其结构化的操作框架:2个战略杠杆作为支点,7个核心… · 2026/11/12 9:53:34
端州区电工证复审怎么弄?电子证书怎么查?别被中介坑了 端州区电工证复审怎么弄?电子证书怎么查?别被中介坑了 你是不是正愁不知道去哪报名端州区电工证复审?怕被中介套路,还担心电子证书真假难辨?这些都太常见了,老电工都知道,证件的事儿不能马虎,尤其像你这种在驻马店做公路工程的,电工证可是刚需。… · 2026/11/13 21:53:14
证书过期了不知道怎么复审延期?金寨高压电工证官方报名入口全攻略 证书过期了不知道怎么复审延期?金寨高压电工证官方报名入口全攻略 证书过期了不知道怎么复审延期?最近有位驻马店的施工企业负责人张师傅就遇到了这个问题。他手头的高压电工证已经过了有效期,却因为不了解流程,错过了复审窗口期,导致项目被暂停,损失惨… · 2026/11/13 21:53:14
电工证考试有几次?工地太忙根本没时间复习考试,值不值得考? 电工证考试有几次?工地太忙根本没时间复习考试,值不值得考? 工地太忙根本没时间复习考试,这几乎是每个一线电工都面临的现实问题。尤其是像你这样的工友,每天扛着工具在工地来回跑,根本抽不出时间去备考。那么, 电工证考试有几次… · 2026/11/13 21:53:14
武汉电工证考试要钱吗 电工证含金量高不高怎么考 武汉电工证考试要钱吗 电工证含金量高不高怎么考 你是不是正愁不知道去哪报名,怕被中介坑?别急,今天就来聊聊【武汉电工证考试要钱吗】这个问题,顺便说说电工证到底有没有含金量,怎么考才不吃亏。… · 2026/11/13 21:53:14
在昆明考电工证多少钱良心建议:不怕考不过的备考全攻略 在昆明考电工证多少钱良心建议:不怕考不过的备考全攻略 怕考不过白交培训费?别急,这波良心建议能帮你省下一笔冤枉钱。在昆明考电工证多少钱,是很多准备报考的学员最关心的问题,但如果你只关注价格,很可能忽略掉真正影响你能否顺利拿证的关键因素。今天… · 2026/11/13 21:53:14
铁路招聘简历电工证值得考吗?良心建议看这篇 铁路招聘简历电工证值得考吗?良心建议看这篇 你是不是正为找工作发愁?特别是那些想进铁路系统工作的应届工程类毕业生,最头疼的问题就是—— 急需特种作业证才能上岗找工作 。如果你正在准备铁路招聘简历,那 铁路招聘简历电工证… · 2026/11/13 21:52:12
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43
维修电公用考电工证吗 在哪考最靠谱 维修电公用考电工证吗 在哪考最靠谱 工地太忙根本没时间复习考试,你是维修电工,天天在项目上跑,连抽个空背个题都难。那问题来了—— 维修电公用考电工证吗 ?答案是: 必须考 。尤其是在当前施工行业,没有电工证,连进场都可能被拦下。而且,… · 2026/11/13 0:00:08
电工证是不是可以登高?含金量和证书范围你必须知道的事 电工证是不是可以登高?含金量和证书范围你必须知道的事 证书过期了不知道怎么复审延期,这事儿很多人遇到过,尤其是像你这样在郑州金水区做劳务班组负责人,手里握着几十个工人的证书,稍微一疏忽,就可能影响工程进度和公司信誉。特别是电工证是不是可以登… · 2026/11/13 0:00:08
鸡西电工证哪家下证快官方报名入口怎么找 鸡西电工证哪家下证快官方报名入口怎么找 你是不是也担心 学历不高怕报不上名 ?别急,今天我就来跟你说说, 鸡西电工证哪家下证快 ,还有 官方报名入口 到底怎么找,别让那些“代办”“代考”耽误了你的机会。… · 2026/11/13 0:00:08
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21