日志文件
1、日志文件:在線日志文件和重做日志文件(在線日志文件備份)
sql> archive log list
2、log buffer內(nèi)存區(qū)域中發(fā)生數(shù)據(jù)改變的動(dòng)作都是記錄在日志中;日志記錄的動(dòng)作類型、動(dòng)作發(fā)生時(shí)間和動(dòng)作發(fā)生數(shù)據(jù)改變的新址舊址等等信息記錄在重做日志中,重做日志最終通過(guò)后臺(tái)進(jìn)程LGWR寫到在線日志里。重做日志作用:recovery 機(jī)制(維護(hù)基于介質(zhì)錯(cuò)誤的系統(tǒng)恢復(fù)),維護(hù)數(shù)據(jù)完整性(維持recovery歷史數(shù)據(jù)恢復(fù)過(guò)程)。
重做日志文件被組織為日志組,每個(gè)組可以有多個(gè)日志文件,每個(gè)日志文件叫成員。
Oracle database要求至少2個(gè)日志組,按照有序的循環(huán)使用的方式使用它。
組1寫滿寫組2,組2寫滿寫組3,組3寫滿再回來(lái)寫組1,有序循環(huán)環(huán)路方式使用。當(dāng)組3寫入組1時(shí),做一個(gè)backup備份工作。
重做日志文件多工:容錯(cuò)機(jī)制。當(dāng)組1寫滿想寫組2,但當(dāng)前組2中所有成員壞掉了,這時(shí)系統(tǒng)就會(huì)報(bào)錯(cuò)。在Oracle環(huán)境中假定當(dāng)前組2中還有1個(gè)成員,即便其他成員都?jí)牡袅耍琌racle還可以繼續(xù)跑。
【建議】對(duì)日志文件做多工,而不同的成員放在不同的物理hard disk(D盤中不同區(qū)域),而不是邏輯的分區(qū)。
sql>alter system archive log start;
sql>alter system switch logfile;
在發(fā)生日志switch之前,后臺(tái)會(huì)完成一個(gè)Checkpoint操作,用來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的同步,它會(huì)寫控制文件,同時(shí)還會(huì)寫數(shù)據(jù)文件。
sql>alter system checkpoint;
sql>show parameter fast
sql>show parameter log_checkpoint
3、添加日志組:(建議每組大小size相同)
sql>select * from v$log;
sql>alter database add logfile group 6
sql>alter database add logfile member
sql> c /size 10m/
sql> run
【注意】每個(gè)組可以不同大小,但每個(gè)組成員一定是大小一致的。
4、刪除日志文件組:
ALTER DATABASE DROP LOGFILE GROUP 3;
sql>alter database drop logfile group 6;
在刪除的時(shí)候,只是改變控制文件的信息,不會(huì)對(duì)底層的OS文件造成刪除(只能手工去刪除數(shù)據(jù)文件和日志文件:D:\oracle\oradata\fox中的REDO06.ora、REDO06A.ora等)。
【注意】日志組的刪除限制:當(dāng)前日志組不能刪;active 活動(dòng)日志組不能刪;未歸檔的日志組不能刪。
刪除日志組成員: ALTER DATABASE DROP LOGFILE MEMBER '$HOME/ORADATA/u04/log3c.rdo';
【注意】日志組成員的刪除限制:保留最后一個(gè)日志組成員(每組中至少有一個(gè)成員不能刪)。
sql>select * from v$logfile;
sql>alter database drop logfile member 'D:\oracle\oradata\fox\redo04A.ora'
sql>c /redo04a/redo04/
sql>run
提示:無(wú)法刪除最后一個(gè)日志成員
5、日志清空、移動(dòng)和重命名
日志清空:reinit(重新初始化) ALTER DATABASE CLEAR LOGFILE '$HOME/ORADATA/u01/log2a.rdo';
sql>alter database clear logfile group 2; (當(dāng)前日志文件的清空無(wú)法進(jìn)行)
sql>alter database clear unarchived logfile group 5; (可以進(jìn)行未歸檔清空日志,造成日志歷史記錄斷點(diǎn),做完此事一定不要忘記做系統(tǒng)完全備份。)
移動(dòng)或重命名方式:(1)可以通過(guò)添加新成員,刪除舊成員的方式(2)也可以通過(guò)copy OS文件并重命名的方式,然后執(zhí)行:ALTER DATABASE RENAME '舊名' TO '新名'
sql>alter database rename file 'D:\oracle\oradata\fox\redo05.ora' to 'D:\oracle\oradata\fox\redo05a.ora'
6、在線重做日志文件使用OMF方式:
sql> show parameter db_create_log
sql> alter system set db_create_online_log_dest_q='d:\oracle\oralog';
sql> alter database add logfile group 6;
sql> alter database drop logfile group 5;
sql> alter database clear unarchived logfile group 5;
7、獲取日志組和組成員的信息:v$log ,v$logfile
v$log (查詢?nèi)罩窘Minfo)->
v$logfile(查詢?nèi)罩窘M成員)-> status:blank(in use 在使用),stale(incomplete不完整),delete(被刪除了)
8、歸檔日志文件[Archived]:備份在線日志的文件
用途:(1)幫助數(shù)據(jù)恢復(fù)Recovery.(2)在線備份(database is open)
默認(rèn)情況下 database 是被運(yùn)行在NoArchivelog (非歸檔)模式,這種模式下相當(dāng)于日志未作歷史備份,不可以借助日志來(lái)進(jìn)行數(shù)據(jù)恢復(fù)。非歸檔模式只能做全備,而且只能做離線備份(冷備),在數(shù)據(jù)恢復(fù)時(shí)只能全恢復(fù)。而歸檔模式可以做部分備份、部分恢復(fù)、在線備份(數(shù)據(jù)庫(kù)不需要關(guān)閉也能恢復(fù),即熱備)
9、如何在歸檔模式和非歸檔模式之間的轉(zhuǎn)換步驟:
sql>shutdown immediate
sql>startup pfile=d:\oracle\ora90\database\initfox.ora mount
sql>alter database noarchivelog; 或 alter database archivelog
sql>alter databse open
10、自動(dòng)歸檔:archive log start
sql> select * from v$archived_log;
【注意】一旦在線日志組被寫滿了,它還沒(méi)有完成歸檔,那么這個(gè)日志組是不能被重寫的,系統(tǒng)會(huì)等待這個(gè)完成歸檔的過(guò)程。因此,DBA要規(guī)劃系統(tǒng)中有多少個(gè)歸檔日志組,每個(gè)組成員有多大,才能滿足系統(tǒng)需求,不至于導(dǎo)致歸檔過(guò)程影響系統(tǒng)操作。歸檔日志文件可以被多工。
sql> show parameter log_archive //顯示歸檔參數(shù)
11、Oracle中實(shí)現(xiàn)日志挖掘logmnr分析(分區(qū)過(guò)程)步驟:
(1)設(shè)定日志分析目錄 set directory utl_file_dir
(2)重啟oracle
sql>desc dbms_logmnr
sql>desc dbms_logmnr_d
sql>update kong.sales set qty=10 where stor_id=6380
sql>delete kong.sales where stor_id=7066
sql>commit;
sql>select * from v$log; //查詢當(dāng)前日志組編號(hào) 為group 2(即redo02)
sql>execute dbms_logmnr_d.build('foxdict.ora','d:\oracle\admin\fox\cdump');
sql>desc dbms_logmnr
sql>execute dbms_logmnr.add_logfile('d:\oracle\oradata\fox\redo02.log',dbms_logmnr.new); //添加要分析的日志文件加到目錄文件
sql>execute dbms_logmnr.add_logfile('d:\oracle\oradata\fox\redo03.log',dbms_logmnr.new);
sql>execute dbms_logmnr.start_logmnr(dictfilename=>'d:\oracle\admin\fox\cdump\foxdict.ora');END;
sql>select * from v$logmnr_content;
聯(lián)系客服