ORA-12537: Network Session: End of file
ORA-12537:网络会话:文件结束
在程序运行是报错,最后发现是连接数超过最大连接数
查询连接数的语句
select username,count(username) ,machine from v$session group by username,machine
官方文档:
ORA-12537 is an informational message and means that the connection has been closed. This error message can happen due to any of the following reasons:
- There are too many connections being open by the application.
- There are configuration issues in the sqlnet.ora, protocol.ora and listener.ora files.
- Database is shut down (maybe for nightly backup), but connection to database was kept by client.
- A timeout occurred on the client connection.
- A firewall closed idle connections.
- There is a path name that is too long for the Oracle TNS client on Windows.
应用程序打开的连接太多。 sqlnet.ora、protocol.ora和listener.ora文件中存在配置问题。 数据库已关闭(可能用于夜间备份),但与数据库的连接由客户端保留。 客户端连接超时。 防火墙关闭了空闲连接。 对于Windows上的Oracle TNS客户端来说,路径名太长。
因Oracle中有Inactive session,如果不处理会影响系统,但如果设置定期清理空闲会话,也会引发此异常。
因为连接池缘故,应用程序关闭会话后,连接池对应的数据库会话一直处于INACTIVE状态,人为设定的自动清理作业把连接清掉,而此时程序再次访问数据时,由于连接池的相关会话被清理掉了,从而报错。--比较极端的情况,但有概率发生的
关于Oracle的Inactive session
在Oracle数据库中,"Inactive session"指的是一个已经建立连接但当前处于不活跃状态的数据库会话。这可能是因为会话已经执行完毕,但连接还没有被关闭,或者因为会话正在等待某些资源或事件的完成而暂时处于空闲状态。
这种情况通常发生在以下情况下:
1. **长时间的空闲时间**:会话已经完成了它的任务,但连接还没有被关闭。这可能是由于应用程序的设计或者错误,导致连接没有被正确地关闭。
2. **等待资源**:会话可能在执行一个需要等待某些资源的操作,比如锁定资源或等待I/O操作完成。在等待资源的过程中,会话可能会被标记为"Inactive"。
3. **网络问题**:在某些情况下,网络问题可能导致会话在不活跃的状态下停留更长时间,即使数据库中的操作已经完成。
4. **应用程序逻辑问题**:应用程序的错误逻辑可能导致会话在不活跃状态下停留,比如处理异常时没有正确关闭连接。
一般来说,对于数据库性能和资源管理来说,及时关闭不活跃的会话是很重要的。这可以通过监视会话活动并在必要时采取适当的措施来实现,比如设置超时时间、优化SQL查询、检查应用程序代码等。
如果不处理Inactive session,不活跃的会话会一直存在,占用数据库资源并且可能影响数据库的性能。特别是在高负载的情况下,大量的不活跃会话可能会导致数据库连接池用尽,影响其他用户的连接请求。此外,不活跃的会话也可能会在系统中产生不必要的锁定或资源等待,进一步影响数据库的整体性能和可用性。因此,及时处理不活跃的会话是确保数据库系统正常运行和提供稳定性服务的重要步骤。
不活跃的会话会影响数据库连接池的性能和效率。【数据库连接池】是一种管理数据库连接的工具,它可以帮助应用程序更有效地利用数据库连接资源,提高系统的性能和扩展性。然而,如果不活跃的会话占用了连接池中的连接资源,将会导致连接池中的可用连接数量减少,进而影响其他活跃会话的获取连接和执行操作的效率。因此,对于不活跃的会话需要及时关闭或释放数据库连接,以避免对数据库连接池的影响。
取消使用数据库连接池可能会减少一些与连接池相关的问题,但并不会完全消除不活跃会话导致的影响。即使不使用连接池,不活跃的会话仍然会占用数据库资源,并可能对数据库的性能产生负面影响。
当【不使用连接池】时,每个会话都会直接与数据库建立连接,因此不活跃的会话仍然会保持数据库连接,并在一段时间内占用数据库资源。这可能会导致数据库资源的浪费和性能下降,尤其是在高负载情况下。此外,不活跃的会话也可能导致数据库中的锁定或资源等待,影响其他会话的执行效率和系统的整体性能。
因此,无论是否使用连接池,及时关闭或释放不活跃的会话仍然是维护数据库性能和资源管理的重要步骤。
在Oracle中,连接池通常会维护一组数据库会话,以便在应用程序需要时可以快速获取数据库连接。当应用程序关闭会话后,连接池中对应的数据库会话可能会进入INACTIVE状态。INACTIVE状态表示该会话当前没有执行任何活动的SQL语句,但连接仍然保持着以供将来使用。
连接池中的会话处于INACTIVE状态并不意味着它们被完全关闭或终止,而是暂时处于空闲状态以等待将来的数据库连接请求。这有助于减少每次请求时重新建立数据库连接的开销,提高系统性能和资源利用率。
需要注意的是,虽然连接池中的会话处于INACTIVE状态,但它们仍然占用一定的数据库资源,包括连接资源和内存资源。因此,在设计应用程序和配置连接池时,需要考虑适当的连接管理策略,以确保数据库资源得到有效利用并且不会被浪费。
通常情况下,连接池会优先重用处于INACTIVE状态的连接,而不是创建新的连接。这是因为重用已存在的连接可以减少数据库系统的开销和资源消耗,提高系统性能和响应速度。当连接池中存在INACTIVE状态的连接时,应用程序请求连接时,连接池会尝试重新激活这些空闲连接,以满足请求,而不是每次都创建新的连接。
然而,是否重用INACTIVE状态的连接还取决于连接池的配置和管理策略。一些连接池可能会设置最大空闲时间,超过该时间后会关闭INACTIVE状态的连接,而不是重用它们。此外,连接池还可能会根据当前的连接负载和性能需求来动态调整连接的创建和重用策略。
总的来说,连接池通常会尽量重用处于INACTIVE状态的连接,但具体的行为可能会根据连接池的配置和应用程序的需求而有所不同。
Oracle的连接池通常不会自动清理处于INACTIVE状态的连接,而是保留这些连接以待重新激活和重用。但是,一些连接池实现可能会提供连接清理和回收机制,以确保连接池中的连接不会过度,以确保连接池中的连接不会过度累积或占用过多资源。这些连接池通常会根据一定的策略或配置参数来判断何时清理处于INACTIVE状态的连接,例如根据连接的空闲时间、连接的最大存活时间、连接数量等条件。常见的一些连接池,如Apache Commons DBCP、HikariCP、C3P0等,可能提供连接清理机制以优化连接的管理和资源利用。具体的清理策略和行为可能因连接池实现而异,因此在使用连接池时需要了解各个连接池的特性和配置选项。
在Oracle数据库中,使用连接池的会话正常结束后,会话状态通常会变为INACTIVE,而不是立即被清理。当会话被标记为INACTIVE后,连接池会保留这些会话以备重用,避免频繁地创建和关闭连接带来的开销。
如果不使用连接池,在Oracle中正常结束的会话也会被关闭,而不会保留为INACTIVE状态。Oracle数据库会自动管理和释放这些会话,确保数据库资源的正确释放和维护。
总的来说,使用连接池会更好地管理和优化数据库连接的使用,但如果不使用连接池,Oracle数据库也会自动处理正常结束的会话,不会保留为INACTIVE状态。
查询Inactive session:
SELECT SID, SERIAL#, STATUS, USERNAME, OSUSER, MACHINE, PROGRAM FROM V$SESSION WHERE STATUS = 'INACTIVE';
在Oracle数据库中,如果不处理不活跃会话可能会对系统资源和服务器内存造成一些影响:
1. 资源浪费:不活跃的会话会持续占用数据库资源,包括连接资源、内存资源和服务器处理资源。长时间保持不活跃的会话可能会导致资源的浪费,降低数据库的性能和可用性。
2. 内存占用:不活跃的会话在内存中占用存储空间,会增加总体内存占用。如果有大量不活跃的会话积累,可能会导致内存压力增加,甚至引起内存资源不足的情况。
3. 系统性能下降:不活跃的会话会竞争数据库资源,可能会导致查询响应时间延长、系统负载增加、数据库性能下降等问题。长时间存在大量不活跃的会话会对整个系统的性能产生负面影响。
因此,及时识别和处理不活跃会话是维护Oracle数据库系统性能和资源管理的重要步骤,可以通过定期监控、设置超时机制、合理调整连接参数等方式来有效管理不活跃会话,减少对系统资源和服务器内存的影响。
在Oracle数据库中,Inactive session通常会在以下情况下被重新激活:
1. 用户执行SQL查询或操作:当不活跃的会话接收到用户发起的SQL查询或操作时,会话将会重新激活以执行相应的任务。
2. 定时任务或后台作业:如果不活跃的会话有定时任务或后台作业需要执行,会话会被重新激活以完成相应的任务。
3. 会话超时:如果设置了数据库连接的超时机制,超过一定时间没有活动的不活跃会话可能会被数据库系统自动终止,而重新激活会话可能需要用户再次连接数据库。
4. 用户手动重新连接:用户可能会手动重新连接到先前不活跃的会话,这将会重新激活该会话。
需要注意的是,具体的Inactive session何时会被重新激活可能会受到数据库配置、应用程序设计和用户操作的影响。为了有效管理和优化数据库性能,建议适时监控和处理不活跃会话,并根据实际情况制定相应的重新激活策略。
标签:数据库,会话,INACTIVE,Oracle,异常,连接,连接池 From: https://www.cnblogs.com/liuqifeng/p/18185896