數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構 它包括數據元素的表示和關系的表示
物理結構 即oracle數據庫使用的操作系統文件結構 對於數據庫物理結構文件 不同的oracle版本 不同的操作系統平臺上有不同的存儲目錄結構
winnt | d:oracleproduct oradataDB_NAME * *(oracle g);d:orantdatabase* *(oracle oracle ) Unix | /home/app/oracle/product/ /oradata/DB_NAME/* * ( g);/home/app/oradata/db_name/* *( i i)
數據庫的物理結構文件按其作用可以分為三類
數據文件
日誌文件
控制文件
壹 數據文件
數據文件用來存儲數據庫的數據 如表 索引等 讀取數據時 系統首先從數據庫文件中讀取數據 並存儲到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: df dbf" resize m
數據庫文件的自動擴展特性 請看下面的例子:
sql>alter tablespace tbs add datafile "d: df dbf" size m autoextend on next m maxsize m sql>alter database mydb datafile "d: df dbf" "d: df dbf" autoexetend off sql>alter database mydb datafile "d: df dbf" "d: df dbf" autoexetend on next m maxsize unlimited
二 重做日誌文件
重做日誌文件記錄對數據庫的所有修改信息 它是三類文件中最復雜的壹類文件 也是保證數據庫安全與數據庫備份與恢復有直接關系的文件
日誌文件組與日誌成員
在每壹個oracle數據庫中 至少有兩個重做日誌文件組 每組有壹個個或多個重做日誌文件 即日誌成員 同壹組中的成員是鏡像關系 它們存儲的內容是壹模壹樣的 Oracle在寫日誌時 以壹個日誌組為邏輯單位寫入 只在將日誌都寫入日誌組中的每個成員文件中後 寫日誌才完成
日誌工作原理
Oracle有多個日誌文件組 當壹個日誌文件組中所有的成員所有的成員同時被寫滿數據時 系統自動轉換到下壹個日誌文件組 這個轉換過程稱為日誌切換
當日誌切換後 會給前壹個日誌組編壹個號 用於歸檔日誌的編號 這個編號稱為日誌序列號 此編號由 開始 每切換壹次 序列號自動加 最大值受參數MAXLOGHISTORY限制 該參數的最大值為
當oracle把最後壹個日誌組寫滿了以後 自動轉向第壹個日誌組 這時 再向第壹個日誌組寫日誌的時候 如果數據庫運行在非歸檔模式下 這個日誌組中的原有日誌信息就會被覆蓋
使用以下語句查詢日誌文件信息
sql>select * from v$log
相關字段說明如下
GROUP#:日誌文件組號
THREAD#:日誌文件線程號 壹般為 雙機容時為
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:ORAARCHIVE
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/ /control ctl" "home/app/ /control ctl")
參數中各個文件是鏡像關系 也就是說 幾個文件中只要有壹個文件完好 數據庫就可以正常運行
以下語句查詢控制文件的信息
sql>select * from v$controlfile
如果控制文件損壞或丟失 數據庫將終止並且無法啟動 所以 要對控制文件進行鏡象 手工鏡像步驟如下
a 關閉數據庫
b 復制控制文件
c 修改參數文件 加入新增的控制文件位置描述
d 重新啟動數據庫
另外註意 控制文件中還包含幾個服務器參數的設置 如果修改這些參數的值 剛需要重新創建控制文件 這些參數是
MAXLOGFILES:最大日誌文件個數
MAXLOGMEMBERS:最大日誌成員個數
MAXLOGHISTORY:最大歷史日誌個數
MAXDATAFILES:最大數據文件個數
MAXINSTANCES:最大實例文件個數
所有修改數據庫結構的命令都會引起控制文件的改變 同時出會記錄在oracle跟蹤文件中 跟蹤文件的名稱為alter_SID log 路徑如下
d:oracleproduct adminDB_NAMEdumpSIDALRT log(unix是alter_SID ora)
也可以在參數文件中指定跟蹤文件的存儲路徑 後臺進程跟蹤文件目錄由參數background_dump_dest指定 用戶跟蹤文件位置由參數user_bdump_dest指定 如
lishixinzhi/Article/program/SQL/201405/30847