本文共 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; 经过这一番折腾,俺再运行分析程序,果然没有再报错哈哈! (其实写了这么多,有用的就是蓝色字的部分
)
当然网上还介绍了一种修改的方式:
就是在 Oracle
企业管理器例程-->会话,可以查看当前连接到数据库的详细信息
俺还是觉得SQLPLUS的方法最实用
转载地址:http://qhqhp.baihongyu.com/