博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java里最长的异常_java程序异常,竟然是oracle最大链接数的问题!
阅读量:4964 次
发布时间:2019-06-12

本文共 4750 字,大约阅读时间需要 15 分钟。

最近测试的linux+oracle的报表很不顺利,这两天执行java数据分析程序,常常莫名其妙地报IO异常,错误信息如下

org.springframework.jdbc.CannotGetJdbcConnectionException: Could

not get JDBC Connection; nested exception is

org.apache.commons.dbcp.SQLNestedException: Cannot create

PoolableConnectionFactory (Io 异常: Connection

refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12519)(ERROR_STACK=(ERROR=(CODE=12519)(EMFI=4)))))

org.apache.commons.dbcp.SQLNestedException: Cannot create

PoolableConnectionFactory (Io 异常: Connection

refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12519)(ERROR_STACK=(ERROR=(CODE=12519)(EMFI=4)))))

at

org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:855)

at

org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)

at

org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)

at

org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)

at

org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:268)

at

org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:413)

at

clo.game.analysedata.CloBusinessAnalyse.abandonAwardInfo(CloBusinessAnalyse.java:323)

at

clo.game.analysedata.CloBusinessAnalyse.invokeAllFunction(CloBusinessAnalyse.java:565)

at

clo.window.MainApplication.programeExecute(MainApplication.java:325)

at clo.window.Consumer.run(MainApplication.java:501)

at java.lang.Thread.run(Thread.java:595)

开始怀疑程序有问题,但这个12519的错误貌似就是oracle报出来的,结果程序员检查了程序,发现程序的确没有错误!但这个问题,之前从来没有遇到过,很是郁闷了两天。

今天上网搜了一下解决方法,从众多解决方法中,终于成功找到了这种解决方法:

报表数据库创建reportdb实例时,基本选用默认的选项,而数据库实例默认的session数是150个,由于分析程序使用多线程分析,因此导致oracle数据库的默认链接数不够,以下是解决的方法:

步骤一:

sqlplus / as

sysdba;

select * from sys.v_$session sysdba用户登录报表数据库后,执行这个sql查看了一下当前的用户连接数。在执行分析程序的时候,数据库的session数基本保持在102左右,还没有超出oracle数据库的默认150的链接数,为了排除问题,我们决定修改一下oracle的init.ora文件的配置,将链接数调大。

步骤二: 在oracle的安装目录下:/oracle/oracle/admin/pfile下有一个init.ora.721200811319的文件,我们来分析一下这个文件的内容

##############################################################################

# Copyright (c) 1991, 2001, 2002 by Oracle Corporation

##############################################################################

###########################################

# Cache and I/O

###########################################

db_block_size=8192

db_file_multiblock_read_count=16

###########################################

# Cursors and Library Cache

###########################################

open_cursors=300

###########################################

# Database Identification

###########################################

db_domain=""

db_name=reportdb

###########################################

# Diagnostics and Statistics

###########################################

background_dump_dest=/oracle/oracle/admin/reportdb/bdump

core_dump_dest=/oracle/oracle/admin/reportdb/cdump

user_dump_dest=/oracle/oracle/admin/reportdb/udump

###########################################

# File Configuration

###########################################

control_files=("/oracle/oracle/oradata/reportdb/control01.ctl",

"/oracle/oracle/oradata/reportdb/control02.ctl",

"/oracle/oracle/oradata/reportdb/control03.ctl")

###########################################

# Job Queues

###########################################

job_queue_processes=10

###########################################

# Miscellaneous

###########################################

compatible=10.2.0.1.0###########################################

# Processes and Sessions

###########################################

processes=150

###########################################

# SGA Memory

###########################################

sga_target=1209008128

###########################################

# Security and Auditing

###########################################

audit_file_dest=/oracle/oracle/admin/reportdb/adump

remote_login_passwordfile=EXCLUSIVE

###########################################

# Shared Server

###########################################

dispatchers="(PROTOCOL=TCP) (SERVICE=reportdbXDB)"

###########################################

# Sort, Hash Joins, Bitmap Indexes

###########################################

pga_aggregate_target=402653184

###########################################

# System Managed Undo and Rollback Segments

###########################################

undo_management=AUTO

undo_tablespace=UNDOTBS1

参考网上的信息,是直接把这个文件中的processes=150,修改成 想要的数字,但文章还提示“注意:用户最大连接数跟你的硬件配置有关,所以要谨慎”,看到这个提示,俺们没敢这么下手,(所以俺们也不建议大家这么干,风险忒大。)而是通过文章中的介绍另一种方法,也就是通过SQLPLUS运行语句执行的,执行方法如下:

##用sysdba用户登录报表数据库

sqlplus / as

sysdba;

##将链接数修改为300

alter system set

processes=300 scope=spfile;

##执行后,需要重启数据库方能使设置生效

shutdown

immediate;

startup; 经过这一番折腾,俺再运行分析程序,果然没有再报错哈哈! (其实写了这么多,有用的就是蓝色字的部分

a4c26d1e5885305701be709a3d33442f.png)

当然网上还介绍了一种修改的方式:

就是在 Oracle

企业管理器例程-->会话,可以查看当前连接到数据库的详细信息

俺还是觉得SQLPLUS的方法最实用

a4c26d1e5885305701be709a3d33442f.png

转载地址:http://qhqhp.baihongyu.com/

你可能感兴趣的文章
Python3 系列之 编程规范篇
查看>>
多线程篇-GCD-常用方法的使用
查看>>
Web开发者需养成的8个好习惯
查看>>
IOS开发之delegate和Notification的区别
查看>>
Java基础05 实施接口
查看>>
GridView里做页面的链接
查看>>
android开发--下载图片
查看>>
JAVA课设--五子棋
查看>>
读取FTP 图片文件,并显示,非下载
查看>>
单例集合的体系
查看>>
svn万能大法
查看>>
CentOS 7.x多网卡绑定
查看>>
苹果面临起诉:App Store 涉嫌垄断吗?
查看>>
设置socket接收和发送超时的一种方式
查看>>
HttpClientHelper
查看>>
索引模块
查看>>
Android输入控件EditText和软键盘监听
查看>>
android studio启动react-native项目
查看>>
C++ 的输入输出
查看>>
【洛谷3796】【模板】AC自动机(加强版)
查看>>