不登录oracle连接数据库,oracle 大量连接导致数据库不能登录

系统遇到过几次这种问题,一个系统申请的session数过大,导致数据库进程数满,无法连接的问题。

pl sql develope 报的错误是:ORA-12170:TNS:链接超时

8471e591cb8437e31e01ab3c7d0255d664c.jpg

oracle用户登录服务器,使用dba身份进入sqlplus:

sqlplus / as sysdba

报错信息如下:

SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 1 18:34:46 2018

Copyright (c) 1982, 2009, Oracle. All rights reserved.

ERROR:

ORA-00020: maximum number of processes (1000) exceeded

线程数超过最大值1000了。

由于oracle 线程数超过最大,所以不能登录了。(当然,sqlplus / nolog 是可以登的,但是不能用)

1、这个时候,就只有关闭oracle 的监听:

lsnrctl stop # start 启动 status 查看状态

关闭了监听,就不会有新的用户登录进来,也不会生成新的session,占用process了。

稍等一下,就可以使用sqlplus / as sysdba 登录了(oracle 会保存一些已经关闭的session,这些session会被标记为“kill”状态,2小时候清除,所以关闭监听后,一会就会,process 使用就会掉一点下来)

2、这个时候,执行SQL:

select count(1) from v$session;

查看session使用情况。

3、执行SQL:

select machine,count(1)coun from v$session group by machine order by 2 desc

查看session数最多的机器(也可以换成user/program)

4、这样,就找到占用session多的机器、用户、程序。然后执行如下SQL:

select spid, osuser, s.programfromv$session s,v$process pwhere s.paddr=p.addr and s.machine = 'venn01';

注意最后一个条件,换为上一步查出来的数据,字段也要改下

spid即为占用session最多的机器、用户、程序的线程号(同系统进程号)

5、执行:

kill -9 spid

6、这个时候,就可以使用pl sql developer登录了,执行SQL

select 'kill -9'||spid, osuser, s.programfromv$session s,v$process pwhere s.paddr=p.addr and s.machine = 'venn01';

7、可以打印出kill 命令,直接copy 一列,粘贴到服务器上执行,就搞定了。

8a4e3bc334d2aad19102abefc9e8e8fe2b9.jpg

科普一下oracle的session和process

session : 指用户连接的session

process : 指session执行的线程

session 可以从 v$session 表查看,process 可以从v$process 表查看,

session和process 表的关系为:

select s.sid,p.PID,s.*,p.*

fromv$session s,v$process pwhere s.paddr=p.addr

session表中保存了process的地址。

select * fromv$parameterwhere name like 'sessions' or name like 'processes'

在v$parameter 表可以查看session和process的配置,建议配置session 略大于process,可以修改(重启生效):

SQL> alter system set processes=500 scope=spfile;

SQL> alter system set sessions=555 scope=spfile;

也可以这样 查看:

SQL>show parameter processes;

SQL>show parameter sessions;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要连接 Oracle 数据库,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了 Oracle 数据库,并且数据库已经在运行状态。 2. 确定您有正确的连接信息,包括主机名(或 IP 地址)、端口号、数据库名称、用户名和密码。这些信息通常由数据库管理员提供。 3. 在您的代码或命令行中,使用相应的编程语言或工具来建立连接。以下是一些常见的连接示例: - 在 Java 中,可以使用 JDBC(Java Database Connectivity)来连接 Oracle 数据库。示例代码如下: ```java import java.sql.*; public class OracleConnectionExample { public static void main(String[] args) { Connection connection = null; try { // 连接数据库 String url = "jdbc:oracle:thin:@localhost:1521:ORCL"; // 根据实际情况修改主机名、端口号和数据库名称 String username = "your_username"; // 根据实际情况修改用户名 String password = "your_password"; // 根据实际情况修改密码 connection = DriverManager.getConnection(url, username, password); System.out.println("成功连接Oracle 数据库!"); } catch (SQLException e) { System.out.println("连接Oracle 数据库时发生错误:" + e.getMessage()); } finally { try { if (connection != null) { connection.close(); } } catch (SQLException e) { System.out.println("关闭数据库连接时发生错误:" + e.getMessage()); } } } } ``` - 在 Python 中,可以使用cx_Oracle模块来连接 Oracle 数据库。示例代码如下: ```python import cx_Oracle connection = None try: # 连接数据库 dsn = cx_Oracle.makedsn('localhost', 1521, 'ORCL') # 根据实际情况修改主机名、端口号和数据库名称 connection = cx_Oracle.connect('your_username', 'your_password', dsn) print("成功连接Oracle 数据库!") except cx_Oracle.DatabaseError as e: print("连接Oracle 数据库时发生错误:" + str(e)) finally: if connection is not None: connection.close() ``` - 另外,还可以使用其他编程语言或工具提供的相应接口来连接 Oracle 数据库。 请在上述代码或命令中修改相关参数,以适应您自己的环境和要求。如果仍然无法连接,请检查网络连接数据库配置和权限等方面的问题,并与数据库管理员联系以获取更多帮助。祝您成功连接Oracle 数据库!如果您有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值