Redo log 的分享與記憶

OraFige發表於2011-12-06

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章