0 0

关于ORA-27101错误不解?5

我是通过JDBC加TOMCAT链接池的方式对数据库做增,删,改,查的操作,但最近发现有时候会出现下面的错误,原因不解!
还有我总搞不清楚到底数据库链接是什么时候获得什么时候释放,我现在是每次对数据库做一次操作就获得一个链接完了就释放掉,我怕效率底把数据库或者程序搞死我就做了个链接池听说可以提高效率,不知道这样做对不对。如果不对请指点。我还看到网上说数据链接应该写成单例,但我觉得如果写成单例以后系统成千上万人使用都用同一个链接不是根本就不够用吗?不解中。。。

错误信息如下(不知道我的程序会不会引起这个错误!):
ORA-27101: shared memory realm does not exist
IBM AIX RISC System/6000 Error: 2: No such file or directory
问题补充:
那到底数据库链接是在何时创建 何时销毁是比较好的呢?
问题补充:
我给出我的代码:
<code>
这是我创建链接池的类:
public class ConDWDVLP {
private static DataSource pool;
    static {
          try {
          Context env = new InitialContext();
          pool = (DataSource) env.lookup("java:comp/env/jdbc/DWDVLP");
              if(pool==null)
                  System.err.println("'DBPool' is an unknown DataSource");
               } catch(NamingException ne) {
                  ne.printStackTrace();
          }
      }
    public static Connection getDWDVLP() {
        try {
return pool.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}

    }
}
这是使用链接的一个方法:
public List findAllData(String code) throws SQLException {
con = ConDWDVLP.getDWDVLP();
String sql = null;
if("SRM".equals(code)){
sql = "select distinct t.rowid,t.* from dim_coef_price t where t.alive_flag='Y' and t.FMLY_CODE = 'SRM'";
}else if("austenite".equals(code)){
sql = "select distinct t.rowid,t.* from dim_coef_price t where t.alive_flag='Y' and t.META_STR_ID='A'";
}else if("doublesteel".equals(code)){
sql = "select distinct t.rowid,t.* from dim_coef_price t where t.alive_flag='Y' and t.META_STR_ID='S'";
}else if("ferrite".equals(code)){
sql = "select distinct t.rowid,t.* from dim_coef_price t where t.alive_flag='Y' and t.META_STR_ID='C'";
}else if("martensite".equals(code)){
sql = "select distinct t.rowid,t.* from dim_coef_price t where t.alive_flag='Y' and t.META_STR_ID='M'";
}
System.out.println("Find ALL DimCoefPrice SQL:" + sql);
PreparedStatement stmt = con.prepareStatement(sql,
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
rs = stmt.executeQuery(sql);
List coefPrices = getCoefPrices();
closeCon(stmt);
return coefPrices;
}
</code>
DAO 
2008年9月26日 09:37

3个答案 按时间排序 按投票排序

0 0

实在不知道你到底是问些什么,混淆了这些概念性的问题,建议仔细研究下jdbc的基础,毕竟基础很重要。
你在tomcat配置了数据连接池就已经建立起来了连接池了,Connection 就已经给你建立起来了,何必去自己写个连接池呢?没有必要的,你需要的是建立一个调用这个Connection 对象的对象工厂没有必要去每次都取得一个新的连接对象。而且你写的这个连接池代码很闹心,有年头没写连接池代码了,实在想写的话,网上搜索下,有比较完整的代码。
比较完整的给你说下我对这块的理解,不一定全对,有问题帮我指出

JDBC最常用的资源有三类:
-Connection: 数据库连接。
-Statement: 会话声明。
-ResultSet: 结果集游标。
这是一种 ‘爷-父-子’ 的关系,对Connection的管理,就是对数据库资源的管理。
比方说没有连接池的情况下,每次总是拿到一个Connection全新的对象的话, Statement,ResultSet之后,在关闭Connection前,需要关闭所有相关的Statement和ResultSet,如此一圈,当有并发访问,或者程序问题时,没有关闭Connection,资源会越来消耗越多,直到系统不能支持为止。
所以有了连接池的概念,我们在数据缓冲中声明好几个Connection,并不关闭它,只是让他保持空闲状态。
我就拿青楼举个例子吧。
比方说古时候的青楼,要养一堆姑娘一样,总有姑娘闲下来得时候,不能说大爷来了先去买个姑娘吧?所以我们的青楼先买了几个姑娘养起来,有客人了,就叫一个空闲的姑娘去干活了,这样又出现问题了,一旦年老色衰了,不能干活了怎么办呢?偷懒怎么办呢?反正很多的问题出现了,这时候老板发现需要几个底层管理者,老鸨,和龟公出现了完成了一切事情,青楼的宗旨是什么?目的是什么?这也是连接池这个老板的目的,就是让姑娘Connection能干活最多的活啊。
老板连接池根据自己的实际情况会考虑一共养几个姑娘Connection,就是最大连接数了,其他的情况也可以参照这个给出的。
  如果我们写连接池,也就必须要考虑到这些问题,你的连接池代码考虑的太少,小心客人不满意啊
  对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。

连接池的配置与维护
  连接池中到底应该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数(minConn)和最大连接数(maxConn)来控制连接池中的连接。最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统启动的很快,响应起来却慢。这样,可以在开发时,设置较小的最小连接数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过反复测试,找到最佳点。
  我所说的对象工厂的意思是,如何产生一个连接的对象,从连接池里取出一个空闲对象,而不是去新建一个con,没必要新建对象,拿来就可以了,是吧?
单例呢,client/server用的比较多,很少在J2ee中使用,不过连接池可以考虑用下,比方建立100个空闲con上面
以上没有侮辱任何人或事的想法,只是随便举个例子


 


2008年9月27日 16:40
0 0

ORA-27101跟你的连接池无关,关于错误你可以看看楼上的链接
至于连接池的问题对于并发的J2ee系统多采用连接池的方式,定义最大连接数量后,需要就从里面取出一个就可以了,避免频繁创建销毁链接,以及响应时间等方面,如果只有少数用户,无所谓链接池了,代价并不大。
至于单例模式按照你的描述你这个系统,完全没有必要用单例,需要的是一个工厂,产生链接对象的工厂
单例模式可以用来管理一个connection  pool。单例模式可以用来保存这样一个connection   pool,在初始化的时候创建譬如100个connection对象,然后再需要的时候提供一个,用过之后返回到pool中。如果不是用单例模式的话,这个pool存在哪里,

要是你数据链接用单例了,你要链接池干嘛?单例是需要排队的

2008年9月26日 16:30
0 0

给你个地址自己去逛逛咯 应该会有帮助http://hi.baidu.com/%E4%B1%C1%FA%BD%A3%BF%CD/blog/item/3f01dd3203637945ac4b5fc0.html

2008年9月26日 09:53

相关推荐

    ORA-27101: shared memory realm does not exist.

    NULL 博文链接:https://snowelf.iteye.com/blog/507976

    ora-00604错误解决方法

    ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法

    ora-227101错误解决办法

    在Oracle数据库管理与维护的过程中,遇到各种错误代码是家常便饭,其中“ORA-227101”错误虽然在题目中被误标,实际案例中展示的是“ORA-27101”错误,这是一个较为常见的问题,通常发生在数据库服务未能正确启动或...

    使用工具IMPDP导入数据时ORA-39002、ORA-39070错误排查

    在使用Oracle Data Pump工具IMPDP(Import Data Pump)进行数据导入的过程中,可能会遇到ORA-39002和ORA-39070等错误。本文将针对这些错误的排查方法进行详细介绍,帮助用户理解问题的原因及解决策略。 ### 错误...

    Oracle数据库发生ORA-04031错误原因浅析及处理.pdf

    Oracle数据库发生ORA-04031错误原因浅析及处理 Oracle数据库是甲骨文公司提供的一种分布式数据库管理系统,以分布式数据库为核心的软件产品。它具有完整的数据管理功能,作为一个关系数据库,它是一个非常实用的...

    ORACLE数据库逐步解决ORA-12541、ORA-01034和ORA-27101、ORA-00119和ORA00132的过程

    ORACLE数据库遇到常见错误代码ORA-12541、ORA-01034、ORA-27101、ORA-00119和ORA-00132时的解决方法 一、ORA-12541错误的解决 ORA-12541错误,提示为"TNS:无监听程序",表示数据库的监听服务没有运行或者配置错误...

    ora-01460 错误原因分析

    ### ORA-01460 错误原因分析 #### 概述 在Oracle数据库操作过程中,可能会遇到ORA-01460错误,该错误全称为“ORA-01460: 转换请求无法实现或不合理”。这一错误通常发生在数据类型转换或者与操作系统之间的数据...

    创建物化视图ORA-12014错误解决方法

    ### 创建物化视图ORA-12014错误解决方法 #### 背景介绍 在Oracle数据库中,物化视图(Materialized View)是一种用于优化查询性能的重要工具。它预先计算并存储了复杂的查询结果,从而在实际查询时能够快速地返回...

    Oracle 10g启动后报ORA-16038错误的解决方法

    ### Oracle 10g启动后报ORA-16038错误的解决方法 #### 错误概述 在启动Oracle 10g数据库时遇到ORA-16038错误,该错误通常与归档日志操作有关。具体错误信息为: ``` ORA-16038: log 1 sequence #230 cannot be ...

    数据库ORA-01460错误的解决方法

    在IT领域,尤其是在数据库管理与维护中,遇到ORA-01460错误是常见的问题之一,这通常意味着系统在尝试执行数据转换时遇到了未实现或不合理的请求。本文将深入探讨ORA-01460错误的成因、影响以及提供一系列有效的解决...

    ORA-01152-01110

    在Oracle数据库管理与维护过程中,遇到ORA-01152和ORA-01110这类错误是非常常见的。这两个错误通常与数据文件恢复、控制文件问题以及数据库重启时的数据一致性检查有关。接下来,我们将详细解析这两个错误的具体含义...

    ORACLE ORA-00132 ORA-00214

    ### Oracle 错误 ORA-00132 和 ORA-00214 解析及处理 #### 一、错误概述 在Oracle数据库管理过程中,遇到ORA-00132和ORA-00214这类错误时,往往意味着数据库配置或启动过程中出现了问题。下面将对这两个错误进行...

    关于WIN10系统配置了环境变量后oracle instant client后依然提示ORA-01019错误的解决方案

    关于WIN10系统使用oracle instant client 时候提示ORA-01019错误的解决方案,本方案是配置好环境变量后依然提示ORA-01019错误的解决方案,内附本人制作测试的全过程说明

    如何处理错误ORA-29275:部分多字节字符

    ### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...

    Oracle 11gr2连Oracle 19c 报ORA-28040 ORA-01017解决方法.pdf

    Oracle数据库不同版本间的客户端与服务端的连接问题通常涉及到安全和兼容性配置,这篇文章主要讲述了在Oracle 11g R2客户端尝试连接Oracle 19c服务端时,遇到了两个特定的错误:ORA-28040和ORA-01017,以及如何解决...

    关于创建oracle 连接时报以下错误,ORA-01017 ORA-02063

    在创建Oracle数据库连接时遇到的错误ORA-01017和ORA-02063涉及到用户认证问题以及Oracle数据库版本之间的差异处理。ORA-01017错误表示用户名或密码无效,登录被拒绝,而ORA-02063则通常表示在Oracle数据库之间进行...

    oracle ora-03113错误

    ### Oracle ORA-03113 错误解析及解决方法 #### 一、ORA-03113 错误概述 ORA-03113 是一个较为常见的Oracle错误,通常出现在网络通信出现问题时,具体表现为“end-of-file on communication channel”(通信通道上...

    离线误删空间文件导致的ORA-01033及ORA-01145问题的解决办法

    这些问题可能会导致数据库启动时出现ORA-01033错误(数据库无法完成启动过程),以及在尝试修复过程中可能遇到的ORA-01145错误(除非启用了介质恢复,否则不允许立即脱机)。本文将详细介绍这两种错误的原因、可能的...

    ORA-04052p5731178_92080_WINNT.zip

    ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...

    ora-12514的错误的原因

    ORA-12514 错误的原因和解决方法 ORA-12514 错误是 Oracle 数据库中常见的一种错误,它的出现可能是由于多种原因引起的。下面我们将从根本上探究 ORA-12514 错误的原因,并提供相应的解决方法。 原因 1:监听器没有...

Global site tag (gtag.js) - Google Analytics