Oracle学习笔记11_备份与恢复概述,实例和介质恢复结构

备份与恢复概述

备份和恢复问题

  • 保护数据库免受多种类型故障的影响
  • 增加平均故障间隔时间(MTBF)
  • 减少平均恢复时间(MTTR)
  • 尽量减少数据丢失

故障类别

语句失败

语句失败的原因
  • 应用程序中的逻辑错误
  • 尝试向表中输入无效数据
  • 尝试权限不足的操作
  • 尝试创建表,但超出分配的配额限制
  • 尝试对表执行INSERT或UPDATE操作,导致分配了一个区段,但表空间中可用的可用空间不足
决议
  • 纠正程序的逻辑流程
  • 修改并重新发出SQL语句
  • 提供必要的数据库特权
  • 使用ALTER USER命令修改用户的配额限制
  • 在表空间中增加文件空间
  • 启用可恢复的空间分配

用户进程失败

原因
  • 日志含义用户在会话中异常断开
  • 日志含义用户会话异常终止
  • 用户程序抛出了一个地址异常,终止会话
决议
  • PMON进程检测到异常终止的用户进程
  • PMON回滚事务并释放它持有的所有资源和锁

用户错误

原因
DROP TABLE employees;
TRUNCATE TABLE employees;
DELETE FROM employees;
COMMIT;
UPDATE employees;
    SET salary = salary * 1.5;
COMMIT;
决议
  • 培训数据库用户
  • 从有效备份中恢复
  • 从导出文件导入表
  • 使用LogMiner确定错误时间
  • 使用时间点恢复进行恢复
  • 使用LogMiner执行对象级恢复
  • 使用闪回查看和修复历史数据

网络故障

实例故障

实例故障恢复
  • DBA不需要执行任何特殊的恢复操作
  • 启动实例
  • 等待“数据库已打开”通知
  • 通知用户
  • 检查警报日志以确定失败的原因

媒介失败

媒体故障的原因
  • 磁盘驱动器上的磁头碰撞
  • 读取或写入数据库文件时出现物理问题
  • 文件被意外擦除
决议
  • 恢复策略取决于选择的备份方法和受影响的文件
  • 如果可用,应用归档的重做日志文件来恢复自上次备份以来提交的数据

定义策略

业务需求

  • 平均恢复时间
  • 平均故障间隔时间
  • 进化过程

运营性需求

  • 24小时运营
  • 测试和验证备份
  • 数据库的波动

技术因素

  • 资源:硬件、软件、人力和时间
  • 操作系统文件的物理映像副本
  • 数据库中对象的逻辑副本
  • 数据库配置
  • 影响所需备份频率的事务量

管理合作

灾难恢复问题

如果发生重大灾难,您的业务会受到怎样的影响,例如:

  • 地震、洪水或火灾
  • 机器完全丢失
  • 存储硬件或软件故障
  • 丢失关键人员,例如数据库管理员

你有计划定期测试你的策略吗?

实例和介质恢复结构

概述

内存结构

后台进程

用户进程

用户进程是在用户启动SQL*Plus、Oracle Forms Developer、Oracle Reports Developer、Oracle Enterprise Manager等工具时创建的。这个进程可能在客户端或服务器上,它为用户提供一个接口,让用户输入与数据库交互的命令。

服务器进程

服务器进程接受来自用户进程的命令,并执行完成用户请求的步骤。如果数据库不在共享服务器配置中,则在建立有效连接时,在包含实例的机器上创建服务器进程。

数据库文件

Oracle数据库由以下物理文件组成:

其他文件:

Large Pool

  • 可以在SGA中配置为单独的内存区域,用于:
    • Oracle备份和恢复操作
    • I/O服务器进程
    • 共享服务器的会话内存
  • 是否由LARGE_POOL_SIZE参数确定大小

大池用于从共享内存中分配顺序I/O缓冲区。对于I/O从机和Oracle备份和恢复,RDBMS分配的缓冲区大小为几百kb。

配置大内存池可以防止RMAN与其他子系统争夺相同的内存。当您设置DBWR_IO_SLAVES或BACKUP_TAPE_IO_SLAVES参数来模拟异步I/O时,恢复管理器(RMAN)使用大池进行备份和恢复。如果这两个参数都没有启用,那么Oracle会从本地进程内存而不是共享内存中分配备份缓冲区。因此,不会使用大池。

如果设置了LARGE_POOL_SIZE,那么Oracle将尝试从大池中获取内存。如果这个值不够大,那么Oracle不会尝试从共享池中获取缓冲区。

如果未设置LARGE_POOL_SIZE初始化参数,则Oracle服务器将尝试从SGA中的共享池中分配共享内存缓冲区。

如果Oracle无法获得足够的内存,那么它将从本地进程内存中获取I/O缓冲内存,并向alert.log文件中写入一条消息,表明同步I/O用于备份。

DB Buffer Cache,DBWn...

DB Buffer Cache的功能
  • 数据库缓冲缓存是SGA中的一个区域,用于存储最近使用的数据块。
  • 服务器进程从数据文件中读取表、索引和撤销段到缓冲区缓存中,并在需要时对数据块进行更改。
  • Oracle服务器使用最近最少使用(LRU)算法来确定哪些缓冲区可以被覆盖以容纳缓冲区缓存中的新块。
DBWn后台进程的功能
  • 数据库写入进程(DBWn)从数据库缓冲区中写入脏缓冲区缓存到数据文件。它确保在数据库缓冲区缓存中有足够数量的空闲缓冲区(当服务器进程需要从数据文件中读取块时可以覆盖的缓冲区)可用。
  • 数据库写入器定期同步数据库缓存和数据文件:这是在各种情况下触发的检查点事件。
  • 虽然一个数据库写入进程对于大多数系统来说已经足够了,但是如果您的系统需要大量修改数据,您可以配置其他进程(DBW1到DBW9)来提高写入性能。这些额外的数据库写进程在单处理器系统上是没有用的。

配置表空间

表空间包含一个或多个数据文件。仔细创建表空间以提供灵活和可管理的备份和恢复策略是很重要的。考虑到备份和恢复操作的要求,下面是典型的表空间配置:

  • System:如果系统数据和用户数据位于不同的表空间,备份和恢复将更加灵活。
  • Temporary:如果包含临时段(用于排序等)的表空间丢失,则可以重新创建,而不是恢复。
  • Undo:备份Undo表空间的过程与备份其他读写表空间的过程完全相同。因为自动撤销表空间对于恢复和读一致性非常重要,所以应该经常备份。
  • Read-only data:只有将表空间设置为只读时才需要进行备份,可以减少备份时间。
  • Highly volatile data:应该更频繁地备份这个表空间,这样也可以减少恢复时间。
  • Index data:应该创建只存储索引段的表空间。这些表空间通常可以重新创建,而不是恢复。

Redo Log Buffer,LGWR...

Redo and Undo

Redo Log Buffer的功能
  • 重做日志缓冲区是一个循环缓冲区,用于保存对数据库所做更改的信息。这些信息存储在重做条目中。
  • 重做表项包含重建或重做通过INSERT、UPDATE、DELETE、CREATE、ALTER或DROP操作对数据库所做的更改所需的信息。重做表项用于必要时的数据库恢复。
  • 重做条目由Oracle服务器进程从用户的内存空间复制到重做日志缓冲区。
LGWR后台进程的功能

日志写入器(LGWR)将重做日志缓冲区中的重做项写入重做日志文件,如下所示:

  • 当重做日志缓冲区已满三分之一时
  • 当超时发生时(每三秒一次)
  • 当有1mb的重做时
  • 在DBWn将数据库缓冲区中的修改块写入数据文件之前
  • 当事务提交时
Redo Log 切换

在日志切换中,为当前重做日志组分配一个日志序列号,该序列号标识存储在该重做日志组中的信息,也用于同步。

  • 当LGWR停止写入一个重做日志组并开始写入时,会发生日志切换写入另一个日志组。
  • 当LGWR填充了一个日志文件组时,会发生日志切换。
  • ADBA可以使用ALTERSYSTEM SWITCHLOGFILE命令强制日志切换。
  • 在日志交换机上自动出现检查点。
  • 只要组中至少有一个成员可用,处理就可以继续。如果成员损坏或不可用,则将消息写入LGWR跟踪文件并写入警报日志。
Redo Log Files多路复用

多路复用指南

重做日志文件配置要求每个组至少有两个重做日志成员,每个成员位于不同的磁盘上,以防止失败。

记住以下几点:

  • 一组中的所有成员都包含相同的信息,大小相同。
  • 群组成员同步更新。
  • 每个组应该包含相同大小的相同数量的成员。

可以通过重命名在线重做日志文件来更改在线重做日志文件的位置。在重命名在线重做日志文件之前,请确保新的在线重做日志文件存在。Oracle服务器只修改控制文件中的指针,不会物理地重命名或创建任何操作系统文件。如果旧文件是oracle管理的文件并且存在,则将其删除。

数据库检查点

  • 检查点用于确定从何处开始恢复
  • 检查点位置---恢复开始的位置
  • 检查点队列---脏块的链接列表
检查点位置

重做日志中开始恢复的位置称为检查点位置。所有在该点之前被引用的数据块已经被DBWn写入磁盘。它被定义为它和重做日志结束点之间的“距离”。它也可以被认为是检查点队列中第一个条目的“年龄”,这是一个脏块的链表,按照块第一次脏的时间排序。

检查点队列

检查点队列中的每个条目包括数据块的标识符(即文件号和块号)和重做日志中块首次被脏的位置,称为重做字节地址或RBA。它还包含重做日志中数据块最后被修改的位置。检查点队列中的第一个条目标识了数据库缓冲区缓存中最老的脏块。DBWn按照检查点队列的顺序从缓冲缓存中写入块,在写入块时删除每个条目。

检查点类型

完整的检查点

  • 所有脏缓冲区都被写入
  • SHUTDOWN NORMAL,IMMEDIATE,or TRANSACTIONAL
  • ALTER SYSTEM CHECKPOINT

增量检查点(快速启动检查站)

  • 定期写
  • 只写最老的块

局部检查点

  • 属于表空间的脏缓冲区
  • ALTER TABLESPACE BEGIN BACLUP
  • ALTEER TABLESPACE tablespace OFFLINE NORMAL

CKPT过程

检查点流程(CKPT)

检查点进程(CKPT)负责在检查点发送DBWn信号,并更新数据库的数据文件和控制文件,以指示最近的检查点。

每隔三秒,CKPT将检查点队列中最早的条目中的RBA记录到控制文件中。这个RBA表示重做日志中实例故障后开始实例恢复的点。它可以这样做,因为在之前的重做记录中表示的所有数据块都保证已被DBWn写入磁盘。

只有在日志切换的情况下,CKPT才会将这些信息写到数据文件的头文件中。为了提高性能,并不是一次写入所有的头文件,而是分组更新它们,这就是所谓的“惰性写入”。日志开关不会强制将所有脏缓冲区写入磁盘。

多路控制文件

控制文件功能

控制文件是一个描述数据库结构的二进制文件。无论何时挂载或打开数据库,Oracle服务器都必须可以写入该文件。它的默认名称是操作系统相关的。没有这个文件,就不能挂载数据库,并且需要恢复或重新创建控制文件。建议的配置是在不同的磁盘上至少有两个控制文件,以尽量减少丢失一个控制文件的影响。

控制文件内容

  • 数据库名称
  • 创建数据库的时间戳
  • 恢复所需的同步信息(检查点和日志序列信息)
  • 数据文件和重做日志文件的名称和位置
  • 数据库的归档模式
  • 当前日志序号
  • 恢复管理器备份元数据

ARCn & Archived Log Files(归档日志文件)

归档后台进程的功能

ARCn进程是可选进程。启用后,它将重做日志文件归档到指定的存储区域。这个过程对于设置为ARCHIVELOG模式的数据库的备份、恢复和恢复具有重要意义,在ARCHIVELOG模式下,数据库每周7天,每天24小时都在运行。

当发生日志切换时,ARCn进程启动,并将最后一个(未归档的)重做日志组的一个成员复制到由一个或多个初始化参数指定的至少一个目的地。

归档日志文件

当数据库设置为ARCHIVELOG模式时,LGWR进程等待在线重做日志文件被归档(手动或通过ARCn进程),然后才能重用它们。

如果在线重做日志文件损坏,则使用同一组中的另一个成员。归档日志对备份和恢复过程是有益的,因为:

  • 数据库备份与归档的重做日志文件相结合,可以保证所有提交的数据都可以恢复到故障点。
  • 有效的数据库备份可以在数据库在线时进行。
归档的考虑

是否启用归档取决于每个数据库的可用性和可靠性需求。归档日志可以存储在多个位置(双工或多个目的地),因为它们对恢复至关重要。对于生产数据库,建议使用具有多个目标的归档日志特性。

数据库同步

  • 为了打开数据库,必须同步所有数据文件(离线和只读数据文件除外)。
  • 同步是基于当前的检查点编号。
  • 应用重做日志文件中记录的更改Sychrnize 数据文件。
  • 重做日志文件由Oracle服务器自动请求。

实例恢复的阶段(IR)

崩溃恢复阶段(CR)

与介质恢复不同,Oracle在实例失败后自动执行崩溃恢复和实例恢复。崩溃恢复和实例恢复将数据库恢复到实例故障前的transactionconsistent状态。根据定义,崩溃恢复是在单实例配置或Oracle Real Application Clusters配置中恢复所有实例都崩溃的数据库。相反,实例恢复是通过Oracle Real Application Clusters配置中的活动实例恢复一个失败的实例。

崩溃恢复阶段

  1. 数据文件未同步。
  2. 在缓存恢复或前滚阶段,重做日志文件中自上次检查点以来记录的所有更改将被重新应用于数据文件。此阶段还会重新生成撤消或回滚数据。
  3. 数据文件现在包含已提交和可能未提交的更改。数据库被打开。
  4. 在事务恢复或回滚阶段,任何未实际提交的更改都将回滚。
  5. 数据文件现在只包含提交到数据库的更改。

调整CR和IR性能

  • 优化实例和崩溃恢复的持续时间
  • 优化实例恢复的各个阶段
调整IR/CR的持续时间

保持实例和崩溃恢复的持续时间在用户指定的范围内的方法:

  • 设置初始化参数,以影响恢复中涉及的重做日志记录和数据块的数量。
  • 调整重做日志文件的大小以影响检查点频率。
  • 发出SQL语句来启动检查点。
  • 并行化实例恢复操作。

可以使用几种方法将实例和崩溃恢复的持续时间保持在用户指定的范围内。

快速启动故障恢复功能可用于控制实例恢复。这通过使其有界和可预测来减少前滚时间,并且还消除了执行回滚所需的时间。快速启动故障恢复的基础是快速启动检查点架构。通过初始化参数指定完成恢复前滚阶段的目标时间。

重做日志文件的大小直接影响检查点。最小日志的大小越小,Oracle越积极地将脏缓冲区写入磁盘,以确保检查点的位置已经前进到当前日志,在该日志完全填充之前,以便它可以被重用。

初始化参数

备份和恢复问题
  • 保护数据库免受多种类型故障的影响
  • 增加平均故障间隔时间(MTBF)
  • 减少平均恢复时间(MTTR)
  • 尽量减少数据丢失
V$INSTANCE_RECOVERY
  • 用于监视可用于限制恢复l/O的机制
  • 此视图中的统计信息,以计算哪个参数对检查点的影响最大

调整CR/IR的相位

调优前滚阶段
  • 并行块回收
  • RECOVERY_PARALLELISM指定并发恢复进程的数量
调优后滚阶段
  • 快速启动按需回滚
  • 快速启动并行回滚FSPR
控制 FSPR

监控并行回滚
  • V$FAST_START_SERVERS:提供所有执行并行事务恢复的恢复从机的信息Oracle正在恢复
  • V$FAST_START_TRANSACTIONS:包含有关事务进度的信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值