故事是这样的:
我需要用一张新表(B)替换掉正在使用的表(A),A表和B表具有相同的结构,相同的索引字段,相同的约束,相同的主外键等。唯一的不同只是索引名和约束名。A表的数据量有5000w, B表的数据量有1000w。问题是当我们用B表替换掉A表后,会出现请求超时或者‘can not open connection’的异常,而去这类异常是偶发的,有些请求能够正常得到结果,有些请求会出现异常。
异常信息如下:
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1616)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
at org.hibernate.loader.Loader.list(Loader.java:2187)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
烦请高手帮忙分析可能是什么原因造成这种次问题? 多谢。
我需要用一张新表(B)替换掉正在使用的表(A),A表和B表具有相同的结构,相同的索引字段,相同的约束,相同的主外键等。唯一的不同只是索引名和约束名。A表的数据量有5000w, B表的数据量有1000w。问题是当我们用B表替换掉A表后,会出现请求超时或者‘can not open connection’的异常,而去这类异常是偶发的,有些请求能够正常得到结果,有些请求会出现异常。
异常信息如下:
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: org.hibernate.exception.GenericJDBCException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1616)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
at org.hibernate.loader.Loader.list(Loader.java:2187)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
烦请高手帮忙分析可能是什么原因造成这种次问题? 多谢。
解决方案 »
- oracle如何重载操作符
- Oracle 导入数据库 缺少表 怎么办
- QQ的数据库关系图
- Message file sp1<lang>.msb not found. you may need to set ORACLE_HOME to your Or
- 如何在windows下通过浏览器访问linux的企业管理器
- 哪里有OraDb11g的零基础自学视频
- 一个关于批量分页查询的很奇怪的问题,诚请高手出马!!(有几个高手都没想明白的问题)
- 这个怎么做,请教各位啊~~~~~~~~~~
- oracle 死锁
- oracle行转列
- 在.net下报错ORA-28000: the account is locked
- oracle中,表A中共有a,b,c三个字段,c初始为0,只要a或b发生改变,那么c值变为1
rollback到A表后问题立即解决,网络问题的可能性比较小。
1. rollback 到 A 是什么意思?
2. 是不是代码中有使用了约束和索引的地方,并且还没有替换为 B
--------
1. rollback 到A表是说我们切换到新表B发现有这个问题的时候,就又改了表的名字,继续使用之前的A表。问题就解决了。A表是student,B表是student_new。我做的操作是先rename student 到student_old, 然后rename student_new为student。这个时候发现有问题,然后再rename回去继续用原来的student表。
2.约束和索引都创建了,而去与原表的一致,只是名字不同,否则会有重名的冲突。