1. .net使用Oracle驱动的发展等

作为.net线的产品的ERP产品 最初的版本 使用了.net 1.1发布时 微软提供的Oracle的驱动

但是后续微软的.net产品线貌似没有继续发展相应的驱动. Oracle自己发布了ODP.net的驱动版本.

因为一些历史原因, 产品一直跑在微软的驱动上面,但是毕竟已经是十几年前的驱动, 性能不佳以及各种bug较多, 已经越来越无法满足产品的需求.

所以在2016年公司决定使用新的Oracle 的ODP.net的驱动 进行适配.

关于微软驱动的简介图:

转一个公众号发的.net的技术线:

关于.net版本的说明:

(.NET Framework 2.0/3.x和.NET Framework 4.x分别采用CLR 2.0和CLR 4.0),下图很直观地说明了这个问题。

摘自:http://www.cnblogs.com/artech/p/how-to-cross-platform-01.html

2. ODP.net驱动的支持以及版本特点

理论上升级到GS7.0的版本都支持Oracle的ODP.net的驱动

关于ODP.NET 驱动 记得应该是2007年发布的oracle10gr1 的版本最初开始支持的 当时因为Oracle的.net4.0还没发布 所以最初发版的ODP.NET只有2.x的版本

等着Oracle10gr2 以后的版本都会同时发布2.x和 4.x两个版本的ODP.NET驱动(这个应该是针对CLR版本 不是针对具体的.net版本)

如下是默认安装的Oracle11g客户端带的ODP.NET驱动

核心dll以及版本:

版本备注 4 意味着是For .net4.0 的 112 是11gr2的版本发布

最后一个0 意味着是 Oracle 11gr2发布时的版本 未更新 驱动相关的补丁包:

4.112.0

3. 如何验证是微软驱动还是Oracle ODP.net驱动

GS产品的驱动开发延西大神为了兼容性 在驱动配置文件中使用provider的方式进行兼容支持, 这也是为了保证升级到新驱动不会触发非常严重的问题, 并且让客户有机会回到到早前的微软驱动版本.

具体查看方法为:

查看安装应用服务器的全局配置文件 一般的目录为:

C:\Program Files\GenerSoft\bscw_local\gsp\config

文件名:GSPUniversalConfiguration

配置节为:GSPDbConfigurations

具体的配置节点:Provider="Oracle.DataAccess.OracleClient" 

provider 后面 ="" 可以理解为使用微软默认的驱动进行连接

如果后面为 :Oracle.DataAccess.OracleClient 可以理解为使用Oracle的ODP.net驱动进行连接

关于ODP.net驱动的版本:

一般可以理解为 环境变量下第一个OracleHOME目录下相关的ODP.net内的驱动.

平台技术部为了提供部署 效率也为了缓解Oracle客户端版本不一致造成的环境复杂度, 再发布GS7.0最新版本的时候同时支持了 Oracle客户端的绿色部署

实际上的做法为:

安装一个Oracle的ODAC,然后注册oracle的组件,以及安装OracleMTSrecoverry服务

针对x86和x64有两个不同的ODAC客户端文件.

如果使用绿色客户端,或者不想使用oracle的NETCA下面的tns配置文件,可以使用ip:port/serviceid 的方式进行连接.

4. 关于两种驱动的优缺点:

老驱动的兼容性更好一些, 并且十几年的使用 一般不会出现比较大的bug.

但是问题也还是有很多:

1. 发现在使用旧驱动加Oracle12.1.0.2 版本以后最重要的制单功能里面获取凭证内码的存储过程只能获取到一位数 还不能实时获取到具体的内码数(大于10个凭证意味着内码一定重复了)

2. oracle12c以后的一些新特性设置更早的一些特性比如bulkcopy批量插入, 内存数据库等的特性旧驱动无法支持,性能不好

3. 某些查询情况下针对特定的Oracle小版本,比如11.2.0.2以及之前的11.2.0.1版本会出现查询取数翻倍的情况. 造成验证的数据问题.

新驱动的话性能好一些, oracle的官方支持也比较大一些,但是也存在一些问题:

1. 测试时发现oracle.dataaccess 4.121.2 release4 的版本时 产品运行一段时间会出现批量的报错,造成应用服务器宕机 回退到 4.121.2 release 3 的版本就没有这个问题.

也是因为这个问题: 因为GS7新版本发布时oracle的 ODAC没有发布12.2的版本,所以只能再应用服务器的安装文件中集成了12.1.0.2 的release 3 版本的ODAC ,造成绿色安装Oracle客户端的驱动不是最新版本 而只是12.1.0.2 的release 3的版本

2. 一些比较早的或者比较复杂的SQL写法的情况下使用新驱动可能会有错误,这对测试要求比较高一些,需要注意一些边角的功能 主流程一般都不会有问题.

3. 如果使用绿色版的情况下一些类似MDM或者是其他库取数的功能, 可能需要修改配置文件, 因为可能没有tns配置文件 没法在应用服务器上面定义netca里面的oracle sid 需要在应用服务器里面使用 ip:port/serviceid的方式来进行使用.

4. 新驱动兼容支持了bulkcopy 但是从召冠总的一些blog和他的个人分析发现, bulkcopy虽然能够在大数据量情况下让的插入性能有几十倍的提高, 但是对一些索引较多的业务表(尤其像是产品的权限表)进行bulkcopy处理时可能会造成索引失效, 引起非常严重的性能下降.他的分析应该是bulkcopy批量插入时应该是先讲索引置为无效插入完成后再修改索引状态重新生成或者其他, 但是可能多次处理之后出现异常,造成索引invalid 造成查询权限表变成table full scan 引起严重问题.

暂时想到着一些.以后随时补充.

日常工作: 应用服务器Oracle驱动问题说明的更多相关文章

  1. [日常工作] 应用服务器上面应该尽量少开各种应用 --Chrome 内存泄露 让应用服务器非常缓慢

    1. 前段时间修改 服务器的密码 导致应用程序的web site 启动有问题 ,打开chrome 查看了错误详细信息 但是忘记关了.. 今天反馈机器非常缓慢 简单看了下内存 吐血... 所以以后不能在 ...

  2. DBA日常工作内容和职责

    1.统计数据库总容量 按表空间分别统计: 总容量(单位为M): 2.计算用户下所有对象大小 3计算USERS表空间的大小 4计算该USERS表空间对象大小 ---------------------- ...

  3. 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动

    由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...

  4. 如何在maven工程中加载oracle驱动

    maven中引入oracle驱动报错Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 时间:2015年09月22日  浏览:9361次 在maven ...

  5. 关于jave在oracle驱动下事务提交与回滚问题

    一直以来,都觉得Connection假设设置了setAutoCommit(false)后.启动手工事务提交.必须手工进行commit或者rollback才行.今天正好遇到一个问题.结果大跌眼镜. 于是 ...

  6. 使用Maven管理Oracle驱动包

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...

  7. 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误

    出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误:org.hibernate.MappingException: No Di ...

  8. Maven教程(4)--Maven管理Oracle驱动包

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...

  9. git宝典—应付日常工作使用足够的指北手册

    最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...

随机推荐

  1. 树莓派设置NTP同步

    pi@raspberrypi:~ $ sudo timedatectl set-ntp true--------------启用NTPpi@raspberrypi:~ $ date           ...

  2. springmvc+ajax文件上传

    环境:JDK6以上,这里我是用JDK8,mysql57,maven项目 框架环境:spring+springmvc+mybaits或spring+springmvc+mybatis plus 前端代码 ...

  3. [转]qtcreator中常用快捷键总结

    F1 查看帮助 F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果) Shift+F2 声明和定义之间切换 F4 头文件和源文件之间切换 Ctrl+ 欢迎模式 Ctrl+ 编辑模式 Ctrl+ 调试 ...

  4. Python Tornado搭建高并发Restful API接口服务

    Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快能实现高并发.得利于其 非阻塞的方式和对epoll的运用,Torn ...

  5. node 命令行升级版本

    node有一个模块叫n(这名字可够短的...),是专门用来管理node.js的版本的. 1. 首先安装n模块: npm install -g n 2. 升级node.js到最新稳定版 n stable ...

  6. 9-(基础入门篇)云端安装MQTT服务器

    https://www.cnblogs.com/yangfengwu/p/9953703.html 记得把文件拷贝到上一节配置的和云端共享的那个盘里面,好拷贝文件到云服务器 进入到bin目录 咱先以控 ...

  7. IntelliJ IDEA 常用设置 (二)

    一. 代码提示和补充功能有一个特性:区分大小写. 区分大小写的情况是这样的:比如我们在 Java 代码文件中输入 stringBuffer IntelliJ IDEA 是不会帮我们提示或是代码补充的, ...

  8. 初学Python,对于开发工具不是很了解?一文带你选择适合你的开发工具

    工欲善其事必先利其器!想要获取更多的开发工具安装包.安装教程,可以加群:725479218, 开发Python用什么工具好呢?其实刚学Python的话,使用IDLE就够了,虽然调试不是特别方便,但是对 ...

  9. 一次Java内存泄漏调试的有趣经历

    人人都会犯错,但一些错误是如此的荒谬,我想不通怎么会有人犯这种错误.更没想到的是,这种事竟发生在了我们身上.当然,这种东西只有事后才能发现真相.接下来,我将讲述一系列最近在我们一个应用上犯过的这种错误 ...

  10. 1kb的前端HTML模板解析引擎,不限于嵌套、循环、函数你能想到的解析方式

    传送门:https://github.com/xiangyuecn/BuildHTML copy之前说点什么 html做点小功能(什么都没有),如果是要手动生成html这种操作,容易把代码搞得乱七八糟 ...