oracle 關於-日誌檔案
Oracle資料庫中的日誌常用的有:
Redo log files 聯機日誌或重做日誌
Archived log files 歸檔日誌
Alert log files 告警日誌
Trace files user_dump_dest 使用者資訊日誌(如跟蹤會話日誌)
Backupground_dump_dest 程式日誌
重做日誌檔案
重做日誌檔案會記錄對於資料庫的任何操作,如利用DML語句或者DDL語句對資料庫進行更改,或者資料庫
管理員對資料庫結構進行更改,都會在重做日誌中進行記錄。
當資料庫被以外的刪除或者修改,可以利用重做日誌檔案進行恢復,出現例程失敗或者介質失敗的情況下,也可以利用日誌檔案實現例程恢復或者介質恢復。
在資料庫出現故障時,可以根據重做日誌檔案中記錄的內容進行重做與前滾
維護資料庫的一致性,對資料的操作都會記錄在重組日誌中。
只有在歸檔模式下才能實現重做日誌的備份
重做日誌的要求:
在重做日誌中必須要有兩個或以上的組,每個組下面必須要有一個成員。
日誌切換:
在重做日誌檔案中由一個組切換到下一個組的過程,就叫做日誌切換。(在切換的時候如果其中一個組沒有成員或者成員損壞,
那麼系統會奔潰。因為LGWR後臺程式寫入失敗發生衝突
導致LGWR中斷。所以系統會崩潰)
日誌檔案時按照迴圈順序的方式書寫,寫滿一個組,自動切換另一個組,都寫滿了在覆蓋第一個組。一直迴圈
自動切換---系統自動完成日誌切換。
手動切換----執行命令強制進行日誌切換。 (alter system switch logfile;)
redo 日誌檔案管理:
規劃原則: 分散放開到不同的硬碟,日誌所在盤的IO要足夠,IO讀寫要快
增加減少日誌成員或組
日誌狀態與監視
處理日誌的異常
日誌檔案的增加刪除
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ---------------------------------------- --- 1 STALE ONLINE +DATA/fengzi/onlinelog/group_1.271.84218 NO 7003
2 ONLINE +DATA/fengzi/onlinelog/group_2.273.84218 NO 7037
3 STALE ONLINE +DATA/fengzi/onlinelog/group_3.275.84218 NO 7067
3 rows selected. 對於v$logfile檢視中STATUS列常見值: INVALID:表明該檔案不可訪問 STALE: 表示檔案內容不全 DELETED:表示該檔案已不在使用 空白: 表示正在被使用
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIME ------------- ------------ 1 1 34 52428800 1 YES INACTIVE 688405 24-MAR-14
2 1 35 52428800 1 NO CURRENT 720096 24-MAR-14
3 1 33 52428800 1 YES INACTIVE 655563 21-MAR-14
SQL> 對於V$LOG檢視 中STATUS列 常見的值: UNUSED: 表示從未對聯機重做日誌檔案組進行寫入,這是剛新增的聯機重做日誌檔案狀態。 CURRENT:表示當前的聯機重做日誌組,這說明該聯機重做日誌組是活動的。 ACTIVE:表示聯機重做日誌組是活動的,但是並不是當前的聯機重做日誌組。崩潰恢復需要該狀態, 可用於塊恢復。可能已經歸檔,也可能未歸檔。 CLEARING:表示在執行ALTER DATABASE CLEAR LOGFILE;命令後正在將該日誌重建為一個空日誌。日誌清楚後狀態改為UNUSED. CLEARING_CURRENT: 表示正在清除當前日誌檔案中的已關閉執行緒。如果切換時發生某些故障,則日誌可能處於次狀態。 INACTIVE:表示例程恢復不在需要次聯機重做日誌組。可能已歸檔,也可能未歸檔。
新增一個日誌組 SQL> alter database add logfile group 4 '+data/fengzi/onlinelog/group_4.log' size 50m;
Database altered.
SQL>
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIME ------------- ------------ 1 1 34 52428800 1 YES INACTIVE 688405 24-MAR-14
2 1 35 52428800 1 NO CURRENT 720096 24-MAR-14
3 1 33 52428800 1 YES INACTIVE 655563 21-MAR-14
4 1 0 52428800 1 YES UNUSED 0 進行日誌切換時 優先選擇使用 UNUSED狀態的組
新增一個日誌組,指定2個成員 SQL> alter database add logfile group 5 ('+data/fengzi/onlinelog/group_5_1.log','+data/fengzi/onlinelog/group_5_2.log') size 50m; Database altered.
SQL>select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIME ------------- ------------ 1 1 34 52428800 1 YES INACTIVE 688405 24-MAR-14
2 1 35 52428800 1 NO CURRENT 720096 24-MAR-14
3 1 33 52428800 1 YES INACTIVE 655563 21-MAR-14
4 1 0 52428800 1 YES UNUSED 0
5 1 0 52428800 2 YES UNUSED 0 SQL> 發現新新增的group 5 成員有兩個
一次新增多個組 一個組一個成員一個組多個成員 SQL> alter database add logfile group 6 '+data/fengzi/onlinelog/group_6.log' size 50m, group 7 ('+data/fengzi/onlinelog/group_7_1.log','+data/fengzi/onlinelog/group_7_2.log') size 50m;
向組中新增成員 SQL> alter database add logfile member '+data/fengzi/onlinelog/group_4.log' to group 4;
新新增的成員的大小與組中成員的大小是一致的,會自動分配。
向多組新增成員 SQL> alter database add logfile member '+data/fengzi/onlinelog/group_1.log' to group 1, '+data/fengzi/onlinelog/group_2.log' to group 2;
刪除組 SQL> alter database drop logfile group 4; --查詢v$LOG檢視的狀態為CURRENT與ACTIVE是刪除不掉的,因為在迴圈之內 Database altered. –想要刪除,需要手動切換日誌,切換到可以刪除的狀態alter system switch logfile
SQL> 刪除多個組 SQL> alter database drop logfile group 4,group 5;
刪除組中的某一個成員 SQL> alter database drop logfile member '+data/fengzi/onlinelog/group_5_1.log';
Database altered.
SQL> 刪除兩個組中不同成員 SQL>alter database drop logfile member '+DATA/fengzi/onlinelog/group_1.log ', '+DATA/fengzi/onlinelog/group_2.log';
一個組下必須有一個成員,所以不能把所有成員刪除,想要刪除只能刪除組,系統中必須要有兩個組。 |
日誌檔案的重新命名
資料庫必須處於歸檔模式 (想在非歸檔模式下進行修改需要一致性關閉資料庫啟動到mount狀態)
當檔案處於CURRENT狀態時是不能被修改的
alter system switch logfile 切換日誌,直到能重新命名為止
檔案系統 重新命名redo logfile 為 /u01/app/oracle/oradata/fengzi/redo03.log的日誌檔案 SQL> ho cp /u01/app/oracle/oradata/fengzi/redo03.log /u01/app/oracle/oradata/fengzi/fengziredo1.log 老的檔案 新的檔案 SQL> alter database rename file ‘/u01/app/oracle/oradata/fengzi/redo03.log’ to ‘/u01/app/oracle/oradata/fengzi/fengziredo1.log’
ASM ASM可以直接使用asmcmd工具中的mkalias命令對檔案進行重新命名 [oracle@dongyang ~]$ echo $ORACLE_SID +ASM [oracle@dongyang ~]$ asmcmd ASMCMD> ll commands: -------- cd du find help ls lsct lsdg mkalias mkdir pwd rm rmalias ASMCMD> ASMCMD> cd data/fengzi/onlinelog ASMCMD> ls group_1.271.842187003 group_1.272.842187017 group_2.273.842187037 group_2.274.842187053 group_3.275.842187067 group_3.276.842187083 group_4.304.843302545 group_4.log ASMCMD> mkalias group_1.271.842187003 redo02.log ASMCMD> ls group_1.271.842187003 group_1.272.842187017 group_2.273.842187037 group_2.274.842187053 group_3.275.842187067 group_3.276.842187083 group_4.304.843302545 group_4.log redo02.log ASMCMD>
SQL> alter database rename file '+DATA/fengzi/onlinelog/group_1.271.842187003' to '+DATA/fengzi/onlinelog/redo02.log';
Database altered.
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ---------------------------------------- --- 1 STALE ONLINE +DATA/fengzi/onlinelog/redo02.log NO 1 STALE ONLINE +DATA/fengzi/onlinelog/group_1.272.84218 YES 7017
2 ONLINE +DATA/fengzi/onlinelog/group_2.273.84218 NO 7037
2 ONLINE +DATA/fengzi/onlinelog/group_2.274.84218 YES 7053
3 STALE ONLINE +DATA/fengzi/onlinelog/group_3.275.84218 NO
GROUP# STATUS TYPE MEMBER IS_ ---------- ------- ------- ---------------------------------------- --- 7067
3 STALE ONLINE +DATA/fengzi/onlinelog/group_3.276.84218 YES 7083
6 rows selected.
SQL> |
日誌檔案狀態與監視
所謂的監視就是檢視位置在哪,是否存在
檢視磁碟空間是否足夠
看日誌組下是否有多個成員
監視日誌切換間隔時間
首先要檢視日誌檔案在不在 SQL> select member from v$logfile;
MEMBER -------------------------------------------------------------------------------- +DATA/fengzi/onlinelog/redo02.log +DATA/fengzi/onlinelog/group_1.272.842187017 +DATA/fengzi/onlinelog/group_2.273.842187037 +DATA/fengzi/onlinelog/group_2.274.842187053 +DATA/fengzi/onlinelog/group_3.275.842187067 +DATA/fengzi/onlinelog/group_3.276.842187083
6 rows selected.
SQL> [oracle@dongyang ~]$ echo $ORACLE_SID +ASM [oracle@dongyang ~]$ asmcmd ASMCMD> cd data/fengzi/onlinelog ASMCMD> ls group_1.271.842187003 group_1.272.842187017 group_2.273.842187037 group_2.274.842187053 group_3.275.842187067 group_3.276.842187083 redo02.log ASMCMD> 檢視磁碟空間 ASMCMD> lsdg State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name MOUNTED NORMAL N N 512 4096 1048576 16376 9057 4094 2481 0 DATA/ ASMCMD>
檢視日誌檔案切換間隔時間 SQL> select to_char(first_time,'YYYY-MM-DD HH24:MI:SS'),GROUP# from v$log;
TO_CHAR(FIRST_TIME, GROUP# ------------------- ---------- 2014-03-24 09:03:31 1 2014-03-24 13:39:46 2 2014-03-23 11:26:40 3
SQL> 如果間隔時間不滿足15分鐘到20分鐘之間就應該修改日誌檔案的大小。
改變日誌檔案大小 SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIME ------------- ------------ 1 1 34 52428800 2 YES INACTIVE 688405 24-MAR-14
2 1 35 52428800 2 NO CURRENT --當前使用 720096 24-MAR-14
3 1 33 52428800 2 YES INACTIVE 655563 21-MAR-14 SQL> 將日誌組大小改為100m 需要先刪除組,在刪除組物理檔案。最後重建 (只能1個組1個組的刪,必須保留2個組,只能刪除迴圈之外的) SQL> alter database drop logfile group 3;
Database altered.
SQL> ASMCMD> ls group_1.271.842187003 group_1.272.842187017 group_2.273.842187037 group_2.274.842187053 group_3.262.842184305 group_3.263.842184319 redo02.log ASMCMD> rm group_3.263.842184319 ASMCMD> rm group_3.262.842184305 重建組與成員 SQL> alter database add logfile group 3 ('+data/fengzi/onlinelog/group_3_1.log','+data/fengzi/onlinelog/group_3_2.log') size 100m; 刪除另一個迴圈之外組 SQL> alter database drop logfile group 1; Database altered.
SQL> ASMCMD> ls group_1.271.842187003 group_1.272.842187017 group_2.273.842187037 group_2.274.842187053 group_3.262.843384567 group_3.263.843384577 group_3_1.log group_3_2.log redo02.log ASMCMD> rm group_1.271.842187003 ASMCMD> rm group_1.272.842187017
SQL> alter database add logfile group 1 ('+data/fengzi/onlinelog/group_1_1.log','+data/fengzi/onlinelog/group_1_2.log') size 100m;
Database altered.
SQL> 刪除當前使用的組必須切換日誌 一直切換日誌,直到切換到組2為INACTIVE為止 SQL> alter system switch logfile;
System altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIME ------------- ------------ 1 1 42 104857600 2 YES INACTIVE 771647 28-MAR-14
2 1 41 52428800 2 YES INACTIVE 771612 28-MAR-14
3 1 43 104857600 2 NO CURRENT 771651 28-MAR-14
SQL> 切換完成刪除重建組2 SQL> alter database drop logfile group 2;
Database altered.
SQL> ASMCMD> rm group_2.273.842187037 asmcmd: entry 'group_2.273.842187037' does not exist in directory '+data/fengzi/onlinelog/' ASMCMD> ls --發現組2物理檔案已經不在 group_1.271.843385069 group_1.304.843385081 group_1_1.log group_1_2.log group_3.262.843384567 group_3.263.843384577 group_3_1.log group_3_2.log ASMCMD>
SQL> alter database add logfile group 2 ('+data/fengzi/onlinelog/group_2_1.log','+data/fengzi/onlinelog/group_2_2.log') size 100m;
Database altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS ---------- ---------- ---------- ---------- ---------- --- ---------------- FIRST_CHANGE# FIRST_TIME ------------- ------------ 1 1 42 104857600 2 YES INACTIVE 771647 28-MAR-14
2 1 0 104857600 2 YES UNUSED 0
3 1 43 104857600 2 NO CURRENT 771651 28-MAR-14
SQL> OK 修改日誌檔案大小成功 |
日誌檔案的異常處理
首先檢視告警日誌確認錯誤原因
對於日誌檔案的不一致(只有在資料庫啟動時報錯日誌檔案不一致才能使用下面命令)
第一種方法:清空不一致的日誌組 (只能清除一個迴圈之外的組也就是 INACTIVE狀態) SQL>alter database clear logfile group <N>;
另一種方法: 清除日誌,可以清除 ACTIVE 狀態的組 SQL>alter database clear unarchived logfile group <N>; 對於CURRENT狀態是不能清除的,只需要切換日誌就可以清除
|
對於日誌檔案丟失與損壞 (要看資料庫是否是一致性關閉的)
如果是一致性關閉的資料庫可以使用清空指令 (發現清空之後日誌檔案會自動生成) SQL>alter database clear logfile group <N>; SQL>alter database open; 如果非一致性關閉資料庫的是清空不了的
可以使用欺騙手段恢復資料庫(在歸檔模式下是可以使用這種方法)
SQL> recover database using backup controlfile; Specify log: --直接回車什麼都不做
SQL> alter database open resetlogs; SQL> recover database; SQL> alter database open resetlogs;
還可以直接使用隱藏引數解決 (這個隱藏引數的作用是忽略一致性的驗證) SQL> alter system set "_allow_resetlogs_corruption" =true scope=spfile;
SQL> startup force mount SQL>alter database open resetlogs; SQL> alter system reset " _allow_resetlogs_corruption" scope=spfile sid='*'; (用完之後一定要幹掉隱藏引數)
在非歸檔模式下可以組合以上方法解決 SQL> alter system set "_allow_resetlogs_corruption" =true scope=spfile; SQL> recover database using backup controlfile; Specify log: --直接回車什麼都不做
SQL> alter database open resetlogs; SQL>shutdown immediate; SQL>startup SQL> alter database open resetlogs; SQL> alter system reset " _allow_resetlogs_corruption" scope=spfile sid='*'; |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29532781/viewspace-1134340/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle歸檔日誌Oracle
- 歸檔oracle alert日誌Oracle
- Oracle歸檔日誌清理Oracle
- Oracle使用備份檔案集恢復歸檔日誌Oracle
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- 分析Oracle資料庫日誌檔案(三)EPOracle資料庫
- 分析Oracle資料庫日誌檔案(二)DOOracle資料庫
- 分析Oracle資料庫日誌檔案(一)HBOracle資料庫
- 【Oracle】歸檔日誌管理-設定歸檔日誌路徑以及歸檔日誌冗餘Oracle
- 在Oracle中,如何定時刪除歸檔日誌檔案?Oracle
- 12C關於CDB、PDB 日誌檔案redo log的總結
- Oracle11g redo log 建立、新增、刪除(重做日誌組,重做日誌檔案)Oracle
- go開發屬於自己的日誌庫-檔案日誌庫實現Go
- 基於Docker應用容器日誌檔案收集Docker
- 【LOG】Oracle資料庫清理日誌、跟蹤檔案利器Oracle資料庫
- 【REDO】Oracle 日誌挖掘,分析歸檔日誌線上日誌主要步驟Oracle
- 【MySQL日誌】MySQL日誌檔案初級管理MySql
- go 開發屬於自己的日誌庫-檔案日誌庫原型實現Go原型
- java專案日誌配置檔案Java
- oracle11G歸檔日誌管理Oracle
- oracle rman備份歸檔日誌需要先切換日誌嗎Oracle
- 日誌檔案過大清理
- sybase iq日誌檔案管理
- MySQL InnoDB日誌檔案配置MySql
- oracle dg 歸檔日誌恢復情況Oracle
- oracle 刪除過期的歸檔日誌Oracle
- 【SQL】Oracle 歸檔日誌暴增原因分析SQLOracle
- Oracle歸檔日誌暴增排查優化Oracle優化
- 2024/11/20日 日誌 關於 Filter & ListenerFilter
- 2024/11/27日 日誌 關於Vue && ElementVue
- oracle alert日誌Oracle
- SpringBoot指定日誌檔案和日誌Profile功能Spring Boot
- Laravel 指定日誌檔案記錄任意日誌Laravel
- 探究MySQL中的日誌檔案MySql
- 日誌檔案使用小結(轉)
- mysql的日誌檔案詳解MySql
- lumen 日誌按天生成檔案
- tempdb日誌檔案暴增分析
- nginx日誌配置檔案說明Nginx