Oracle-数据库连接数满的各种紧急处理方式

背景:

当数据库连接数爆满,无法登录到数据库进行操作时,这时候该怎么办?

解决方案 1:使用操作系统级别的 sqlplus 强制登录

即使连接数满了,作为 DBA 用户仍然可以通过以下方式登录:

sqlplus -prelim / as sysdba
增大进程数、或者连接数:
  • -prelim:启动抢救模式登录数据库,不创建会话,跳过大部分初始化流程。

  • 登录后可以执行以下操作:

    SQL> ALTER SYSTEM SET processes=2000 SCOPE=SPFILE;
    SQL> ALTER SYSTEM SET sessions=2000 SCOPE=SPFILE;
    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP;
    

    注意:限制模式下无法清理会话

解决方案 2:kill外部连接

步骤 1:获取监听端口号

Oracle 默认监听端口是 1521,但建议通过 lsnrctl status 确认实际的监听端口。

执行:

lsnrctl status

示例输出:

Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=your_host)(PORT=1521)))

此处确认监听端口为 1521


步骤 2:列出所有外部连接

使用 netstat 找出所有与监听端口相关的外部连接:

netstat -anp | grep :1521 | grep ESTABLISHED

示例输出:

tcp   0   0 192.168.1.1:1521   192.168.1.100:54321   ESTABLISHED  12345/oracle
tcp   0   0 192.168.1.1:1521   192.168.1.101:54322   ESTABLISHED  12346/oracle
tcp   0   0 192.168.1.1:1521   192.168.1.102:54323   ESTABLISHED  12347/oracle
...

此命令将列出所有连接到 Oracle 数据库的外部会话。


步骤 3:筛选前100个连接的进程号

使用 awkcut 提取前 100 个与 Oracle 数据库外部连接相关的进程号(PID):

netstat -anp | grep :1521 | grep ESTABLISHED | awk '{print $7}' | cut -d'/' -f1 | head -100

示例输出:

12345
12346
12347
...

步骤 4:清理前 100 个外部连接

通过 kill 命令终止这些外部连接:

for pid in $(netstat -anp | grep :1521 | grep ESTABLISHED | awk '{print $7}' | cut -d'/' -f1 | head -100); do
    echo "Killing PID $pid"
    kill -9 $pid
done

执行后,你将清理掉前 100 个外部连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值