Oracle自动维护任务
周日上午六点数据库报警,报ORA-1652错误,根据微信告警信息及告警时间点确认是Oracle自动维护任务启动,导致临时表空间不足
SQL Tuning Advisor这个自动任务很早就是要禁用掉的,本身数据库仅作数据存储,没有任何DML及查询任务,就没有处理,这次无论如何都是要关闭了的
查看自动维护任务状态
select client_name,status from dba_autotask_client;
关闭自动维护任务
数据库中一般会关闭自动分段顾问及自动SQL调整顾问
BEGIN
DBMS_AUTO_TASK_ADMIN.disable(
client_name => 'auto space advisor',
operation => NULL,
window_name => 'NULL');
DBMS_AUTO_TASK_ADMIN.disable(
client_name => 'sql tuning advisor',
operation => NULL,
window_name => 'NULL');
END;
/
修改运行时间
为避开其他批处理任务,也可以修改自动维护任务的运行时间
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
'MONDAY_WINDOW',
'repeat_interval',
'freq=daily;byday=MON;byhour=1;byminute=0;bysecond=0');
end;
/
ORA-27302报错
数据库多次ORA-27302报错,报错会导致相关的会话中断。故障原因是用于网络缓冲区预留的可用空间较少,解决方案建议修改本地回环地址的MTU,设置系统内核参数vm.min_free_kbytes。这有助于为网络缓冲区保留更大范围的已整理内存页,从而降低出现低缓冲区空间条件的可能性。
-
设置vm.min_free_kbytes参数,避免尝试超过物理内存5%的设置,否则会立即触发内存不足的情况。建议按照官方建议进行设置。
根据当前系统内存情况计算:0.00425110241024= 1052770 ,10527704= 4211080vm.min_free_kbytes = 4211080
-
设置MTU,修改 /etc/sysconfig/network-scripts/ifcfg-lo,添加如下内容,然后需要重启网络生效,同时建议重启操作系统。
注意:RAC环境需要先停止集群,然后进行修改操作。MTU=16436
也可以临时修改
ifconfig bond0 mtu 16436
DRM引起的GC等待
前台主要的GC等待事件
对于数据库实例,在11版本中,隐含参数 _undo_autotune 负责 undo retention(即 undo 段的保持时间)的自动调整,若由 Oracle 自动负责 undo retention,则 Oracle 会根据事务量来占用 undo 表空间,可能会形成 undo 表空间的争用,建议将其关闭。
参考命令:
alter system set "_undo_autotune"=FALSE scope=spfile sid='*';
对于数据库实例,在11版本RAC中,DRM(Dynamic Resource Mastering)负责将 Cache 资源 Remaster 到频繁访问这部分数据的节点上,从而提高 RAC 的性能。但是 DRM 在实际使用中存在诸多 Bug,频繁的 DRM 会引发实例长时间 Hang 住甚至是宕机,建议关闭 DRM。
参考命令:
alter system set "_gc_policy_time"=0 scope=spfile sid='*';
对于数据库实例,在11版本RAC中,建议关闭集群 Undo Affinity,降低集群交互,避免触发相关 BUG。
参考命令:
alter system set "_gc_undo_affinity"=FALSE scope=spfile sid='*'
设置defer后rman删除日志失败
灾备环境要下架一台DG备库,需要在主库设置defer,但是后面发现主库过期归档总是失败
RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process
archived log file name=+FRADG/honor/archivelog/2019_11_22/thread_1_seq_365.534.1024999167 thread=1 sequence=365
虽然log_archive_dest_state_x设置为DEFER,但是Oracle认为只要设置了log_archive_dest_n就会认定备库存在,只是暂时不可用而已,因此不会删除归档。 可以通过设置隐含参数(动态参数)来规避这个问题,默认值是true,该参数将认为延迟存档目的地完全不可用,并且不再为这些目的地保存归档日志
该参数可以动态修改,不需要重启数据库
alter system set "_deferred_log_dest_is_valid" = FALSE scope=both;