你遇到过Windows环境Oracle11g版本trc文件过多导致启动慢、监听卡顿的问题么
在WindowsServer上运行Oracle 11.2.0.1时大量.trc跟踪文件堆积超过1万甚至更多会直接引发数据库启动极慢、lsnrctl status卡住、监听重启慢、数据库连接慢、服务器I/O高等典型问题。最近有遇到过一次本文就从原因、危害、一键清理、永久根治全流程给出可直接落地的运维方案适用于所有WindowsOracle 11g环境。一、问题现象如果你也用过windows server下部署的Oracle 11g11.2.0.1版本数据库时你一定遇到过如下情况数据库启动耗时从几分钟变成十几分钟甚至更久执行lsnrctl status长时间无响应、卡住、超时数据库重启、关闭都明显变慢监听启动、停止、 eload极慢磁盘trace目录下文件数成千上万越积越多系统磁盘IO高、服务器整体响应变卡这些问题不是偶然而是WindowsOracle 11.2.0.1的机制性通病。二、原因及危害在windowsserver平台下出现此情况还是非常常见的主要有如下原因1. 文件系统目录遍历性能瓶颈(Windows NTFS特性)这是最直接的原因。单目录文件数限制效应虽然NTFS文件系统理论上支持数百万个文件但在实际应用中当单个目录下的文件数量超过一定阈值通常认为在5000-10,000个以上时文件系统的读写效率会显著下降。启动与监听时的扫描行为1) 数据库启动Oracle实例启动时后台进程如PMON,SMON,DBWn等可能会尝试读取或清理诊断目录中的某些状态文件或者在初始化ADR自动诊断存储库时扫描目录结构2) 监听器(lsnrctl status)监听器在启动或执行status命令时需要访问其日志和跟踪目录通常在$ORACLE_BASE/diag/tnslsnr/.../trace。如果该目录下有上万个.trc和.log文件操作系统在进行文件句柄分配、目录枚举或元数据读取时会消耗大量CPU和I/O时间导致命令响应极慢甚至超时3) 重启过程重启包含关闭和启动两个阶段关闭时需要写入最终的跟踪信息启动时又面临上述的扫描问题双重加剧了延迟。2. Oracle 11g ADR(Automatic Diagnostic Repository)机制Oracle11g引入了ADR来统一管理诊断文件默认路径由DIAGNOSTIC_DEST参数决定。缺乏自动清理策略虽然ADR提供了ADRCI工具来管理文件生命周期通过PURGE命令但如果未配置定时任务或保留策略Retention Policy旧的trace文件不会自动删除11.2.0.1版本的Bug或缺陷11.2.0.1是11g R2的初始版本存在较多已知Bug。在某些特定错误频繁发生如连接报错、内部错误ORA-600/7445、RMAN备份异常时可能会触发死循环式的Trace文件生成且该版本在处理大量ADR文件时的性能优化不如后续补丁集如11.2.0.4诊断进程阻塞当后台进程试图写入新的trace文件时如果文件系统因文件过多而响应缓慢可能会导致写操作阻塞进而拖慢整个实例的启动流程3. 潜在的根源性问题(为什么会有这么多文件)文件多通常是“果”而非“因”。需要排查是什么导致了Trace文件的疯狂增长应用程序连接错误应用层频繁发起错误的连接请求如密码错误、服务名错误每次失败都可能生成一个trace文件SQL跟踪未关闭某些会话可能开启了SQL Trace(Event 10046)但未正常关闭RMAN备份问题RMAN备份失败或警告有时会生成大量trace硬件或系统不稳定磁盘I/O错误或内存问题导致Oracle进程异常终止并生成Dump数据库bug导致进程频繁崩溃只要异常不解决trc文件会几分钟生成上百个。4. 危害如果不处理会越来越严重主要有如下危害数据库启动越来越慢最终无法启动监听不可用业务全部断连磁盘占满数据库直接宕机系统IO被占满影响其他应用问题反复出现运维成本极高三、紧急处理方案以下命令全部在Windows CMD(管理员权限下)运行可以按照步骤参考处理第一步停止监听与数据库避免文件占用lsnrctl stopsqlplus / as sysdbashutdown immediateexit若无法关闭直接在服务里停掉第二步定位trace路径执行下面SQL查看路径启动到mount状态也可select value from v$diag_info where nameDiag Trace;典型路径监听日志路径$ORACLE_HOME\network\log第三步清理.trc.trm旧文件在CMD中cd进入trace目录执行del /s /q *.trcdel /s /q *.trm或者手动清理也可第四步清理并重建监听日志解决4GB BUG进入network/log目录del listener.logecho.listener.log也可以手动清理但是建议先重命名便于后续排查。第五步启动数据库与监听sqlplus / as sysdbastartupexitlsnrctl start执行后你会立刻发现数据库启动秒启、lsnrctl status瞬间返回、服务器不再卡顿。四、根治方法让trc不再堆积1. 设置ADR自动清理Oracle级根治用sysdba执行-- 保留3天的trace文件alter system set diagnostic_diag_purge_min_age 4320 scopespfile;-- 清理7天前所有traceexec DBMS_SHRINK_CATALOG.PURGE_ALL_DIAGNOSTIC_DATA(SYSDATE-7);2. 监听自动轮转彻底解决4GB BUG编辑listener.ora增加LOGGING_LISTENER ONLOG_FILE_LISTENER listenerLOG_DIRECTORY_LISTENER $ORACLE_HOME\network\logLOG_ROTATION_LISTENER ONLOG_ROTATION_SIZE_LISTENER 100MLOG_ROTATION_AGE_LISTENER 1D3. 关闭多余跟踪防止疯狂生成trcalter system set sql_trace false scopespfile;alter system set events 10046 trace name context off;4. Windows计划任务定期清理兜底新建bat每日执行del /s /q C:\app\Administrator\diag\rdbms\orcl\orcl\trace\*.trcdel /s /q C:\app\Administrator\diag\rdbms\orcl\orcl\trace\*.trm5. 根因排查清理只是治标必须查异常排查为什么你的trc会暴增查看最近错误select to_char(first_time,yyyy-mm-dd hh24:mi), messagefrom v$alert_logorder by first_time desc;查看最新trc内容select * from v$diag_trace_file order by last_update_time desc;常见必须修复的问题ORA-600、ORA-7445数据库bug打PSU补丁监听TNS-12500系列错误网络/权限/配置进程频繁重启内存、PGA、SGA配置不当死锁、行锁、事务异常应用SQL问题五、总结Windows上Oracle11.2.0.1版本的trc文件过多导致启动慢、监听卡本质是Windows NTFS不适合海量小文件、Oracle11.2.0.1无自动清理监听日志4GB的BUG三个问题的叠加可以通过先清理、再配置自动清理、最后查错误的步骤从根源杜绝文件暴增。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2432867.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!