⊙ 平均故障间隔时间(MTBF)
怎么样延长MTBF:将重要的文件分布在不同的卷组、不同的文件系统、不同的RAID设备上等设置硬件级、操作系统级冗余以提高高可用性,可以对在线日志文件文件、控制文件实现文件镜像分布到不同磁盘控制器下的不同磁盘上,以实现数据库级的冗余,实现高可用性,减少故障和DOWN机的频率,避免MTBF过短。 ⊙ 平均恢复时间(MTTR) |
怎么样缩短MTTR: ◎ 通过将归档日志设置慢速介质和快速介质的方法进行多重归档,以实现“快速介质”上快速介质恢复。 | ◎ 通过设置备份的频率及RMAN的增量和差量备份方式,减少恢复时间。 | ◎ 通过设置快速检查点及并行恢复来提高崩溃恢复的平均恢复时间 | |
常见故障的类型
⊙ 语句故障 语句故障的类型包括: | ⊙ 应用程序中出现逻辑错误。 | ⊙ 用户试图向表中输入无效数据,可能破坏完整性约束。 | ⊙ 用户权限不足却试图执行某个操作,例如只有SELECT 权限却在表中执行插入操作。 | ⊙ 用户试图创建表,但超出了分配给该用户的限额限制。 | ⊙ 用户试图对表执行INSERT 或UPDATE 操作,导致分配了一个区,但是表空间中的可用空间不足 注:如果遇到语句故障,Oracle 服务器或操作系统将返回错误代码和错误消息,可以根据错误代码来解决问题 | 出现语句故障后,DBA 进行干预的程度各不相同,这取决于故障的类型,可能包括以下内容: | ⊙ 修复应用程序以使逻辑流正确无误。 ⊙ 修改并重新发出SQL 语句。 ⊙ 为用户提供成功完成该语句所必需的数据库权限。 ⊙ 发出ALTER USER 命令以更改限额限制。 | ⊙ 向表空间中添加文件空间。 | 怎么样来解决用户进程的故障呢? | ⊙ DBA 很少需要执行操作来解决用户进程错误。该用户进程不能继续工作,尽管Oracle 服务器和其它用户进程会继续正常运行。 | ⊙ PMON 后台进程出现异常终止的用户进程后,PMON 后台进程通常足以清理该用户进程。 | ⊙ PMON 进程检测到异常终止的服务器进程时,它将回退该异常终止进程的事务处理,并释放它所获得的任何资源和锁 | ⊙用户进程故障 ⊙ 用户错误 用户错误的常见类型 ⊙ 用户意外地删除或TRUNCATE表。 ⊙ 用户删除表中的所有行。 ⊙ 用户提交了数据,但在其中发现一个错误 | ⊙ 实例故障 崩溃恢复 前滚---open---回滚 那在打开数据库时,然后来保证数据库一致性呢? 在打开的时候会有2次检查:◎ 第一次检查数据文件头中的Checkpoint cnt是否与对应控制文件中的Checkpoint cnt一致.如果相等,进行第二次检查.◎ 第二次检查数据文件头的开始SCN和对应控制文件中的结束SCN是否一致 实例恢复(RAC)来实现 | ⊙ 介质故障(需要DBA进行干预) 与介质有关的问题的常见类型: | ⊙ 包含某一数据库文件的磁盘驱动器出现磁头损坏。 | ⊙ 对实现正常数据库操作所需的文件进行读写操作时存在物理问题。 | ⊙ 文件被意外删除。 介质故障解决方法:经过测试的恢复策略是解决介质故障问题的关键要素 恢复策略取决于以下因素: ⊙ 选择的备份方法以及受到影响的文件。 | ⊙ 数据库操作的ARCHIVELOG 模式。 在选择备份策略时,应考虑以下一些问题: ⊙ 根据对系统可用性的期望,管理层是否权衡了所选备份策略的利弊? | ⊙ 是否有专门的资源来确保成功实施备份和恢复策略? | ⊙ 是否已明确了解进行备份和准备恢复的步骤的重要性? | ⊙ 管理层要考虑成本投入和风险比. | | | ⊙ 网络故障 |
改动向量
改动向量描述对数据库中任何单个数据块所做的一次改动,所以改动向量是数据块变化的线索。改动向量中的信息包括版本号、事务操作代码以及被改动的数据块的地址。改动向量中的信息包括版本号、事务操作代码以及被改动的数据块的地址。当改动向量应用到数据块时,该数据块版本号(当前数据块被修改次数的计数器)加1。 |
重做记录 重做记录是一组改动向量,用于描述对数据库一个原子改动,也就是这一组改动向量是集体行动的。同一条重做记录的一组改动向量要么同时都应用恢复,要么都不应用。 无论发生何种类型的系统故障,恢复都是按重做记录为单位来应用的,它保证或者同时运用重做记录中的全部改动向量,或者不运用其中任何一个改动向量。 | |
检查点 两类:增量检查点和完全检查点 ⊙ 完全检查点
当关闭数据库(异常关闭除外)或通过ALTER SYSTEM CHECKPOINTA 命令手动启动检查点操作时,将执行称为完全检查点的过程。在完全检查点操作中,DBWn 将数据库缓冲区高速缓存中的所有脏缓冲区数据写入数据文件。所以完全检查点,写入的数据最多。 ⊙ 增量检查点 |
增量检查点(跟快速启动检查点相关)是持续活动的检查点,是一种心跳机制,每3秒检查一次,DBWn 定期从检查点队列写出缓冲区数据,从而不断推进内存中的增量检查点操作。 |
⊙ 部分检查点
ALTER TABLESPACE BEGIN BACKUP 命令仅对缓冲区高速缓存中属于该表空间的脏缓冲区启动部分检查点操作。 |
各种RBA
⊙ RBA RBA就是重做日志记录在重做日志文件中所对应的位置,相当于数据文件中的ROWID,通过这个地址来定位重做日志条目,相当于重做日志的地址。 | |
◎ 日志文件序列号(4字节) ◎ 日志文件块编号(4字节) ◎ 重做日志记录在日志块中的起始偏移字节数(2字节) |
◎ LRBA:数据缓存(buffer cache)中一个脏块 最早一次被更新的时候产生的重做日志记录在重做日志文件中所对应的位置就称为LRBA |
◎ HRBA:数据缓存(buffer cache)中一个脏块 最近一次被更新的时候产生的重做日志记录在重做日志文件中所对应的位置就称为HRBA ◎ checkpoint RBA:当一个checkpoint事件发生的时候,checkpoint进程会记录下当时所写的重做日志记录的地址,即RBA,此时记录的RBA被称为checkpoint RBA。从上一个checkpoint RBA和当前的checkpoint RBA之间的日志所保护的buffer cache中的脏块接下来将会由DBWR写入到数据文件当中去。 | |
◎ target rba:与增量检查点密切相关。比如检查点RBA=100,而计算出来的target rba=105,那我们这次增量检查点要写的脏数据是100-105的数 据,然后检查点RBA被更新成105
checkpoint rba target rba <----------------------------------------> 这一部分是要刷新到数据文件的, 等刷新完后,target rba变成了checkpoint rba,并记录在控制文件中,作为崩溃恢复的起点 |
◎ On-disk RBA 是指LGWR 已经写到log file 中最后一个RBA的地址 |
查看SCN
数据库检查点SCN select checkpoint_change# from v$database; 各个数据文件检查点SCN select name,checkpoint_change# from v$datafile; 数据文件启动SCN select checkpoint_change# from v$datafile_header; 数据文件结束SCN select name,last_change# from v$datafile; |
select current_scn from v$database; |
或者用dbms_flashback包 select dbms_flashback.get_system_change_number from dual; |