重做日志文件
联机重做日志
联机重做日志的概念一、联机重做日志1、重做线程每个数据库实例的联机重做日志组都是一个联机重做的实例线程。
不管有没有多路复用,一般每个Oracle都只有一个重做线程,当然RAC中每个实例都包含一个重做线程。
2、联机重做日志内容重做条目记录了可以对数据库重新构造的所有修改数据,包括回滚段。
重做记录在SGA重做日志缓存区中缓冲,并由LGWR进程写入某个联机重做日志文件。
事务被提交时,必定需要用LGWR将日志全部从SGA缓存中写入联机重做日志文件,然后才被告知提交完成。
LGWR还会为每个事务分配一个识别重做记录的系统修改号(SCN)。
当重做日志缓存填满时LGWR也会将重做条目写入到重做日志文件,这些是可以回滚的。
3、联机重做日志写入方式数据库的联机重做日志组务必要有两个或两个以上,这样可以保持其中一个一直用于写入,另一个用于归档。
LGWR采用循环写入的方式,即写满一个换下一个。
或归档模式则写满了之后归档,否则则直接覆盖。
4、活动与非活动当前正在写入的联机重做日志文件成为“当前的”联机重做日志文件。
实例恢复时所需的联机重做日志文件称为“活动的”联机重做日志文件。
实例恢复不用的联机重做日志文件称为“非活动的”联机重做日志文件。
已经进行存档的联机重做日志文件不能重新使用或重写,知道ARCn存储了这个文件内容。
5、日志切换 & 日志顺序号一般默认在一个文件写满时切换到写一个文件,但是也可以规定时间进行切换,这样就不用理会是否写满。
也可以手动进行强制切换。
每次日志切换都会分配一个新的日志顺序号,归档时也将顺序号进行保存。
每个联机或存档的重做日志文件都通过它的日志顺序号进行唯一标识。
二、规划联机重做日志1、多路复用(Group)多路复用是避免损坏联机重做日志文件。
多路复用时LGWR将同一重做日志信息同时写入多个同样的联机重做日志文件。
建议必须要使用多路复用(至少两个组)。
注:当某个成员不可用,则标记为INVALID,并向LGWR跟踪文件和数据报警文件中写入错误信息。
oracle 重做日志文件
重做日志文件重做日志文件记录的两类数据:1.修改前的数据2.修改后的数据当满足一定条件时先将修改操作所产生的重做记录写入重做日志文件中,然后才将内存中的修改结果成批的写入数据文件,最后在提交事务重做日志文件是由重做记录组成的,重做记录是由修改向量组成的。
当用户执行一条update 语句对某一个表中的记录进行修改时,会生成一条记录,这条记录用多个向量记录下了被这条语句修改过的各个db块中的信息。
重做记录采用循环的方式在SGA区的重做日志缓存区中进行缓冲,并且由后台进程LGWR 写入到其中的某个重做日志文件中。
用户无论何时提交事务,LGWR都会将该事务的重做记录从SGA的重做日志缓存区写入到某个重做日志文件中,并且为提交的每个事务分别分配一个识别重做记录的系统修改编号。
只有当与已知事务相关的所有重做记录都安全的写入重做日志文件后,用户进程才被告之已经提交。
LGWR进程在开始写入下一个重做日志文件之前,必须确保这个即将覆盖的重做日志文件已经完成了如下的工作:1.如果数据库处于“非归档日志模式(noarchivelog)”,则该重做日志文件中的所有重做记录所对应的修改结果,必须全部被写入到数据文件中。
2.如果数据库处于“归档日志模式(archivelog)”,则该重做日志文件中的所有重做记录所对应的修改结果,必须全部被写入到数据文件中,并且归档进程ARCH已经将该重做日志文件进行了归档。
活动的,非活动的,当前的联机重做日志文件LGWR当前写入的重做日志文件称为当前的联机重做日志文件,例程恢复时需要的重做日志文件称为活动的重做日志文件,例程恢复时不需要的重做日志文件称为非活动的重做日志文件。
如果已经能够进行归档,oracle就不能重新使用或重写活动的重做日志文件,知道ARCH 存储了这个文件的内容。
如果不能进行归档,当最后一个重做日志文件被填满是时,将通过重写的方法继续使用第一个可用的活动重做日志文件。
日志切换1.当一个重做日志文件被完全填满,必须填写下一个联机重做日志文件2.手动强制执行日志切换强制切换日志,需要有alter system权限,使用alter system switch logfile强制切换日志顺序号没次发生日志切换和LGWR开始进行填写时,oracle都会为每个联机重做日志文件分配一个新的日志序列号重做日志文件的归档归档就是在重做日志文件被覆盖之前,将该重做日志文件通过复制操作系统文件的方式,保存到指定的位置。
关于Oracle归档介绍
数据库归档模式介绍简介:归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换时,后台进程ARCH会将重做日志的内容保存到归档日志中,当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。
在Oracle10g中,只要启动数据库的归档模式,Oracle就会启用自动归档,从而避免了10g以前由于用户疏忽所带来的一系列问题。
日志操作模式:ARCHIVELOG(归档),NOARCHIVELOG(非归档)启动Oracle10g数据库的归档模式详细步骤对于非归档模式的数据库改为归档模式(主要以Oracle 10g为参考)使用以下步骤:步骤1(查看数据库的归档状态)首先查看数据库现有模式可使用以下语句,显示数据库处于非归档模式下SQL> select name,log_mode from v$database;NAME LOG_MODE--------- ------------ZHQHDB NOARCHIVELOG也可以用下面的语句[oracle@wangdm ~ 10:28 #9]$ sqlplus / as sysdbaSQL> archive log listDatabase log mode No Archive ModeAutomatic archival DisabledArchive destination ?/dbs/archOldest online log sequence 534Current log sequence 536步骤2(设置归档日志文件路径)SQL>alter system set log_archive_dest_1='location=/u01/arch';该语句含义是设置归档日志文件的存放路径,实际上Oracle 10g以后可以生成多份一样的日志,保存多个位置以防不测例如再添加一个归档日志文件存放位置可使用以下语句SQL>alter system set log_archive_dest_2='location=/u02/arch ';“location=/u01/arch”此目录是要从根目录开始的一个完整的目录详细介绍归档日志文件的存放的两种方法:步骤3(修改数据库为归档模式)关闭数据库SQL> shutdown immediate启动数据mount状态:SQL> startup mount修改数据库为归档模式:SQL> alter database archivelog;打开数据库,查询:SQL> alter database open步骤4(配置归档进程个数)可选初始化参数LOG_ARCHIVE_MAX_PROCESSES用于指定例程初始启动的最大归档进程个数,当将数据库转变为ARCHIVELOG模式时,默认情况下oracle会自动启动两个归档进程.通过改变初始化参数LOG_ARCHIVE_MAX_PROCESS的值,可以动态地增加或降低归档进程的个数,每个实例归档进程数量最多只能为30个取值范围为[0-9 a-t]: ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=3 scope=both; 如果设置的归档进程个数超过30如下图会有错误提示其实对于oracle 10g以前的版本还有log_archive_start参数与LOG_ARCHIVE_MAX_PROCESSES结合使用,但是对于10g及后期的版本这个参数完全做废了,如下图数据库已启用归档同时在日志发生切换时日志也会自动归档只是log_archive_start参数值还是false,所以到10G后这个参数就不用理它了步骤5(显示归档日志信息)1.使用ARCHIVE LOG LIST命令可以显示日志操作模式,归档位置,自动归档机器要归档的日志序列号等信息.2.显示归档日志信息.Select name, sequence#, first_change# FROM v$archived_log;Name用于表示归档日志文件名,sequence#用于表示归档日志对应的日志序列号,firs_change#用于标识归档日志的起始SCN值.3.执行介质恢复时,需要使用归档日志文件,此时必须准确定位归档日志的存放位置.通过查询动态性能视图v$archive_dest可以取得归档日志所在目录.SELECT * FROM v$archive_dest;4.显示日志历史信息SELECT * FROM v$loghist;THREAD#用于标识重做线程号,SEQUNCE#用于标识日志序列号,FIRST_CHANGE#用于标识日志序列号对应的起始SCN值,FIRST_TIME用于标识起始SCN的发生时间.SWICTH_CHANGE#用于标识日志切换的SCN值.5.显示归档进程信息.进行日志切换时,ARCH进程会自动将重做日志内容复制到归档目录中,为了加快归档速度,应该启用多个ARCH进程.通过查询动态性能视图V$ARCHIVE_PROCESSES可以显示所有归档进程的信息!SELECT * FROM v$archive_processes;Porcess用于标识ARCH进程的编号,status用于标识ARCH进程的状态(ACTIVE:活动, STOPPED:未启动),log_sequence用于标识正在进行归档的日志序列号,state用于标识ARCH进程的工作状态步骤6(执行手工归档)从oracle database 10g开始,当将日志操作模式转变未ARCHIVELOG模式时,oracle会自动启动ARCH进程.如果要使用手工归档.那么在改变日志操作模式时必须使用命令ALTER DATABASE ARCHIVELOG MANUAL;需要注意,使用手工归档方式,数据库管理员必须手工执行归档命令.如果没有执行手工归档命令,日志组的原有内容将不能被覆盖.ALTER DATABASE ARCHIVELOG MANUAL 命令是为了与先前的版本兼容而保留的,将来的oracle版本会淘汰该命令,使用手工归档方式时,数据库管理员可以执行以下命令归档重做日志:alter system archive log all; --手动归档所有switch的日志alter system archive log sequence 545; --545为日志序列号alter system archive log current; --归档当前联机日志文件arter database archivelog; --用此命令再次将数据库改为自动归档,手动归档一般情况下在10g及后期版本其实已经没什么了注意点1 特别指出的是在Oracle 9i中还要修改参数log_archive_start = true才能生效,oracle 10g中已经废除了该参数,所以不需要设置该参数。
数据库复习要点2
SQL部分复习要点每个事务的处理必须满足ACID原则,即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability.SQL中可被锁定的资源从小到大分别是行、页、扩展盘区、____表_________ 和______数据库___________。
Sql提供了6中锁定模式分别是:排他、共享、更新、意向、架构、键范围如果允许用户对视图进行更新和插入操作,但又要防止用户将不符合视图约束条件的记录添加到视图,应当在定义视图时指定下列哪个子句?在表中插入数据的语句是在表中创建视图的语句是为了去除结果集中的重复的行,可在select语句中使用以下哪个关键字?下列关于游标的说法,不正确的是(d )A)是从数据表中提取出来的数据B)以临时表的形式存放在内存中C)在游标中有一个数据指针D)利用goto语句可以移动该指针利用“fetch”游标的操作不包括(C )A)openB)fetchC)quitD)close12、不属于存储过程的优点有(D )A)存储过程的能力大大增强了SQL语言的功能和灵活性。
B)可以降低网络的通信量C)在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案D)存储过程可以使没有权限的用户不能直接或间接存取数据库数据,从而保证数据的安全。
系统安全性是指在系统级控制数据库的存取和使用的机制,包含:⑴有效的用户名/口令的组合。
⑵一个用户是否授权可连接数据库。
⑶用户对象可用的磁盘空间的数量。
⑷用户的资源限制。
⑸数据库审计是否是有效的。
⑹用户可执行哪些系统操作。
1.掌握sqlserver2005中用户的创建、删除和权限管理方法.(1)创建SQL SERVER登录名例如:以命令方式创建SQL SERVER认证方式登录名,登录名使用yan,密码是123456Create login yan with password=’123456’;(2)用户的创建例如:使用命令方式创建YGGL的数据库用户,用户名是yan,登录名是yanUse ygglGoCreate user yan for login yan(3)删除用户例如:使用命令方式删除YGGL的数据库用户yanUse ygglGoDrop user yan(4) 权限授予用户例如:以命令方式授予用户yan在YGGL数据库上salary表中的select,delete 权限。
Oracle 改变重做日志位置或名称
Oracle 改变重做日志位置或名称在所有后台进程中,LGWR进程活动最为频繁,它需要不断地将事务变化由重做日志缓冲区写入重做日志中。
在数据库文件、控制文件和重做日志这3种文件中,重做日志的I/O操作最频繁。
为了提高I/O性能,应将重做日志分布到I/O操作相对较少、速度最快的磁盘设备上。
规划重做日志时,应将同一个日志组的不同日志成员尽可能地分布到不同磁盘上,以防止磁盘损坏而导致所有日志成员丢失。
例如,假设在初始阶段,日志组二中的日志成员被放在同一块磁盘上,但是后来出于完全和性能方法的考虑,DBA为服务器新增加了一块磁盘,并且将日志组二中的一个日志成员移动到新磁盘上,此时就需要改变该日志成员的存放位置。
下面修改重做日志文件的名称和位置的具体操作步骤如下:(1)关闭数据库。
SQL> connect /as sysdbaSQL> shutdown(2)复制或移动日志成员到目标位置。
当闭数据库后,DBA就可以使用操作系统命令复制或移动日志成员到新位置。
例如,修改原日志文件的名称。
(3)重新启动数据库实例,加载数据库,但是不打开数据库。
SQL> startup mount;(4)使用带RENAME FILE子句的ALTER DATABASE语句重新设置重做日志文件的路径和名称。
SQL> alter database rename file2 'd:\app\Administrator\oradata\orcl\redo03.log',3 'd:\app\Administrator\oradata\orcl\redo02.log',4 'd:\app\Administrator\oradata\orcl\redo01.log'5 to6 'd:\app\Administrator\oradata\orcl\redo03a.log',7 'd:\app\Administrator\oradata\orcl\redo02a.log',8 'd:\app\Administrator\oradata\orcl\redo01a.log';数据库已更改。
oracle redo日志详解
max_dump_file_size string UNLIMITED
shadow_core_dump string partial
user_dump_dest string /u01/app/oracle/admin/orcl/udump
由LGWR后台进程同时将日志内容写入到一个组的所有成员
LGWR的触发条件
在事务提交的时候(COMMIT)
Redo Log Buffer 三分之一满
Redo Log Buffer 多于一兆的变化记录
--=========================================
-- Oracle 联机重做日志文件(ONLINE LOG FILE)
--=========================================
转载位置: /robinson_0612/article/details/5749556
9.删除日志成员
不能删除组内的唯一一个成员
不能删除处于active 和current 状态组内的成员
删除处于active 和current 状态组内的成员,应使用日志切换使其处于INACTIVE状态后再删除
对于组内如果一个成员为NULL 值,一个为INVALID,且组处入INACTIVE,仅能删除INVALID状态成员
处于归档模式的联机日志,LSN号在归档时也被写入到归档日志之中
4.日志文件的工作方式
日志文件采用按顺序循环写的方式
当一组联机日志组写满,LGWR则将日志写入到下一组,当最后一组写满则从第一组开始写入
写入下一组的过程称为日志切换
user_dump_dest -->用户跟踪日志
Oracle特殊类型文件
Oracle 特殊类型文件Oracle 还提供了其他一些类型的文件,如参数文件、归档日志文件、跟踪和密码文件等。
本节将对这些类型的文件进行简单地介绍。
1.归档日志文件Oracle 利用重做日志文件记录对数据库所做的修改,但是重做日志文件是以循环方式使用的,在重新写入重做日志文件时,其中原来保存的信息将被覆盖。
如果能够将所有的重做记录永久地保留下,就可以完整地记录数据库的全部修改过程。
这可以通过对重做日志文件进行归档来实现。
在重做日志文件被覆盖之前,Oracle 能够将已经写满的重做日志文件通过复制操作系统文件的方式保存到指定的位置。
保存下来的重做日志文件的集合称为“归档重做日志”,复制的过程称为“归档”。
Oracle 数据库可以运行在两种模式之中,归档模式和不归档模式。
只有数据库处于归档模式下,系统才会对重做日志文件执行归档操作,归档操作是由后台进程ACRn 自动完成。
当数据库运行在归档模式下,归档重做日志文件会占用大量的硬盘空间。
也就是说,数据库在归档模式下是牺牲硬盘空间来获取数据的安全性。
2.参数文件在Oracle 数据库系统中,参数文件包含了数据库的配置信息。
数据库实例在启动之前,Oracle 数据库系统首先会读取这些参数文件中设置的参数,并根据初始化参数文件中设置的参数来配置实例的启动。
参数文件包括文本参数文件和服务器参数文件两种类型。
在Windows 平台中,服务器参数文件的名称格式为SPFILE<SID>.ora ,文本参数的名称格式为init<SID>.ora ,其中SID 为数据库实例名。
用户可以通过如下三种方法查看数据库中参数值:● 查看init<SID>.ora 文件。
该参数文件是以文本形式存储参数,用户可以直接打开该参数文件查看数据库参数。
● 查询视图V$PARAMETER 。
可利用该动态性能视图来确定参数的默认值是否修改过,以及是否可以用ALTER SYSTEM 和ALTER SESSION 命令修改。
oracle8管理控制文件和重做日日志文件
2021/2/17
oracle8管理控制文件和重做日日志文件
移动重做日志文件
Open状态下移动redo文件 • 确保处于inactive状态 • Host copy • 执行alter database rename file A to B语句 • 备份控制文件或数据库
学习改变命运,知 识创造未来
2021/2/17
oracle8管理控制文件和重做日日志文件
重做日志文件管理
• 重做日志文件的作用
• 数据库恢复中起到非常重要的作用 • 例程恢复、介质恢复以及事务的撤销
• 重做日志文件组\成员
• Redo01.log\redo02_1.log\redo02_2.log • Maxlogfiles:重做日志文件组的最大数量 • Maxlogmembers:每个组成员的最大数量
• Alter tablespace temp add tempfile ‘%oracle_home%\oradata\orcl\temp01.dbf’
08_重做日志文件
log1a.rdo
log2a.rdo
log3a.rdo
Group 1
Group 2
Group 3
删除在线重做日志成员
ALTER DATABASE DROP LOGFILE MEMBER '$HOME/ORADATA/u04/log3c.rdo';
log1a.rdo log1b.rdo
log2a.rdo log2b.rdo
log1c.rdo
log2c.rdo
Group 1
Group 2
清除、重新部署或重命名在线重做日志文 件
清除在线重做日志文件:
ALTER DATABASE CLEAR LOGFILE '$HOME/ORADATA/u01/log2a.rdo';
重新部署或重命名在线重做日志文件可以 由增加新成员和删除旧成员的操作来完成
这被称为日志切换 检查点操作也产生 信息被写入控制文件
强迫日志切换和检查点
日志切换可以使用ALTER SYSTEM SWITCH LOGFILE命令来启动 可使用以下方式启动检查点
设置fast_start_mttr_target参数 ALTER SYSTEM CHECKPOINT命令
ALTER SYSTEM CHECKPOINT;
在线重做日志的配置
?
Group 1 Group 2 Group 3 Member Member Member Member Member
Disk 1
Disk 2
Disk 3
用OMF管理在线重做日志
没有文件说明,也能增加一个完整组
ALTER DATABASE ADD LOGFILE;
如果删除组,所有相应的OMF文件也在OS 层被删除:
oracle 日志归档 原理
oracle 日志归档原理Oracle数据库日志归档(Archive Log Mode)是数据库管理系统中用于实现数据库可恢复性的重要机制。
在归档模式下,Oracle数据库会将已填满的联机重做日志文件的内容复制到单独的归档日志文件中,并且只有在当前的日志内容被安全地归档后,才会覆盖或重新使用这些联机重做日志。
以下是Oracle日志归档的基本原理:1.联机重做日志:•Oracle数据库运行时会产生一系列的联机重做日志文件(Online Redo Logs),这些文件按照日志组的方式组织,每个日志组内包含一个或多个日志成员。
•当数据库执行事务处理时,所有对数据库的修改都会以重做记录的形式写入当前活动的日志组中。
2.日志切换:•随着数据库操作的进行,当前日志组填满后,会触发日志切换(Log Switch),即系统开始往下一个日志组中写入新的重做记录。
•在非归档模式下,旧的日志组可以被覆盖和重复使用;而在归档模式下,必须先将旧日志组的内容归档才能进行切换。
3.归档过程:•归档是由后台进程ARCn (Archiver) 自动完成的,或者管理员可以通过手动方式将填满的联机重做日志文件复制到指定的归档位置。
•归档日志文件具有与原始联机日志相同的逻辑内容,并带有唯一的日志序列号(Log Sequence Number, LSN),以便在恢复过程中确定应用重做记录的顺序。
4.作用:•在发生故障需要恢复数据库时,通过应用归档日志中的重做记录,可以将数据库状态恢复到故障发生前的任意时间点(Point-in-Time Recovery, PITR)。
•对于数据库镜像、数据保护以及维护高可用性环境如Data Guard(物理/逻辑standby数据库)也是至关重要的。
数据库的数据一致性恢复
数据库的数据一致性恢复在数据库管理中,数据一致性是一项至关重要的要求。
数据一致性指的是数据库中的数据始终保持正确、完整和有效。
然而,由于各种原因,如硬件故障、软件故障、网络中断或人为错误,数据库的数据可能会丢失或损坏,导致数据的一致性遭到破坏。
在这种情况下,数据库管理系统必须采取措施来恢复数据的一致性。
数据一致性恢复是指通过一系列的操作和技术手段,将数据库中的数据恢复到最后一个一致性检查点之后的状态。
下面将介绍几种常见的数据库的数据一致性恢复方法。
一、日志恢复方法日志是数据库中用于记录操作事务的序列的文件。
在每个事务的开始和结束时,系统会将相关操作记录在日志中。
如果在某个操作失败后,数据库处于不一致的状态,日志文件可以用来恢复数据的一致性。
1. 重做日志恢复:重做日志恢复指的是通过回放操作来执行那些已经成功完成但未写入磁盘的日志记录,以达到一致性恢复的目的。
这种方法主要应用于非易失性存储器或高可用性系统。
2. 撤销日志恢复:撤销日志恢复是指通过反向执行恢复操作来取消那些未完成的事务。
这种方法主要应用于硬件故障、操作系统错误和网络中断等导致数据库中止的情况。
二、备份恢复方法备份是将数据库的副本创建并保存到另一个位置的过程。
在数据一致性恢复中,备份是一种常见且重要的恢复方法。
1. 完全备份恢复:完全备份恢复指的是通过将所有数据从备份文件中还原到数据库中来实现一致性恢复。
这种方法通常用于数据库完全崩溃或需要重建数据库的情况。
2. 增量备份恢复:增量备份恢复是指将数据库中自上次完全备份以来的更改部分还原到数据库中。
这种方法可以提高数据恢复的效率和速度,并减少恢复所需的存储空间。
三、事务恢复方法事务是数据库中一系列操作的集合,可以作为单个逻辑工作单元进行管理。
在数据一致性恢复中,事务恢复方法主要侧重于恢复那些部分或完全执行失败的事务,并确保数据库恢复到一致状态。
1. 丢弃事务恢复:丢弃事务恢复是指取消那些部分执行的事务,并将数据库恢复到事务开始之前的状态。
Oracle 增加重做日志
Oracle 增加重做日志如果发现LGWR经常处于等待状态,则就需要考虑添加日志组及其成员,一个数据库最多可以拥有MAXLOGFILES个日志组。
增加重做日志是使用ALTER DA TABASE语句完成的,执行该语句时要求用户必须具有ALTER DATABASE系统权限。
1.增加重做日志组当管理重做日志时,为防止后台进程LGWR等待写入日志组,DBA必须选择合适的日志组个数。
要增加重做日志组,可以使用带ADD LOGFILE子句的ALTER DATABASE语句。
例如,下面的语句向数据库中添加了一个新的重做日志组:SQL> alter database add logfile2 ('d:\app\Administrator\oradata\orcl\redo04.log',3 'e:\oradata\orcl\redo04b.log')4 size 10m;数据库已更改。
新增的重做日志组具有两个成员,每个成员文件的大小均为10MB。
一般情况下,日志文件的大小在10MB到50MB之间,Oracle默认的日志文件大小为50MB。
如果在ALTER DA TABASE ADD LOGFILE语句指定GROUP子句,Oracle将自动为新建的重做日志组设置编号,例如:下面的语句可以在创建日志组时指定为第4组:SQL> alter database add logfile group 42 ('d:\app\Administrator\oradata\orcl\redo04.log',3 'e:\oradata\orcl\redo04b.log')4 size 10m;数据库已更改。
使用组号可以更加方便地管理重做日志组,但是,对日志组的编号必须为连续的,不要跳跃式地指定日志组编号。
也就是说,不要将组号编为10,20,30等这样不连续的数。
Oracle 显示重做日志信息
Oracle 显示重做日志信息对于DBA而言,可能经常要查询重做日志文件,以了解其使用情况。
要了解Oracle数据库的日志文件信息,可以查询如表11-2所示的数据字典视图和动态性能视图。
表11-2 包含重做日志文件信息的视图视图说明V$LOG 包含从控制文件中获取的所有重做日志文件的基本信息V$LOGFILE 包含各个成员日志文件的信息,例如成员的状态和所属的重做日志组V$LOG_HISTROY 包含重做日志文件的历史信息下面列出了V$LOG的结构信息:SQL> desc v$log名称是否为空? 类型---------------------------- ------------------- --------------GROUP# NUMBERTHREAD# NUMBERSEQUENCE# NUMBERBYTES NUMBERMEMBERS NUMBERARCHIVED V ARCHAR2(3)STATUS V ARCHAR2(16)FIRST_CHANGE# NUMBERFIRST_TIME DA TE其中,GROUP#字段显示的是重做日志文件组的编号,THREAD#显示的是重做日志组所属的日志写入线程,SEQUENCE#字段显示的是重做日志组的日志序列号,BYTES字段显示重做日志组中各个成员的大小,MEMBERS字段显示的是重做日志组中的成员数,ARCHIVED字段显示的是重做日志的归档情况,STA TUS字段显示重做日志组的状态(CURRENT表示当前正在使用的,NACTIVE表示非活动组,ACTIVE表示归档未完成),FIRST_CHANGE#字段显示的是重做日志组上一次写入时的系统改变号SCN,FIRST_TIME 字段显示的是重做日志组上一次写入的时间。
Oracle 重做日志简介
Oracle 重做日志简介日志文件也称为重做日志文件(Redo Log File),重做日志文件用于记载事务操作所引起的数据库变化。
执行DDL或DML操作时,Oracle会将事务变化的信息顺序写入重做日志。
当丢失或损坏数据库中的数据时,Oracle会根据重做日志文件中的记录,恢复丢失的数据。
1.重做记录重做日志文件是由重做记录组成,重做记录又称为重做条目,它由一组修改向量组成。
每个修改向量都记录了数据库中某个数据块所做的修改。
例如,如果用户执行了一条UPDATE语句对某个表中的一条记录进行修改,同时将生成一条重做记录。
这条重做记录可能由多个变更向量组成,在这些变更向量中记录了所有被这条语句修改过的数据块中的信息,被修改的数据块包括表中存储这条记录的数据块,以及回退段中存储的相应的回退条目的数据块。
如果由于某种原因导致数据库丢失了这条UPDA TE语句操作的结果,则可以通过与这条UPDATE语句对应的重做记录找到被修改结果并复制到各个数据块中,从而完成数据恢复。
利用重做记录,不仅能够恢复对数据文件所做的修改操作,还能够恢复对回退段所做的修改操作。
因此,重做日志文件不仅可以保护用户数据库,还能够保护回退段数据。
在进行数据库恢复时,Oracle会读取每个变更向量,然后将其中记录的修改信息重新应用到相应的数据块上。
重做记录将以循环方式在SGA区的重做日志高速缓存中进行缓存,并且由后台进程LGWR写入到重做日志文件中。
当一个事条被提交时,LGWR进程将与该事务相关的所有重做记录全部写入重做日志文件中,同时生成一个“系统变更码SCN”。
系统变更码SCN 会随重做记录一起保存到重做日志文件中,以标识与重做记录相关的事务。
只有当某个事务所产生的重做记录全部被写入重做日志文件后,Oracle才会认为该事务提交成功。
2.写入重做日志文件在Oracle中,用户对数据库所做的修改首先被保存在内存中,这样可以提高数据库的性能,因为对内存中的数据进行操作要比对磁盘进行操作快得多。
控制文件
重做日志文件
窗 内 网
重做日志文件(Redo Log File)是记录数据库中所有修改信息的文 件,简称日志文件。其中,修改信息包括数据库中数据的修改信息和数据 库结构的修改信息等,例如删除表中的一行数据或删除表中的一个列。如 果只是进行了查询操作,则该操作不会被记录到日志文件中。日志文件是 数据库系统的最重要的文件之一,它可以保证数据库安全,是进行数据库 备份与恢复的重要手段。如果日志文件受损,数据库同样可能会无法正常 运行。
窗 内 网
控制文件和日志文件
控制文件
窗 内 网
控制文件(Control File)是一个很小的二进制文件,用于描述和维护数 据库的物理结构。在Oracle数据库中,控制文件相当重要,它存放有数据 库中数据文件和日志文件的信息。Oracle数据库在启动时需要访问控制文 件,在数据库的使用过程中,数据库需要不断更新控制文件,由此可见, 一旦控制文件受损,那么数据库将无法正常工作。
oracle重做日志文件和归档日志
数据库恢复的原理
当数据库发生故障时,可以利用重做 日志文件来进行恢复。Oracle会根据 重做日志文件中的记录,重新执行对 数据库所做的更改,从而将数据库恢 复到一致的状态。
04 Oracle重做日志文件和归 档日志的管理和维护
日志文件的备份与恢复
备份策略
制定定期备份和增量备份策略,确保重做日志文件和归档日志的安全。
恢复方法
在发生故障时,根据备份情况选择适当的恢复方法,如全量恢复或增量恢复。
日志文件的清理与维护
清理过期日志
定期清理过期或不再需要的日志文件 ,释放存储空间。
Oracle重做日志文件和归档日志
contents
目录
• Oracle重做日志文件 • 归档日志 • Oracle重做日志文件和归档日志的关系 • Oracle重做日志文件和归档日志的管理
和维护 • Oracle重做日志文件和归档日志的故障
处理
ቤተ መጻሕፍቲ ባይዱ
01 Oracle重做日志文件
重做日志文件的作用
数据恢复
THANKS FOR WATCHING
感谢您的观看
存储容量
需要合理规划存储空间,确保有足够的空间存储归档日志文件,避 免空间不足导致数据库故障。
归档日志的恢复
恢复方法
当数据库发生故障时,可以使用归档日志进行恢复。可以选择完全恢复或部分恢复,根据需要选择相应的归档日志文 件。
恢复过程
在恢复过程中,需要按照时间顺序应用归档日志文件,确保数据的一致性。可以使用RMAN(Oracle Recovery Manager)进行自动恢复或手动恢复。
oracle_重做日志文件--笔记
oracle_重做⽇志⽂件--笔记重做⽇志⽂件(redo log file)⽬录重做⽇志⽂件相关。
重做⽇志⽂件简介。
查询重做⽇志⽂件的信息。
⽇志切换。
管理⽇志⽂件组增删⽇志⽂件组。
增删⽇志⽂件成员。
归档与⾮归档模式。
⼀.重做⽇志⽂件相关。
Oracle引⼊重做⽇志的⽬的:数据库的恢复。
Oracle相关进程:重做⽇志写进程(LGWR)。
重做⽇志性质:联机⽇志⽂件,oracle服务器运⾏时需要管理它们。
相关数据字典:v$log ; v$logfile。
操作者权限:具有sys⽤户或system⽤户权限。
1.1重做⽇志⽂件的规划。
(于⽹络上收集)联机⽇志⽂件的规划原则如下:1:分散放开,多路复⽤。
⼀般会将同⼀组的不同⽇志成员⽂件放到不同的磁盘或不同的裸设备上。
以提⾼安全性。
2:把重做⽇志放在速度最快的硬盘上(即:⽇志所在的磁盘应当具有较⾼的I/O),⼀般会将⽇志⽂件放在裸设备上。
3:把重做⽇志⽂件设为合理⼤⼩:例如,增⼤⽇志⽂件⼤⼩可以加快⼀些⼤型的INSERT、UPDATE、DELETE操作,也能降低⽇志⽂件切换频率。
减少⼀些⽇志等待事件。
⼀般根据具体业务情况有所不同。
⼀般⽇志组⼤⼩应满⾜⾃动切换间隔⾄少15-20分钟左右业务需求4:ORACLE推荐,同⼀个重做⽇值组下的所有重做⽇志⽂件⼤⼩、成员个数⼀致.⼆.重做⽇志⽂件简介。
2.1重做⽇志重做⽇志⽂件⼜叫联机⽇志⽂件,记录了对数据库修改的信息,包括⽤户对数据修改和数据库管理员对数据库结构的修改。
2.2重做⽇志的作⽤。
它主要⽤于在oracle发⽣故障的时候和数据库备份⽂件配合恢复数据库。
⼀般来说,数据库故障丢失数据,有两种情况。
⼀是,因为停电或死机,脏块未写⼊磁盘,造成该数据丢失。
⼆是,磁盘损坏,数据全完蛋。
对应第⼀种情况,oracle会使⽤实例恢复,使⽤重做⽇志⾃动恢复数据,不需要⽤户⼲预。
没错,实例恢复,它是⾃动的。
对应第⼆种情况,便需要DBA使⽤备份,重做⽇志,归档⽇志来恢复数据了。
总结联机重做日志文件
学习任务:解释联机重做日志文件的目的联机重做日志文件的结构控制日志切换和检查点多重映像和维护联机重做日志文件获取联机重做日志文件的信息每个数据库至少需要拥有两个联机重做日志文件,因为Oracle是以循环方式来使用联机重做日志文件的。
为了避免由于单点故障造成丢失数据库信息,可以考虑使用日志文件副本。
一组相同的联机重做日志文件副本称作联机重做日志组。
属于日志组的每个文件被称为日志成员,并且同一个日志组的不同日志成员互为镜像,LGWR后台进程向组内所有联机重做日志文件并发写入相同信息,组内的每个成员都有相同的日志序列号和同样的大小。
注意:如果某个重做日志文件被破坏,只要它所在的日志组中至少有一个成员还可以用,则Oracle可以正常运行,不过在警告文件中记录有一个重做日志文件无法使用。
添加联机重做日志文件组ALTER DAT ABASE ADD LOGFILE GROUP 3 ('$HOME/ORADAT A/u01/log3a.rdo','$HOME/ORADATA/u02/log3b.rdo')SIZE 1M;添加联机重做日志文件成员ALTER DAT ABASE 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;删除联机重做日志文件组ALTER DAT ABASE DROP LOGFILE GROUP 3;注意:1.不能删除数据库仅有的两个日志组;2.当数据库处于归档模式下,确保日志组已经归档;3.不能删除当前日志组;4.在删除了日志组之后,应该手工删除其对应物理文件。
删除联机重做日志文件成员ALTER DAT ABASE DROP LOGFILE MEMBER '$HOME/ORADATA/u04/log3c.rdo';删除日志成员限制:1.不能删除日志组的唯一成员;2.如果数据库处于归档模式下,要确保日志成员所在组已经归档;3.不能删除当前日志组的日志成员;4.在删除了日志成员时,并未删除操作系统文件,应该手工删除其对应物理文件。
Oracle 指定分析的日志文件
Oracle 指定分析的日志文件在使用LogMiner进行日志分析之前,必须指定它将对哪些重做日志文件进行分析。
LogMiner可以一次对多个重做日志文件进行分析。
执行DBMS_LOGMNR.ADD_LOGFILE过程可以指定要分析的重做日志文件。
利用这个过程可以依次添加多个重做日志文件,或删除已经添加的重做日志文件。
下面是指定重做日志文件列表的具体操作步骤:(1)确保数据库实例已经启动(STARTUP)。
(2)创建重做日志文件列表。
通过指定DBMS_LOGMNR.ADD_LOGFILE过程的NEW选项来创建重做日志文件的列表。
例如,利用下面的语句建立一个重做日志文件列表,并向其中添加一个重做日志文件:SQL> executedbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo01a.log',options=>dbms_logmnr.new);(3)根据需要,使用ADDFILE选项继续向列表中添加其他的重作日志文件。
比如,利用下面的语句向列表中添加重做日志文件:execute dbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo02a.log',options=>dbms_logmnr.addfile);(4)如果需要,还可以通过指定DBMS_LOGMNR.ADD_LOGFILE过程的REMOVEFILE选项来删除重做日志文件。
例如,利用下面的语句可以将重做日志文件REDO02A.LOG从日志文件列表中删除:execute dbms_logmnr.add_logfile(logfilename=>'d:\app\user\oradata\orcl\redo02a.log',options=>dbms_logmnr.removefile);DBMS_LOGMNR.ADD_LOGFILE过程的OPTIONS各选项表示如下:●NEW 表示创建一个新的日志文件列表●ADDFILE 表示向列表中添加日志文件●REMOVEFILE 与ADDFILE相反,在列表中删除日志文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重做日志文件(redo log file)对于Oracle数据库至关重要。
它们是数据库的事务日志。
通常只用于恢复,不过也可以用于以下工作:q 系统崩溃后的实例恢复q 通过备份恢复数据文件之后恢复介质q 备用(standby)数据库处理q 输入到流中,这是一个重做日志挖掘过程,用于实现信息共享(这也是一种奇特的复制)重做日志文件的主要目的是,万一实例或介质失败,重做日志文件就能派上用场,或者可以作为一种维护备用数据库(standby database)的方法来完成故障恢复。
如果数据库所在主机掉电,导致实例失败,Oracle会使用在线重做日志将系统恢复到掉电前的那个时刻。
如果包含数据文件的磁盘驱动器出现了永久性故障,Oracle会使用归档重做日志以及在线重做日志,将磁盘驱动器的备份恢复到适当的时间点。
另外,如果你“无意地”删除了一个表,或者删掉了一些重要的信息,而且提交了操作,则可以恢复一个备份,并让Oracle使用这些在线和归档重做日志文件将其恢复到意外发生前的那个时刻。
你在Oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线重做日志文件。
向表中插入一行时,插入的最终结果会写入重做日志。
删除一行时,则会在重做日志中写入你删除了这一行这一事实。
删除一个表时,删除的效果会写入重做日志。
从表中删除的数据不会写入;不过,Oracle删除表时执行的递归SQL确实会生成redo。
例如,Oracle从SYS.OBJ$表(和其他内部字典对象)中删除一行时,这就会生成redo,另外如果支持不同模式的补充日志(supplemental logging ),还会把具体的DROP TABLE语句写入重做日志流。
有些操作可能会以尽量少生成redo的模式完成。
例如,可以使用NOLOGGING属性创建一个索引。
这说明,最初创建索引数据的操作不会记入日志,但是Oracle完成的所有递归SQL会写入日志。
例如,创建索引后,将向SYS.OBJ$表中插入一行表示索引存在,这个插入会记入日志,以后使用SQL插入、更新和删除等操作完成的修改也会记入日志。
但是,最初向磁盘写索引结构的操作不会记入日志。
前面我提到了两种类型的重做日志文件:在线(online)和归档(archived)。
下面几节将详细介绍这两类重做日志文件。
在第9章中,我们还会结合回滚段来讨论redo,看看它们对开发人员有什么影响。
现在,我们只关注这些重做日志文件是什么,它们有什么用途。
3.7.1 在线重做日志每个Oracle数据库都至少有两个在线重做日志文件组。
每个重做日志组都包含一个或多个重做日志成员(redo按成员组来管理)。
这些组的单个重做日志文件成员之间实际上形成彼此真正的镜像。
这些在线重做日志文件的大小是固定的,并以循环方式使用。
Oracle先写日志文件组1,当到达这组文件的最后时,会切换至日志文件组2,从头到尾重写这些文件的内容。
日志文件组2填满时,再切换回到日志文件组1(假设只有两个重做日志文件组;如果有3个重做日志文件组,当然会继续写第3个组)。
如图3-4所示。
4 日志文件组图3-从一个日志文件组切换到另一个日志文件组的动作称为日志切换(log switch)。
重要的是注意到,如果数据库配置得不好,日志切换可能会导致临时性“暂停”。
由于重做日志的目的是在失败时恢复事务,所以我们自己必须保证一点:在重用重做日志之前,失败时应该不需要重做日志文件的内容。
如果Oracle不能肯定这一点,也就是说,它不清楚是否真的不需要日志文件的内容,就会暂时挂起数据库中的操作,确保将缓存中的数据(即redo“保护”的数据)安全地写入磁盘本身(建立检查点)。
一旦Oracle能肯定这一点,再恢复处理,并重用重做文件。
我们刚刚提到一个重要的数据库概念:检查点(checkpointing)。
要理解在线重做日志如何使用,就需要了解检查点,知道数据库缓冲区缓存如何工作,还要知道一个称为数据块写入器(data block writer,DBWn)的进程会做什么。
数据库缓冲区缓存和DBWn将在后面详细讨论,但是我们先提前说两句,不过点到为止。
数据库缓冲区缓存(database buffer cache)就是临时存储数据库块的地方。
这是Oracle SGA中的一个结构。
读取块时,会存储在这个缓存中,这样以后就不必再物理地重新读取它们。
缓冲区缓存首先是一个性能调优设备,其目的只是让非常慢的物理I/O过程看上去快一些。
修改块(更新块上的一行)时,这些修改会在内存中完成,写至缓冲区缓存中的块。
另外,会把重做这些修改所需的足够信息保存在重做日志缓冲区(redo log buffer)中,这是另一个SGA数据结构。
提交(COMMIT)修改时,会使这些修改成为永久的。
Oracle并不是访问SGA中修改的所有块,并把它们写到磁盘上。
相反,它只是把重做日志缓冲区的内容写到在线重做日志中。
只要修改的块还在缓冲区缓存中,而不在磁盘上,数据库失败时我们就会需要该在线重做日志的内容。
如果提交过后,突然掉电,数据库缓冲区缓存就会彻底清空。
如果发生这种情况,则只有重做日志文件中有修改记录。
重启数据库时,Oracle实际上会重放我们的事务,再用同样的方式修改块,并提交。
所以,只要修改的块被缓存而未写入磁盘,就不能重用重做日志文件。
在这里DBWn就能起作用了。
这是Oracle的一个后台进程,负责在缓冲区缓存填满时请求空间,更重要的是,它会建立检查点。
建立检查点就是把脏块(已修改的块)从缓冲区缓存写至磁盘。
Oracle会在后台为我们做这个工作。
有很多情况都会导致建立检查点,最常见的事件就是重做日志切换。
在填满日志文件1并切换到日志文件2时,Oracle就会启动一个检查点。
此时,DBWn开始将日志文件组1所保护的所有脏块写至磁盘。
在DBWn 把该日志文件保护的所有块刷新输出之前,Oracle不能重用这个日志文件。
如果DBWn在完成其检查点之前就想使用日志文件,就会在数据库的ALERT 日志中得到以下消息:所以,出现这个消息时,数据库中的处理会挂起,因为DBWn正忙于完成它的检查点。
此时,Oracle会尽可能地把所有处理能力都交给DBWn,希望它能更快地完成。
如果数据库实例得到了妥善地调优,是不会看到这个消息的。
如果你确实看到了这个消息,就应该知道肯定让最终用户陷入了不必要的等待,而这是可以避免的。
我们的目标是分配足够的在线重做日志文件(这是对DBA而言,对开发人员则不一定),这样就不会在检查点完成之前试图重用日志。
如果经常看到这个消息,这说明DBA未能为应用分配足够多的在线重做日志文件,或者要对DBWn进行调优才能更高效地工作。
不同的应用会生成不同数量的重做日志。
很自然地,决策支持系统(Decision Support System,DSS,仅查询)或数据仓库(DW)系统生成的在线重做日志总是比OLTP(事务处理)系统生成的在线重做日志少得多。
如果一个系统在数据库中对二进制大对象(Binary Large Object,BLOB)完成了大量图像处理,相对于简单的订单输入系统来说,则会生成更多的redo。
有100位用户的订单输入系统与有1 000位用户的系统相比,生成的redo可能只是后者的十分之一。
至于重做日志多大才合适,这没有“正确”的答案,不过你肯定希望重做日志足够大,能适应你的工作负载。
在设置在线重做日志的大小和数目时,还有一些问题需要考虑。
其中很多问题都超出了这本书的范围,不过在此把它们都列出来,以便你有一个大致的认识:q 高峰负载(peak workload):你可能希望系统不必等待对未完成的消息建立检查点,不要在高峰处理期间遭遇瓶颈。
你不能针对“平均”的小时吞吐量来确定重做日志的大小,而要针对高峰处理来确定。
如果每天生成24 GB的日志,但是其中10 GB的日志都是在9:00 am到11:00 am这一时段生成的,就要把重做日志的大小调整到足以放下那两小时高峰期间生成的日志。
如果只是针对每小时1 GB来确定日志大小可能是不够的。
q 大量用户修改相同的块:如果大量用户都要修改相同的块,你可能希望重做日志文件很大。
因为每个人都在修改同样的块,最好尽可能多地更新之后才将其写出到磁盘。
每个日志切换都会导致一个检查点,所以你可能不希望频繁地切换日志。
不过,这样一来又会影响恢复时间。
q 平均恢复时间:如果必须确保恢复尽可能快地完成,即便是大量用户要修改相同的块,也可能倾向于使用较小的重做日志文件。
如果只是处理一两个小的重做日志文件,而不是一个巨大的日志文件,则所需的恢复时间会比较短。
由于重做日志文件小,往往会过多地建立检查点,时间长了,整个系统会越来越慢(本不该如此),但是恢复所花的时间确实会更短。
要减少恢复时间,除了使用小的重做日志文件外,还可以使用其他的数据库参数。
3.7.2 归档重做日志Oracle数据库可以采用两种模式运行:ARCHIVELOG模式和NOARCHIVELOG模式。
这两种模式的区别只有一点,即Oracle重用重做日志文件时会发生什么情况。
“会保留redo的一个副本吗?还是Oracle 会将其重写,而永远失去原来的日志?”这是一个很重要的问题,下面就来回答。
除非你保留了这个文件,否则无法从备份将数据恢复到当前的时间点。
假设你每周的星期六做一次备份。
现在是星期五下午,已经生成了这一周的数百个重做日志,突然你的磁盘出问题了。
如果没有以ARCHIVELOG模式运行,那么现在的选择只有:q 删除与失败磁盘相关的表空间。
只要一个表空间有该磁盘上的文件,就要删除这个表空间(包括表空间的内容)。
如果影响到SYSTEM表空间(Oracle的数据字典),就不能用这个办法。
q 恢复上周六的数据,这一周的工作就白做了。
不论是哪种选择都不太好。
这两种做法都意味着你会丢失数据。
不过另一方面,如果之前以ARCHIVELOG 模式运行,那么只需再找一个磁盘就行了。
你要根据上周六的备份将受影响的文件恢复到这个磁盘上。
最后,再对这些文件应用归档重做日志和(最终的)在线重做日志,实际上是以一种快进的方式重放整个星期的事务。
这样一来,什么也不会丢失。
数据会恢复到发生失败的那个时间点。
人们经常告诉我,他们的生产系统不需要ARCHIVELOG模式。
在我的印象里,这样说的人没有一个说对的。
我认为,如果系统不以ARCHIVELOG模式运行,那它根本就不能算是生产系统。
未以ARCHIVELOG模式运行的数据库总有一天会丢失数据。
这是在所难免的;如果你的数据库不以ARCHIVELOG模式运行,你肯定会丢失数据。
“我们在使用RAID-5,所以可以得到完全的保护”,这是一种很常见的托辞。
我曾见过,由于制造方面的错误,RAID中的所有磁盘都“冻结”了,而且几乎是同时发生的。