ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Redo log 的分享与记忆

Redo log 的分享与记忆

原创 Linux操作系统 作者:OraFige 时间:2011-12-06 21:31:02 0 删除 编辑

1.       查看redo log file的相关情况,

a)         select * from v$logfile;

b)        select * from v$log;

2.       redo log group 里面添加redo 文件是操作

ALTER DATABASE [database]
ADD LOGFILE MEMBER
[ ’filename’ [REUSE]
[, ’filename’ [REUSE]]...
TO {GROUP integer
|(’filename’[, ’filename’]...)
}

3.       添加一组新的redo log file.

alter database add logfile group 1 '/opt/oracle/product/9i/oradata/oracle9i/redo01.log' size 200M;

4.       删除

alter database drop logfile group 1;

 

5.       修改redo log 的大小

转载网友博客中实例供参考:

要将日志文件组123100M修改到200M方法如下

$ ls

control01.ctl  drsys01.dbf    redo01.log     temp01.dbf     xdb01.dbf

control02.ctl  example01.dbf  redo02.log     tools01.dbf

control03.ctl  indx01.dbf     redo03.log     undotbs01.dbf

cwmlite01.dbf  odm01.dbf      system01.dbf   users01.dbf

$ ls -l redo01.log

-rw-r-----   1 oracle   dba       104858112 Jan 04 16:34 redo01.log

$ du -m redo01.log

100.00  redo01.log

登陆SQLPLUS

--------------------

$ sqlplus /nolog

SQL*Plus: Release 9.2.0.7.0 - Production on Fri Jan 4 16:48:40 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn / as sysdba;

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area 1377274120 bytes

Fixed Size                   743688 bytes

Variable Size             738197504 bytes

Database Buffers          637534208 bytes

Redo Buffers                 798720 bytes

Database mounted.

Database opened.

SQL> select group# from v$log;

    GROUP#

----------

         1

         2

         3

ITPUB个人空间j‑?d0{,z Wer

创建日志文件组4,5

---------------------------

SQL> alter database add logfile group 4 '/opt/oracle/product/9i/oradata/oracle9i/redo04.log' size 200M;

Database altered.

SQL> alter database add logfile group 5 '/opt/oracle/product/9i/oradata/oracle9i/redo05.log' size 200M;

Database altered.


3l3?O-hX+] [3_.e/w26464953

将日志文件组切换到新建立的4,5日志文件组上

--------------------------------------------------------------

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> select group#,status from v$log;

    GROUP# STATUS

---------- ----------------

         1 INACTIVE

         2 INACTIVE

         3 INACTIVE

         4 INACTIVE

         5 CURRENT


KA L+a%Y z!ve26464953

删除已有的1,2,3日志文件组

---------------------------------------

SQL> alter database drop logfile group 1;

Database altered.

SQL> alter database drop logfile group 2;

Database altered.

SQL> alter database drop logfile group 3;

Database altered.


*w$U.S:w3p c A
W26464953

增加新的日志文件1,2,3,并设定容量为200M

------------------------------------------------------------

SQL> alter database add logfile group 1 '/opt/oracle/product/9i/oradata/oracle9i/redo01.log' size 200M;

Database altered.

SQL> alter database add logfile group 2 '/opt/oracle/product/9i/oradata/oracle9i/redo02.log' size 200M;

Database altered.

SQL> alter database add logfile group 3 '/opt/oracle/product/9i/oradata/oracle9i/redo03.log' size 200M;

Database altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> select group#,status from v$log;

    GROUP# STATUS

---------- ----------------

         1 INACTIVE

         2 CURRENT

         3 UNUSED

         4 INACTIVE

         5 INACTIVE

删除刚刚增加的日志文件组4,5

-----------------------------------------

SQL> alter database drop logfile group 4;

Database altered.

SQL> alter database drop logfile group 5;

Database altered.

注意:每一步删除drop操作,都需要手工删除os中的实体文件。

           另外注意备份控制文件。

6.       redo log 相关的知识:

删除redo log 文件
如果redo log 文件是invalid状态,可以删除之

ALTER DATABASE [database] DROP LOGFILE MEMBER ’filename’[, ’filename’]...

 

相关数据字典
察看

v$log
v$logfile
v$log_histor

 

修改redo log的位置
-
看看当前的redo log文件是不是正在使用,如果在使用如下命令

ALTER SYSTEM SWITCH LOGFILE;
-
把该文件copy到你想要放到位置

- ALTER DATABASE RENAME FILE ’filename’ TO filename’

 

关于redo log的设置
一般至少两组redo log 文件,

每组中的redo log文件最好在不同的磁盘上,防止一起损坏。

每组中的redo log文件必须大小一致,它们是同时修改的。

不同组的redo log文件大小不一定一致。

每组的redo log文件数目必须一致。

 

redo logfile有关的其它数据库参数    
1
log_buffer
   log_buffer
ORACLE SGA的一部分, 所有DML命令修改的数据块先放在log_buffer, 如果满了或者到了check_point时候通过lgwr后台进程写

  
redo logfile里去。它不能设得太大,这样在意外发生时会丢失很多改变过的数据。它最好不要大于512K或者128K*CPU个数。

我们可以用下面的SQL语句检测log_buffer使用情况
:       
   SQL> select rbar.name,rbar.value,re.name,re.value,(rbar.value*100)/re.value||'%' "radio"
from v$sysstat rbar,v$sysstat re
where rbar.name='redo buffer allocation retries'
and re.name='redo entries';
      
这个比率小于1%才好,否则增加log_buffer的大小

2
log_checkpoint_interval
   Oracle8.1
版本后log_checkpoint_interval指的是两次checkpoint之间操作系统数据块的个数。

   checkpoint
Oracle把内存里修改过的数据块用DBWR写到物理文件,用LGWR写到日志和控制文件。

  
一般UNIX操作系统的数据块为 512 bytes

  
从性能优化来说
log_checkpoint_interval = redo logfile size bytes / 512 bytes
3
log_checkpoint_timeout
   Oracle8.1
版本后log_checkpoint_timeout指的是两次checkpoint之间时间秒数。

   Oracle
建议不用这个参数来控制,因为事务(transaction)大小不是按时间等量分布的。

log_checkpoint_timeout = 0
log_checkpoint_timeout = 900

Redo Log Buffer
redo log buffer
可以循环使用,存放数据库改变牵涉的信息,其内部放的是redo entry

redo entry
存放的是INSERT, UPDATE, DELETE, CREATE, ALTER, DROP 等操作对数据库的改变信息,这些信息在recovery的时候是很重要。这些
redo entry
oracle server进程从用户内存放到redo buffer


LGWR(Log writer)
LGWR(Log writer)
oracle启动时候必须启动的进程,它负责把redo log buffer中的redo entry写到redo log文件中。

在如下情况下写文件:

- redo log buffer
三分之一满了

-
达到某时间点

-
DBWR w把修改的数据块写到数据文件之前写
redo log file
-
事务commit的时候

-
在数据库做归档redo log 文件的时候


Redo Log file
redo log
就是存放redo log 信息的文件了,至少有两个redo log 组,oracle循环使用之。当然推荐有更多的redo log 组。既然是循环使用redo log

必然会有一个log switch的过程。


log switch
发生在:

- log file
已经写满了

-
使用了ALTER SYSTEM SWITCH LOGFILE 命令


log switch 的时候自动会做checkpoint


只要redo log组里面有一个redo log file可以用,就能进行log switch。当然如果redo log file坏了,LGWR肯定会记录到 tracealert文件.

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26464953/viewspace-712834/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-11-21

  • 博文量
    28
  • 访问量
    61372