dbca工具建庫,預設會建立3份控制檔案。
控制檔案管理資料庫的狀态。
控制檔案記錄着資料庫的名稱,資料庫的實體布局。
ckpt程序更新控制檔案資訊,反映系統狀态。而這些資訊在下一次啟動資料庫時又會被用來校驗資料庫的一緻性。
資料庫的正常運作過程中,控制檔案的内容也會時時進行更新,以反映資料庫的變換。
日志檔案中記錄的是redo records,redo records又是由change vectors(改變向量)組成的。每個redo records代表着一個資料塊發生的變化。
一個事務會涉及多個資料塊内容改變,是以會包含多個redo record。
redo records會記錄如下内容:
事務的開始時間
事務的名稱
對象名稱(比如表名)
資料被更新前的狀态,也叫前鏡像(before image)
資料被修改後的狀态,也叫後鏡像(after image)
commit标記:事務是否送出(包括commit rollback)
事務生成的redo records最初儲存在sga中的redo log buffer中,很快就會被寫到redo log file中,觸發這個寫操作的原因:
使用者執行commit操作
累計的redo log達到1m
redo log buffer使用超過了總容量的1/3
redo record記錄了資料的前鏡像和後鏡像,所有對于隻有開始時間而沒有送出标志的事務就必須復原,送出的事務就保持後鏡像即可,最終資料庫達到了一緻性狀态。
oracle資料庫的日志檔案分成兩類:聯機日志檔案和歸檔日志檔案
lgwr程序會不斷的向redo log中寫入日志内容,lgwr必須確定向組内所有成員的寫操作都是成功的。
聯機日志是以一種循環的方式工作的,早前記錄的日志會被較新的日志覆寫掉,較新的日志最終被更新的内容覆寫。
歸檔模式下,lgwr程序能夠覆寫一組聯機日志檔案的前提是,這組聯機日志已經完成歸檔。
如果資料庫當機,日志中的内容(包括已經結束和未結束的事務)都要重新應用到資料檔案上,這個過程叫做前滾roll-forward。
前滾的結果是吧資料恢複到資料庫當機時的狀态,但是資料庫當機時刻,資料庫裡還有很多沒有完成的使用者事務-未決事務,對于這些事務,資料庫統一做復原處理,這個過程就叫做復原roll-back
前滾是利用日志内容完成的,復原是以undo表空間為基礎的。
日志檔案(包括聯機日志、歸檔日志)是oracle資料庫高可用性的基礎。
一個資料庫執行個體使用的聯機日志就叫做一個日志線程(redo thread)。
select thread# from v$log;
參數檔案是用來存放資料庫初始參數配置,比如sga的大小,控制檔案的位置等。
oracle獲得參數檔案的方法如下:
目前的環境變量oracle_sid的值
在$oracle_home/dbs目錄下尋找參數檔案,尋找順序是spfile<oracle_sid>.ora spfile.ora init<oracle_sid>.ora
可見oracle首先群钊的是資料庫的spfile,其次是通用的spfile,最後才是pfile
初始化參數檔案中,參數可以分成以下幾組:
(1)這組參數必須和資料庫的實際情況完全比對
undo_management
undo_tablespace
db_block_size
db_name
instance_name
(2)這組參數用于指定控制檔案的位置
control_files
(3)這組參數是定義目錄位置,這些目錄用于儲存資料庫運作過程中産生的一系列日志檔案。對于資料庫的正常運作而言,隻要這些目錄存在,oracle使用者有權限在這些目錄中建立檔案就可以了
audit_file_dest
backgroud_dump_dest
core_dump_dest
user_dump_dest
log_archive_dest_1
(4) 完整的初始化參數清單還包括其他很多參數
通過參數檔案配置的參數可以分成兩種:動态和靜态
動态參數是可以在資料庫運作起見随時修改,并立即生效;
靜态參數雖然可以修改,但是必須重新開機資料庫才能生效;
每個oracle資料庫都需要有一個alert日志檔案,檔案位于參數backgroup_dump_dest指定的目錄下,檔案名的格式為alert_dbname.log
oracle使用這個檔案來記錄資料庫運作過程中發生的重大事件,比如啟動 關閉 日志切換 添加資料檔案,啟動期間,這個日志中還會記錄所有的參數值,
是以管理者可以根據alert日志重建參數檔案
運作期間發生的各種錯誤都會記錄于此,在故障診斷階段這個檔案是管理者診斷分析的最佳起點。
grep ora- alerttestdb.log 檢視
trace檔案
oracle有3類跟蹤檔案:核心跟蹤檔案 背景程序跟蹤檔案 使用者跟蹤檔案
core_dump_dest background_dump_dest user_dump_dest
核心檔案是資料庫核心運作中生成的
背景程序跟蹤檔案是dbwr lgwr這些背景程序産生,通常是在程序運作發生異常時産生,這時不僅會産生trace檔案,在alert日志中也會記錄
使用者跟蹤檔案更多是由于使用者主動觸發産生的。比如使用者跟蹤event 審計資料庫,産生的就是使用者跟蹤檔案
資料塊變化跟蹤檔案block change tracking file
oracle利用這個檔案記錄從上次全量備份以來所有發生變化的資料塊。這樣rman再做增量備份時,就不必掃描整個資料庫,隻需通過這個檔案就可以找到所有需要備份的資料塊。
dba進行不完全回複的幾個步驟:
1 關閉資料庫
2 找到最後一次備份的檔案,然後從備份中還原所有資料檔案restore
3 利用歸檔日志進行不完全恢複recover,要盡可能的回恢複到執行錯誤操作之前那個時間點
4 打開資料庫,做一個全備
上述2步驟是最耗時且無法跳過的步驟,flashback database使用一種完全不同的架構回避了這個問題,flashback database功能使我們可以快速的把整個資料庫倒轉到之前的某個時間點,而不必進行耗時的還原操作。
傳統的備份恢複依賴于聯機日志、歸檔日志。
flashback database利用了一種新的日志機制,即flashback log。
這種全新的日志檔案必須放到一個特殊的目錄位置,并且這些檔案也是由oracle自動維護的
要想使用flashback database 資料庫必須做一些特殊的配置
oracle資料庫檔案布局方式有兩種:使用者管理 oracle管理(omf)
使用者管理由dba決定每個檔案放在哪個磁盤,哪個目錄,定義檔案名以及檔案大小。
oracle管理
oracle缺删除表空間時是不會同時删除磁盤檔案的。必須drop tablespace test including contents and datafiles;
oracle建立表空間時,必須明确指定資料檔案的位置,才能建立成功。
omf解決了上述兩個問題,要想使用omf,要配置以下3組參數
db_create_file_dest:定義一個預設的目錄,建立資料檔案、臨時表空間檔案時,如果沒有明确的指明檔案路徑和名稱,新檔案就被建立在這個目錄下;如果定義了這個參數,而沒有定義db_create_online_log_dest_n參數,則聯機日志和控制檔案也會建立在這個目錄下。
db_create_online_log_dest_n(n=1-5):最多可以定義5個預設目錄,如果建立聯機日志、控制檔案時沒有明确定義檔案路徑和名稱,則檔案就會在這些目錄下建立,如果定義了多個目錄,則自動實作複用multiplexed功能。
db_recover_file_dest:定義一個預設目錄。在使用rman工具進行備份時,如果沒有指明備份集的格式,則備份檔案儲存在這個目錄下。歸檔日志的自動管理也是使用這個目錄。和db_create_online_log_dest_n參數,則聯機日志和控制檔案也會建立在這個目錄下
使用omf後,建立資料檔案或日志檔案時就不再需要考慮檔案位置 大小等屬性,omf會自動保證這些檔案被建立到預定義的目錄下。同時在删除表空間或日志組時這些檔案也就同時删除了。