数据库模式定义语言DDL(Data Definition Language)。
在写一个自动解析创建表的功能时,发现一个问题,就是第一次运行程序进行建表操作成功,然后通过PLSQL将该表删除,然后再通过程序建立同一张表,程序正确执行,但是在数据库里面去看,该表确没有建立成功。但重新启动应用服务器则正常。
初步估计可能是缓存问题,由于我们持久层,用的是IBATIS,于是把缓存全部关掉,问题依旧。后来没办法,自己直接用JDBC连接执行,确没有问题。觉得问题可能出在连接上。由于我们用的spring的数据连接池,其中有这样一句话
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxActive" value="20"/>
<property name="maxWait" value="1000"/>
<property name="poolPreparedStatements" value="true"/>
<property name="defaultAutoCommit" value="true"/>
</bean>
<property name="poolPreparedStatements" value="true"/>
将其改为false就正常。查了一下资料这个属性的意思是:是否对已备语句进行池管理(布尔值),也就是说重复执行同一个DDL语句,因为这个选项它会有缓存。就不会去再去连接到数据库去执行,而是直接返回的缓存的结果。问题找到了。
但是连接池肯定还是要用,这个属性多数情况下,还是能够提升一些性能,所以还是单独写了一个JDBC连接来处理这个问题。不知道用应用服务器的数据源是否也会有同样的问题?
第二天用数据源尝试,不会有这个问题,另外还遇到一个问题,就是当这个属性设置为true的时候,service层在一个事务里面循环更新或者查询多次不同的数据,就会出现ORA-01000: maximum open cursors exceeded的异常,原因是因为在一个事务里面每次执行一次数据操作就会打开一个数据库游标,而一般数据库游标的大小为300,我改成了1000还是不行,因为我这个方法会操作上万条数据,而在一个方法里,他始终都没有释放游标,上万条执行完后才释放,很明显这样就会出问题。不可能把数据库的游标设成几万吧。最后解决办法就是把该属性设置为false就正常了。
另外用JBOSS的数据源测试,发现没有这个问题。所以用spring的连接池的朋友要小心了!把这个设置成false也不会影响多少性能,有兴趣的朋友可以测一下!
分享到:
相关推荐
### 阿里巴巴数据库操作手册关键知识点解析 #### 一、建表操作规范与风险管理 **1. 目标** - **明确风险**: 明确建表操作可能带来的风险,确保按照标准化流程操作,避免因操作不当而导致的故障。 **2. 适用范围**...
9. **性能优化**:包括合理设计数据库结构、索引使用、减少数据库访问次数、缓存策略等,都是ASP数据库操作中需要考虑的性能优化点。 这个压缩包中的源代码可能是上述知识的具体实现,比如包含数据库连接、查询、...
6. 数据缓存:为提高性能,一些操作类可能会包含缓存机制,将经常访问的数据存储在内存中。 7. 数据分页:对于大数据量的查询,操作类可能提供分页查询的功能,帮助用户以较小的数据块来获取结果集。 8. 数据转换...
- **风险评估**:包括业务错误、程序兼容性问题、数据库性能影响、沟通失误、回滚难度、同步延迟以及缓存更新等风险。 - **操作流程**:包括需求分析、缓存刷新确认、同步影响评估、速度规划、订正脚本编写和执行...
然而,在实际应用中,DDL操作往往会遇到各种问题,如表无法删除、磁盘空间持续告警、改表速度过慢、改表风险大等等。 本文将介绍美团MySQL内核研发王广友在DDL上的系列解决之道,包括文件异步删除、buffer pool管理...
### Oracle数据库操作大全知识点概述 #### 一、数据库的创建 ...以上是对《Oracle数据库操作大全》文档的部分内容的详细总结和解释,涵盖了数据库创建、基本操作以及如何解决常见的RDBMS问题等方面的知识点。
- 考虑到性能,应尽可能减少对数据库的查询,例如,可以缓存元数据结果。 - 在生成DDL时,要考虑数据库版本和兼容性,某些DDL特性可能在特定数据库版本中不可用。 7. **实际应用** 这种技术常用于数据库版本控制...
### Oracle数据库实验操作知识点 #### 第一部分:SQL基础 ##### 基本查询语句 - **实验1:** 编写一个简单的SQL查询语句,用于查询表中的所有行和所有列。例如: ```sql SELECT * FROM 表名; ``` - **实验2:**...
2. 数据库管理系统(DBMS)的功能包括:数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)、查询语言(QL)等。 3. 数据库设计包括:概念设计、逻辑设计、物理设计三个阶段。概念设计阶段主要考虑的...
重做日志记录数据库的事务变化,DDL和DML操作都会触发日志记录。控制文件包含数据库的元数据,例如数据文件和重做日志文件的位置、大小,以及数据库的创建时间等。 在Oracle数据库中,用户进程和服务器进程协同工作...
SQL基础:介绍数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL),并提供创建表、插入数据、查询数据等基本操作的SQL示例。 高级SQL操作:讲解连接(JOIN)操作、子查询、视图、存储过程和函数以及...
3. 重做日志缓冲区记录了数据库的所有修改信息,包括数据操作语言(DML)和数据定义语言(DDL)操作。重做日志条目首先在重做日志缓冲区中生成,然后这些条目被写入到重做日志文件中。重做日志对于数据库恢复是非常...
以上内容仅是数据库领域的一部分基础知识,具体的试卷可能会涉及更深入的理论和技术问题,如数据库设计的反范式化、分布式数据库、数据仓库、大数据处理等。解答时需结合试卷的具体题目来详细分析和解答。
例如,SQL(Structured Query Language)是广泛应用于关系型数据库的标准语言,支持DDL(如CREATE TABLE)、DML(如INSERT、UPDATE、DELETE)和查询(如SELECT)等操作。 数据库管理系统还具备事务处理能力,确保...
同时,学习数据库性能优化技巧,如索引策略、查询优化、缓存策略等。 通过《实战Visual C#数据库编程》的学习,你将能够熟练掌握C#与数据库之间的通信,从而开发出稳定、高效且安全的数据驱动应用程序。文档“实战...
面试中,除了对这些知识点的深入理解,还需要具备解决问题和实际操作的能力,例如数据库故障排查、性能调优、设计大型数据库系统的经验等。通过复习这些内容,你可以更好地准备数据库相关的面试,展现出扎实的专业...
- **缓存系统**:作为数据缓存,H2可以提高数据访问速度,减轻主数据库的压力。 然而,内存数据库也有其局限性,如数据易失性(断电或重启后数据会丢失,除非配置了持久化机制)、内存限制(大容量数据可能导致内存...
在网易2012年的校招数据库管理试题中,考生可能需要展示对上述知识的深入理解和实际操作能力,包括但不限于设计高效的数据库架构、编写高性能的SQL查询、解决并发问题、规划备份和恢复策略等。这些能力对于在网易...
5. **事务(Transaction)**:事务是一组数据库操作的集合,例如INSERT、UPDATE、DELETE以及DDL(数据定义语言)如CREATE、ALTER、DROP等。每个DDL语句之间形成一个事务,使用COMMIT提交事务,或者ROLLBACK回滚未...