日常工作: 应用服务器Oracle驱动问题说明
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驱动问题说明的更多相关文章
- [日常工作] 应用服务器上面应该尽量少开各种应用 --Chrome 内存泄露 让应用服务器非常缓慢
1. 前段时间修改 服务器的密码 导致应用程序的web site 启动有问题 ,打开chrome 查看了错误详细信息 但是忘记关了.. 今天反馈机器非常缓慢 简单看了下内存 吐血... 所以以后不能在 ...
- DBA日常工作内容和职责
1.统计数据库总容量 按表空间分别统计: 总容量(单位为M): 2.计算用户下所有对象大小 3计算USERS表空间的大小 4计算该USERS表空间对象大小 ---------------------- ...
- 在代码生成工具Database2Sharp中使用ODP.NET(Oracle.ManagedDataAccess.dll)访问Oracle数据库,实现免安装Oracle客户端,兼容32位64位Oracle驱动
由于我们开发的辅助工具Database2Sharp需要支持多种数据库,虽然我们一般使用SQLServer来开发应用较多,但是Oracle等其他数据库也是常用的数据库之一,因此也是支持使用Oracle等 ...
- 如何在maven工程中加载oracle驱动
maven中引入oracle驱动报错Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0 时间:2015年09月22日 浏览:9361次 在maven ...
- 关于jave在oracle驱动下事务提交与回滚问题
一直以来,都觉得Connection假设设置了setAutoCommit(false)后.启动手工事务提交.必须手工进行commit或者rollback才行.今天正好遇到一个问题.结果大跌眼镜. 于是 ...
- 使用Maven管理Oracle驱动包
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...
- 出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误
出错场景是升级oracle驱动,将版本从ojdbc14升级到ojdbc6,hibernate执行原生态sql语句会报如下错误:org.hibernate.MappingException: No Di ...
- Maven教程(4)--Maven管理Oracle驱动包
由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...
- git宝典—应付日常工作使用足够的指北手册
最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...
随机推荐
- 用户输入序号选择商品,按q退出
输出商品列表,用户输入序号,显示用户选中的商品 li = ['手机','电脑','鼠标垫','游艇'] while 1: li = ['手机','电脑','鼠标垫','游艇'] for i in li ...
- day14 Python集合的补充
python_1 = ['charon','pluto','ran','charon'] linux_1 = ['ran','xuexue','ting'] p_s = set(python_1) l ...
- 区分Web Server和应用服务器
一般的信息服务系统架构如下图所示: Web Server:提供Web信息浏览服务,主要处理的静态资源(session,request,js,html,cs等),如响应http请求,响应请求返回静态ht ...
- kubernetes环境搭建
两台服务器 centos-master 172.16.120.189 centos-minion 172.16.120.190 master上运行etcd, kube-apiserver, kub ...
- Echo团队Alpha冲刺随笔 - 第一天
项目冲刺情况 进展 每个人开始搭建自己要用的各种框架.库,基本实现了登录功能 问题 除了框架使用问题外,暂未遇到其他疑难杂症 心得 今天有一个还可以的开头,相信后续会挺顺利的 今日会议内容 黄少勇 今 ...
- XD308H设计超宽电压非隔离电源 MP150电源芯片
220V转12V 220V转24V 380V转5V 3800V转12V 380V转24V 参考:https://wenku.baidu.com/view/862c19fca0c7aa00b52acfc ...
- date日期 格式化
这个是别人写的,我拿过来用的,哈哈 Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth() ...
- MFC入门(二)-- 提取输入框的字符串(定时关机的小程序)
上篇文章已经让我们有了对于MFC最简单直观的认识,但貌似并无太大的交互性可言,而且其实也没有涉及到数据的交互,所以本文通过做一个时间可以调节的定时关机的Demo来演示. MFC入门(一)地址:http ...
- 【LeetCode225】 Implement Stack using Queues★
1.题目 2.思路 3.java代码 import java.util.LinkedList; import java.util.Queue; public class MyStack { priva ...
- Log4j2使用笔记
log4j2是log4j的最新版,现在已经有很多公司在使用了.log4j2和log4j的优缺点对比,请自行百度. 上一篇笔记讲了关于log4j的使用.这篇笔记主要讲解log4 ...