swap耗尽引起ora- 471 (reason unknown)

本文记录了一次Oracle数据库DBWR进程异常终止的情况,分析了进程终止的原因及影响,并通过检查系统日志发现内存资源耗尽的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Alert日志出现如下错误。
Thu Jan 17 16:04:01 2013
Thread 1 advanced to log sequence 706 (LGWR switch)
Current log# 1 seq# 706 mem# 0: /db/oracle11g/oradata/benguo/redo01.log
Thu Jan 17 16:06:00 2013
Thread 1 advanced to log sequence 707 (LGWR switch)
Current log# 4 seq# 707 mem# 0: /db/oracle11g/oradata/benguo/redo04.log
Thu Jan 17 20:03:53 2013
PMON (ospid: 72500): terminating the instance due to error 471
Instance terminated by PMON, pid = 72500

[oracle@server135 ~]$ oerr ora 471
00471, 00000, "DBWR process terminated with error"
// *Cause: The database writer process died
// *Action: Warm start instance

Process startup failed, error stack:
Errors in file /db/oracle11g/diag/rdbms/benguo/benguo/trace/benguo_psp0_41589.trc:
ORA-27300: OS system dependent operation:fork failed with status: 11
ORA-27301: OS failure message: Resource temporarily unavailable
ORA-27302: failure occurred at: skgpspawn5
Thu Jan 17 04:45:51 2013
Process m001 died, see its trace file

上面三个错误都和resource和内存有关,而导致了m001这个sga自动管理的子进程都dead了。

Dmesg的日志
Swap cache stats: add 103075105, delete 102890577, find 143284867/153505239
Free swap = 0kB
Total swap = 67108856kB
16777215 pages RAM
281381 pages reserved
3319924 pages shared
14482885 pages non-shared
Out of memory: kill process 16941 (dbus-daemon) score 56855 or a child
Killed process 16944 (dbus-daemon) vsz:2425828kB, anon-rss:2182360kB, file-rss:0kB
gvfs-gdu-volume[17260]: segfault at 18 ip 0000003ed1016220 sp 00007fffdec3b678 error 4 in libgdu.so.0.0.0[3ed1000000+38000]

看见dmesg的日志swap基本全部耗尽了。
[root@*****~]# free -m
total used free shared buffers cached
Mem: 64436 61326 3110 0 3 7647
-/+ buffers/cache: 53674 10762
Swap: 65535 58986 6549

等待n久终于登录到oracle中,感觉memory_target和memory_max_size都还是很正常,想对于64g的物理内存,这个值并不是很大。

SQL> show parameter sga;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 25856M
sga_target big integer 0
SQL> show parameter memor
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 25856M
memory_target big integer 25856M
shared_memory_address integer 0
SQL> show parameter pga;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0

虽然已经清楚了swap耗尽,引起了dbwn进程无法分配资源而导致实例崩溃,不过这个内存消耗来源却没有很详细的信息,由于并发的请求并不高,按理server完全应该能负载应用的请求。

后面由于server swap耗尽,导致相应极慢,而考虑到时间要求不得不采取最快的重启服务器方法,好在后续重启server后一切都正常,不过是何种原因消耗尽内存却不得了之,对于xiaoyu这个倒是一个损失。

### 三级标题:ORA-03113 错误的常见原因及解决方案 Oracle 数据库错误 **ORA-03113: end-of-file on communication channel** 通常表示客户端与数据库之间的通信连接意外中断。该错误可能发生在数据库连接、启动、插入数据等操作过程中,表明通信通道在读取或写入过程中提前关闭。 #### 1. 检查监听器状态和网络连接 监听器未正常运行或网络不稳定是引发 ORA-03113 的常见原因。需要确保监听器处于运行状态,并且客户端可以正常访问数据库服务器的监听端口。 ```bash lsnrctl status ``` 如果监听器未运行,可以使用以下命令启动: ```bash lsnrctl start ``` #### 2. 检查触发器或 PL/SQL 代码逻辑 在某些情况下,触发器或存储过程中的逻辑错误也可能导致 ORA-03113 错误。例如,在插入数据时,触发器执行过程中发生异常,可能导致连接中断。重新创建或修复触发器逻辑可以解决此类问题[^1]。 #### 3. 检查数据库启动过程 在数据库启动过程中出现 ORA-03113 错误,可能表示实例在启动时与后台进程通信失败。需要检查告警日志文件(alert log)以获取更详细的错误信息,例如是否存在内存不足、参数文件配置错误等问题。此外,检查 `spfile` 或 `pfile` 的路径是否正确,确保数据库能够正常读取参数设置[^4]。 #### 4. 检查日志文件和跟踪文件 Oracle 会在发生 ORA-03113 错误时生成跟踪文件(trace file),通常位于 `$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace` 目录下。查看跟踪文件可以帮助定位错误根源,例如是否由于后台进程崩溃或 I/O 错误导致连接中断。 #### 5. 检查操作系统资源限制 操作系统级别的资源限制(如打开文件数限制、内存不足、swap 空间不足)也可能导致 ORA-03113 错误。可以通过以下命令检查当前系统的资源限制: ```bash ulimit -a ``` 如果发现限制过低,应调整 `ulimit` 设置或修改 `/etc/security/limits.conf` 文件。 #### 6. 检查 SQL*Net 配置 检查 `sqlnet.ora` 和 `tnsping` 配置是否正确。例如,设置 `SQLNET.INBOUND_CONNECT_TIMEOUT` 和 ` DIAG_ADR_ENABLED` 参数可以提高连接稳定性。 ```bash tnsping <tns_alias> ``` #### 7. 检查防火墙和超时设置 如果客户端与数据库之间存在防火墙,可能在连接过程中因超时或中断而触发 ORA-03113。应检查防火墙规则是否允许 Oracle 监听端口通信,并适当调整超时设置。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值