一、 數(shù)據(jù)庫的啟動(dòng)和關(guān)閉
1、Oracle Server主要由兩部分組成:Instance和Database。Instance是指一組后臺進(jìn)程/線程和一塊共享內(nèi)存區(qū)域,
而Database是指存儲在磁盤上的一組物理文件.
2、Oracle數(shù)據(jù)庫的啟動(dòng)主要包含3個(gè)步驟:
(1)啟動(dòng)數(shù)據(jù)庫到nomount(未加載)狀態(tài); startup nomount
(2)啟動(dòng)數(shù)據(jù)庫到mount(加載)狀態(tài); alter database mount
(3)啟動(dòng)數(shù)據(jù)庫到open(打開)狀態(tài); alter database open
3、啟動(dòng)的第一步,Oracle首先尋找參數(shù)文件(pfile/spfile),然后根據(jù)參數(shù)文件中的設(shè)置,創(chuàng)建實(shí)例,分配內(nèi)存,
啟動(dòng)后臺進(jìn)程。
4、Oracle首先spfile<sid>.ora文件作為啟動(dòng)參數(shù)文件;如果該文件不存在,則選擇spfile.ora,
然后是init<sid>.ora文件。
5、在SQL*PLUS中通過show parameter spfile命令來檢查數(shù)據(jù)庫是否使用了spfile文件。
6、參數(shù)文件中,通常需要最少的參數(shù)是 db_name,設(shè)置了這個(gè)參數(shù)之后,數(shù)據(jù)庫實(shí)例就可以啟動(dòng)。
7、查看參數(shù)文件缺省路徑:
show parameter dump_dest
show parameter control_files
show parameter db_name //顯示實(shí)例名
show paramter compatible //顯示兼容
8、在使用RMAN(Recovery Manager)時(shí)存在更為特殊的情況,Oracle允許在不存在參數(shù)文件的情況下啟動(dòng)一個(gè)實(shí)例,
數(shù)據(jù)庫的 db_name會被缺省命名為DUMMY
9、LSNRCTL> status //查看監(jiān)聽狀態(tài)
LSNRCTL> start //啟動(dòng)監(jiān)聽
10、關(guān)閉數(shù)據(jù)庫 shutdown immediate 而非 shutdown, shutdown 會不正常關(guān)閉
shutdown 正常關(guān)閉,等待所有的用戶斷開連接
shutdown immediate 使用這個(gè)命令迫使每個(gè)用戶執(zhí)行完成當(dāng)前的SQL語句后立即斷開連接
shutdown transactional 執(zhí)行Transaction關(guān)閉,迫使用戶在當(dāng)前執(zhí)行完成后斷開連接
shutdown abort 終止實(shí)例,停止所有的操作。恢復(fù)破壞的文件,數(shù)據(jù)庫文件不能同其他數(shù)據(jù)庫文件保持一致
11、啟動(dòng)數(shù)據(jù)庫到mount狀態(tài)
SQL>alter database mount;
在mount數(shù)據(jù)庫過程中,Oracle需要找到控制文件并鎖定控制文件。如果控制文件全部丟失此時(shí)就會報(bào)出如下錯(cuò)誤:
ORA-00205:error in identifying controlfile,check alert log for more info
12、啟動(dòng)數(shù)據(jù)庫open階段
SQL>alter database open;
13、SCN (System Change Number) 系統(tǒng)改變號
//獲取當(dāng)前SCN select dbms_flashback.get_system_change_number from dual;
14、查檢點(diǎn) (Checkpoint) 減少崩潰恢復(fù)(Crash Recovery)時(shí)間
二、參數(shù)及參數(shù)文件
1、初始化參數(shù)的分類,分為3類:推導(dǎo)參數(shù)、操作系統(tǒng)依賴參數(shù)和可變參數(shù)
2、推導(dǎo)參數(shù)(Derived Parameters)
推導(dǎo)參數(shù)通常來自于其他參數(shù)的運(yùn)算,依賴其他參數(shù)得出。所以這類參數(shù)通常不需要修改。如果強(qiáng)制修改,那么修改值會覆蓋推導(dǎo)值。
常見的此類參數(shù)有很多,例如,SESSION參數(shù),在Oracle文檔中,該參數(shù)按以下公式運(yùn)算得出:
SESSION = (1.1*PROCESSES) + 5
缺省情況下,當(dāng)PROCESSES被修改時(shí),此參數(shù)會自動(dòng)計(jì)算并生效
3、操作系統(tǒng)依賴參數(shù)
某些參數(shù)的有效值或取值范圍依賴或者受限于操作系統(tǒng),如db_cache_size參數(shù),設(shè)置Oracle使用的內(nèi)存大小,該參數(shù)的最大值就要
受限于物理內(nèi)存。這一類參數(shù)通常被稱為操作系統(tǒng)依賴參數(shù)。
4.可變參數(shù)
可變參數(shù)通常可以調(diào)整,有些設(shè)置的是限制條件,如OPEN_CURSORS;有的參數(shù)是設(shè)置容量,如DB_CACHE_SIZE等。這類參數(shù)通常可以
為DBA或最終用戶調(diào)整,從而產(chǎn)生限制性能變化,對Oracle至關(guān)重要。
5、初始化參數(shù)通常還有一些其他分類方式
a.按照修改方式劃分,初始化參數(shù)又可以分為靜態(tài)參數(shù)和動(dòng)態(tài)參數(shù)。
靜態(tài)參數(shù)只能在參數(shù)文件中修改,在重新啟動(dòng)后方能生效;動(dòng)態(tài)參數(shù)可以動(dòng)態(tài)調(diào)整,調(diào)整后通常可以立即生效。
b.按照獲取方式不同,初始化參數(shù)又可以分為顯示參數(shù)和隱式參數(shù)。
顯示參數(shù)可以通過v$parameter查詢得到;而隱含參數(shù)通常以“_”開關(guān),必須通過查詢系統(tǒng)表方能獲得這些參數(shù)。
6、SPFILE的搜索順序
重新啟動(dòng)數(shù)據(jù)庫,使用startup命令,Oracle將會按照以下順序在缺省目錄中搜索參數(shù)文件。
(1) spfile<ORACLE_SID>.ora,其缺省目錄如下:
UNIX: $ORACLE_HOME/dbs/
NT: %ORACLE_HOME%\database
(2) spfile.ora,其缺省目錄如下:
UNIX: $ORACLE_HOME/dbs/
NT: %ORACLE_HOME%\database
(3) init<ORACLE_SID>.ora, 其缺省目錄如:
UNIX: $ORACLE_HOME/dbs/
NT: %ORACLE_HOME%\database
創(chuàng)建了spfile,重新啟動(dòng)數(shù)據(jù)庫,Oracle會按順序搜索以上目錄,spfile就會自動(dòng)生效。
7、警報(bào)日志文件
控制警報(bào)日志文件位置的初始化參數(shù)是BACKGROUND_DUMP_DEST:
SQL> show parameter background_dump_dest
其缺省文件名為alert_<sid>.log
三、數(shù)據(jù)字典
1、數(shù)據(jù)字典由4部分組成:內(nèi)部RDBMS(X$)表、數(shù)據(jù)字典表、動(dòng)態(tài)性能(V$)視圖和數(shù)據(jù)字典視圖
2、數(shù)據(jù)字典表(Data Dictionary Table)用以存儲表、索引、約束以及其它數(shù)據(jù)庫結(jié)構(gòu)的信息。
這些對象通常以"$"結(jié)尾(如tab$、obj$、ts$等)
sql.bsq是非常重要的一個(gè)文件,其中包含了數(shù)據(jù)字典表的定義及注釋說明,該文件位于$ORACLE_HOME/rdbms/admin目錄下。
3、動(dòng)態(tài)性能視圖(Dynamic Performance View) 記錄了數(shù)據(jù)庫運(yùn)行時(shí)信息和統(tǒng)計(jì)數(shù)據(jù)
從Oracle 8開始,GV$視圖開始被引入,其含義為Global V$,除了一些特例外,每個(gè)V$視圖都有一個(gè)對應(yīng)的GV$視圖存在。
注意,每個(gè)V$視圖都包含類似語句:
where inst_id = USERENV('Instance')
用于限制返回當(dāng)前實(shí)例信息
4、Oracle的X$表信息可以從v$fixed_table中查到:
SQL> select count(*) from v$fixed_table where name like 'X$%';
四、內(nèi)存管理
1、SGA 指系統(tǒng)全局區(qū)(System Global Area)
一塊用于加載數(shù)據(jù)、對象并保存運(yùn)行狀態(tài)和數(shù)據(jù)庫控制信息的一塊內(nèi)存區(qū)域,在數(shù)據(jù)庫實(shí)例啟動(dòng)時(shí)分配,當(dāng)實(shí)例關(guān)閉時(shí)釋放,
每個(gè)實(shí)例都擁有自己的SGA區(qū)
2、數(shù)據(jù)緩沖區(qū) (Buffer Cache) 的大小由初始化參數(shù)db_cache_size (8i中是db_block_size*db_block_buffers)決定
3、對于SGA各部分設(shè)置,可以從數(shù)據(jù)庫的視圖中查詢得到:
select * from v$sga;
show sga
4、SGA總和受參數(shù)SGA_MAX_SIZE設(shè)置的影響
show parameter sga_max_size
Variable Size 包括 shared_pool_size、java_pool_size和large_pool_size部分
五、Buffer Cache 與 Shared Pool 原理
Buffer Cache 與 Shared Pool是SGA中的最重要和最復(fù)雜的兩個(gè)部分
1、在Buffer Cache中,Oracle通過幾個(gè)鏈表進(jìn)行內(nèi)存管理,其中最為熟知的是LRU List和Dirty List(也經(jīng)常被稱為Write List,從8i開始,
因?yàn)樗惴ǖ母淖儯脖环Q為Checkpoint Queue),各種List上存放的是指向具體Buffer的指針。
六、重做(Redo)
1、重做(Redo)和撤消(Undo)是Oracle的重要特性,用以保證事務(wù)的可恢復(fù)性和可撤消性。
2、在數(shù)據(jù)庫中,Redo的功能主要通過3個(gè)組件來實(shí)現(xiàn):Redo Log Buffer、LGWR后臺進(jìn)程和Redo Log File(在歸檔模式下,
Redo Log File最終會寫出為歸檔日志文件)
3、日志文件的狀態(tài):CURRENT、ACTIVE、INACTIVE和UNUSED
(1).CURRENT
指當(dāng)前的日志文件,該日志文件是活動(dòng)的,當(dāng)前正在被使用的,在進(jìn)行崩潰恢復(fù)時(shí),CURRENT的日志文件是必須的。
(2).ACTIVE
指活動(dòng)的非當(dāng)前日志,該日志可以已經(jīng)完成歸檔也可能沒有歸檔,活動(dòng)的日志文件在Crash恢復(fù)時(shí)會被用到。
(3).INACTIVE
指非活動(dòng)日志,該日志在實(shí)例恢復(fù)時(shí)不再需要,但是在介質(zhì)恢復(fù)時(shí)可能會用到。
日志是否完成歸檔,可以根據(jù)V$LOG.ARCHIVED字段進(jìn)行判斷
select * from v$log;
(4).UNUSED
指該日志從未被定入,這類日志可能是剛被添加到數(shù)據(jù)庫或者在RESETLOGS之后被重置。被使用之后,該狀態(tài)會被改變。
七、等待事件
1、通過查詢V$EVENT_NAME視圖
select count(*) from v$evnet_name;
2、等待事件可以分為空閑(idle)等待和非空閑(non-idle)等待事件
.空閑事件指Oracle正等待某種工作,在診斷和優(yōu)化數(shù)據(jù)庫的時(shí)候,不用過多注意這部分事件。
.非空閑等待事件專門針對Oracle的活動(dòng),指數(shù)據(jù)庫任務(wù)或應(yīng)用運(yùn)行過程中發(fā)生的等待,在調(diào)整數(shù)據(jù)庫的時(shí)候應(yīng)該關(guān)注與研究