oracle重做日志文件和归档日志.ppt

上传人:牧羊曲112 文档编号:5442207 上传时间:2023-07-07 格式:PPT 页数:81 大小:1.18MB
返回 下载 相关 举报
oracle重做日志文件和归档日志.ppt_第1页
第1页 / 共81页
oracle重做日志文件和归档日志.ppt_第2页
第2页 / 共81页
oracle重做日志文件和归档日志.ppt_第3页
第3页 / 共81页
oracle重做日志文件和归档日志.ppt_第4页
第4页 / 共81页
oracle重做日志文件和归档日志.ppt_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《oracle重做日志文件和归档日志.ppt》由会员分享,可在线阅读,更多相关《oracle重做日志文件和归档日志.ppt(81页珍藏版)》请在三一办公上搜索。

1、第7周 重做日志和归档日志,杨进,【学习目标】,介绍Oracle 数据库重做日志文件和归档日志文件的结构、工作过程以及如何管理重做日志和归档日志。重做日志文件是用于数据库故障恢复的文件,也是Oracle 数据库3 类重要的物理文件之一。,【本章要点】,重做日志的结构和用途 日志切换和检查点的概念 复用重做日志文件 获取重做日志文件的信息,【本章大纲】,【本章大纲】,一、重做日志文件,在数据库的使用过程中,可能会出现断电、死机等意外情况,在出现意外时如何保证数据的有效性、一致性和完整性?Oracle 作为大型关系数据库管理系统,必须要通过合理的机制确保在任何情况下都不会出现数据丢失,通过合理的配

2、置重做日志可以实现并完成这项任务。,利用重做日志文件,在数据库发生故障时,可以重新处理事务。每个事务在处理的同时也会写入重做日志缓冲区,然后由LGWR 进程写入到重做日志文件,这样,如果发生介质故障,重做日志文件将提供恢复机制。(但也存在例外情况,例如,在启用NOLOGGING 子句的情况下对象中的直接加载插入)。重做日志文件用来在例程失败等情况下恢复尚未写入数据文件的但是已提交的数据。重做日志文件只用于恢复。,在Oracle 当中,事务对数据库所做的修改将以重做记录的形式保存重做日志缓存中。在提交事务时,由LGWR 进程将缓存中该事务相关的重做记录全部写入重做日志文件,这时,事务认为已经成功

3、提交。这种机制称为“快速提交”。,【本章大纲】,1.1 重做日志结构重做日志文件具有以下特征:记录对数据所做的所有更改 提供恢复机制 可以划分成组 至少需要两个组那么什么是日志组呢(Redo Log Group)?重做日志组是一组相同的重做日志文件副本,LGWR 后台进程向组内所有联机重做日志文件并发写入相同信息,为保证数据库的正常操作,Oracle 服务器最少需要两个联机重做日志文件组。,属于同一日志组的每个日志文件被称为日志成员,并且同一个日志组的不同日志成员互为镜像,即组内的每个成员都有相同的日志序列号和同样的大小。Oracle 服务器每次写入日志组时,都分配一个日志序列号以唯一地标识每

4、个重做日志文件。当前日志序列号存储在控制文件和所有数据文件的头部。在Oracle 数据库中,多个重做日志组是循环使用的,如图71 所示。,假定数据库包含三个日志组,在图7-1 中,初始阶段后台进程LGWR 将事务变化写入到日志组一的两个成员中;在日志组一写满之后,LGWR 进程切换到日志组二,并将事务变化写入到日志组二的两个成员中;在日志组二写满之后,LGWR 进程切换到日志组三,并将事务变化写入到日志组三;在日志组三写满之后,LGWR 又切换回日志组一,并将事务变化写入到日志组一,覆盖原有记录。经过以上说明,大家可以知道,所有事务变化都可以通过日志组予以保留(归档方式下)。这样,即使将来出现

5、实例失败(Instance Failure)或介质失败(Media Failure)时,DBA 将会使用这些已经保留下来的事务变化进行实例恢复或介质恢复,最终可以确保Oracle 不会出现数据丢失。,以下查询显示了当前数据库的重做日志文件的位置和名称。当前数据库共有3 个日志文件REDO01.LOG、REDO02.LOG 和REDO03.LOG,位于D:ORACLEORADATADB01目录下。SQL SELECT member FROM v$logfile;MEMBER-D:ORACLEORADATADB01REDO03.LOGD:ORACLEORADATADB01REDO02.LOGD:O

6、RACLEORADATADB01REDO01.LOG,【本章大纲】,1.2 日志序列号和日志切换 Oracle 服务器将对数据库所做的所有更改按顺序记录到重做日志缓冲区中。LGWR 进程把重做条目从重做日志缓冲区写入联机重做日志组的其中一个组,这个组叫做当前重做日志组。LGWR 进程将在以下情况下写入:当提交事务处理时(Commit)当重做日志缓冲区被写满三分之一时 当重做日志缓冲区内的已更改记录超过1MB 时 每隔3 秒 在DBWn 将数据库缓冲区高速缓存中修改的块写入数据文件之前重做日志文件是以循环方式使用的。每个重做日志文件组用一个递增日志序列号来标识,每次重新使用日志时就会覆盖原来的序

7、列号。,LGWR 按顺序向联机重做日志组写入重做信息。一旦当前联机重做日志组被写满,LGWR 就开始写入下一个组。这称为日志切换(Log Switch)。当最后一个可用联机重做日志文件已满时,LGWR 将返回第一个联机重做日志文件组并开始重新写入。假定数据库有三个重做日志组,第一个日志组为当前日志组,当前日志序列号为56,LGWR 进程将事务变化写入第一个重做日志组中,当第一个日志组写满后,LGWR 进程自动切换到第二个日志组,在进行日志切换时,Oracle 服务器完成如下任务:日志序列号自动加1,即当前日志序列号变为57,并且将日志序列号连同SCN 信息写入到控制文件的日志历史记录中。,促使

8、CKPT 进程发出检查点,从而使得后台进程CKPT 将检查点时刻的SCN 信息写入到控制文件和数据文件头部,并促使后台进程DBWR 将数据高速缓存中的脏缓冲区写入到数据文件中。当数据库处于ARCHIVELOG 模式时,日志切换还会促使ARCH 进程开始归档。当日志组写满之后Oracle Server 会自动进行日志切换;另外,在一些特定情况DBA 还可以强制系统进行日志切换,这要求用户必须具有ALTER SYSTEM 系统权限。,例如:如果要删除正在使用的日志组,那么首先强制日志切换;当日志组很大,需要很长时间才能写满时,可以强制执行日志切换,以避免重做日志损坏所带来的损失。强制日志切换的命令

9、如下:ALTER SYSTEM SWITCH LOGFILE。【实例7-1】切换日志,显示日志状态。1)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)显示日志状态SQL SELECT GROUP#,SEQUENCE#,MEMBERS,STATUS FROM V$LOG;GROUP#SEQUENCE#MEMBERS STATUS-1 306 1 INACTIVE2 307 1 ACTIVE3 308 1 CURRENT,3)切换日志SQL ALTER SYSTEM SWITCH LOGFILE;系统已更改。4)重新显示日志状态SQL SELECT GROUP#,SEQUE

10、NCE#,MEMBERS,STATUS FROM V$LOG;GROUP#SEQUENCE#MEMBERS STATUS-1 309 1 CURRENT2 307 1 INACTIVE3 308 1 ACTIVE 由实例可见,数据库工作一共有3 个重做日志组,组号是1、2 和3,每个组有一个成员。日志切换前,当前日志组为3(状态为CURRENT),对应的最大日志序号为308。日志切换后,最小日志序号的日志组1 被覆盖,日志序号增一变为309,并成为新的当前日志组。日志组就是这样被循环的使用。,【本章大纲】,1.3 检查点 在介绍检查点之前,首先回顾一下实例恢复。假定当前日志序列号为56,先前检

11、查点时的SCN 值为3456231,并且该SCN 值被记载到了控制文件和数据文件头部,某用户执行了事务变化操作,并提交了事务,SCN 值变化为3456239,并且此时突然出现了系统断电,那么首先应考虑控制文件、数据文件和重做日志的SCN 值分别为多少。因为只有在发出检查点才会将SCN 信息写入到控制文件和数据文件头部,所以控制文件和数据文件的SCN 值都是3456231,而当执行了提交操作后,重做记录连同SCN 会写入到重做日志文件,所以此时重做日志文件的当前SCN 值为3456239。,因为数据文件、控制文件的SCN 一致,而与重做日志所记录的SCN 不一致,所以在重新启动Oracle Se

12、rver 时后台进程SMON 会进行实例恢复,此时SMON 程将自动重新执行从3456231 至3456239 之间的所有事务变化,然后才会打开数据库。重做日志为何被称为“Redo Log File”?因为在进行实例恢复或介质恢复时要重新执行日志文件记录的所有事务变化。,生成检查点检查点(Checkpoint)是一个数据库事件,它用于同步所有数据文件、控制文件以及重做日志文件。当后台进程CKPT 发出检查点时,会执行以下两个任务:1)后台进程CKPT 会修改控制文件和数据文件头部,并将当前SCN 信息写入到这两种文件中,从而使得数据文件、控制文件和重做日志处于一致状态,这就是为何在执行了SHU

13、TDOWN NORMAL、SHUTDOWN TRANSACTIONAL 和SHUTDOWN IMMEDIATE 之后不需要实例恢复(执行这些操作会发出检查点),而执行了SHUTDOWN ABORT(不强制发出检查点)之后需要进行实例恢复的原因。当启动Oracle 服务器时,后台进程SMON 总是会检查控制文件、数据文件以及重做日志的一致性:,如果数据文件、控制文件、重做日志的当前SCN 值完全一致,则系统会直接打开所有数据文件和重做日志。如果控制文件和数据文件的当前SCN 值完全一致匹配,并小于重做日志的当前SCN,则需要进行实例恢复(例如执行SUHTDOWN ABORT 后)。如果控制文件和

14、数据文件的当前SCN 值不匹配,则表示数据文件或控制文件存在损坏,此时就需要进行介质恢复,以恢复损坏的物理文件。2)当后台进程CKPT 工作时,同时会促使后台进程DBWn 开始工作,并且将数据库高速缓存中的脏缓冲区(Dirty Buffer)写入到数据文件中。,检查点可发生在下面情况中:每次日志切换时 当使用NORMAL、TRANSACTIONAL、IMMEDIATE 选项关闭例程时 通过设置初始化参数FAST_START_MTTR_TARGET 强制执行时 数据库管理员通过手动方式请求时 ALTER TABLESPACE OFFLINE NORMAL|READ ONLY|BEGIN BACK

15、UP 命令导致对特定数据文件执行检查点操作时。,强制检查点 假定数据库包含两个日志组,每个日志组尺寸为100MB,并且初始阶段只有在日志切换时才会发出检查点。假定当前日志组为日志组一,当该日志组写满之后,系统会自动切换到日志组二,并发出检查点将SCN 信息写入到数据文件和控制文件。如果在日志组二记载了90MB 事务变化之后,系统出现断电。可以设想一下,数据库还能使用吗?答案是肯定的,将来在重新启动Oracle Server 时后台进程SMON 会自动执行实例恢复,最终将数据文件、控制文件、重做日志转变为一致状态。当进行实例恢复时,SMON 首先重新执行事务,然后打开数据库,最后回退未提交的事务

16、。因为SMON 需要重新执行日志组二所记载的90MB事务变化,从而会使得实例恢复需要很长时间。为了降低实例恢复时间,必须要增加检查点次数。,日志切换和检查点操作是在数据库运行中的某些特定点自动执行的,但DBA 可以强制执行日志切换或检查点操作。强制执行检查点有两种方式:1)设置FAST_START_MTTR_TARGET可以在初始化参数文件中设置此参数,代表实例恢复所用时间,单位为秒。例如:设置FAST_START_MTTR_TARGET=300,代表如果数据库需要实例恢复,那么恢复的时间不超过300 秒。系统会根据300 秒时间自动计算可以保留的脏块的数目,如果超过则自动发出检查点。2)AL

17、TER SYSTEM CHECKPOINT 命令必要时,DBA 也可以手动发出检查点命令,命令如下:ALTER SYSTEM CHECKPOINT.,【本章大纲】,1.4 日志管理策略要确定一个数据库例程的联机重做日志文件的合适数量,必须测试不同的配置。在规划重做日志的配置时,需考虑如下几点:1)重做日志组的个数在某些情况下,数据库例程可能只需要两个组。在其它情况下,数据库例程可能需要更多的组以保证各个组始终可供LGWR 进程使用。例如,如果跟踪文件或警告文件中出现如下消息:Checkpoint not complete 或Redo Log Group not archived,表明LGWR

18、经常不得不因为检查点操作尚未完成或者日志组尚未归档而等待,这时就需要添加日志组。2)重做日志文件的复用重做日志对于数据库正常运作和维护都是至关重要,因此建议创建复用重做日志文件来提高重做日志的可靠性。,即一个重做日志组中包含多个互为镜像的重做日志成员。复用重做日志文件后,LGWR 进程将同步写入位于一个重做日志组中的多个成员日志文件,即多个日志成员是互为镜像的关系,因此,即使由于某个单独的日志文件破坏或丢失,数据库运行和恢复也不受任何影响。尽管Oracle 服务器允许多元备份的组可以包含不同数量的成员,但应该尽量建立对称配置。不对称配置应只是非常情况(如磁盘故障)的临时结果。在这种情况下,必须

19、先创建新的不同大小的联机重做日志文件组,然后删除旧组。3)重做日志文件的位置 复用联机重做日志文件时,最好将组内的成员放置在不同磁盘上。这样即使一个日志成员所在磁盘发生物理损坏,而其它的日志成员至少还有一个是可用,那么数据库实例不会被中断动行。将归档日志文件和联机重做日志文件分放在不同磁盘上,以减少ARCn 和LGWR后台进程之间的争用。,数据文件和联机重做日志文件应当放置在不同的磁盘上以减少LGWR 和DBWn 的争用,并降低发生介质故障时同时丢失数据文件和联机重做日志文件的风险。4)重做日志文件的大小 联机重做日志文件最小为50 KB,最大文件大小视操作系统而定。假定日志组尺寸很小(500

20、KB),那么可能会导致日志切换非常频繁,间接地增加检查点次数,从而降低系统性能;假定日志组尺寸很大(100MB),那么出现意外情况时可能会导致实例恢复的时间很长。Oracle推荐日志切换时间应该在2030min 之间,至于到底应该将日志组尺寸设置为多少,还应该根据实际情况进行反复测试。另外,如果数据库处于ARCHIVELOG 模式,还应该考虑存放归档日志的存储介质(磁带或磁盘),以使得存储介质剩余空间最小。,例如,假定磁带空间为100MB,并且该磁带只能存放两个归档日志,那么设置重做日志的尺寸略低于50MB。下面的情况可能影响联机重做日志文件的配置:日志切换和检查点的数量 重做记录的量和个数

21、存储介质的空间量;例如,启用归档时归档文件所在磁盘上的空间量,【本章大纲】,二、日志操作,通常,DBA 会在创建数据库时按照计划创建所需重做日志组和各个组成员日志文件。然而在有些情况下,会需要通过手工方式为数据库添加新重做日志组和成员。比如,如果当前某个重做日志组由于某种原因无法使用,DBA 需要创建一个新的重做日志组来代替它进行工作。在另外些情况下,DBA 可能会需要改变现有重做日志文件的名称和位置,或者删除重做日志组或成员。在本节中将介绍上述重做日志文件的基本操作。,【本章大纲】,2.1 增加日志组要创建一个新的联机重做日志文件组,请使用下面的SQL 命令:ALTER DATABASE d

22、atabaseADD LOGFILE GROUP integer filespec,GROUP integer filespec.可以通过filespec 来指定成员名称和位置。可以选择每个重做日志文件组的GROUP 参数值。如果省略了该参数,Oracle 服务器自动生成其值。,【实例7-2】为数据库增加一个重做日志组,组中包含两个成员,大小为1M,并查询动态性视图确认增加。1)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)创建新日志组SQL ALTER DATABASE DB01 ADD LOGFILE(d:oracleoradatadb01log4a.rdo,d:o

23、racleoradatadb01log4b.rdo)SIZE 1M;数据库已更改。,3)查询动态性能性图SQL SELECT*FROM V$LOGFILE;GROUP#STATUS TYPE MEMBER-3 STALE ONLINE D:ORACLEORADATADB01REDO03.LOG2 STALE ONLINE D:ORACLEORADATADB01REDO02.LOG1 ONLINE D:ORACLEORADATADB01REDO01.LOG4 ONLINE D:ORACLEORADATADB01LOG4A.RDO4 ONLINE D:ORACLEORADATADB01LOG4B.

24、RDO,【实例7-3】为Oracle Server 再增加一个重做日志组,组中包含两个成员,大小为2M.1)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)创建新日志组SQL ALTER DATABASE DB01 ADD LOGFILE GROUP 5(d:oracleoradatadb01log5a.rdo,d:oracleoradatadb01log5b.rdo)SIZE 2M;数据库已更改。在使用GROUP 子句时,需要注意以下两点:重做日志组的组号不能大于MAXLOGFILES 参数所指定的值。在对重做日志组进行编号时,中间不能有间断。比如,不能将重做日志组依次

25、编号:10,15,20,25,这样会浪费控制文件中文档段的存储空间。,【本章大纲】,2.2 增加日志成员有时,DBA 可能需要为已有重做日志组添新的成员日志文件,比如,由于某个磁盘损坏,导致每个重做日志组都丢失了一个成员日志文件,这时,需通过手工方式为每重做日志组增加一个新日志成员文件。可以使用下面的ALTER DATABASE ADD LOGFILE MEMBER命令向现有的重做日志文件组添加新成员,命令格式如下:ALTER DATABASE databaseADD LOGFILE MEMBER filename REUSE,filename REUSE.TO GROUPinteger|(f

26、ilename,filename.).最好使用日志文件成员的绝对路径名;否则将在数据库服务器缺省目录下创建该文件。如果该文件已经存在,其大小必须与指定值相同,并且必须指定REUSE 选项。可以通过指定一个或多个组内成员或者指定组号来识别目标组。,【实例7-4】为Oracle Server 的第四个重做日志组增加一个成员。1)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)添加新的成员SQL ALTER DATABASE DB01 ADD LOGFILE MEMBERd:oracleoradatadb01log4c.rdo to GROUP 4;数据库已更改。注意:在创建成

27、员日志文件时,不能使用SIZE 参数来指定重做日志文件的大小,因为新建的重做日志文件必须与组中已有的其它成员具有相同大小。,【本章大纲】,2.3 日志文件重定位 在重做日志文件创建以后,有时还需改变它们名称和位置,假设原来数据库系统中只有一个硬盘,因此重做日志的所有成员都保存在同一个硬盘中,后来又增加一个硬盘,这时可将重做日志组中的一部分成员移动到新的硬盘中。有两种方法可实现重定位或重命名重做日志文件:1)ALTER DATABASE RENAME FILE 命令。2)添加新成员并删除旧成员。使用ALTER DATABASE RENAME FILE 命令的步骤如下:1)关闭数据库2)使用操作系

28、统命令COPY 重做日志文件到新位置3)启动数据库到mount 状态4)执行ALTER DATABASE RENAME FILE 命令5)打开数据库,【实例7-5】移动日志文件,观察日志文件丢失时出现的现象,并重新定位。1)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)关闭数据库SQL SHUTDOWN;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。3)移动日志文件使用操作系统命令移动3 号日志组的第成员到E:盘根目录下。,4)启动失败,停止在MOUNT 状态,并使显示出丢失的日志文件SQL CONNECT/AS SYSDBA已连接。SQL STARTUP

29、ORACLE 例程已经启动。Total System Global Area 64035360 bytesFixed Size 453152 bytesVariable Size 29360128 bytesDatabase Buffers 33554432 bytesRedo Buffers 667648 bytes数据库装载完毕。ORA-00313:无法打开日志组3(线程1)的成员ORA-00312:联机日志3 线程1:D:ORACLEORADATADB01REDO03.LOG,5)执行RENAME 命令,重新定位日志文件SQL ALTER DATABASE RENAME FILE D:O

30、RACLEORADATADB01REDO03.LOGTO E:REDO03.LOG;数据库已更改。6)打开数据库SQL ALTER DATABASE OPEN;数据库已更改。第二种方法,可以在学习删除日志文件后读者自行练习。,【本章大纲】,2.4 删除重做日志 如果日志组尺寸设置不合理,需要改日志组尺寸,但是ORACLE 数据库中,已存在的日志组的尺寸是不能改变的,这时可通过增加新日志组,然后删除原有的日志组来实现改变日志组尺寸的目的。如果某个重做日志组不再需要使用,也可以将整个重做日志组删除。删除一个重做日志组时,其中成员日志文件将都被删除。在删除重做日志组之前,应首先考虑如下几个问题:无论

31、组中有多少成员,一个数据库至少需要使用两个重做日志组,因此,如果在数据库中只包含两个日志组时,不能进行删除日志组的操作。只能删除处于INACTIVE 状态的重做日志组,如果要删除CURRENT 状态的重做日志组,必须执行一次手工日志切换,将它切换到INACTIVE 状态。如果数据库处于归档模式下,在删除重做日志组之前,必须确定它已经被归档。因此,在删除重做日志组之前,必须通过查询V$LOG 动态性能视图来获取各个重做日志组的状态及是否已归档,比如:,SQL SELECT GROUP#,ARCHIVED,STATUS FROM V$LOG;GROUP#ARCHIVED STATUS-1 YES

32、ACTIVE2 NO CURRENT3 YES INACTIVE4 YES INACTIVE从上述结果看,1、3、4 号日志组已归档,但是1 号日志组处于活动状态,因此当前能删除的是3,4 号的两个重做日志组。可以使用下面的ALTER DATABASE DROP LOGFILE 命令删除整个联机重做日志文件组:ALTER DATABASE databaseDROP LOGFILE GROUP integer|(filename,filename.),GROUP integer|(filename,filename.).,【实例7-6】删除日志组41)以管理员身份登录SQL CONNECT/AS

33、 SYSDBA已连接。2)删除日志组SQL ALTER DATABASE DROP LOGFILE GROUP 4;数据库已更改。若要增大或者减小联机重做日志文件组的大小,请添加新的联机重做日志文件组(具有新的大小),然后删除原来日志组。注意:删除日志组时并不删除操作系统文件。,除了需要删除重做日志组外,更为常见的情况是仅需要删除重做日志组中的某个成员日志文件。比如,由于存放日志文件的硬盘发生物理损坏导致日志成员发生损坏或丢失时,该日志成员将无法访问,此时需要将它从重做日志组中删除。如果要删除一个或多个特定的联机重做日志文件成员,请使用下面的ALTER DATABASE DROP LOGFIL

34、E MEMBER 命令:ALTER DATABASE databaseDROP LOGFILE MEMBER filename,filename.删除日志组成员有如下限制:如果要删除的日志组只包含一个成员或者只包含一个有效的成员时,那么不能删除该成员。如果该组是当前组,那么必须先强制执行日志文件切换,然后才能删除该成员。如果数据库正运行在ARCHIVELOG 模式下并且未将该成员所属日志文件组归档,那么无法删除该成员。,【实例7-7】删除日志组5 中的第2 个日志组成员1)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)删除日志组SQL ALTER DATABASE DR

35、OP LOGFILE MEMBER d:oracleoradatadb01log5a.rdo;数据库已更改。注意:以上操作删除联机重做日志文件成员时,不会删除对应的操作系统文件。,【本章大纲】,2.5 清除重做日志在数据库运行过程中,联机重做日志文件可能会因为某些原因而损坏。如果出现这种情况,数据库最终会由于无法将损坏的重做日志文件归档而停止。或者当一个联机重做日志文件组中的所有成员都已经被破坏时,数据库会因为无法切换到损坏的日志组而停止。如果发生种情况,可以在不关闭数据库情况下,手工清空损坏的重做日志文件的内容,以避免出现停止运行的情况。清空重做日志文件就是将重做日志文件中的内容全部初始化,

36、相当于删除该重做日志文件,然后各方面重建它。即使数据库只拥有两个重做日志组,或者要清空的重做日志组是当前日志组,都可以成功执行清空操作。,【实例7-8】清空日志组51)以管理员身份登录SQL CONNECT/AS SYSDBA已连接。2)清空日志组SQL ALTER DATABASE CLEAR LOGFILE GROUP 5;数据库已更改。执行上述命令后,Oracle 会自动将日志组5 中的重做日志文件全部初始化。但是,如果日志组5 尚未归档,则必须指定UNARCHIVED 子句。命令如下:ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 5;指定U

37、NARCHIVED 子句后,Oracle 将避免对5 号日志组进行归档。在数据库打开时不能清除当前日志组,为了清除当前日志组,可以对日志进行切换或将数据库置成MOUNT 状态。,【本章大纲】,2.7 查询重做日志信息可以查询以下动态性能视图获取组和成员的信息。1)查询重做日志组的基本信息下面的查询返回控制文件中关于联机重做日志文件的信息:SQL SELECT group#,sequence#,bytes,members,status FROM v$log;GROUP#SEQUENCE#BYTES MEMBERS STATUS-1 230 104857600 1 CURRENT2 228 104

38、857600 1 INACTIVE3 229 104857600 1 INACTIVE5 0 2097152 1 UNUSED各字段含义如下:group#:表示日志组号;sequence#:表示日志序列号;bytes:表示日志组的大小;,members:表示日志组中包含的成员数;status:表示日志组状态。日志组的状态可以是以下几种:UNUSED:表示从未对联机重做日志文件组进行写入。这是刚添加的联机重做日志文件的状态。CURRENT:表示当前的联机重做日志文件组。这说明该联机重做日志文件组是活动的。ACTIVE:表示联机重做日志文件组是活动的,但是并非当前联机重做日志文件组。数据库的崩溃恢

39、复需要该组。它可用于块恢复。它可能已归档,也可能未归档。CLEARING:表示在执行ALTER DATABASE CLEAR LOGFILE 命令后正在将该日志重建为一个空日志。日志清除后,其状态更改为UNUSED CLEARING_CURRENT:表示正在清除当前日志文件中的已关闭线程。如果切换时发生某些故障,如写入新日志标头时发生了输入/输出(I/O)错误,则日志可能处于此状态。INACTIVE:表示例程恢复不再需要联机重做文件日志组。它可能已归档,也可能未归档。,2查询重做日志成员的基本信息若要获取组内所有成员的名称,请查询V$LOGFILE 视图。SQL SELECT group#,s

40、tatus,type,member FROM V$LOGFILE;GROUP#STATUS TYPE MEMBER-3 STALE ONLINE D:ORACLEORADATADB01REDO03.LOG2 STALE ONLINE D:ORACLEORADATADB01REDO02.LOG1 ONLINE D:ORACLEORADATADB01REDO01.LOG5 ONLINE E:LOG5B.RDO各字段含义如下:group#:表示日志组号;status:表示日志文件的状态;type:表示日志文件的类型,可以是online(联机状态),也可以是offline(脱机状态);member:表

41、示日志文件的名称。,日志文件状态可以为下列之一:INVALID:表明该文件不可访问 STALE:表示文件内容不完全 DELETED:表明该文件已不再使用 空白表明文件正在使用中,【本章大纲】,三 重做日志文件归档Oracle 数据库可运行在两种模式下:ARCHIVELOG 模式和NOARCHIVELOG 模式。NOARCHIVELOG 模式只能用于保护实例失败,而不能用于保护介质失败。为了避免数据库物理文件损坏所引起的数据丢失,数据库可运行在ARCHIVELOG 模式。后者就是所谓的归档模式。,【本章大纲】,3.1 归档日志的作用Oracle 能够将已经写满的重做日志文件在被覆盖之前保存到指定

42、位置上,被保存的重做日志文件的集合称为“归档重做日志”,这个操作过程称为“归档”,根据是否进行归档,数据库可以运行在归档模式(ARCHIVELOG)和非归档模式(NOARCHIVELOG)下,归档操作可由ARCH 后台进程自动完成,也可由DBA 手工完成。,在NOARCHIVELOG 模式下,每次联机重做日志文件已满并发生日志切换时,都要覆盖原来联机重做日志文件。直到对重做日志文件组的检查点操作完成后,LGWR 才覆盖该重做日志文件组。如果数据库配置为在ARCHIVELOG 模式运行下,那么必须将已满的联机重做日志文件的不活动(INACTIVE)组归档。因为对数据库所做的所有更改都记录在联机重

43、做日志文件内,数据库管理员可以使用数据库物理备份和归档的联机重做日志文件恢复数据库,而不会丢失任何已提交数据。数据库创建时,缺省为NOARCHIVELOG 模式。使用归档日志有两个好处:恢复:数据库物理备份连同联机重做日志文件和归档重做日志文件可共同确保恢复所有已提交的事务处理。备份:可在数据库打开时执行备份。,【本章大纲】,3.2 设置日志归档如果不知道数据库的日志操作模式,首先应检查。使用以下语句:SQL ARCHIVE LOG LIST;数据库日志模式非存档模式自动存档禁用存档终点D:oracleora92RDBMS最早的概要日志序列233当前日志序列235通过以上信息得知:数据库处于非

44、归档模式下,自动归档功能被禁用,最早的重做日志序列号是233,当前日志序列号是235。归档日志存放在D:oracleora92RDBMS 下,233号日志的归档文件第一个备份的名称默认为ARC00233.001。,【实例7-11】查看数据库日志操作模式,然后将数据库改为归档模式。1)关闭数据库,然后装载数据库因为只有在数据库处于MOUNT 状态下才能修改日志操作模式,所以必须首先关闭数据库,然后装载数据库。但是大家需要注意,关闭数据库时不能使用SHUTDOWN ABORT命令。SQL CONN/AS SYSDBA;已连接。SQL SHUTDOWN;数据库已经关闭。已经卸载数据库。ORACLE

45、例程已经关闭。SQL STARTUP MOUNT;ORACLE 例程已经启动。Total System Global Area 34675092 bytesFixed Size 453012 bytesVariable Size 29360128 bytesDatabase Buffers 4194304 bytesRedo Buffers 667648 bytes数据库装载完毕。,2)修改归档模式SQL ALTER DATABASE ARCHIVELOG;数据库已更改。3)打开数据库SQL ALTER DATABASE OPEN;数据库已更改。注意:修改了日志操作模式之后,必须重新备份数据库

46、。如果关闭归档模式,命令为:ALTER DATABASE NOARCHIVELOG;,当数据库处于ARCHIVELOG 模式时,在进行了日志切换后必须要归档重做日志。因为日志组只有在归档后才能被覆盖,所以如果不归档该日志组,那么当下次切换到该日志组时将会导致LGWR 处于等待状态。为了避免出现这种情况,必须要及时归档重做日志,归档重做日志有手工归档和自动归档两种方法。1自动归档DBA 可以选择在实例启动前或实例启动后启用自动归档功能。如果要在实例启动前启用自动归档功能,需要将初始化参数文件中参数LOG_ARCHIVE_START 的值改为TRUE。步骤如下:1)以管理员身份登录数据库CONN/

47、AS SYSDBA2)修改服务器端初始化参数ALTER SYSTEM SET LOG_ARCHIVE_START=TRUE SCOPE=SPFILE;3)重新启动数据库,使参数生效SHUTDOWN;STARTUP;,如果实例启动时没启用自动归档,不必关闭实例再对初始化参数行修改,可以直接使用如下语句启用自动归档功能:ALTER SYSTEM ARCHIVE LOG START;执行上述语句后,无须重新启动实例,即可立即启用自动归档功能,但是实例在下一次启动时,自动归档功能仍然FALSE。2手工归档一旦禁用自动归档功能,DBA 必须手动执行一条命令,对所有或特定的联机重做日志文件进行手动归档。在

48、归档模式下,如果禁用自动归档模式,但是又没有及时进行手工归档,LGWR 进程无法写入下一个已经写满的可用重做日志组,这时数据库将被挂起,直到完成对重做日志组的归档为止。可以使用下面语句对日志文件进行归档:ALTER SYSTEM ARCHIVE LOG ALL;,【本章大纲】,四、小结重做日志文件是用于数据库实例恢复的重要文件,重做日志文件以日志组的形式循环使用,当一个日志组写满之后会自动切换到下一个日志组。每个数据库实例最少需要两个日志组,每个日志组由多个互为镜像的成员组成。LGWR 是负责把缓冲区的日志信息写入日志文件的后台进程。可以通过增加、删除或移动日志文件来维护日志的工作。通过将日志

49、成员分布到不同的物理磁盘,可以减少单点磁盘故障引起的日志文件丢失。通过设置归档模式,可以将重做日志文件归档。使用数据库物理备份和归档的重做日志文件恢复数据库,可以保证不丢失任何已提交数据。,六、练习,1在为已有的数据库增加重做日志文件时,数据库应处于哪种状态?AOPEN BSHUTDOWNCNOMOUNT DMOUNT2要改变数据库的归档模式,数据库应处于哪种状态下?AOPEN BSHUTDOWNCNOMOUNT DMOUNT,六、练习,3如果某个数据库LGWR 进程经常会因为检查点未完成而进入等待状态,DBA 应当采取什么措施来解决这个问题?A增加新的重做日志组B为所有的重做日志组增加新的成

50、员C手工清除当前的重做日志组内容D将数据库置为NOARCHIVELOG 模式。,六、练习,4如果某个数据库拥有两个重做日志组,但是第2 重做日志组突然损坏(其中所有的成员日志都不可用),这时DBA 应采取下列哪项操作?A删除原有的第2 重做日志组,然后再使用ALTER DATABASE ADD LOGFILEGROUP2 语句建立新的第2 重做日志组。B删除所有重做日志组,然后再使用ALTER DATABASE ADD LOGFILE GROUP语句建立新的重做日志组C使用ALTER DATABASE CLEAR LOGFILE GROUP 2 语句对第2 组重做日志组进行初始化.D使用ALT

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号