釋義
數據結構在計算機中的表示(映像)
分類
資料庫的物理結構檔案按其作用可以分為三類:
數據檔案
日誌檔案
控制檔案
重做日誌檔案
重做日誌檔案記錄對資料庫的所有修改信息。它是三類檔案中最複雜的一類檔案,也是保證
資料庫安全與資料庫備份與恢復有直接關係的檔案。
日誌檔案組與日誌成員
在每一個oracle資料庫中,至少有兩個重做日誌檔案組。每組有一個個或多個重做日誌檔案,即日誌成員。同一組中的成員是鏡像關係,它們存儲的內容是一模一樣的。oracle在寫日誌時,以一個日誌組為邏輯單位寫入,只在將日誌都寫入日誌組中的每個成員檔案中後,寫日誌才完成。
日誌工作原理
oracle有多個日誌檔案組,當一個日誌檔案組中所有的成員所有的成員同時被寫滿數據時,系統自動轉換到下一個日誌檔案組,這個轉換過程稱為日誌切換。
當日誌切換後,會給前一個日誌組編一個號,用於
歸檔日誌的編號,這個編號稱為日誌序列號。此編號由1開始,每切換一次,序列號自動加1,最大值受參數MAXLOGHISTORY限制,該參數的最大值為65534。
當oracle把最後一個日誌組寫滿了以後,自動轉向第一個日誌組,這時,再向第一個日誌組寫日誌的時候,如果資料庫運行在非歸檔模式下,這個日誌組中的原有日誌信息就會被覆蓋。
使用以下語句查詢日誌檔案信息:
sql>select * from v$log
相關欄位說明如下:
GROUP#:日誌檔案組號
THREAD#:日誌檔案執行緒號,一般為1,雙機容時為2
SEQUENCE#:日誌序列號
BYTES:日誌檔案大小
MEMBERS:該組的日誌成員個數
ARC:該組日誌信息是否已經完成歸檔
STATUS:該組狀態(CURRENT:表示當前正在使用的組;NACTIVE:表示非活動組;ACTIVE:表示歸檔未完成)
FIRST_CHANGE#:系統改變號SCN,也叫檢查點號
FIRST_TIME:系統改變時間
DBA可以使用下列命令進行強制日誌切換
sql>alter system switch logfile
NOARCHIVELOG/ARCHIVELOG
NOARCHIVELOG是非歸檔模式,如果資料庫運行在這種模式下,當日誌切換時,新切換到的日誌組中的日誌信息會被覆蓋。ARCHIVELOG:歸檔模式,如果資料庫運行在這種模式下,日誌會被歸檔存儲,產生
歸檔日誌,且在未歸檔之前,日誌不允許被覆蓋寫入。
要確認資料庫的歸檔方式,可以查詢
數據字典v$database:
sql>select log_mode from v$database
要了解歸檔日誌的信息,可以查詢數據字典v$archived_log。
要將資料庫改為歸檔模式:
a.alter database archivelog
b.設定初始化參數LOG_ARCHIVE_START=TRUE
c.設定歸檔檔案目標存儲路徑 LOG_ARCHIVE_DEST=C:\ORA\ARCHIVE
d.設定歸檔檔案命名格式參數 LOG_ARCHIVE_FORMAT="ORCK%T%S.ARC"。這個格式中的%S表示日誌序列號,自動左邊補零;%s表示日誌序列號,自動左邊不補零;%T表示日誌執行緒號,左邊補零;%t表示日誌執行緒號不補零。
e.重新啟動資料庫
CKPT進程
CKPT進程保證有修改過的資料庫緩衝區中的數據都被寫入到數據檔案,日誌檔案、數據檔案、資料庫頭和
控制檔案中都有寫入檢查點標記。資料庫在恢復時,只需提供自上一個檢查以來所做的修改。檢查點完成時系統將更新資料庫資料庫頭和控制檔案。
參數LOG_CHECKPOINT_TIMEOUT決定一個檢查點發生的時間間隔。LOG_CHECKPOINT_INTERVAL決定一個檢查需要填充的日誌檔案塊的數量。檢查點號,也稱系統改變號(SCN),它標識一個檢查點。可以通過v$log查詢日誌檔案的檢查點信息,通過v$datafile查詢數據檔案的檢查點信息,通過v$database查詢資料庫頭的檢查點信息。三個地方的檢查點號相同,如果不同,說明發明資料庫不同步,此時資料庫肯定無法正常啟動。
增加與刪除日誌檔案組、日誌成員
(詳細語法請參考oracle文檔)
alter database [database] add logfile [group integer] filespec[,[group...
alter database [database] add logfile (...)
alter database [database] drop logfile [grout integer]
alter database [database] add logfile member "filespec" [reuse] to group integer
alter database [database] drop logfile member "filename","filename"...
alter database [database] rename file "filename" to "filename"
清除日誌檔案數據
alter database [database] clear [unarchived] logfile group integer|filespec
控制檔案
控制檔案是一個二進制檔案,用來描述資料庫的物理結構,一個資料庫只需要一個控制檔案,控制檔案的內容包括:
資料庫名及資料庫唯一標識
數據檔案和日誌檔案標識
控制檔案由參數control_files指定,格式如下:
control_files=("home/app/.../control01.ctl","home/app/.../control02.ctl")
參數中各個檔案是鏡像關係,也就是說,幾個檔案中只要有一個檔案完好,資料庫就可以正常運行。
sql>select * from v$controlfile
如果控制檔案損壞或丟失,資料庫將終止並且無法啟動,所以,要對控制檔案進行鏡象,手工鏡像步驟如下:
a.關閉資料庫
b.複製控制檔案
c.修改參數檔案,加入新增的控制檔案位置描述
d.重新啟動資料庫
另外注意,控制檔案中還包含幾個伺服器參數的設定,如果修改這些參數的值,剛需要重新創建控制檔案,這些參數是:
MAXLOGFILES:最大日誌檔案個數
MAXLOGMEMBERS:最大日誌成員個數
MAXLOGHISTORY:最大歷史日誌個數
MAXDATAFILES:最大數據檔案個數
MAXINSTANCES:最大實例檔案個數
所有修改資料庫結構的命令都會引起
控制檔案的改變。同時出會記錄在oracle
跟蹤檔案中,跟蹤檔案的名稱為alter_SID.log,路徑如下:
d:\oracle\product\10.1.0\admin\DB_NAME\bdump\SIDALRT.log(unix是alter_SID.ora)
也可以在參數檔案中指定跟蹤檔案的存儲路徑,後台進程跟蹤檔案目錄由參數background_dump_dest指定,用戶跟蹤檔案位置由參數user_bdump_dest指定,如:
background_bdump_dest=/u01/app/oracle/oralog/bdump
user_bdump_dest=/u01/app//oralog/udump
數據檔案
數據檔案用來存儲資料庫的數據,如表、索引等。讀取數據時,系統首先從
資料庫檔案中讀取數據,並存儲到SGA的
數據緩衝區中。這是為了減少I/O,如果讀取數據時,緩衝區中已經有要讀取的數據,就不需要再從磁碟中讀取了。存儲數據時也是一樣,
事務提交時改變的數據先存儲到記憶體緩衝區中,再由oracle後台進程DBWR決定如何將其寫入到數據檔案中。
查詢數據檔案的信息
sql>select * from dba_data_files或
sql>select * from v$datafile(此
數據字典包含檔案的動態信息)
一個數據檔案只與一個資料庫相聯繫。數據檔案的大小是可以改變的。可以通過以下語句查詢
表空間的空間空閒量
sql>select * from dba_free_space
修改數據檔案的大小
sql>alter database datafile "d:\...\df1.dbf" resize 800m
資料庫檔案的自動擴展特性
請看下面的例子:
sql>alter tablespace tbs1 add datafile "d:\...\df2.dbf" size 500m autoextend on next 50m maxsize 1000m
sql>alter database mydb1 datafile "d:\...\df2.dbf","d:\...\df3.dbf" autoexetend off
sql>alter database mydb1 datafile "d:\...\df2.dbf","d:\...\df3.dbf" autoexetend on next 30m maxsize unlimited