文章目录
- 一、基础知识
- 1、体系结构详解
- 2、Database Files 数据库文件
- 3、Database Other Files 其他数据文件
- 4、Dynamic Views 动态视图
- 5、Large Pool
- 6、DB Buffer Cache,DBWn
- 7、Configuring Tablespaces 配置表空间
- 8、Redo Log Buffer, LGWR
- 9、Database Checkpoints 数据库检查点
- 10、Types of Checkpoints 检查点的类型
- 11、CKPT Process CKPT进程
- 12、Multiplexed Control Files 多路控制文件
- 13、ARCn & Archived Log Files ARCn 和存档日志文件
- 14、Database Synchronization 数据库同步
- 15、Phases forInstance Recovery 实例恢复阶段
- 16、Tuning the Duration of IR/CR 调整IR/CR的持续时间
- 17、Backup and Recovery lssues 备份和恢复问题
- 18、Tuning the Phases of CR/IR 调整CR/IR的相位
- 19、Fast-Start On-Demand Rollback 快速启动按需回滚
- 20、Fast-Start Parallel Rollback FastStart并行回滚
- 二、基础操作
- 1、查看数据库动态视图
Instance and Media Recovery Structures 实例和介质恢复结构
目标:
- 掌握与恢复相关的Oracle进程、内存结构和文件
- 了解检查点、重做日志文件和归档日志文件的重要性
- 掌握优化实例恢复的方法
一、基础知识
1、体系结构详解
- SGA
- Database buffer cache:用于存储从数据文件读取的块的内存区域。数据由服务器进程读取到块中,并由DBWn异步写入。
- Log buffer:包含要写入重做日志的更改数据的前后映像副本的内存
- Large pool:SGA中的一个可选区域,为备份和恢复操作、I/O服务器进程以及共享服务器和 Oracle XA的会话内存提供大量内存分配。
- Shared pool:存储SOL语句、PL/SOLprocedures和数据字典信息的解析版本
- Java pool:在服务器内存中用于Java虚拟机(JVM)中所有特定于会话的Java代码和数据。
- Background Processes 后台进程
- Database writer(DBWn):将脏缓冲区从数据缓冲区缓存写入数据文件。此活动是异步的。
- Log writer (LGWR):将数据从重做日志缓冲区写入重做日志文件
- System monitor(SMON):执行自动实例恢复。在空间段不再使用时恢复它们。根据设置的参数合并可用空间的连续区域。
- Process monitor(PMON):清理用于正常终止的用户进程的连接/服务器进程。执行回滚并释放失败进程所占用的资源。
- Checkpoint(CKPT):将数据文件和控制文件的标头与当前重做日志和检查点编号同步
- Archiver (ARCn)(optional):自动复制已标记为存档的重做日志的过程。
- User & Server Process 用户和服务器进程
- The User Process:用户进程是在用户启动工具(如SQL*Plus、Oracle Forms Developer、Oracle Reports Developer、Oracle Enterprise Manager等)时创建的。此进程可能位于客户端或服务器上,并为用户提供一个界面,用于输入与数据库交互的命令。
- The Server Process:服务器进程接受来自用户进程的命令,并执行步骤来完成用户请求。如果数据库不在共享服务器配置中,则在建立有效连接时,会在包含实例的计算机上创建服务器进程。
2、Database Files 数据库文件
Oracle数据库由以下物理文件组成(这些文件的格式都是二进制的):
- Datafiles:数据的物理存储。每个数据库至少需要一个文件。此文件存储系统表空间。
- Redo logs:包含更改数据的前后映像副本,用于恢复目的。至少需要两组。
- Control files:记录数据库的状态。物理结构和RMAN元数据
- Archive logs(optional):联机重做日志文件的物理副本。当数据库设置为存档日志模式时创建。用于恢复中。
3、Database Other Files 其他数据文件
- Initialization parameter file初始化参数文件:实例启动所需的存储参数,数据类型为TEXT
- Server initialization parameter file服务器初始化参数文件:存储实例启动所需的持久参数,数据类型为二进制
- Password file(optional)密码文件(可选):存储可以启动关闭并恢复数据库的用户的信息,数据类型为二进制
4、Dynamic Views 动态视图
Oracle服务器提供了许多标准视图来获取数据库和实例的信息。这些视图包括:
- V$SGA:查询共享池、日志缓冲区、数据缓冲区的实例大小和固定的内存大小(取决于操作系统)
- V$INSTANCE:查询实例的状态,如实例模式、实例名称、启动时间和主机名
- V$PROCESS:查询为实例创建的后台和服务器进程
- V$BGPROCESS:查询为实例创建的后台进程
- V$DATABASE:列出有关数据库的状态和恢复信息。它包括关于数据库名称、唯一数据库标识符、创建日期、控制文件创建日期和时间、最后一个数据库检查点和其他信息的信息。
- V$DATAFILE:列出数据库中包含的数据文件的位置和名称。它包括与文件编号和名称、创建日期、状态(在线或离线)、启用 (只读、读写)、最后数据文件检查点、大小和其他信息有关的信息。
5、Large Pool
- 可配置为SGA中的单独内存区域,用于:
- Oracle备份和恢复操作
- I/0服务器进程
- 共享服务器的会话内存
- 由LARGE_POOL_SIZE参数确定大小
大池用于从共享内存中分配顺序的I/0缓冲区。对于I/0从站和甲骨文备份和恢复,RDBMS分配的缓冲区大小为几百KB。
配置大型池可以防止RMAN与其他子系统争夺相同的内存。当您将DBWR_IO_SLAWS或BACKUP_TAPE_IO_SLAWS参数设置为模拟异步10时,恢复管理器(RMAN)将使用大池进行备份和恢复。如果这两个参数都未启用,那么甲骨文将从本地进程内存而不是共享内存分配备份缓冲区。因此,不使用大池。如果设置了LARGE_POOL_SIZE,那么甲骨文将尝试从大型池中获取内存。如果这个值不够大,那么甲骨文不会尝试从共享池中获取缓冲区。如果没有设置LARGE_POOL_SIZE初始化参数,那么甲骨文服务器将尝试从SGA中的共享池中分配共享内存缓冲区。
如果甲骨文无法获得足够的内存,那么它从本地进程内存中获得1/0缓冲内存,并向alert.log文件写入一条消息,指示同步I/0用于备份。
6、DB Buffer Cache,DBWn
- Function of the Database Buffer Cache 数据库缓冲区缓存的功能:
- 数据库缓冲区缓存是SGA中用于存储最近使用的数据块的区域
- 服务器进程从数据文件中读取表、索引和撤消段,并在需要时对缓冲区缓存中的数据块进行更改
- Oracle服务器使用最近最少使用 (LRU) 算法来确定哪些缓冲区可以覆盖,以适应缓冲区缓存中的新块。
- Function of the DBWn Background Process DBWn后台进程的功能:
- 数据库写入程序进程(DBWn)将脏缓冲区从数据库缓冲区缓存写入数据文件。它确保数据库缓冲区缓存中有足够数量的可用缓冲区(当服务器进程需要从数据文件中读取块时,可以覆盖的缓冲区)。
- 数据库编写器定期同步数据库缓冲区缓存和数据文件:这是在各种情况下触发的检查点事件。
- 虽然一个数据库写入进程对于大多数系统来说已经足够了,但是如果您的系统需要大量修改数据,您可以配置其他进程(DBW1到DBW9)来提高写入性能。这些额外的数据库写入进程在单处理器系统上是没有用的。
7、Configuring Tablespaces 配置表空间
表空间包含一个或多个数据文件。重要的是要谨慎地创建表空间,以提供灵活和可管理的备份和恢复策略。以下是表空间的非典型配置,考虑到备份和恢复操作的要求:
- System: 如果系统和用户数据包含在不同的表空间中,备份和恢复就更加灵活
- Temporary:如果包含临时段 (用于排序等) 的表空间丢失,可以重新创建它,而不是恢复它。
- Undo(重要):备份撤销表空间的过程与备份任何其他读/写表空间的过程完全相同。由于自动撤消表空间对于恢复和读取一致性非常重要,因此应该经常对其进行备份。
- Read-only data: 可以减少备份时间,因为只有在将表空间设为只读时才必须备份表空间。
- Highly volatile data高度易失性数据(重要):应该更频繁地备份该表空间,同时减少恢复时间
- Index data: 应该创建只存储索引段的表空间。通常可以重新创建这些表空间而不是恢复它们。
8、Redo Log Buffer, LGWR
- Function of the Redo Log Buffer 恢复日志缓冲区的功能:
- 重做日志缓冲区是一个循环缓冲区,它保存有关对数据库所做更改的信息。这些信息存储在重做条目中。
- 重做条目包含重建或重做INSERT、UPDATE、DELETE、CREATE、ALTER或DROPoperation对数据库所做更改所需的信息。恢复条目用于数据库恢复(如有必要)。
- 重做条目由Oracle服务器进程从用户的内存空间复制到重做日志缓冲区。
- Function of the LGWR Background Process LGWR后台进程的功能:
- 日志写入器 (LGWR) 将重做条目从重做日志缓冲区写入重做日志文件,如下所示:
- 重做日志缓冲区已满三分之一时
- 当超时发生时(每三秒钟)
- 当有1MB的重做
- 在DBWn将数据库缓冲区缓存中的修改块写入数据文件之前
- 当一个事务提交
- Redo Log Switches
- 在日志切换时,当前重做日志组被分配一个日志序列号,该日志序列号标识存储在该重做日志组中的信息,并且也用于同步。
- 日志切换发生在LGWR停止写入一个重做日志组并开始写入另一个重做日志组时
- 当LGWR填充了一个日志文件组时,将发生日志切换
- DBA可以使用ALTER SYSTEM SWITCH LOGFILE命令强制进行日志切换
- 在日志开关处自动发生检查点。
- 只要组中至少有一个成员可用,处理就可以继续。如果成员损坏或不可用,消息将写入LGWR跟踪文件和警报日志。
9、Database Checkpoints 数据库检查点
- 检查点用于确定应从何处开始恢复
- 检查点位置-恢复开始的位置
- 检查点队列-脏块的链接列表
- Checkpoint Position 检查点位置
- 重做日志中开始恢复的位置称为检查点位置。在该点之前的所有引用数据块都已被DBWn写入磁盘。它被定义为它与重做日志结束之间的“距离”。它也可以被认为是检查点队列中第一个条目的“年龄“个按块第一次被弄脏的时间顺序排列的脏块链接列表。
- Checkpoint Queue 检查点队列
- 检查点队列中的每个条目都包括数据块的标识符(即文件号和块号)和重做日志中第一次弄脏数据块的位置(称为重做字节地址或RBA)。它还包含重做日志中上次更改数据块的位置。检查点队列中的第一个条目标识数据库缓冲区缓存中最旧的脏块。DBWn按照检查点队列的顺序从缓冲区高速缓存写入块,并在写入块时删除每个条目。
10、Types of Checkpoints 检查点的类型
- Full checkpoint 完全检查点
- 写入所有脏缓冲区
- 正常关机、立即关机或事务关机
- 改变系统检查点
- Incremental checkpoint (Fast-Start checkpoint) 增量检查点(快速启动检查点)
- 周期性写入
- 只写最老的块
- Partial checkpoint 部分检查点
- 属于表空间的脏缓冲区
- 改变表空间开始备份
- 更改表空间表空间脱机正常
11、CKPT Process CKPT进程
Checkpoint Process(CKPT)
- 检查点进程 (CKPT) 负责在检查点向DBWn发送信号,并更新数据库的数据文件和控制文件以指示最近的检查点
- 每隔三秒,CKPT从控制文件中检查点队列中最老的条目中记录RBA。此RBA表示重做日志中的点,在此点上,实例恢复将在实例失败后开始。它可以这样做,因为以前重做记录中表示的所有数据块都保证已被DBWn写入磁盘
- 只有在日志切换的情况下,CKPT才会将这些信息写入数据文件的头部。为了提高性能,并不是所有的头文件都被一次写入,而是以组的形式进行更新,这被称为“懒写“日志开关不会强制将所有脏缓冲区写入磁盘
12、Multiplexed Control Files 多路控制文件
- Control File Function 控制文件功能
- 控制文件是描述数据库结构的二进制文件。无论何时装载或打开数据库,它都必须可由Oracle服务器进行写入。它的默认名称取决于操作系统。如果没有此文件,则无法装载数据库,并且需要恢复或重新创建控制文件。建议的配置是在不同的磁盘上至少有两个控制文件,以最大限度地减少丢失一个控制文件的影响。
- Control File Contents 控制文件内容
- 数据库名称
- 数据库创建时间戳
- 恢复所需的同步信息 (检查点和日志序列信息)
- 数据文件和重做日志文件的名称和位置
- 数据库的归档模式
- 当前日志序列号
- 恢复管理器备份元数据
13、ARCn & Archived Log Files ARCn 和存档日志文件
- Function of the Archive Background Process 归档后台处理的功能
- ARCn进程是一个可选进程。启用后,它会将重做日志文件归档到指定的存储区域。此过程对于设置为ARCHIVE LOG模式的数据库的备份、还原和恢复具有重要意义在这种模式下,数据库每天24小时、每周7天都在运行
- ARCn进程在发生日志切换时启动,并将最后一个(未归档的)重做日志组的一个成员复制到由一个或多个初始化参数指定的至少一个目标。
- Archived Log Files 归档日志文件
- 当数据库设置为ARCHIVELOG模式时,LGWR进程会等待在线重做日志文件归档(手动或通过ARCn进程),然后才能重用它们。
- 如果联机重做日志文件已损坏,则使用来自同一组的另一个成员。归档日志有利于备份和恢复过程,因为:
- 数据库备份与归档重做日志文件相结合,可保证将所有提交的数据恢复到故障点
- 可以在数据库联机时进行有效的数据库备份。
- Archiving Considerations 归档注意事项
- 是否启用归档的选择取决于每个数据库的可用性和可靠性要求。归档日志可以存储在多个位置(双重或多个目标),因为它们对恢复至关重要。对于生产数据库,建议将归档日志功能用于多个目的地。
14、Database Synchronization 数据库同步
- 所有数据文件(脱机和只读除外) 必须同步才能打开数据库。
- 同步基于当前检查点编号。
- 应用重做日志文件中记录的更改将同步数据文件。
- 重做日志文件是由Oracle服务器自动请求的。
15、Phases forInstance Recovery 实例恢复阶段
实例恢复的步骤:
- Datafiles out-of-synch 数据文件不同步(判断是否同步,是否需要恢复)
- Roll forward (redo) 向前回滚(redo)(利用redo进行回滚)(把redo恢复并且恢复undo)
- Committed and non-committed data in files 文件中已提交和未提交的数据
- Roll back (undo) 向后回滚(undo)(利用undo信息把没有提交的数据回滚掉)
- Committed data in files 文件中的提交数据 (所有数据同步,只包含已经提交的数据)
16、Tuning the Duration of IR/CR 调整IR/CR的持续时间
将实例和崩溃恢复的持续时间保持在用户指定的范围内的方法:
- 设置初始化参数以影响恢复中涉及的重做日志记录和数据块的数量。
- 调整重做日志文件的大小以影响检查点频率
- 发出SQL语句以启动检查点
- 并行化实例恢复操作
- 有几种方法可以用来将实例和崩溃恢复的持续时间保持在用户指定的范围内。
- 快速启动故障恢复功能可用于控制实例恢复。这通过使前滚时间有界和可预测来减少前滚时间,还消除了执行回滚所需的时间。快速启动故障恢复的基础是快速启动检查点体系结构。通过初始化参数指定完成恢复的前滚阶段的目标时间。
- 重做日志文件的大小直接影响检查点。最小日志的大小越小,Oracle越积极地将脏缓冲区写入磁盘,以确保检查点的位置已提前到当前日志在日志完全填充之前,以便可以重用。
17、Backup and Recovery lssues 备份和恢复问题
- 保护数据库不受多种类型故障的影响
- 增加平均故障间隔时间(MTBF)
- 减少平均恢复时间(MTTR)
- 以最小化数据损失
- Initialization Parameters 初始化参数
- FAST_START_MTTR_TARGET:以秒为单位指定的预期MTTR
- V$INSTANCE_RECOVERY:实例恢复视图
- 用于监视限制恢复I/0的可用机制
- 统计从这个视图计算哪个参数对检查点的影响最大
18、Tuning the Phases of CR/IR 调整CR/IR的相位
通过调整参数进行调优
- 调整前滚相位
- 调整回滚阶段
Tuning the RFP:往前滚
- 并行块恢复
- RECOVERY_PARALLELISM指定并发恢复进程的数量
Tuning the RBP:往后滚
- 快速启动按需回滚
- 快速启动并行回滚
19、Fast-Start On-Demand Rollback 快速启动按需回滚
遇到要回滚的数据的服务器进程执行以下操作:
- 回滚包含所雪行的块
- 将进一步的恢复(可能是并行的) 移交给SMON
20、Fast-Start Parallel Rollback FastStart并行回滚
二、基础操作
1、查看数据库动态视图
此处对应基础知识的第4部分
连接数据库查看动态视图
SELECT * FROM V$SGA;
- Fixed Size:是固定的大小
- Variable Size:大小是可变的,包括了Large pool、Shared pool、Java pool等
- Database Buffers:用于存储从数据文件读取的块的内存区域,这部分一般比较大
- Redo Buffers:包含要写入重做日志的更改数据的前后映像副本的内存
SELECT * FROM V$SGASTAT;
查看其他动态视图的方法也是这样的,可以参考基础知识的第四部分查看其他动态视图