數據結構在計算機中的表示(映像)稱為數據的物理(存儲)結構它包括數據元素的表示和關系的表示
物理結構即oracle數據庫使用的操作系統文件結構對於數據庫物理結構文件不同的oracle版本不同的操作系統平台上有不同的存儲目錄結構
winnt | d:oracleproductoradataDB_NAME
**(oracle g);d:orantdatabase**(oracleoracle)
Unix | /home/app/oracle/product//oradata/DB_NAME/**
(g);/home/app/oradata/db_name/**(ii)
數據庫的物理結構文件按其作用可以分為三類
數據文件
日志文件
控制文件
一數據文件
數據文件用來存儲數據庫的數據如表索引等讀取數據時系統首先從數據庫文件中讀取數據並存儲到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:dfdbf" resize m
數據庫文件的自動擴展特性請看下面的例子:
sql>alter tablespace tbs add datafile
"d:dfdbf" size m autoextend
on next m maxsize m
sql>alter database mydb datafile
"d:dfdbf""d:dfdbf" autoexetend off
sql>alter database mydb datafile
"d:dfdbf""d:dfdbf" 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
要將數據庫改為歸檔模式
aalter database archivelog
b設置初始化參數LOG_ARCHIVE_START=TRUE
c設置歸檔文件目標存儲路徑 LOG_ARCHIVE_DEST=C:ORAARCHIVE
d設置歸檔文件命名格式參數 LOG_ARCHIVE_FORMAT="ORCK%T%SARC"這個格式中的%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//controlctl""home/app//controlctl")
參數中各個文件是鏡像關系也就是說幾個文件中只要有一個文件完好數據庫就可以正常運行
以下語句查詢控制文件的信息
sql>select * from v$controlfile
如果控制文件損壞或丟失數據庫將終止並且無法啟動所以要對控制文件進行鏡象手工鏡像步驟如下
a關閉數據庫
b復制控制文件
c修改參數文件加入新增的控制文件位置描述
d重新啟動數據庫
另外注意控制文件中還包含幾個服務器參數的設置如果修改這些參數的值剛需要重新創建控制文件這些參數是
MAXLOGFILES:最大日志文件個數
MAXLOGMEMBERS:最大日志成員個數
MAXLOGHISTORY:最大歷史日志個數
MAXDATAFILES:最大數據文件個數
MAXINSTANCES:最大實例文件個數
所有修改數據庫結構的命令都會引起控制文件的改變同時出會記錄在oracle跟蹤文件中跟蹤文件的名稱為alter_SIDlog路徑如下
d:oracleproductadminDB_NAMEdumpSIDALRTlog(unix是alter_SIDora)
也可以在參數文件中指定跟蹤文件的存儲路徑後台進程跟蹤文件目錄由參數background_dump_dest指定用戶跟蹤文件位置由參數user_bdump_dest指定如
background_bdump_dest=/u/app/oracle/oralog/bdump
user_bdump_dest=/u/app//oralog/udump
From:http://tw.wingwit.com/Article/program/SQL/201405/30847.html