1. 最大游标数
(1)作用:Oracle 使用 init.ora 中的初始化参数 OPEN_CURSORS 指定一个会话一次最多可以拥有的游标数。缺省值为 50。应用程序不同,该值也不同。即便会话打开的游标数未达 OPEN_CURSORS 指定的数量(即设置的值高于实际需要的值),也不会增加系统开销。
这样的错误很容易出现在Java代码中的主要原因是:Java代码在执行conn.createStatement()和conn.prepareStatement()的时候,实际上都是相当与在数据库中打开了一个cursor。尤其是,如果你的createStatement和prepareStatement是在一个循环里面的话,就会非常容易出现这个问题。因为游标一直在不停的打开,而且没有关闭。
一般来说,我们在写Java代码的时候,createStatement和prepareStatement都应该要放在循环外面,而且使用了这些Statment后,及时关闭。最好是在执行了一次executeQuery、executeUpdate等之后,如果不需要使用结果集(ResultSet)的数据,就马上将Statment关闭。
(2)异常:ora-01000: maximum open cursors exceeded.
表示已经达到一个进程打开的最大游标数。
(3)修改Oracle游标数
1、查看游标数:show parameter open_cursors;
2、查看当前打开游标数:select count(*) from v$open_cursor;
3、修改Oracle最大游标数:alter system set open_cursors=1000 scope=both;
2.最大进程数
(1)作用:每一次数据连接,都开启数据库一个进程。当调用数据库的线程超过一定数量时出现,中间介数据源无法连接导致错误:这是连接数超过了数据库默认连接数导致的,数据库默认的连接数是150。
(2)修改Oracle最大连接数
1、SqlPlus /nolog
2、conn sys/syspwd as sysdba;
3、查询目前连接数:show parameter processes;
4、修改连接数:alter system set processes=1000 scope=spfile;
5、create pfile from spfile;
6、重新启动Oracle服务
(3)应用程序可以设置数据库开启的线程数。比如应用程序datasource.xml配置:
<system-datasource>
<type>oracle</type>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:Oracle:thin:@192.168.167.76:1521:ora11g</url>
<username>tb_ddbx</username>
<password>tb_ddbx</password>
</system-datasource>
<system-datasource-pool>
<init-capacity>5</init-capacity>
<max-capacity>10</max-capacity>
<max-idle>2</max-idle>
<timeout>50000</timeout>
</system-datasource-pool>
3.常用oracle 命令
--查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;
还有可以查询
select sessions_highwater from v$license;
sessions_highwater 记录的是数据库会话曾经达到的最大值
查询数据库自启动以来最大的并发数量
select * from v$license
其他:
ORA-32001: 已请求写入 SPFILE, 但是在启动时未指定 SPFILE:
http://blog.csdn.net/haiross/article/details/41696035
ORACLE 如何查询被锁定表及如何解锁释放session:
http://www.jb51.net/article/34571.htm
修改Oracle最大连接数和游标数:
https://www.cnblogs.com/ITGIS/articles/1870539.html
java连接 oracle 遍历ResultSet,结果集耗尽:
http://blog.csdn.net/breaker892902/article/details/39397579
4. dba排错工具:
plsql 工具》会话查看当前会话
查看oracle是否有锁定的表和记录
tomcat 按ctrl+pausebreak 查看Java程序栈信息
jconsole 查看是否内存溢出。可以在系统变量中设置JAVA_HOME和JAVA_OPTS
表执行计划的优化(特别是数据大量变化时执行计划策略也要有相应变化)
多线程好文:Java 对象锁和类锁 死锁(多线程synchronized关键字)
http://blog.csdn.net/qq_33530388/article/details/63257485
java线程阻塞问题排查方法: