热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

我的Oracle9i学习日志(11)--重做日志文件及练习

一、重做日志文件特征:记录对数据所做的所有更改;提供恢复机制;可以划分成组;至少需要两个组(每个组至少一个成员)。二、结构650)this.onclick

一、重做日志文件特征

  记录对数据所做的所有更改;提供恢复机制;可以划分成组;至少需要两个组(每个组至少一个成员)。二、结构 

联机重做日志文件组:一组相同的联机重做日志文件副本称作联机重做日志组。• LGWR 后台进程向组内所有联机重做日志文件并发写入相同信息。为保证数据库的正常操作,Oracle 服务器最少需要两个联机重做日志文件组。联机重做日志文件成员:组内的每个联机重做日志文件称为成员。组内的每个成员都有相同的日志序列号和同样的大小。Oracle 服务器每次写入日志组时,都分配一个日志序列号以唯一地识别每个重做日志文件。当前日志序列号存储在控制文件和所有数据文件的头部内。联机重做日志文件组和成员的初始集是在数据库创建时创建的。下面的参数限制了联机重做日志文件的数量:CREATE DATABASE 命令中的MAXLOGFILES 参数指定联机重做日志文件组的绝对最大数量。MAXLOGFILES 的最大值和缺省值取决于您的操作系统。CREATE DATABASE 命令所使用的MAXLOGMEMBERS 参数决定每个组的成员的最大数量。MAXLOGMEMBERS 的最大值和缺省值取决于您的操作系统。三、工作原理Oracle 服务器将对数据库所做的所有更改按顺序记录到重做日志缓冲区中。LGWR 进程把重做条目从重做日志缓冲区写入联机重做日志组的其中一个组,这个组叫做当前(CURRENT)联机重做日志组。LGWR 进程将在以下情况下写入:当提交事务处理时每隔3秒钟当重做日志缓冲区被写满三分之一时当重做日志缓冲区内的已更改记录超过1 MB DBWn 将数据库缓冲区高速缓存中修改的块写入数据文件之前重做日志文件是以循环方式使用的。每个重做日志文件组用一个日志序列号来标识,每次重新使用日志时就会覆盖原来的序列号。日志切换:LGWR 按顺序向联机重做日志文件写入重做信息。一旦当前联机重做日志文件组被写满,LGWR 就开始写入下一个组。这称为日志切换。当最后一个可用联机重做日志文件已满时,LGWR 将返回第一个联机重做日志文件组并开始重新写入,第一个重做日志文件的序号也将被覆盖,每发生一次日志切换序号加1。检查点:在检查点期间:大量的脏数据从数据缓冲区(对应正在经历检查点事件的日志)被DBWn 写入到数据文件中。后台进程CKPT 更新控制文件以反映该进程已成功完成。如果检查点是由日志切换引起的,CKPT 还会更新数据文件的头部信息。可以针对数据库中的所有数据文件执行或者只针对特定数据文件执行检查点操作。例如,检查点可发生在下面情况中:每次日志切换时当已通过正常、事务处理或者立即选项关闭例程时通过设置初始化参数FAST_START_MTTR_TARGET (参数值为数字,代表多少秒执行一次)强制执行时数据库管理员通过手动方式请求时ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] 命令导致对特定数据文件执行检查点操作时如果初始化参数LOG_CHECKPOINTS_TO_ALERT 设置为TRUE,则有关每个检查点的信息都记录在alert_SID.log 文件内。该参数缺省值为FALSE,表示不记录检查点。如果发生switch log,在对LGWR写log file之前要检查这个log file里原来的条目对应的数据是否写入数据文件(即checkpoint是否完成),并且检查原来的条目是否归档,如果没有就要等待完成。所以如果LGWR 跟踪文件或警报文件中的消息表明LGWR 经常不得不因为检查点操作尚未完成或者组尚未归档而等待,您就需要添加组。 四、强制执行日志切换和检查点SQL> select group#, sequence#, members, status from v$log;     GROUP# SEQUENCE#   MEMBERS STATUS---------- ---------- ---------- ----------------          1         8              1 INACTIVE          2         9              1 CURRENT          3         7              1 INACTIVE SQL> alter system switch logfile; System altered. SQL> select group#, sequence#, members, status from v$log;     GROUP# SEQUENCE#   MEMBERS STATUS---------- ---------- ---------- ----------------          1         8              1 INACTIVE          2         9              1 ACTIVE          3        10              1 CURRENT SQL> alter system checkpoint; System altered. SQL> select group#, sequence#, members, status from v$log;     GROUP# SEQUENCE#   MEMBERS STATUS---------- ---------- ---------- ----------------          1         8              1 INACTIVE          2         9              1 INACTIVE          3        10              1 CURRENT 注意:在做以下这些操作时建议先备份数据库,完成操作后立刻备份control file。请不要将log file置于不对称状态(即每组的成员的数量和大小不相等)。五、添加联机重做日志文件组SQL> alter database add logfile group 4 2 ('/u01/oradata/lty/redo04a.rd0',                   3 '/u01/oradata/lty/redo04b.rd0') 4 size 50m;SQL> select group#, sequence#, status from v$log;     GROUP# SEQUENCE# STATUS---------- ---------- ----------------          1         8 INACTIVE          2         9 INACTIVE          3        10 CURRENT          4         0 UNUSEDSQL> alter system switch logfile; System altered. SQL> select group#, sequence#, status from v$log;     GROUP# SEQUENCE# STATUS---------- ---------- ----------------          1        8 INACTIVE          2         9 INACTIVE          3        10 ACTIVE          4        11 CURRENT六、添加联机重做日志文件成员SQL> alter database add logfile member 2 '/u01/oradata/lty/redo01a.log' to group 1, 3 '/u01/oradata/lty/redo02a.log' to group 2, 4 '/u01/oradata/lty/redo03a.log' to group 3;SQL> select group#,status,member from v$logfile;     GROUP# STATUS MEMBER---------- ------- ------------------------------          3        /u01/oradata/lty/redo03.log          2        /u01/oradata/lty/redo02.log          1 STALE   /u01/oradata/lty/redo01.log          4        /u01/oradata/lty/redo04a.rd0          4        /u01/oradata/lty/redo04b.rd0          1 INVALID /u01/oradata/lty/redo01a.log          2 INVALID /u01/oradata/lty/redo02a.log          3 INVALID /u01/oradata/lty/redo03a.log注意:如果指定文件已经存在,则大小必须与指定大小一致,并且须指定REUSE选项。如:SQL> alter database add logfile member      2 '/u01/oradata/lty/redo02a.log' reuse 3 to group 2;七、删除联机重做日志文件组SQL> alter database drop logfile group 4; Database altered. SQL> select group#, sequence#, status from v$log;     GROUP# SEQUENCE# STATUS---------- ---------- ----------------          1        12 CURRENT          2         9 INACTIVE          3        10 INACTIVE SQL> select group#,status,member from v$logfile; SQL> select group#,status,member from v$logfile;     GROUP# STATUS MEMBER---------- ------- ------------------------------          3        /u01/oradata/lty/redo03.log          2        /u01/oradata/lty/redo02.log          1        /u01/oradata/lty/redo01.log          1        /u01/oradata/lty/redo01a.log          2 INVALID /u01/oradata/lty/redo02a.log          3 INVALID /u01/oradata/lty/redo03a.log 6 rows selected.$ls –l /u01/oradata/lty-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:52 redo01a.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:52 redo01.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:25 redo02a.log-rw-r----- 1 oracle oinstall 104858112 Mar 16 20:08 redo02.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 03:26 redo03a.log-rw-r----- 1 oracle oinstall 104858112 Mar 17 02:47 redo03.log-rw-r----- 1 oracle oinstall 52429312 Mar 17 03:48 redo04a.rd0-rw-r----- 1 oracle oinstall 52429312 Mar 17 03:48 redo04b.rd0注意:至少保留两组重做日志文件;处于current或active状态时的日志文件组不能从数据库被移除;从数据库移除以后的online redo log file继续留在磁盘上,需操作系统将其删除。八、删除联机重做日志文件成员SQL> alter database drop logfile member 2 '/u01/oradata/lty/redo02a.log'; 3 ‘… …’                         #可同时删除多个。 Database altered. SQL> select group#,status,member from v$logfile;     GROUP# STATUS MEMBER---------- ------- ------------------------------          3        /u01/oradata/lty/redo03.log          2        /u01/oradata/lty/redo02.log          1        /u01/oradata/lty/redo01.log          1        /u01/oradata/lty/redo01a.log          3 INVALID /u01/oradata/lty/redo03a.log注意:不能删除组中的最后一个成员;处于current或active状态时的日志文件组不能删除其中的成员;在archive模式下,未归档的log file不呢个删除其组成员;删除联机重做日志文件成员时,如果没有使用OMF 功能,则不会删除操作系统文件。九、重定位或重命名联机重做日志文件将log file group3的成员/u01/oradata/lty/redo03a.log改为/u01/oradata/lty/log/redo03a.rdo。方法1:步骤1. Shut down the database.SQL > SHUTDOWN2. Copy or move the online redo log files to the new location.3. Start up the database and mount, but do not open it.SQL > STARTUP MOUNT4. Rename the online redo log members using the ALTER DATABASE RENAMEFILE command.SQL> alter database rename file      2 '/u01/oradata/lty/redo03a.log'      3 to      4 '/u01/oradata/lty/log/redo03a.rdo';5. Open the database for normal operation.SQL> ALTER DATABASE OPEN;方法2:新增一个组,然后删除一个组。步骤1:SQL> alter database drop logfile group 3;    步骤2:删除group3的文件。    步骤3:SQL> alter database add logfile group 3 2 ('/u01/oradata/lty/redo03.log', 3 '/u01/oradata/lty/log/redo03a.rdo') 4 size 100m;十、清理online redo log filesOnline redo log files可能会在数据库运行过程中损坏,而在log file只有两组或损坏的文件处于current状态,不可能用drop命令删除。在这种情况下,可以用下面的命令从新初始化log files:ALTER DATABASE CLEAR LOGFILE GROUP 2;另外,加UNARCHIVED关键字可以避免归档损坏的log files:ALTER DATABASE CLEAR UNARCHIVED LOGFILE GROUP 2;注意:从新初始化的log file中的条目将丢失,也就意味着这些丢失的条目所对应的数据库的改变将不可恢复,日志文件将记录从哪里将不可恢复的信息。十一、获取组和成员的信息V$LOG 视图:下面的查询返回控制文件中关于联机重做日志文件的信息:SQL> SELECT group#, sequence#, bytes, members, status2 FROM v$log;GROUP# SEQUENCE# BYTES MEMBERS STATUS--------- ---------- -------- --------- ---------1 688 1048576 1 CURRENT2 689 1048576 1 INACTIVE2 rows selected.下面的项是STATUS 列的常见值:UNUSED:表示从未对联机重做日志文件组进行写入。这是刚添加的联机重做日志文件的状态。CURRENT:表示当前的联机重做日志文件组。这说明该联机重做日志文件组是活动的。ACTIVE:表示联机重做日志文件组是活动的,但是并非当前联机重做日志文件组。崩溃恢复需要该状态。它可用于块恢复。它可能已归档,也可能未归档。CLEARING:表示在执行ALTER DATABASE CLEAR LOGFILE 命令后正在将该日志重建为一个空日志。日志清除后,其状态更改为UNUSEDCLEARING_CURRENT:表示正在清除当前日志文件中的已关闭线程。如果切换时发生某些故障,如写入新日志标头时发生了输入/输出(I/O) 错误,则日志可能处于此状态。INACTIVE:表示例程恢复不再需要联机重做文件日志组。它可能已归档,也可能未归档。V$LOGFILE 视图:若要获取组内所有成员的名称,请查询V$LOGFILE 视图。SQL> SELECT member FROM V$LOGFILE;MEMBER-------------------------------------/u01/home/db03/ORADATA/u03/log02a.rdo/u01/home/db03/ORADATA/u03/log01a.rdoSTATUS 列的值可以为下列之一:INVALID:表明该文件不可访问STALE:表示文件内容不完全DELETED:表明该文件已不再使用空白表明文件正在使用中十一、归档的重做日志文件缺省情况下,数据库是在NOARCHIVELOG 模式下创建的。归档联机重做日志文件有两种方法:手动、自动(建议采用的方法)。LOG_ARCHIVE_START 初始化参数表明例程启动时,使用手动还是自动归档。TRUETRUE 表示归档是自动的。ARCn 将在每次日志切换时开始将已满的日志组归档。FALSEFALSE 是缺省值,表示DBA 将手动归档已满的重做日志文件。每次归档联机重做日志文件时,DBA 必须手动执行一条命令。可以对所有或特定的联机重做日志文件进行手动归档。成功归档后: 将在控制文件中加入一个条目, 记录:归档日志名、日志序列号以及高和低系统更改号(SCN)在以下操作完成前,不能再使用已满的重做日志文件:执行检查点操作ARCn 将文件归档Archive redo log files可以进行多元备份,由DBA 维护。有关归档日志的信息可从V$INSTANCE 获取。SQL> SELECT archiver2 FROM v$instance;ARCHIVE---------STOPPED 所遇到的问题描述:SQL> select * from v$logfile;     GROUP# STATUS TYPE    MEMBER---------- ------- ------- ------------------------------          3        ONLINE /u01/oradata/lty/redo03.log          2        ONLINE /u01/oradata/lty/redo02.log          1        ONLINE /u01/oradata/lty/redo01.log          1        ONLINE /u01/oradata/lty/redo01a.log          3 INVALID ONLINE /u01/oradata/lty/redo03a.logLog file group 3有一个成员文件不能用,在执行SQL> alter system switch logfile;将第三组切换到current后这个文件状态恢复正常。练习:1 a List the number and location of existing log files.Hint: Query the V$LOGFILE dynamic performance view.b Display the number of online redo log file groups and members your database has.Hint: Query the V$LOGFILE dynamic performance view.2 In which database mode is your database configured? Is archiving enabled?Hints- Query the V$DATABASE dynamic performance view.- Query the V$INSTANCE dynamic performance view.解析:SQL> select log_mode from v$database;LOG_MODE------------ARCHIVELOG3 Add an online redo log file member to each group in your database located on u04,using the following naming conventions:Add member to Group 1: log01b.rdoAdd member to Group 2: log02b.rdoVerify the result.Hints- Execute the ALTER DATABASE ADD LOGFILE MEMBER command to add anonline redo log file member to each group.- Query the V$LOGFILE dynamic performance view to verify the result.4 Add an online redo log file group with two members located on u03 and u04 usingthe following naming conventions and verify the result.Add Group 3: log03a.rdo and log03b.rdoHints- Execute the ALTER DATABASE ADD LOGFILE command to create a newgroup.- Query the V$LOGFILE dynamic performance view to display the name of thenew members of the new group.- Query the V$LOG dynamic performance view to display the number of onlineredo log file groups and members.5 Remove the online redo log file group created in step 4.Hints- Use ALTER SYSTEM SWITCH LOGFILE if the log files are active. The numberof log switches required will vary. Note: Query the database to see which log fileis active then decide how many times you need to perform the ALTER SYSTEMSWITCH LOGFILE command.- Execute the ALTER DATABASE DROP LOGFILE GROUP command to removethe log group.- Query the V$LOG dynamic performance view to verify the result.- Remove the operating system files for the group.6 Resize all online redo log files to 1024 KB.Hints- You cannot resize log files, therefore, add new logs and drop the old.- Execute the ALTER DATABASE ADD LOGFILE GROUP command to add twonew groups with the size 1024 KB.- Query the V$LOG dynamic performance view to check the active group.- Execute the ALTER SYSTEM SWITCH LOGFILE command to force log switchesand change the group stage to inactive. The number of log switches required willvary. Note: Query the database to see which log file is active, and then decidehow many times you should perform the ALTER SYSTEM SWITCH LOGFILEcommand.- Execute the ALTER DATABASE DROP LOGFILE command to remove theunused groups.- Query the V$LOG dynamic performance view to verify the result.

本文出自 “OPOPOP” 博客,请务必保留此出处http://luotaoyang.blog.51cto.com/545649/286150


推荐阅读
  • Windows环境下Oracle数据库迁移实践
    本文详细记录了一次在Windows操作系统下将Oracle数据库的控制文件、数据文件及在线日志文件迁移至外部存储的过程,旨在为后续的集群环境部署做好准备。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 本文详细介绍了MySQL InnoDB存储引擎中的Redo Log和Undo Log,探讨了它们的工作原理、存储方式及其在事务处理中的关键作用。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • Hibernate全自动全映射ORM框架,旨在消除sql,是一个持久层的ORM框架1)、基础概念DAO(DataAccessorOb ... [详细]
  • 在Android应用开发过程中,开发者经常遇到诸如CPU使用率过高、内存泄漏等问题。本文将介绍几种常用的命令及其应用场景,帮助开发者有效定位并解决问题。 ... [详细]
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 本文记录了在Windows 8.1系统环境下,使用IIS 8.5和Visual Studio 2013部署Orchard 1.7.2过程中遇到的问题及解决方案,包括503服务不可用错误和web.config配置错误。 ... [详细]
  • protobuf 使用心得:解析与编码陷阱
    本文记录了一次在广告系统中使用protobuf进行数据交换时遇到的问题及其解决过程。通过这次经历,我们将探讨protobuf的特性和编码机制,帮助开发者避免类似的陷阱。 ... [详细]
author-avatar
samiensfe_663
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有