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

存储结构之重做日志文件

存储结构之重做日志文件重做日志文件,可分在线重做日志文件和归档重做日志文件。它是个数据库的事务日志。目的在于失败时恢复已提交的事务。你在oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线...SyntaxHighlighter.all();

存储结构之重做日志文件
 
重做日志文件,可分在线重做日志文件和归档重做日志文件。它是个数据库的事务日志。目的在于失败时恢复已提交的事务。你在oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线重做日志文件。  www.2cto.com  
 
  当主机掉电时,你可借助在线重做日志文件,将系统恢复到掉电前的时刻;当磁盘损坏时,你可借助归档重做日志文件恢复到适当的时点;当你误删了某些重要的信息并且提交时,你同样可借助他们去帮你恢复到误删前的那个时刻。
 
  “在重用重做日志之前,失败时应该不需要的重做日志文件的内容”,如果oracle不能肯定这一点,就会暂时挂起数据库,建立检查点,将缓冲区缓存内的redo保护的数据安全地写入磁盘。oracle并非把database_buffer_cache内修改的数据写入磁盘,相反地,它是把redo log buffer里的redo entry flush到在线重做日志文件中。只要修改的块,被缓存而未被写入磁盘,数据库失败时,就需要重做日志文件的内容,然则,却是不可以重用重做日志文件。比如,日志却的时候,填满日志1却换到日志2时,DBWn会建立检查点,把日志1所保护的所有脏块写入磁盘,在这之前,oracle不能重用这个日志文件。否则,在alert日志会报,检查点未完成。出现这个消息时,数据库会挂起,DBWn正忙于完成它建立的检查点。
 
  每个oracle数据库,分散风险的做法是设置3路磁盘通道。每路在设置上该注意什么呢?主要是从高峰负载,平均恢复时间,大量用户修改相同块这几个因素入手。
  1)日志组的数量?
  太少会有等待事件
  2)日志成员大小?
  太小了,会频繁却换,产生检查点,性能低;太大了,不安全,数据都在一个地方存放
  3)成员对称否?
  成员应该设置成同样大小,镜像的数量也应该一致。否则,算法会有剧烈抖动。(注意了,这里是应该,而不是一定哦)
  确定有多少个日志组?
  SQL> select group# from v$log;
 
    GROUP#
----------
         1
         2
         3
  有多少个镜像?
  SQL> select member from v$logfile;
 
  MEMBER  www.2cto.com  
  --------------------------------------------------------------------------------
  /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_3_7xzskcdd_.log
  /u01/app/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_3_7xzskh9o_.log
  /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_2_7xzsk47l_.log
  /u01/app/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_2_7xzsk7of_.log
  /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_7xzsjx1g_.log
  /u01/app/oracle/flash_recovery_area/ORCL/onlinelog/o1_mf_1_7xzsk0ph_.log
 
  增加一个日志组?若使用OMF,则添加一个组后,oracle会自动为你添加成员。
  alter database add logfile group 4(‘filename’,‘filename’)  size 100;
  如:
  SQL> alter database add logfile group 4 size 100m;
 
  Database altered.
 
  SQL> select group# from v$log;
 
      GROUP#
  ----------
         1
         2
         3
         4
 
  删除时把add换成drop即可。current的重做日志文件不能删除,若要删除,可以使用alter system switch logfile。删除后,操作系统的文件是仍然存在的(OMF除外),把操作系统上的文件一块删除才会比较干净的除去。
    www.2cto.com  
  如何添加一个成员?
  alter database add logfile member 
  'filename' to group 1,
  'filename' to group 2,
  'filename' to group 3;
 
  刚加的组的状态是unused。
  SQL> select group#,bytes/1024/1024 m from v$log;
 
      GROUP#          M
   ---------- ----------
         1         50
         2         50
         3         50
 
  SQL> alter database add logfile group 5 size 50m;
 
  Database altered.
 
  SQL> select group#,status from v$log;
 
      GROUP# STATUS
  ---------- ----------------
         1   INACTIVE
         2   CURRENT
         3   INACTIVE
         5   UNUSED
 
  日志成员有几个状态在此稍微说明一下:
  active:被RBA指针覆盖的,但不在这里面写。RBA挪开,则是inactive。
  current:被RBA指针覆盖的,但正在写。
  inactive:表示实例恢复已不再需要这组重做日志文件了。
  unused:表示oracle从没用过该重做日志文件组。
  日志却会有active。
  www.2cto.com  
  如果组内只有一个成员,则组与成员的概念没有区别。组就是成员,成员就是组。总之,组间却换,组内镜像。
  server process负责把redo entry写到redo log buffer中,而LGWR则负责将redo entry flush到在线重做日志文件。那么LGWR什么时候会写呢?
  1)每3秒
  2)1/3满
  3)1M redo entry
  4)commit
  5)DBWn写之前写
 
 
作者 linwaterbin

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • 本文介绍了如何使用 PostgreSQL 的 `UPDATE ... FROM` 语法,通过映射表实现对多行记录进行高效的批量更新。这种方法不仅适用于单列更新,还支持多列的同时更新。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
author-avatar
我爱技术交流
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有