--=============================
-- Oracle 常见故障及日常规划
--=============================
对任何数据库系统而言,对显而易见的故障,应当避免发生本文列出了 Oracle 常见的故障并给出了解决方案,同时列出了一些日常规划。
一、数据库高可用性的几个目标
MTBF ( Mean-Time-Between-Failures )
平均失败时间,即数据库出现失败的频繁度,应尽可能增大该值
应对措施
RAC 集群技术:位于多台计算机上的多个实例打开一个物理数据库,降低因一个或多实例失败导致的风险
Streams : 利用高级队列技术,通过解析归档日志,将归档日志解析成 DDL 及 DML 语句,从而实现数据库之间的同步。相当于
SQL server 中的复制技术,可以在对主系统没有任何压力的情况下,实现对数据库对象级甚至整个数据库的同步。
Data Guard :一个主数据库,多个备用数据库,备用数据库是主数据库在事务上一致的副本,可是在主数据宕机的情况下由
备用服务器来继续提供服务。相当于 SQL server 中的数据库镜像功能。
MTTR ( Mean-Time-To-Recover )
平均恢复时间,数据失败后出现的停机时间,应尽可能减小该值
数据损失最小化
在减少 MTTR 的同时,应尽可能的减少数据的损失
二、常见的故障类别
1. 语句级故障,通常为 DML , DQL , DCL , DDL 等等
无效数据 --> 使用数据符合相关约束,满足值域的数据
缺少权限 --> 给予用户所需的权限
空间分配问题 --> 使用 alter session enable resumable ,增加用户配额,增加表空间大小
应用程序逻辑错误 --> 修正逻辑错误
2. 用户进程故障
用户非登出的异常退出
用户会话异常终止
程序错误导致会话结束
对于上述错误,实例后台进程 PMON 会自动回滚未提交的事务,并释放相关锁资源
3. 网络故障
侦听器故障 --> 配置一个备份的侦听器, connect-time 故障转移
网络接口卡故障 --> 使用多个网络接口卡
网络连接故障 ( 路由 ) --> 配置一个备份的网络连接
4. 用户错误
用户意外删除或修改数据 --> 回滚或使用闪回查询来恢复
用户删除表 --> 从回收站闪回删除
5. 介质故障
磁盘故障
磁盘控制器故障
删除或损坏数据文件
可能的解决方案,使用联机事务日志从备份恢复受影响的文件或恢复数据文件到新的物理位置
6. 实例故障
电源负载故障
硬件故障
后台进程失败
异常关闭数据库
解决方案,使用 startup 重新启动实例。实例实现自动恢复,根据联机日志文件前滚提交的事务,回滚未提交的事务
查看告警日志、跟踪日志等找出出现故障的原因
三、实例恢复相关的后台进程
1. 检查点进程 ( CKPT )
检查点将当前日志文件的信息更新到数据文件头部,控制文件等
检查点的目的是同步日志文件与数据文件的不同步,从而可以确定实例恢复从最近的检查点开始
检查点的触发条件
在日志切换的时候
数据库用 immediate , transaction , normal 选项 shutdown 数据库的时候
根据初始话文件 LOG_CHECKPOINT_INTERVAL 、 LOG_CHECKPOINT_TIMEOUT 、 FAST_START_IO_TARGET 的设置的数值来确定
用户受手动触发
检查点存在的理由
确保在内存中已修改的数据定期写入到数据文件,防止系统或数据库故障引起数据的丢失
减少实例恢复所需的时间,从最近的检查点到故障时即为所需要进行的恢复
在数据库关闭时,确保所有提交的数据写入到数据文件
检查点信息包括
检查点位置 ( 位于联机日志文件 )
系统改变号 ( SCN )
联机日志文件中的位置
日志信息等
注:检查点进程不会写入数据块磁盘,也不会写任何日志到联机日志文件
2. 联机日志文件及日志写入进程( LGWR )
联机日志文件记录数据库的变化情况
应当被多功复用以避免丢失
日志写入进程
在 commit 时触发
当日志缓冲 / 3 满时
每秒触发
在 DBWn 之前完成
3. 归档进程 ( ARCn )
归档进程是一个可选的后台进程
当数据库处于归档模式下,将自动归档联机日志文件
数据库所有做出的变化将被完整记录
归档进程在每次发生日志切换时被初始化,在联机日志文件被重新使用前自动对联机日志文件实现归档
建议开启归档模式
4. 关于详细的后台进程描述等,请参考: Oracle 实例和Oracle 数据库(Oracle 体系结构)
四、三大文件的规划
1. 多路复用控制文件
至少使用个以上的控制文件
分散放开到不同的磁盘
控制文件副本应当位于不同的磁盘控制器
建议使用 RMAN 定期自动备份
2. 多路复用重做日志文件
每一个日志组至少两个成员
每一个日志成员应当位于不同的磁盘
每一个日志成员应当位于不同的磁盘控制器
组内成员被同时写,带来较大的 I / O ,应置于高速磁盘
3. 归档日志
应将生产数据库切换到归档模式
按合理的归档日志命名
多于一个归档路径
五、实例恢复
请参照 : Oracle 实例恢复
六、更多
SQL 基础--> 层次化查询(START BY ... CONNECT BY PRIOR)
SQL 基础--> 集合运算(UNION 与UNION ALL)