ORACLE中的日志

Redo Log
      除了与表空间联系紧密的数据文件外, Oracle还有另一个与其相关的称作Online Redo Log的操作系统文件。Redo Log也称作事务日志( Transaction Log),Orcle在这些特殊的操作系统文件中记录针对数据库进行的修改操作或事务。对数据库所做的所有修改工作都在内存中进行, Oracle这样的处理主要是出于性能方面的考虑,因为在磁盘I/O 中操作比内存中进行相应操作要慢的多。Redo Log中总是保留所有事务的一个拷贝,这样Oracle可节省将内存中修改数据操作写回原数据文件所需的时间,保存有修改情况的最终拷贝将写回到物理的数据文件中。因为所有的处理都记录在Redo Log中,因此,数据库系统可以使用这些事务记录进行恢复操作。对每一个Oracle数据库都要求至少具有两个Redo Log.

Redo Log是怎样工作的
     Redo Log以循环方式工作。比如说用户的数据库有两个Redo Log: logA和logB,当事务创建、删除以及修改数据库中的数据时,它们首先被记录在log A中,当logA填满后即产生日志交换(Log Switch),所有新的事务记录到logB中;当logB填满后,再产生一次日志交换,所有新的事务又存放到logA中.
    由于I / O的操作是最慢的操作之一,因此需要将联机重做日志存放在单独的磁盘驱动器中。
   
Redo Log的一个应用
   可以通过监控Redo Log来更高效的获得系统的变化量数据。Attunity的CDC(Change Data Capture)产品就基于此。

是否归档
    Oracle数据库可以运行在ARCHIVELOG (归档日志)或NOARCHIVELOG (非归档日志)模式下。这两种模式直接对应Redo Log。
(1) ARCHIVELOG模式
      当数据库运行在ARCHIVELOG模式时,所有的Redo log都将保存。这意味着对数据库进行的所有事务都留有一个备份,尽管Redo Log以循环方式工作,但在一个Redo Log被覆盖前均将为其建立一个拷贝。在这种方式下,如果在拷贝完成之前,数据库要求交换Redo log,则在Redo Log拷贝工作完成之前, Oracle将停止一切新的操作,在旧的事务记录完成之前
Oracle不对其进行覆盖。有了所有事务的拷贝,数据库就可以从所有类型的失败中恢复,包括用户错误或磁盘崩溃。
       这是一种最安全的数据库工作方式。提示数据库运行ARCHIVELOG模式将在其覆盖前保存重做日志拷贝,并允许扩展恢复功能,包括point in time(指定时刻的恢复)。
(2) NOARCHIVELOG模式
        在NOARCHIVELOG 模式(系统缺省模式)下,系统不保留旧的Redo Log。因为不是所有的事务记录都能保留,因此用户只能从诸如电源断电这样的事件中得到恢复(这种恢复也是有限的,因为如果在一个记录正好被填满并进行交换时断电,以前的信息将丢失)。提示数据库运行在NOARCHIVELOG模式将不能在其覆盖前保存重做日志拷贝。
在NOARCHIVELOG模式具有有限的恢复,主要被设计为在例行故障时得到保护。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle日志管理攻略    ORACLE数据库日志文件$ORACLE_BASE/admin/orasid/bdump/alert_orasid.log记录了重作日志的转换,数据库启动和关闭,数据库结构的改变,回退段的修改,死锁,内部错误等信息.   数据库管理员需要检查这个文件有无ORA-错误并定期地对这个日志文件进行存档整理。   在UNIX下可以用grep命令把alert_orasid.log里出现的错误保存到另一个文件。然后去找原因。   $grep ORA- alert_orasid.log > error.log   大家都知道,文件越大,其打开和读的开销越大。如果日志文件太大了(超过5M), 需要对它截断处理。   直接删除它,让ORACLE重新生成不是好的方法。因为ORACLE是通过一个指向文件的指针进行操作。   在数据库运行时删除了这个文件, ORACLE仍然用原来的文件指针进行操作,有可能一个不存在的文件导致硬盘空间占用。   我们要采用以下的方法:   $tail -100 $ORACLE_BASE/admin/orasid/bdump/alert_orasid.log > /tmp/oracle_temp.log   $cp /tmp/oracle_temp.log $ORACLE_BASE/admin/orasid/bdump/alert_orasid.log   $rm /tmp/oracle_temp.log   对日志文件进行截断处理。   listener的日志文件$ORACLE_HOME/network/log/listener.log记录了通过listener处理的网络请求信息,它包含客户端请求的时间,连接方式(专用或共享),连接程序,网络协议,主机名,网络端口号等信息。   我们也需要周期地截断它,方法是先停止listener记日志工作:   $lsnrctl set log_status off   然后进行文件处理( 把原来的日志保存到备份文件夹, 使原来的listener.log置空 )   $cp $ORACLE_HOME/network/log/listener.log $ORACLE_BACKUP/network/log/listener_1.log   $cp /dev/null $ORACLE_HOME/network/log/listener.log   文件操作完成后,打开listener记日志工作:   $lsnrctl set log_status on   如果你会简单的shell程序,可以把上面的步骤固化成一个脚本,定一个时间表, 让操作系统去做。   下面是我的一个按天分割保存listener.log的文件auto_listener.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值