还原与恢复之间的区别
•还原:此操作涉及还原所有文件,例如,将所有备份文件从磁带或存储等位置复制到目标区域
•恢复:这是应用记录在归档日志中的所有事务,将数据库向前滚动到某个时间点或直到最后一条记录被应用,从而将数据库恢复到所需的时间点。
重做过程
更改Oracle块(数据库中最小的存储单元,包括UNDO块)时,Oracle以矢量更改的形式记录更改,这些更改称为重做条目或重做记录。更改由服务器进程写入系统全局区域(SGA)中的重做日志缓冲区。然后,重做日志缓冲区将由LGWR进程以接近实时的方式刷新到联机重做日志中(如果重做日志缓冲区太小,那么短时间内日志生成量爆增,数据库将开始等待日志缓冲区空间)。
在以下情况下,LGWR将重做条目写入磁盘:
•用户发出提交
•日志缓冲区已满三分之一
•未写入的重做条目的数量为1 MB
•发生数据库检查点时
•否则每三秒钟重做一次
当上述情况之一发生时会将重做条目写入磁盘。如果有检查点,则先将重做日志写入以确保可恢复性。
重做日志文件记录了由于事务和内部Oracle服务器操作而导致的数据库更改。重做日志文件可防止数据库因电源故障,磁盘故障等导致的系统故障而导致完整性丢失。必须使用不同的磁盘对重做日志文件进行多路复用(最好使用固态磁盘),以确保在发生磁盘故障时不会丢失其中存储的信息。
重做日志由重做日志文件组组成。组由重做日志文件及其多路复用副本组成。每个相同的副本都被称为该组的成员,并且每个组都有一个数字标识。LGWR进程将重做记录从重做日志缓冲区写入重做日志组的所有成员,直到日志文件被填充或请求日志切换操作为止。然后,LGWR切换并写入下一组文件。重做日志组以循环方式使用,如下图所示:

重做日志组每个组至少需要有两个文件,这些文件分布在单独的磁盘上,这样就不会有单个磁盘故障破坏整个日志组。另外,如果它们做了外部镜像,则切勿完全依赖这些镜像文件,因为如果在线重做日志文件被删除或损坏,则镜像将不会保护您的数据库。
丢失整个日志组是可能遇到的最严重的介质故障之一,因为它可能导致数据丢失。多成员日志组中单个成员的丢失是微不足道的,除了导致在警报日志中发布警报外,不影响数据库操作。请记住,重做日志会严重影响数据库性能,因为在将事务信息写入日志之前无法完成提交。必须将重做日志文件放在最快的磁盘上。如果可能,不要将其他任何数据库文件与重做日志文件放在同一磁盘上。
还有一个建议就是,不要将不同组的成员放在同一磁盘上。这是因为归档过程会读取联机重做日志文件,并且最终将与LGWR过程竞争。
关于重做日志文件和重做日志组,务必始终:
•至少有三个重做日志组。如果数据库切换太频繁并且没有适当数量的重做日志组,则LGWR进程将需要等到下一个组可用之后才能覆盖它。
•所有联机重做日志和备用重做日志的大小均相等。
•调整重做日志文件的大小,以使重做日志切换在高峰时间相互之间不少于20分钟。
•将重做日志文件放在高性能磁盘上。
•每个组至少要有两个重做日志成员,以降低风险,并将它们放置在远离数据的不同磁盘中。
•请勿复用standby重做日志,以防止在重做传输中进行其他写入。
重做生成和可恢复性
重做生成的目的是确保可恢复性。如果实例崩溃,则SGA中的所有更改都将丢失。然后,Oracle将使用联机重做日志文件中的重做条目将数据库置于一致状态。维护重做日志记录的成本是一项昂贵的操作,涉及闩锁管理操作(CPU)和对重做日志文件(I O)的频繁写访问。
使用NOLOGGING功能避免对某些操作进行重做日志记录。
NOARCHIVELOG模式
通常称非归档模式,默认情况下创建数据库,将使用NOARCHIVELOG模式创建数据库。此模式允许任何正常的数据库操作,但不会为数据库提供执行数据库的任何时间点恢复操作或联机备份的功能。
当数据库使用此模式时,不可能进行热备份(热备份是在数据库打开的情况下执行的任何备份,不会对用户造成中断)。只能在数据库关闭的情况下执行备份(关闭,也称为脱机备份或冷备份),并且只能执行完全恢复直到备份完成为止。在以下示例中看到,如果在NOARCHIVELOG模式下尝试对数据库进行热备份,将会发生什么情况:

前面的代码中显示的错误是将数据库置于备份模式以对数据库文件进行热备份后收到的结果。以下示例显示了使用RMAN在NOARCHIVELOG模式下尝试对打开的数据库进行备份时将收到的结果。如您所见,这两种方法都不可行:


要在处于NOARCHIVELOG模式时对数据库进行完整备份,需要:
1.首先以一致模式完全关闭数据库。
2.将所有数据文件,参数文件,控制文件和重做日志手动备份到磁带或其他位置。
3.重新启动数据库
如果需要恢复,那么要从上次备份中还原所有文件并启动数据库,但是备份后在数据库中进行的所有事务都将丢失。
ARCHIVELOG模式
将填充的重做日志文件保存到一个或多个脱机目标,通过在崩溃时保存所有事务来提高数据的可恢复性,从而减少数据丢失的可能性。包含针对数据库事务的重做日志文件的副本在另一个位置进行复制,称为ARCHIVELOG文件,将重做日志文件转换为已归档的重做日志文件的过程称为归档。
归档的重做日志文件是重做日志组中已被写满的日志成员之一的物理副本。重做日志文件是由Oracle数据库覆盖的周期性文件,仅在数据库处于ARCHIVELOG模式时才被存档(覆盖之前的文件备份副本)。每个重做日志文件都包含所有重做条目以及重做日志组中相同成员的唯一日志序列号。为了更清楚地说明这一点,如果要复用重做日志文件(建议每个组最少两个成员),并且重做日志组1包含两个相同的成员文件,例如redolog_1a.rdo和redolog_1b.rdo,则存档过程(ARCn)将仅存档这些成员文件之一,而不是两个。如果重做日志文件redolog_1a.rdo损坏,则ARCn进程仍将能够归档相同的存活重做日志文件redolog_1b.rdo。由ARCn进程生成的存档重做日志将包含自从在数据库中启用存档以来创建的每个组的副本。
当数据库以ARCHIVELOG模式运行时,LGWR进程无法重用,因此将其覆盖之前,将覆盖给定的重做日志组。这是为了确保数据的可恢复性。后台进程ARCn将自动执行归档操作,并且数据库将根据需要启动多个归档进程(进程的默认数量为四个),以确保填充的重做日志文件的归档不会落后。
使用存档的重做日志来:
•恢复数据库
•更新备用数据库并使其与主数据库保持同步
•使用LogMiner获取有关数据库历史记录的信息
在ARCHIVELOG模式下,Oracle数据库引擎将通过称为ARCn的内部过程复制所有联机重做日志文件。此过程将生成重做日志文件的归档副本到一个或多个归档日志目标目录。目标目录的数量和位置将取决于数据库初始化参数。
要使用ARCHIVELOG模式,首先需要设置一些配置参数。一旦数据库处于ARCHIVELOG模式,与事务有关的所有数据库活动都将被存档,以实现数据可恢复性,并且要确保归档目标区域始终具有足够的可用空间。如果空间用完,数据库将暂停所有活动,直到它再次能够在归档目标位置备份重做日志文件为止。发生这种情况是为了确保数据库的可恢复性。
切勿将扩展名.log用于重做日志文件。如前所述,请使用其他扩展名,例如.rdo。这是因为空间不足时,任何人都可以错误地删除.log文件。
设置数据库以ARCHIVELOG模式工作时,请不要忘记:
1.以正确的方式配置数据库。配置数据库时的操作示例如下:
°阅读Oracle文档:遵循文档中的Oracle建议始终很重要。
°至少具有三个控制文件:这将减少丢失控制文件的风险。
°将CONTROL_FILE_RECORD_KEEP_TIME初始化参数设置为可接受的值:这样做将设置在控制文件中的可重复使用记录可被重用之前的天数。它还将控制将备份信息存储在控制文件中的时间。
°适当配置重做日志文件和组的大小:如果配置不正确,Oracle数据库引擎将生成恒定的检查点,这将对缓冲区高速缓存和I O系统造成高负载,从而影响数据库的性能。而且,系统中的重做日志文件很少,这将迫使LGWR进程在覆盖重做日志文件之前等待ARCn进程完成。
°Multiplex在线重做日志文件:这样做可以降低丢失在线重做日志文件的风险。
°启用块校验和:这将使Oracle数据库引擎能够检测到损坏的情况。
°启用数据库块检查:这允许Oracle执行块检查是否损坏,但要注意,这可能会导致大多数应用程序中的开销,具体取决于工作负载和参数值。
°将检查点记录到警报日志中:这样可以帮助您确定检查点是否以所需的频率出现。
°使用快速启动故障恢复功能:用于减少高速缓存恢复所需的时间。参数FAST_START_MTTR_ TARGET是在此处查看的参数。
°使用Oracle重新启动:这用于增强单个实例(非RAC)及其组件的可用性。
°切勿将扩展名.log用于重做日志文件:如前所述,包括您在内的任何人在空间不足时都可能会误删除.log文件。
°使用块更改跟踪:用于使增量备份比其他方式更快地完成运行。
2.始终确保档案目的地中有足够的可用空间。
3.始终确保一切正常。永远不要忘记使用脚本或Oracle Enterprise Manager(OEM)实施主动监视策略。
需要检查的一些重要方面是:数据库结构完整性数据块完整性重做完整性撤消段完整性事务完整性字典完整性
检查ARCHIVELOG模式的状态
通过对v $ database中的log_mode字段发出SQL查询(ARCHIVELOG表示启用了归档,NOARCHIVELOG表示未启用归档)来确定实例中正在使用的模式,或者通过归档来发布SQL归档文件。日志列表命令:






