问题报错
Oracle数据库在进行expdp时发现进度很慢,通过查看alert日志发现如下错误信息:
Errors in file /oracle/app/oracle/diag/rdbms/orcl/orcl11/trace/orcl11_m000_206770.trc (incident=528938):
ORA-00603: ORACLE server session terminated by fatal error
ORA-27504: IPC error creating OSD context
ORA-27300: OS system dependent operation:sendmsg failed with status: 105
ORA-27301: OS failure message: No buffer space available
ORA-27302: failure occurred at: sskgxpsnd2
2022-01-24T20:49:00.127482+08:00
出现此问题,查询到很多网友处理都是内核参数添加vm.min_free_kbytes参数,添加值为物理内存的0.4%,由此打开思路,其实就是提示服务器性能不足导致的,查询cpu使用率如下:
提示:以下是本篇文章正文内容,下面案例可供参考
一、多个expdp任务无法停止
后台查询进程发现存在4个expdp进程,而服务器备份时每天执行的,意味着第一个备份任务4天没有完成,遂尝试kill_job
expdp \'/ as sysdba\' attach=SYS_EXPORT_ECHEMA_97
# [SYS_EXPORT_ECHEMA_97]为job_name 可通过dba_datapump_jobs查询运行状态中的任务
但无法登录,还是提示以上ORA-27504相关错误
二、服务器rac1掉出集群
rac1掉出集群,此时引发了一些问题,scan ip无法自动切换到rac2 上,rac1主机重启时间很长,重启后vip无法正常通信 但是ip列表里看到vip的状态却是UP状态,修复以上问题后手动重启rac1的集群服务。
由于CPU压力超60%,同时内存没有及时回收释放,引起集群服务异常,rac1被踢出导致的。
三、expdp问题排查
通过前几日的dmp导出日志查询发现每次都是在某张大表卡住,遂查询此表,存在LOB字段,且单表数据量大导致的
最大一张表占用896G,且包含LOB大字段导致导出时间超长。
四、重新导出dmp文件
log提示:
ORA-31693: Table data object "user_name"."table_name" failed to load/unload and is being skipped due to error:
ORA-02354: error in exporting/importing data
ORA-01555: snapshot too old: rollback segment number 13 with name "_SYSSMU13_3666532193$" too small
根据提示修改undo_retention
注意事项:
oracle的lob大字段有自己的retention参数,如果只调整undo_retention,而没有同步到lob大字段,该参数还是默认的900s
#查询语句:
select table_name,column_name,pctversion,retention from dba_lobs where table_name='[TABLE_NAME]';
#修改语句:
ALTER TABLE [TABLE_NAME] MODIFY LOB([COLUMN_NAME])(retention);
这里也需要导出时注意undo表空间的使用情况,毕竟加大了undo的保留时长。