
1. 簡介
Oracle引入重做日志的目的:數(shù)據(jù)庫的恢復。
Oracle相關(guān)進程:重做日志寫進程(LGWR)。
重做日志性質(zhì):聯(lián)機日志文件,oracle服務器運行時需要管理它們。
相關(guān)數(shù)據(jù)字典:v$log ; v$logfile 。
操作者權(quán)限:具有sys用戶或system用戶權(quán)限。
重做日志文件:
日志文件的數(shù)據(jù)文件類型:在線日志文件(又叫聯(lián)機日志)與歸檔日志文件(在線日志文件的歷史備份), 每個重做日志組中有一個或多個重做日志文件。每個勢力至少要有兩個重做日志組。
日志運行的模式:歸檔模式、非歸檔模式(是否自動歸檔)
日志的運行流程:寫文件是依靠LGWR后臺進程
日志按照有序循環(huán)的方式被使用,即當一組日志文件被填滿后,循環(huán)覆蓋下一組日志文件,不斷循環(huán)。
重做日志文件的目的:1. 記錄數(shù)據(jù)的改變 2. 提供數(shù)據(jù)恢復 3. 維護數(shù)據(jù)庫完整性。
2. 什么是 Oracle 歸檔模式?
Oracle數(shù)據(jù)庫有聯(lián)機重做日志,這個日志是記錄對數(shù)據(jù)庫所做的修改,比如插入,刪除,更新數(shù)據(jù)等,對這些操作都會記錄在聯(lián)機重做日志里。一 般數(shù)據(jù)庫至少要有2個聯(lián)機重做日志組。當一個聯(lián)機重做日志組被寫滿的時候,就會發(fā)生日志切換,這時聯(lián)機重做日志組2成為當前使用的日志,并且把這些文件分 布在不同的物理磁盤,當聯(lián)機重做日志組2寫滿的時候,又會發(fā)生日志切換,去寫聯(lián)機重做日志組1,就這樣反復進行。
,當前在使用聯(lián)機重做日志如果數(shù)據(jù)庫處于非歸檔模式,聯(lián)機日志在切換時就會丟棄. 而在歸檔模式下,當發(fā)生日志切換的時候,被切換的日志會進行歸檔。比如1,當1寫滿的時候,發(fā)生日志切換,開始寫聯(lián)機重做日志 2,這時聯(lián)機重做日志1的內(nèi)容會被拷貝到另外一個指定的目錄下。這個目錄叫做歸檔目錄,拷貝的文件叫歸檔重做日志。 數(shù)據(jù)庫使用歸檔方式運行時才可以進行災難性恢復。
歸檔日志模式和非歸檔日志模式的區(qū)別: 非歸檔模式只能做冷備份,并且恢復時只能做完全備份.最近一次完全備份到系統(tǒng)出錯期間的數(shù)據(jù)不能恢復. 歸檔模式可以做熱備份,并且可以做增量備份,可以做部分恢復. 用ARCHIVE LOG LIST 可以查看期模式狀態(tài)時歸檔模式還是非歸檔模式.
3. 重做日志工作原理
后臺進程 LGWR 負責把重做日志緩沖區(qū)中的日志條目寫到重做日志文件 中。當用戶提交一個事務時,LGWR把這個事務的重做條目寫入到重做日志文件,并賦予一個標識符(System change number SCN),SCN用于標識事務的重做日志條目。只有當事務的“重做日志條目”被成功寫入到磁盤上的重做日志文件中,事務的提交才算完成。
以下情況LGWR會自動把重做日志緩沖區(qū)的日志條目寫入到重做日志文件中:
》每隔3秒鐘
》一個用戶提交一個事務
》日志緩沖區(qū)(Redo Log Buffer)被填滿三分之一
》日志緩沖區(qū)將有1MB的日志數(shù)據(jù)
》發(fā)生校驗點checkpoint
以下情況發(fā)生check point:
a.每次日志切換時
b.實例通過normal,transactional,immediate選項關(guān)閉時
c.通過設(shè)置初始化參數(shù)FAST_START_MTTR_TARGET強制發(fā)生
d.數(shù)據(jù)庫管理員手工設(shè)置ALTER SYSTEM CHECKPOINT、alter tablespace ,datafile offline
e.使用alter tablespace[OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] 語句導致指定數(shù)據(jù)文件發(fā)生檢查點
注:如果參數(shù)LOG_CHECKPOINTS_TO_ALERT 設(shè)置為true,則每次檢查點信息將記錄在alert_SID.log文件中.
4. 重做日志狀態(tài)
Current 表示正在LGWR寫的重做日志組
Active 表示重做日志組記錄的改變還沒有寫入到數(shù)據(jù)文件中,實例恢復時需要用到Active的重做日志組;
Inactive表示實例恢復時不需要狀態(tài)為inactive的重做日志組;
Unused表示該重做日志組是新建的,還未被使用;
5. 實例恢復
如果數(shù)據(jù)庫突然斷電,對數(shù)據(jù)庫的改變沒有真正寫入到數(shù)據(jù)庫文件中,但是Oracle保證對數(shù)據(jù)庫的改變已經(jīng)記錄到重做日志文件中。例程失敗類似于執(zhí)行 SHUTDOWN ABORT命令關(guān)閉數(shù)據(jù)庫,解決了硬件問題和電源斷電等問題之后,DBA只需要執(zhí)行STARTUP命令啟動例程就可以了,而不需要執(zhí)行任何恢復命令。 當執(zhí)行 STARTUP 命令啟動例程并裝載了數(shù)據(jù)庫之后,后臺進程 SMON 會自動執(zhí)行例程恢復,最終使數(shù)據(jù)庫所有文件(數(shù)據(jù)文件、控制文件、重做日志)完全同步。實例恢復會自動把記錄在重做日志文件中的改變應用到數(shù)據(jù)文件中,就不會有數(shù)據(jù)的丟失 。
6. 重做日志組操作
1. 查看oracle數(shù)據(jù)庫是否為歸檔模式:
SQL> select name,log_mode from v$database;
NAME LOG_MODE
--------- ------------
PTLDB NOARCHIVELOG
2.查看數(shù)據(jù)庫中的重做日志組
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
1 1 1558 315392000 1 NO INACTIVE 459785223 20-JUL-14
2 1 1559 315392000 1 NO CURRENT 460781485 21-JUL-14
3 1 1557 315392000 1 NO INACTIVE 458700182 19-JUL-14
3.查看數(shù)據(jù)庫中的重做日志文件
知道有哪些重做日志文件,以及每個重做日志文件屬于哪一組。
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
3 ONLINE /opt/oracle/oradata/ptldb/redo03.log NO
2 ONLINE /opt/oracle/oradata/ptldb/redo02.log NO
1 ONLINE /opt/oracle/oradata/ptldb/redo01.log NO
4.創(chuàng)建重做日志組
ALTER DATABASE ADD LOGFILE GROUP 4 ('/dev/rlv_vgdb9_data22','/dev/rlv_vgdb9_data23','/dev/rlv_vgdb9_data24') SIZE 8191m; --這樣,就最增一個日志組,且這個日志組里有3個成員每個成員8191MB大小。
5:給某個日志組新增一個成員
ALTER DATABASE ADD LOGFILE MEMBER '/dev/rlv_vgdb9_data25' TO GROUP 4;
--注意,這里不需要指定日志組成員的大小。
6:刪除日志組
ALTER DATABASE DROP LOGFILE GROUP 4;
--注意:當前日志組不能刪,活動的日志組不能刪,沒有歸檔的日志組不能刪。
7:刪除日志組成員
ALTER DATABASE DROP LOGFILE MEMBER '/dev/rlv_vgdb9_data25';
--注意:每個組至少要保留一個成員;
8.改變重做日志組的狀態(tài)
Alter system switch logfile;
從Active狀態(tài)變?yōu)镮nactive狀態(tài)
Alter system checkpoint;
配置數(shù)據(jù)庫的歸檔模式
改變非歸檔模式到歸檔模式:
1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
2)SQL>START MOUNT;
3)SQL>ALTER DATABASE ARCHIVELOG;
4)SQL>ALTER DATABASE OPEN;
5)SQL>做一次完全備份,因為非歸檔日志模式下產(chǎn)生的備份日志對于歸檔模式已經(jīng)不可用了.這一步非非常重要!
改變歸檔模式到非歸檔模式:
1)SQL>SHUTDOWN NORMAL/IMMEDIATE;
2)SQL>START MOUNT;
3)SQL>ALTER DATABASE NOARCHIVELOG;
4)SQL>ALTER DATABASE OPEN;
3.啟用自動歸檔: LOG_ARCHIVE_START=TRUE
歸檔模式下,日志文件組不允許被覆蓋(重寫),當日志文件寫滿之后,如果沒有進行手動歸檔,那么系統(tǒng)將掛起,知道歸檔完成為止.
這時只能讀而不能寫.
運行過程中關(guān)閉和重啟歸檔日志進程
SQL>ARCHIVE LOG STOP
SQL>ARCHIVE LOG START
4.手動歸檔: LOG_ARCHIVE_START=FALSE
歸檔當前日志文件
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT;
歸檔序號為052的日志文件
SQL>ALTER SYSTEM ARCHIVE LOG SEQUENCE 052;
歸檔所有日志文件
SQL>ALTER SYSTEM ARCHIVE LOG ALL;
改變歸檔日志目標
SQL>ALTER SYSTEM ARCHIVE LOG CURRENT TO '&PATH';
ALTER SYSTEM SWITCH LOGFILE;
--所謂日志切換就是停止寫當前組,轉(zhuǎn)而寫一個新組,系統(tǒng)可以自動發(fā)生,也可以手工完成。
--當發(fā)生SWITCH LOGFILE時,系統(tǒng)會在后臺完成CHECKPOINT的操作
--手動切換日志組
--日志組A:當前正在寫。
--日志組B:可寫。
--CHECKPOINT保證控制文件,數(shù)據(jù)文件頭,日志文件頭的SCN一致是數(shù)據(jù)庫保持數(shù)據(jù)完整性的一個重要機制
--手動切換日志組后,ORACLE開始往日志組B寫日志,并進行一次CHECKPOINT,把日志組A里沒有經(jīng)過CHECKPOINT的那部分日志對應的DIRTY BUFFER從BUFFER CACHE里寫到
--數(shù)據(jù)文件里。CHECKPOING完成后
--日志組A:可寫。
--日志組B:當前正在寫。
--另外,ALTER TABLESPACE USER BEGIN BACKUP,DROP TABLE,TRUNCATE TABLE都會引發(fā)CHECKPOINT操作
--除了以上所手動,及自動CHECKPOINT之外,還可以通過一些參數(shù)來控制CHECKPOINT
--FAST_START_MTTR_TARGET(MTTR:數(shù)據(jù)恢復的時間間隔)
--checkpoints用來同步,同步頻率越高,發(fā)生系統(tǒng)錯誤時所需RECOVERY時間越短
--同步相關(guān)的參數(shù):FAST_START_MTTR_TARGET(數(shù)據(jù)庫通過它來改變后面3個參數(shù)),fast_start_io_target,log_checkpoint_interval,log_checkpoint_timeout
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10