忘记commit的一次教训
由于业务需求,已经上线的系统新增加了一些需求,其中一个需求是,从一个SQLSERVER数据库导入数据到生产的ORCLE数据库,
由于我的失误导致系统上线后 生产的Oracle数据没有导入成功,但是在本地测试的时候是正常的,其中有一点要说明就是系统采用的是
jdbc方式操作数据库,数据库连接使用的是连接池的方式。我懒省事,本地就没有配置连接池,直接用jdbc进行的连接,因为要导入数
据的oracle中,操作的时候就要采用分批提交的方式,所以要将事务设置成手动提交,conn.setAutoCommit(false);这就给我的失误埋下了炸弹。
下面就记录下处理这个失误的整个过程:
系统再次上线后,客户反映说数据没有导入,于是我就远程上他们的数据库,结果发现新添加的几个表的确没有数据,这时十分惊讶,
感觉不太可能,于是又给客户他们要了上线后的日志,看后日志发现没有报任何错误,而且导入的步骤日志显示导入也都顺利执行了,
这时我就更加奇怪了,但是既然出现问题了,作为苦逼的程序员就要解决问题啊。于是又重新check了一下代码,当我看到
conn.setAutoCommit(false);的时候眼睛亮了,于是继续往下走,发现自己忘记了commit,心里大大松了一口气,但是另一个问题又出来了,
为什么我本地采用jdbc直接连接的时候数据可以插入进去,加不加commit没有影响呢?难道错误不在这里?为了和生产上环境一致,
我决定采用数据库连接池的方式重新测试一下,由于服务器采用的是jboss4.0,以前没有配置过,所以又搜索了一下配置方法,下面也记录一下吧
1.Copy数据库的JDBC驱动至部署文件夹中的lib目录下
2. 建立数据库配置文件,配置数据库参数,文件以-ds.xml为结尾,如oracle-ds.xml。配置文件具体方法参照docs/example/jca下,有各种数据库的例程。
你可以针对自己的来写,如下:
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/ews</jndi-name>
<connection-url>jdbc:oracle:thin:@192.168.4.222:1521:orcl</connection-url>
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<user-name>ewsvii</user-name>
<password>ewsvii</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
<blocking-timeout-millis>60000</blocking-timeout-millis>
<idle-timeout-minutes>2</idle-timeout-minutes>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
</local-tx-datasource>
</datasources>
web应用为default,则放在$JBOSS4_HOME\server\default\deploy下。
配置完数据库连接池后,然后分别在使用commit和不使用commit的时候进行测试,结果发现这时候如果不使用commit数据就无法插入成功。
这样也就找到了问题的所在,修改了代码之后重新上线,oracle数据就可以正常导入了。
但是为什么采用jdbc直接连接数据库的时候,不使用commit的话数据可以正常插入呢?这个问题还是没有解决。
忘记commit的一次教训的更多相关文章
- 为什么忘记commit也会造成select查询的性能问题
今天遇到一个很有意思的问题,一个开发人员反馈在测试服务器ORACLE数据库执行的一条简单SQL语句非常缓慢,他写的一个SQL没有返回任何数据,但是耗费了几分钟的时间.让我检查分析一下原因,分析解决过后 ...
- 忘记commit也会造成select查询的性能问题
今天遇到一个很有意思的问题,一个开发人员反馈在测试服务器ORACLE数据库执行的一条简单SQL语句非常缓慢,他写的一个SQL没有返回任何数据,但是耗费了几分钟的时间.让我检查分析一下原因,分析解决过后 ...
- 数据库commit问题
对数据库进行修改后,需要commit!---之前也是忘记commit导致数据库反应不过来.
- Git(远程仓库:git@oschina)-V2.0
1.注册git@osc(也就是“码云”) 这里会提示注册密码==push密码,反正一定要记住的东西. 2.安装git 这里要设置个人信息 git config --list //查看git信息 g ...
- Oracle 行转列,列转行
一.行转列1.1.初始测试数据表结构:TEST_TB_GRADESql代码:1 create table TEST_TB_GRADE2 (3 ID NUMBER(1 ...
- Android SharePreference 在主进程和次进程间共享数据不同步出错
SharedPreference作为android五大存储(网络,数据库,文件,SharedPreference,contentProvider)之中最方便使用的一个,从类名上来看就不是一个存储大 ...
- DB2解除锁表
背景 生产环境中,我几乎没有遇到过锁表.多是在开发过程中遇到的,比如团队开发中经常会遇到多个功能访问同一张表的情况.如果有开发人员在这张表加了排它锁,然后又忘记提交事务,那么其他开发人员就要一直等待了 ...
- androidactivity与webview结合
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- a different object with the same identifier value was already associat
问题:这个著名的托管态update更新异常 org.hibernate.NonUniqueObjectException: a different object with the same ident ...
随机推荐
- Android res资源文件夹的知识积累
Android的开发框架耦合性还是比较低的,逻辑和布局被原生分开了.在Eclipse一般代码写在src文件夹下,资源等写在res文件夹下. drawable文件夹:该文件夹有很多变种,主要是为了适配A ...
- Android颜色大全
<?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...
- SQL语句与正则表达式
今儿个才知道SQL语句还可以搭配正则表达式作为查询条件,很是有用. REGEXP_LIKE(匹配)REGEXP_INSTR (包含)REGEXP_REPLACE(替换)REGEXP_SUBSTR(提取 ...
- Oracle Varchar2长度 及 PHP 长度判断
oracle数据库相信大家都比较熟悉,数据库中有一种非常常用的数据类型:字符串型. 对应该类型,在oracle中有三种比较常用的类型:varchar2(byte).varchar2( ...
- 微软阵营企稳的利好消息:.NET开源、Visual Studio免费
今天各个IT社区,头版头条说的是微软.NET开源了.宇宙中最好的IED–Visual Studio Community 2013将免费提供给用户的消息. <宇宙中最强大的开发环境免费了!> ...
- 基于CAShapeLayer以及UIBezierPath的语音输入效果动画封装
详情地址 嗯,主要是在简书上写,大家可以关注我的简书,如果有什么更好的建议也可以评论,探讨,加以斧正.
- Java多线程练习:ticket卖票程序
/*需求:简单的卖票程序多个窗口买票 */ class Ticket extends Thread{ private static int tick=100; public void ru ...
- SVN: revert all command
If you accidentally marked all your files as "delete" (your file/folder has a red x on it) ...
- Android NDK 环境搭建 + 测试例程
懒得废话一大堆概念,关于ADT.NDK的概念要是你不懂,怎么会搜到这里来?所以你只需要根据下面的步骤来,就可以完成NDK环境搭建了. 步骤:(假设你未安装任何相关开发工具,如果已经安装了,就可以跳过) ...
- Nginx+keepalived实现负载均衡
Nginx的优点是: 1.工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名.目录结构,它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一,Nginx ...