当前位置:  数据库>oracle

存储结构之重做日志文件

    来源: 互联网  发布时间:2017-05-01

    本文导语:   重做日志文件,可分在线重做日志文件和归档重做日志文件。它是个数据库的事务日志。目的在于失败时恢复已提交的事务。你在Oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线重做日志文件。   当主机掉电...

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

  当主机掉电时,你可借助在线重做日志文件,将系统恢复到掉电前的时刻;当磁盘损坏时,你可借助归档重做日志文件恢复到适当的时点;当你误删了某些重要的信息并且提交时,你同样可借助他们去帮你恢复到误删前的那个时刻。

  “在重用重做日志之前,失败时应该不需要的重做日志文件的内容”,如果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
  --------------------------------------------------------------------------------
  /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除外),把操作系统上的文件一块删除才会比较干净的除去。
 
  如何添加一个成员?
  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。




  如果组内只有一个成员,则组与成员的概念没有区别。组就是成员,成员就是组。总之,组间却换,组内镜像。

  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写之前写





    
 
 

您可能感兴趣的文章:

  • 请一下java中组数的存储结构是怎么样的??
  • 怎样用JSP将从树状存储结构中读取的数据在JSP页面上生成一个树状目录
  • 浅析顺序结构存储的栈
  • MySQL两种表存储结构MyISAM和InnoDB的性能比较测试
  • 数据库存储, 改用TXT文件存储
  • 急求 unix 与linux在文件存储上 和数据存储上有哪些不同 希望各路英雄帮忙
  • 急!如何从一个shell文件中传递一个参数到sql文件中,不能用存储过程
  • 集群文件存储系统 Hados
  • 窗口可以存储成文件形式的吗
  • SUN虚拟机存储物理地址和网卡名称的文件是什么?
  • 开源文件云存储 Seafile
  • 网络文件存储 Nebula3
  • 关于“文件存储格式”的资料哪里找?
  • 如何用java对mysql存储文件
  • 请问如何在一个文件系统修改源码管理并使用多个卷(存储设备)
  • 如何限制单个用户的存储文件大小?
  • mssql server 存储过程里,bulk insert table from '路径+文件',路径固定,文件名不固定的实现方法
  • 如何将系统输出信息存储到本地文件
  • 可以在客户端存储文件吗?
  • 如何做linux下的数据存储文件如何做?
  • write函数往套接字文件描述符写入数据的时候数据存储在哪里 ?
  • 如何在access数据库中存储rtf文件。
  • 如何把一个Image对象存储为一张图片,不是一个文件的copy!
  • 求助:关于读取移动存储卡中文文件名
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java将类序列化并存储到mysql(使用hibernate)
  • 在SQL Server中使用SQL语句查询一个存储过程被其它所有的存储过程引用的存储过程名
  • 服务器存储快照和数据库快照详解
  • java调用sql server存储过程,如何取存储过程返回码(不是结果集)
  • Docker容器与企业存储的结合思考
  • MYSQL存储过程里代返回值的存储过程怎么写
  • mysql 存储过程实例和基本语法
  • 用C或C++编程,模拟可变分区存储管理且首次适应的算法实现存储器的分配与回收
  • 用proceduredataset孔件来调用存储过程时,要用到其属性procedure.我自己写好的存储过程如何放在里面?
  • 这句话什么意思:“分页存储管理是一个单一的线性地址空间,分段存储管理的作业地址空间是二维的。”?
  • 请问各位大侠怎样在java中调用存储过程和接受存储过程的返回参数
  • 请教:如何选购NAS网络存储器?做视频服务器的存储用。急!!!
  • 分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
  • 分页存储过程(用存储过程实现数据库的分页代码)
  • Mysql存储过程学习笔记--建立简单的存储过程
  • 数据库存储还是直接存储在硬盘上好?(来者有分)
  • sqlserver 批量删除存储过程和批量修改存储过程的语句
  • oracle分页存储过程 oracle存储过程实例
  • 急!50分!我现在想要在VECTOR中直接存储结果集???但不想使用"在VECTOR中存储一个
  • 分布式存储系统 dCache DSS
  • 关于操作系统中虚拟存储技术的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,