DBA部分工作内容
- 尽量避免数据库出现故障
- 努力延长平均故障间隔时间 (MTBF):定期执行操作系统维护
- 缩短平均恢复时间 (MTTR):提前确定恢复过程方案并配置备份
- 最大程度地保护数据不会丢失。
故障类别
- 语句故障:单个数据库操作(选择、插入、更新或删除)失败。
- 典型问题
- 尝试在表中输入无效的数据。
- 尝试执行操作,但权限不足。
- 尝试分配空间失败。
- 应用程序中存在逻辑错误。
- 解决办法
- 与用户合作来验证并更正数据。
- 提供适当的对象或系统权限。
- 三种方法
- 启用可恢复的空间分配。
- 增加所有者限额。
- 增加表空间的空间。
- 与开发人员合作来更正程序错误。
- 用户进程故障:单个数据库会话失败。
- 典型问题
- 用户执行了异常断开连接操作。
- 用户会话已异常终止。
- 用户遇到了程序错误并终止了会话。
- 解决办法
- 通常不需要 DBA 执行任何操作就可解决用户进程故障。实例后台进程会回退未提交的更改并解除锁定。
- 网络故障:与数据库的连接断开。
- 典型问题
- 监听程序失败。
- 网络接口卡 (NIC) 故障。
- 网络连接失败。
- 解决办法
- 配置备份监听程序和连接时故障转移
- 配置多个网卡
- 配置备份网络连接
- 用户错误:用户成功完成了操作,但是操作不正确
- 典型问题
- 用户无意中删除或修改了数据
- 用户删除了表。
- 解决办法
- 回退(用户尚未提交或退出程序)或使用闪回查询(提交了更改)进行恢复
- 从回收站恢复表
- 实例故障:数据库实例意外关闭
- 典型问题
- 断电
- 硬件故障
- 一个后台进程出现故障
- 紧急关闭过程
- 解决办法
- 使用“startup”命令重新启动实例。从实例故障进行恢复是自动执行的,其中包括前滚重做日志中的更改和回退任何未提交的事务处理。
- 介质故障:丢失了一个或多个数据库文件(也就是说,文件已删除或磁盘出现了故障)
- 典型问题
- 磁盘驱动器故障
- 磁盘控制器故障
- 删除或损坏了数据库文件
- 解决办法
- 从备份中还原受影响的文件。
- 如果需要,通知数据库关于新文件的位置。
- 如果需要,通过应用重做信息来恢复文件。
后台进程和恢复
- 检查点 (CKPT)
- 每隔三秒(或频率更高),CKPT 进程就在控制文件中存储一次数据,以记录DBWn 从SGA 写入到磁盘的已修改数据块。这就称为“检查点”。检查点的用途是标识联机重做日志文件开始进行实例恢复的位置(这个位置称为“检查点位置”)。
- 如果使用日志切换,CKPT 进程还会将这个检查点信息写入到数据文件头。
- 使用检查点的原因
- 确保定期将内存中的已修改数据块写入磁盘,以便在系统或数据库出现故障的情况下不会丢失数据
- 减少实例恢复所需的时间。在进行恢复时只需处理跟在最后一个检查点后面的联机重做日志文件
- 确保在关闭过程中所有已提交数据都写入到数据文件中
- 重做日志文件和日志写进程
- 重做日志文件
- 记录数据库的更改
- 应多路复用以避免文件丢失(尽量驻留在不同的磁盘中)
- 日志写进程何时执行写入
- 提交时
- 达到三分之一满时
- 每隔三秒
- DBWn 执行写入之前
- 归档程序 (ARCn)
- 是一个可选的后台进程
- 将数据库设置为ARCHIVELOG 模式时会自动归档联机重做日志文件
- 保留对数据库进行的所有更改的记录
- 联机重做日志组填满后,Oracle 实例便开始对下一个联机重做日志组执行写入。从一个联机重做日志组切换到另一个联机重做日志组的过程称为日志切换。ARCn 进程在每次进行日志切换时都会对已填满的日志组进行归档。
实例恢复
- 概览
- 原因是尝试打开一个数据库,该数据库中的文件在关闭时没有进行同步
- 是自动执行的
- 使用重做日志组中存储的信息来同步文件
- 两个操作
- 前滚:数据文件还原到实例出现故障之前所处的状态。
- 回退:已执行但尚未提交的更改会返回到初始状态。
- 实例恢复的阶段
- 数据文件不同步(数据文件头中包含的系统更改号 (SCN) 必须与数据库控制文件中存储的当前SCN 匹配,这样实例才能打开一个数据文件。)
- 前滚(重做)
- 文件中已提交和未提交的数据
- 回退(还原)
- 文件中已提交的数据
- 优化实例恢复
- 在实例恢复期间,必须将检查点位置与重做日志末尾之间的事务处理应用于数据文件。
- 通过控制检查点位置与重做日志末尾之间的差异可优化实例恢复。
- 使用 MTTR 指导
- 以秒或分钟为单位指定所需的时间。
- 默认值为 0(禁用)
- 最大值为 3,600 秒(1 个小时)
- (Enterprise Manager > 管理 > 指导中心 > MTTR 指导)
- 进行配置以提高可恢复性
- 计划常规备份:大多数介质故障需要从备份还原丢失或损坏的文件
- 多路复用控制文件:与数据库关联的所有控制文件是完全相同的。至少要有三个副本
- 多路复用重做日志组:至少要确保每个重做日志组有两个副本
- 保留重做日志的归档副本
文件
- 控制文件
- 控制文件是一个二进制小文件,用于说明数据库的结构。只要装载或打开了数据库,Oracle 服务器就必须能够写入这个文件。如果这个文件不存在,就不能装载数据库
- 控制文件至少有两个副本(Oracle 建议三个)
- 每个磁盘上一个副本
- 至少在单独的磁盘控制器上有一个副本
- 重做日志文件
- 每个组至少有两个成员(文件)
- 每个成员都位于一个独立的磁盘驱动器上
- 每个成员都位于一个独立的磁盘控制器上
- 多路复用重做日志
- 在“Redo Log Members(重做日志成员)”区域中,单击“Add(添加)”
- 归档日志文件
- 创建重做日志文件的归档副本
-
- 指定归档日志文件命名惯例
- 指定一个或多个归档日志文件的位置
- 将数据库切换到 ARCHIVELOG 模式。
- 命名与目的地
-
- %s:包含日志序列号作为文件名的一部分
- %t:包含线程号作为文件名的一部分
- %r:包含重置日志 ID 可确保归档日志文件名是唯一的,甚至在使用某些高级恢复技术重置了日志序列号之后也是如此
- %d:包含数据库ID 作为文件名的一部分
- ARCHIVELOG 模式
-
- SQL> ALTER DATABASE ARCHIVELOG;(mount状态下),再重启数据库