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
- 關於HBase的日誌檔案和HFile
- 日誌檔案和歸檔日誌檔案的關係以及如何切換日誌
- oracle 日誌檔案管理Oracle
- Oracle日誌檔案常用操作Oracle
- oracle12告警日誌檔案?Oracle
- Oracle重做日誌檔案基礎Oracle
- oracle 聯機重做日誌檔案Oracle
- 轉移Oracle日誌檔案位置Oracle
- oracle 日誌檔案佔空間Oracle
- ORACLE停止監聽日誌檔案Oracle
- 深入分析Oracle日誌檔案Oracle
- Oracle日誌組新增冗餘檔案和日誌組Oracle
- oracle 歸檔日誌開啟,關閉Oracle
- 關於SQL Server 2000的日誌檔案壓縮SQLServer
- ASM的優點總結--關於日誌檔案調整ASM
- 重做日誌檔案的相關操作
- oracle日誌分析從列表中移去一個日誌檔案Oracle
- 日誌檔案
- 修改Oracle重做日誌檔案的大小Oracle
- oracle中移動控制檔案、資料檔案、日誌檔案Oracle
- Oracle 12C 新特性:關於歸檔日誌的備份Oracle
- ORACLE 歸檔日誌開啟關閉方法Oracle
- ORACLE 11G RAC 增加日誌組及增大日誌檔案Oracle
- oracle 關於--控制檔案Oracle
- 關於oracle補充日誌作用的理解Oracle
- oracle歸檔日誌Oracle
- Oracle 歸檔日誌Oracle
- 刪除日誌檔案組與日誌檔案成員
- 管理日誌檔案
- dump日誌檔案
- APACHE日誌檔案Apache
- oracle日誌檔案頭轉儲說明Oracle
- 分析Oracle資料庫日誌檔案(1)Oracle資料庫
- 分析Oracle資料庫日誌檔案(2)Oracle資料庫
- 分析Oracle資料庫日誌檔案(3)Oracle資料庫
- Oracle 11g alter日誌檔案位置Oracle
- 如何正確刪除ORACLE歸檔日誌檔案Oracle