線上修改redo.log檔案的大小
1.檢視當前日誌組成員:
SQL> select member from v$logfile;
MEMBER
------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG
2.檢視當前日誌組狀態:
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 INACTIVE
2 1 50 INACTIVE
3 1 50 CURRENT
現有三個日誌組,每個組內有一個成員,每個成員的大小為50MB,現在想把此三個日誌組的成員大小都改為100MB ,步驟如下:
1、建立2個新的日誌組
SQL> alter database add logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO04.LOG') size 100M;
SQL> alter database add logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO05.LOG') size 100M;
2、切換當前日誌到新的日誌組
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 ACTIVE
2 1 50 ACTIVE
3 1 50 ACTIVE
4 1 100 CURRENT
5 1 100 ACTIVE
3、刪除舊的日誌組
SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;
4、作業系統下刪除原日誌組1、2、3中的檔案REDO01.LOG、REDO02.LOG、REDO03.LOG。
5、重建日誌組1、2、3
SQL> alter database add logfile group 1 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG') size 100M;
SQL> alter database add logfile group 2 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG') size 100M;
SQL> alter database add logfile group 3 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG') size 100M;
6、切換日誌組
SQL> alter system switch logfile;
SQL> alter system switch logfile;
7、刪除中間過渡用的日誌組4、5
SQL> alter database drop logfile group 4;
SQL> alter database drop logfile group 5;
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 UNUSED
2 UNUSED
3 UNUSED
4 INACTIVE
5 CURRENT
8、到作業系統下刪除原日誌組4、5中的檔案
9、備份當前的最新的控制檔案
SQL> conn / as sysdba
SQL> alter database backup controlfile to trace resetlogs;
(注意:如果為安全考慮每個group可以多加幾個檔案)
==============================
跟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肯定會記錄到 trace和alert檔案.
關於redo log的設定
一般至少兩組redo log 檔案,
每組中的redo log檔案最好在不同的磁碟上,防止一起損壞。
每組中的redo log檔案必須大小一致,它們是同時修改的。
不同組的redo log檔案大小不一定一致。
每組的redo log檔案數目必須一致。
修改redo log的位置
- 看看當前的redo log檔案是不是正在使用,如果在使用如下命令
ALTER SYSTEM SWITCH LOGFILE;
- 把該檔案copy到你想要放到位置
- ALTER DATABASE RENAME FILE ’filename’ TO filename’
增加redo log 檔案
ALTER DATABASE [database]
ADD LOGFILE MEMBER
[ ’filename’ [REUSE]
[, ’filename’ [REUSE]]...
TO {GROUP integer
|(’filename’[, ’filename’]...)
}
刪除redo log 檔案
如果redo log 檔案是invalid狀態,可以刪除之
ALTER DATABASE [database] DROP LOGFILE MEMBER ’filename’[, ’filename’]...
相關資料字典
察看
v$log
v$logfile
v$log_history
SQL> select member from v$logfile;
MEMBER
------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG
C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG
2.檢視當前日誌組狀態:
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 INACTIVE
2 1 50 INACTIVE
3 1 50 CURRENT
現有三個日誌組,每個組內有一個成員,每個成員的大小為50MB,現在想把此三個日誌組的成員大小都改為100MB ,步驟如下:
1、建立2個新的日誌組
SQL> alter database add logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO04.LOG') size 100M;
SQL> alter database add logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO05.LOG') size 100M;
2、切換當前日誌到新的日誌組
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> select group#,members,bytes/1024/1024,status from v$log;
GROUP# MEMBERS BYTES/1024/1024 STATUS
---------- ---------- --------------- ----------------
1 1 50 ACTIVE
2 1 50 ACTIVE
3 1 50 ACTIVE
4 1 100 CURRENT
5 1 100 ACTIVE
3、刪除舊的日誌組
SQL> alter database drop logfile group 1;
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;
4、作業系統下刪除原日誌組1、2、3中的檔案REDO01.LOG、REDO02.LOG、REDO03.LOG。
5、重建日誌組1、2、3
SQL> alter database add logfile group 1 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO01.LOG') size 100M;
SQL> alter database add logfile group 2 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO02.LOG') size 100M;
SQL> alter database add logfile group 3 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\FYDB\REDO03.LOG') size 100M;
6、切換日誌組
SQL> alter system switch logfile;
SQL> alter system switch logfile;
7、刪除中間過渡用的日誌組4、5
SQL> alter database drop logfile group 4;
SQL> alter database drop logfile group 5;
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
1 UNUSED
2 UNUSED
3 UNUSED
4 INACTIVE
5 CURRENT
8、到作業系統下刪除原日誌組4、5中的檔案
9、備份當前的最新的控制檔案
SQL> conn / as sysdba
SQL> alter database backup controlfile to trace resetlogs;
(注意:如果為安全考慮每個group可以多加幾個檔案)
==============================
跟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肯定會記錄到 trace和alert檔案.
關於redo log的設定
一般至少兩組redo log 檔案,
每組中的redo log檔案最好在不同的磁碟上,防止一起損壞。
每組中的redo log檔案必須大小一致,它們是同時修改的。
不同組的redo log檔案大小不一定一致。
每組的redo log檔案數目必須一致。
修改redo log的位置
- 看看當前的redo log檔案是不是正在使用,如果在使用如下命令
ALTER SYSTEM SWITCH LOGFILE;
- 把該檔案copy到你想要放到位置
- ALTER DATABASE RENAME FILE ’filename’ TO filename’
增加redo log 檔案
ALTER DATABASE [database]
ADD LOGFILE MEMBER
[ ’filename’ [REUSE]
[, ’filename’ [REUSE]]...
TO {GROUP integer
|(’filename’[, ’filename’]...)
}
刪除redo log 檔案
如果redo log 檔案是invalid狀態,可以刪除之
ALTER DATABASE [database] DROP LOGFILE MEMBER ’filename’[, ’filename’]...
相關資料字典
察看
v$log
v$logfile
v$log_history
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3090/viewspace-688852/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線上修改重做日誌檔案的大小
- 修改上傳檔案大小
- OGG 修改trail 檔案的大小AI
- 修改Oracle重做日誌檔案的大小Oracle
- 如何更改線上重做日誌檔案的大小
- 修改PHP上傳檔案大小限制的方法PHP
- 增加日誌檔案,修改當前日誌檔案大小
- 【PHP】修改PHP配置檔案php.ini 上傳檔案的大小限制PHP
- 修改online redo日誌檔案大小
- kingsql 如何修改Oralce日誌檔案大小SQL
- MySQL 修改InnoDB重做日誌檔案的數量或大小MySql
- php.ini修改php上傳檔案大小限制PHP
- 如何設定redo log的OMF 及如何修改log檔案大小
- linux查詢某段時間修改的檔案的總大小Linux
- 如何線上編輯修改PDF檔案中的背景顏色
- 線上修改REDO LOG的大小及增加新的日誌組
- Postgres使用pg_resetwal命令修改wal日誌檔案大小的方法
- 日誌檔案的大小
- 為什麼我的歸檔檔案比我設定的線上日誌的大小要小?
- 得到檔案大小
- mysql 5.7 新特性中線上in-place 修改欄位的大小MySql
- git提交時支援檔名大小寫的修改Git
- oracle 線上修改online redo logfiles size 大小Oracle
- windows下檔案系統支援的檔案大小Windows
- resize 資料檔案的大小
- 控制檔案大小的疑問
- 限制檔案大小及顯示檔案大小(正規表示式
- archive log檔案大小與redo log檔案大小關係探究Hive
- java 獲取資料夾大小、檔案大小、檔案個數Java
- linux+nginx+mysql+php系統修改檔案上傳大小限制LinuxNginxMySqlPHP
- 修改Oracle的配置檔案Oracle
- 生成固定大小的隨機檔案隨機
- 獲取上傳檔案的大小
- JavaScript限制上傳檔案的大小JavaScript
- 減小Delphi的Exe檔案大小
- ORACLE物理檔案大小的限制(轉)Oracle
- Oracle資料檔案大小的限制Oracle
- 修改/dev/shm的大小dev