1、进行正确的维护操作
很多的数据库无响应故障都是由于不正确的维护操作引起的。应避免在业务高峰期做大的维护操作,比如像MOVE、加主外键约束等会长时间锁表的操作。如果的确需要,尽量使用正确的操作方法。比如用online方式重建索引;建主键、唯一键约束时先建索引,然后在建约束时指定新建的索引等等。也就是保证系统的并发性、可伸缩性,避免系统串行操作的出现。
2、优化应用设计、优化数据库性能
为避免性能问题导致在业务高峰期数据库不能及时有效处理来自业务的请求,甚至于完全HANG住。对于数据库中存在的串行访问的部分进行优化,比如latch、enqueue,还包括不合理的sequence设计等。特别是在RAC数据库中,严重串行访问等待往往更容易引起严重的性能问题。优化应用设计,使数据库具有更好的可伸缩性和并行处理能力,能够有效地避免性能问题引起的数据库HANG住。
3、利用监控系统随时监控系统负载
遇到系统负载过高,内存不足,OS中虚拟内存换页很频繁等情况时,及时采取措施;监控ORACLE数据库的核心进程,如pmon、smon等,看是否有异常,如过高的CPU消耗。出现异常应立即处理;监控归档空间的日志切换;监控数据库中的等待事件,比如是否有大量的enqueue、log file switch(archiving needed)、resmgr:become active等待事件等。
4、为数据库打上补丁
很多的无响应故障是由于ORACLE的BUG引起的,数据库DBA应关注当前版本中有哪些BUG会导致数据库HANG住,尽量为数据库打上解决这些BUG的补丁。