目录
[一、Oracle Online Redo Log Files及其相关内容介绍](#一、Oracle Online Redo Log Files及其相关内容介绍)
[1、Online Redo Log Files简介](#1、Online Redo Log Files简介)
[2、Online Redo Log Files特点](#2、Online Redo Log Files特点)
[3、Online Redo Log Files文件组](#3、Online Redo Log Files文件组)
[二、Online Redo Log Files一些必要的操作](#二、Online Redo Log Files一些必要的操作)
[1、Force Log Switches(强制切换日志开关)和CK](#1、Force Log Switches(强制切换日志开关)和CK)
[7、清理Redo Files(慎用)](#7、清理Redo Files(慎用))
[9、 Group & Member Informatior(实用)](#9、 Group & Member Informatior(实用))
一、Oracle Online Redo Log Files及其相关内容介绍
1、Online Redo Log Files简介
Oracle Online Redo Log Files是Oracle数据库中的一种重要的日志文件,用于记录数据库中所有的修改操作。
在Oracle数据库中,当发生修改操作时,这些操作将首先写入Online Redo Log Files中,然后再写入数据库中的磁盘上。这样可以保证即使发生意外故障,Oracle数据库也能通过Redo Log来恢复数据,保证数据的完整性和一致性。
Online Redo Log Files通常由多个文件组成,这些文件可以分布在不同的磁盘上,这样可以提高性能和可靠性。同时,Oracle数据库还提供了Archive Log模式,可以在数据库关闭时自动将Online Redo Log Files转储到磁盘上的Archive Log文件中,从而保证数据的可靠性和完整性。
总的来说,Oracle Online Redo Log Files对于保证Oracle数据库的高可用性、高性能和数据的完整性非常重要,是Oracle数据库架构中的核心组成部分之一。
2、Online Redo Log Files特点
- 记录对数据所做的所有更改
- 提供恢复机制
- 组织成小组
- 至少需要两组
3、Online Redo Log Files文件组
- 联机重组日志文件的一组相同的副本称为联机重做日志文件组
- LGWR后台进程并发地向组内所有联机重做日志文件中写入相同的信息
- Oracle服务器至少需要两个联机重做日志文件组,以保证数据库的正常运行
- 组中的每一个联系重做日志文件被称为一个成员
- 组中每个成员具有相同的日志序列号,并且具有相同的大小
- LSN(日志序列号)是Oracle服务器每次写日志组时分配的,用来唯一标识每个在线重做日志文件
4、多路复用文件
为了防止涉及重做日志本身的故障,Oracle数据库允许多路重做日志,这意味着可以在不同的位置自动维护两个或多个相同的重做日志副本。为了获得最大的好处,这些位置应该位于单独的磁盘上。然而,即使重做日志的所有副本都在同一个磁盘上,冗余也可以帮助防止l/O错误、文件损坏等。当重做日志文件多路复用时,LGWR并发地将相同的重做日志信息写入多个相同的重做日志文件,从而消除了重做日志单点故障。
复用是通过创建多组重做日志文件实现的。一个组由一个重做日志文件和它的多路副本组成。每个相同的副本被称为组的一个成员。每个重做日志组都用一个数字来定义,比如组1、组2,等等。
注意:Oracle建议您使用多重重做日志文件。如果需要恢复,日志文件数据的丢失可能是灾难性的。请注意,当您复用重做日志时,数据库必须增加它执行的I/0量。根据您的配置,这可能会影响数据库的整体性能。
5、联机重做日志文件工作方式
- 联机重做日志文件以循环方式使用
- 当一个联机重做日志文件已满时,LGWR会移动到下一个日志组
- 称为日志切换
- 检查点操作也会发生
- 写入控制文件的信息
- 从一个日志文件组切换到另一个日志文件组的行文称为日志切换
- 检查点是将脏的(修改的)快从缓冲区缓存写到磁盘
6、LGWR什么时候写重做
- 事务提交的时候。
- 每三秒。
- 当重做日志缓冲区满三分之一时。
- 当重做日志缓冲区中有超过1兆字节的更改记录时。
- 在DBWn将Database Buffer Cache中修改过的块写入数据文件之前。
7、LS和LSN
日志交换机和日志序列号
- 日志开关是数据库停止写入一个重做日志文件并开始写入另一个日志文件的点。通常,日志切换发生在当前重做日志文件被完全填满,必须继续写入下一个重做日志文件的时候。但是您可以将日志切换配置为定期发生,而不管当前重做日志文件是否被完全填满。你也可以手动强制日志切换。
- Oracle数据库在每次日志切换发生并且LGWR开始写入时,为每个重做日志文件分配一个新的日志序列号。当数据库归档重做日志文件时,归档的日志保留其日志序列号。重做日志文件被循环回用时,会被赋予下一个可用的日志序列号。
- 每个在线或存档的重做日志文件都由其日志序列号唯一标识。在崩溃、实例或介质恢复期间,数据库通过使用必要的归档和重做日志文件的日志序列号,以升序正确地应用重做日志文件
8、删除Redo文件成员
- 允许删除重做日志文件,使多路重做日志暂时变得不对称。例如,如果你使用双工重做日志文件组,你可以删除一个组中的一个成员,即使所有其他组每个组都有两个成员。但是,您应该立即纠正这种情况,以便所有组至少有两个成员,从而消除重做日志可能出现的单点故障。
- 一个实例总是需要至少两组有效的重做日志文件,而不管组中成员的数量。(一个组由一个或多个成员组成 ) 如果要删除的成员是组中最后一个有效的成员,则在其他成员生效之前不能删除该成员。要查看重做日志文件状态,请使用VSLOGFILE视图。如果数据库无法访问重做日志文件,则重做日志文件变为INVALID。如果数据库怀疑它不完整或不正确,则变为STALE。当一个陈旧的日志文件的组下一次被设置为活动组时,该日志文件将再次变为有效的。
- 只有当重做日志成员不属于活动组或当前组时,才能删除重做日志成员。如果你想删除一个活动组的成员,首先强制进行日志切换。
- 在删除成员之前,请确保重做日志成员所属的组已存档(如果存档已启用)。 要查看是否发生了这种情况,请使用VSLOG视图。
- 当重做日志成员从数据库中删除时,操作系统文件不会从磁盘中删除。相反,更新关联数据库的控制文件以从数据库结构中删除该成员。在删除重做日志文件后,确保删除成功完成,然后使用适当的操作系统命令删除被删除的重做日志文件。
9、删除重做文件组
- 一个实例至少需要两组联机重做日志文件
- 不能删除活动组或当前组
- 删除联机重做日志文件组时,不会删除操作系统文件
10、重新定位和重命名
- 您可以使用操作系统命令重新定位重做日志,然后使用ALTER DATABASE语句使数据库知道它们的新名称(位置)。这个过程是必要的,例如,如果当前用于某些重做日志文件的磁盘将被删除,或者数据文件和多个重做日志文件存储在同一个磁盘上,并且应该分开以减少争用。
- 要重命名重做日志成员,您必须具有ALTERDATABASE系统权限。此外,您可能还需要操作系统权限来将文件复制到所需的位置和特权,以打开和备份数据库。
- 在重新定位重做日志或对数据库进行任何其他结构更改之前,请完全备份数据库,以防在执行操作时遇到问题。作为预防措施,在重命名或重定位一组重做日志文件后,应立即备份数据库控制文件。
11、什么是重做线程
在多个数据库实例的上下文中,每个数据库实例的重做日志也称为重做线程。在典型的配置中,只有一个数据库实例访问甲骨文数据库,所以只有一个线程。然而,在甲骨文实际应用集群环境中,两个或多个实例并发地访问一个数据库,每个实例都有自己的重做线程。每个实例的单独重做线程避免了对单个重做日志文件集的争用,从而消除了潜在的性能瓶颈。
12、归档的重做日志文件(安全,正常企业开发需要打开)
- 可以归档已填充的联机重做日志文件。
- 在ARCHIVELOG模式下运行数据库和存档联机重做日志文件有两个优点
- 恢复:数据库备份以及联机和归档的重做日志文件可以保证恢复所有提交的事务。
- 备份:可以在数据库打开时执行此操作
- 默认情况下,以NOARCHIVELOG模式创建数据库。
- 由ARCn自动完成
- 通过SQL语句手动完成
- 成功归档时:
- 在控制文件中创建一个条目
- 记录:归档日志名称、日志序列号和高低系统变更号(SCN)
- 填充的联机重做日志文件不能重复使用直到:
- 设立了检查站
- 文件已由ARCn存档
- 可以多路复用
- 由DBA维护
二、Online Redo Log Files一些必要的操作
1、Force Log Switches(强制切换日志开关)和CK
强制切换日志开关(手工切换日志):
sqlALTER SYSTEM SWITCH LOGFILE;
可以通过以下方式强制检查点:
设置FAST_START_MTTR_TARGET参数
sqlFAST_START_MTTR_TARGET = 600
修改系统检查点命令:
sqlALTER SYSTEM CHECKPOINT;
2、增加组操作
sql
ALTER DATABASE ADD LOGFILE GROUP 3
('$HOME/ORADATA/u01/log3a.rdo',
'$HOME/ORADATA/u01/log3b.rdo')
SIZE 1M;
3、添加Redo文件成员
sql
ALTER DATABASE ADD LOGFILE MEMBER
'$HOME/ORADATA/u04/log1c.rdo' TO GROUP 1,
'$HOME/ORADATA/u04/log2c.rdo' TO GROUP 2,
'$HOME/ORADATA/u04/log3c.rdo' TO GROUP 3;
4、删除Redo文件成员
sql
ALTER DATABASE DROP LOGFILE MEMBER
'$HOME/ORADATA/u04/log3c.rdo';
这里并不是真正意义上的删除文件,只是修改了控制文件中的信息,实际文件还在,需要手动进行删除
5、删除日志文件组
再删除之前需要先执行以下命令查看当前组,然后再删除需要删除的组
sql
select group#,members,archived,status from v$log;
sql
ALTER DATABASE DROP LOGFILE GROUP 3;
注意:如果你想要删除的组正在工作可以强制切换日志开关
sql
ALTER SYSTEM SWITCH LOGFILE;
然后在查看组的状态,如果还不想就多来几次切换,查看状态,最后删除。
6、重新定位和重命名
通过以下两种方式之一重新定位或重命名联机重做日志文件:
- 修改数据库重命名文件命令
- 关闭数据库。
- 将联机重做日志文件复制到新位置。
- 将数据库置于MOUNT模式。
- 执行命令。
- 打开数据库进行正常操作。
sql
ALTER DATABASE RENAME FILE
'$HOME/ORADATA/u01/log2a.rdo'
TO '$HOME/ORADATA/u-2/log1c.rdo';
- 添加新成员,删除老成员
7、清理Redo Files(慎用)
ALTER DATABASE CLEAR LOGFILE 命令用于重新初始化联机重做日志文件
sqlALTER DATABASE CLEAR LOGFILE GROUP 2:
使用UNARCHIVED 关键字可避免存档损坏的联机重做日志文件
sqlALTER DATABASE CLEAR UNARCHIVEDLOGFILE GROUP 2;
8、用OMF管理重做文件
定义DB CREATE ONLINE LOG DEST n参数:
sql
DB CREATE ONLINE LOG DEST 1
DB CREATE ONLINE LOG DEST 2
可以在没有文件规范的情况下添加组:
sql
ALTER DATABASE ADD LOGFILE:
删除一个组:
sql
ALTER DATABASE DROP LOGFILE GROUP 3;
9、 Group & Member Informatior(实用)
可以通过查询以下视图来获取有关某个组及其成员的信息
V$LOG
V$LOGFILE
动态视图:V$LOG 显示控制文件中的重做日志文件信息
V$LOGFILE 标识重做日志组和成员以及成员状态
V$LOG_HISTORY 包含日志历史信息
三、安全性提示
温馨提示:在不同的磁盘上
- 设置多路复用重做日志时,请将组的成员放在不同的物理磁盘上。如果有一个磁盘出现故障,那么只有一个组成员对LGWR不可用,其他成员仍然可以被LGWR访问,因此实例可以继续运行。
- 如果归档重做日志,请将重做日志成员分散到多个磁盘,以消除LGWR和ARCn后台进程之间的争用。例如,如果有两组多路复用的重做日志成员(双工重做日志),请将每个成员放在不同的磁盘上,并将存档目标设置为第五个磁盘。这样做将避免LGWR(向成员写入) 和ARCn之间的争用(宣读成员)。
- 数据文件也应该与重做日志文件放在不同的磁盘上,以减少写入数据块和重做记录时的争用。