一、oracle的體系結構
1、物理結構(由控制文件、數據文件、重做日志文件、參數文件、歸檔文件、口令文件組成)
一個(gè)數據庫中的數據存儲在磁盤(pán)上物理文件,被使用時(shí),調入內存。
其中控制文件、數據文件、重做日志文件、跟蹤文件及警告日志(trace files,alert files)屬于數據庫文件;
參數文件(parameter file)口令文件(password file)是非數據庫文件
1.1數據文件:存儲數據的文件.數據文件典型地代表了根據他們使用的磁盤(pán)空間和數量所決定的一個(gè)Oracle數據庫的容積。
由于性能原因,每一種類(lèi)型的數據放在相應的一個(gè)或一系列文件中,將這些文件放在不同的磁盤(pán)中。
types:
.data dictionary .data
.redo data .index
.temporary data 等等
1.2控制文件:包含維護和驗證數據庫完整性的必要信息、例如,控制文件用于識別數據文件和重做日志文件,一個(gè)數據庫至少需要一個(gè)控制文件.
控制文件內容
。數據庫名
。表空間信息
。所有數據文件的名字和位置
。所有redo日志文件的名字和位置
。當前的日志序列號
。檢查點(diǎn)信息
。關(guān)于redo日志和歸檔的當前狀態(tài)信息
控制文件的使用過(guò)程
控制文件把Oracle引導到數據庫文件的其它部分。啟動(dòng)一個(gè)實(shí)例時(shí),Oracle 從參數文件中讀取控制文件的名字和位置。安裝數據庫時(shí),Oracle 打開(kāi)控制文件。最終打開(kāi)數據庫時(shí),Oracle 從控制文件中讀取數據文件的列表并打開(kāi)其中的每個(gè)文件。
1.3重做日志文件:
含對數據庫所做的更改記錄,這樣萬(wàn)一出現故障可以啟用數據恢復。一個(gè)數據庫至少需要兩個(gè)重做日志文件.
1.4 跟蹤文件及警告日志(Trace Files and Alert Files)
在instance 中運行的每一個(gè)后臺進(jìn)程都有一個(gè)跟蹤文件(trace file)與之相連。Trace file 記載后臺進(jìn)程所遇到的重大事件的信息。
警告日志( Alert Log)是一種特殊的跟蹤文件,每個(gè)數據庫都有一個(gè)跟蹤文件,同步記載數據庫的消息和錯誤.
1.5參數文件:包括大量影響Oracle數據庫實(shí)例功能的設定,如以下設定:
。數據庫控制文件的定位
。Oracle用來(lái)緩存從磁盤(pán)上讀取的數據的內存數量
。默認的優(yōu)化程序的選擇.
和數據庫文件相關(guān),執行兩個(gè)重要的功能
1〉為數據庫指出控制文件
2〉為數據庫指出歸檔日志的目標
1.6歸檔文件:是重做日志文件的脫機副本,這些副本可能對于從介質(zhì)失敗中進(jìn)行恢復很必要。
1.7口令文件:認證哪些用戶(hù)有權限啟動(dòng)和關(guān)閉Oracle例程.
2、邏輯結構(表空間、段、區、塊)
表空間:是數據庫中的基本邏輯結構,一系列數據文件的集合。
段:是對象在數據庫中占用的空間.
區:是為數據一次性預留的一個(gè)較大的存儲空間.
塊:ORACLE最基本的存儲單位,在建立數據庫的時(shí)候指定.
3、內存分配(SGA和PGA)
SGA:是用于存儲數據庫信息的內存區,該信息為數據庫進(jìn)程所共享。它包含Oracle 服務(wù)器的數據和控制信息,它是在Oracle服務(wù)器所駐留的計算機的實(shí)際內存中得以分配,如果實(shí)際內存不夠再往虛擬內存中寫(xiě)。
PGA:包含單個(gè)服務(wù)器進(jìn)程或單個(gè)后臺進(jìn)程的數據和控制信息,與幾個(gè)進(jìn)程共享的SGA 正相反,PGA 是只被一個(gè)進(jìn)程使用的區域,PGA 在創(chuàng )建進(jìn)程時(shí)分配,在終止進(jìn)程時(shí)回收.
4、后臺進(jìn)程
包括數據寫(xiě)進(jìn)程(Database Writer,DBWR)、日志寫(xiě)進(jìn)程(Log Writer,LGWR)、系統監控(System Monitor,SMON)、進(jìn)程監控(Process Monitor,PMON)、檢查點(diǎn)進(jìn)程(Checkpoint Process,CKPT)、歸檔進(jìn)程、服務(wù)進(jìn)程、用戶(hù)進(jìn)程)
數據寫(xiě)進(jìn)程:負責將更改的數據從數據庫緩沖區高速緩存寫(xiě)入數據文件
日志寫(xiě)進(jìn)程:將重做日志緩沖區中的更改寫(xiě)入在線(xiàn)重做日志文件
系統監控:檢查數據庫的一致性如有必要還會(huì )在數據庫打開(kāi)時(shí)啟動(dòng)數據庫的恢復
進(jìn)程監控:負責在一個(gè)Oracle 進(jìn)程失敗時(shí)清理資源
檢查點(diǎn)進(jìn)程:負責在每當緩沖區高速緩存中的更改永久地記錄在數據庫中時(shí),更新控制文件和數據文件中的數據庫狀態(tài)信息。該進(jìn)程在檢查點(diǎn)出現時(shí),對全部數據文件的標題進(jìn)行修改,指示該檢查點(diǎn)。在通常的情況下,該任務(wù)由LGWR執行。然而,如果檢查點(diǎn)明顯地降低系統性能時(shí),可使CKPT進(jìn)程運行,將原來(lái)由LGWR進(jìn)程執行的檢查點(diǎn)的工作分離出來(lái),由CKPT進(jìn)程實(shí)現。對于許多應用情況,CKPT進(jìn)程是不必要的。只有當數據庫有許多數據文件,LGWR在檢查點(diǎn)時(shí)明顯地降低性能才使CKPT運行。CKPT進(jìn)程不將塊寫(xiě)入磁盤(pán),該工作是由DBWR完成的。 init.ora文件中 CHECKPOINT_PROCESS 參數控制CKPT進(jìn)程的使能或使不能。缺省時(shí)為FALSE,即為使不能。
歸檔進(jìn)程:在每次日志切換時(shí)把已滿(mǎn)的日志組進(jìn)行備份或歸檔
服務(wù)進(jìn)程:用戶(hù)進(jìn)程服務(wù)。
用戶(hù)進(jìn)程:在客戶(hù)端,負責將用戶(hù)的SQL語(yǔ)句傳遞給服務(wù)進(jìn)程,并從服務(wù)器段拿回查詢(xún)數據。
5、SCN(System ChangeNumber):
系統改變號,一個(gè)由系統內部維護的序列號。當系統需要更新的時(shí)候自動(dòng)增加,他是系統中維持數據的一致性和順序恢復的重要標志。
小結:
1.一個(gè)表空間只能屬于一個(gè)數據庫。
2.每個(gè)數據庫最少有一個(gè)控制文件(建議3個(gè),分別放在不同的磁盤(pán)上)?! ?.每個(gè)數據庫最少有一個(gè)表空間(SYSTEM表空間)。
4.建立SYSTEM表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應存放數據字典。
5.每個(gè)數據庫最少有兩個(gè)聯(lián)機日志組,每組最少一個(gè)聯(lián)機日志文件。
6.一個(gè)數據文件只能屬于一個(gè)表空間。
7.一個(gè)數據文件一旦被加入到一個(gè)表空間中,就不能再從這個(gè)表空間中移走,也不能再加入到其他表空間中。
8.建立新的表空間需要建立新的數據文件。
9.數據文件被ORACLE格式化為ORACLE塊,Oracle9i以前版本中,ORACLE塊的大小是在第一次創(chuàng )建數據庫時(shí)設定的。
10.并且以后不能改變,要想改變,只能重建數據庫。
11.一個(gè)段segment只能屬于一個(gè)表空間,但可以屬于多個(gè)數據文件。
12.一個(gè)區extent只能屬于一個(gè)數據文件,即區間(extent)不能跨越數據文件。
13.PCTFREE和PCTUSED總和不能大于等于100。
14.單獨一個(gè)事務(wù)不能跨越多個(gè)回滾段。
15.索引表不含ROWID值。
16.擁有不同大小的回滾段沒(méi)有任何益處。
17.COMMIT后,數據不一定立即寫(xiě)盤(pán)(數據文件)。
18.一個(gè)事務(wù)即使不被提交,也會(huì )被寫(xiě)入到重做日志中。
19.Oracle 8.0.4中,在初始安裝時(shí)建立的缺省數據庫,實(shí)例名為ORCL 。
20.一個(gè)塊的最大長(cháng)度為16KB(有2K、4K、8K、16K)?! ∶總€(gè)數據庫最大文件數(按塊大?。?div style="height:15px;">
2K塊 20000個(gè)文件
4K塊 40000個(gè)文件
8K塊或以上 65536個(gè)文件
21.oracle server可以同時(shí)啟動(dòng)多個(gè)數據庫 。
22.一套操作系統上可以安裝多個(gè)版本的ORACLE數據庫系統(UNIX可以,NT不可以)。
23.一套ORACLE數據庫系統中可以有多個(gè)ORACLE數據庫及其相對應的實(shí)例 。
24.每個(gè)ORACLE數據庫擁有一個(gè)數據庫實(shí)例(INSTANCE)(OPS除外)。25.所以,一套操作系統上同時(shí)可以有多個(gè)oracle數據庫實(shí)例啟動(dòng)。
二、ORACLE性能調優(yōu)原則
任何事情都有它的源頭,要解決問(wèn)題,也得從源頭開(kāi)始,影響ORACLE性能的源頭非常多,主要包括如下方面:
數據庫的硬件配置:CPU、內存、網(wǎng)絡(luò )條件
1. CPU:在任何機器中CPU的數據處理能力往往是衡量計算機性能的一個(gè)標志,并且ORACLE是一個(gè)提供并行能力的數據庫系統,在CPU方面的要求就更高了,如果運行隊列數目超過(guò)了CPU處理的數目,性能就會(huì )下降,我們要解決的問(wèn)題就是要適當增加CPU的數量了,當然我們還可以將需要許多資源的進(jìn)程KILL掉;
2. 內存:衡量機器性能的另外一個(gè)指標就是內存的多少了,在ORACLE中內存和我們在建數據庫中的交換區進(jìn)行數據的交換,讀數據時(shí),磁盤(pán)I/O必須等待物理I/O操作完成,在出現ORACLE的內存瓶頸時(shí),我們第一個(gè)要考慮的是增加內存,由于I/O的響應時(shí)間是影響ORACLE性能的主要參數,我將在這方面進(jìn)行詳細的講解
3. 網(wǎng)絡(luò )條件:NET*SQL負責數據在網(wǎng)絡(luò )上的來(lái)往,大量的SQL會(huì )令網(wǎng)絡(luò )速度變慢。比如10M的網(wǎng)卡和100的網(wǎng)卡就對NET*SQL有非常明顯的影響,還有交換機、集線(xiàn)器等等網(wǎng)絡(luò )設備的性能對網(wǎng)絡(luò )的影響很明顯,建議在任何網(wǎng)絡(luò )中不要試圖用3個(gè)集線(xiàn)器來(lái)將網(wǎng)段互聯(lián)。
OS參數的設置
下表給出了OS的參數設置及說(shuō)明,DBA可以根據實(shí)際需要對這些參數進(jìn)行設置
內核參數名
說(shuō)明
bufpages
對buffer空間不按靜態(tài)分配,采用動(dòng)態(tài)分配,使bufpages值隨nbuf一起對buffer空間進(jìn)行動(dòng)態(tài)分配。
create_fastlinks
對HFS文件系統允許快速符號鏈接
dbc_max_pct
加大最大動(dòng)態(tài)buffer空間所占物理內存的百分比,以滿(mǎn)足應用系統的讀寫(xiě)命中率的需要。
dbc_min_pct
設置最小動(dòng)態(tài)buffer空間所占物理內存的百分比
desfree
提高開(kāi)始交換操作的最低空閑內存下限,保障系統的穩定性,防止出現不可預見(jiàn)的系統崩潰(Crash)。
fs_async
允許進(jìn)行磁盤(pán)異步操作,提高CPU和磁盤(pán)的利用率
lotsfree
提高系統解除換頁(yè)操作的空閑內存的上限值,保證應用程序有足夠的可用內存空間。
maxdsiz
針對系統數據量大的特點(diǎn),加大最大數據段的大小,保證應用的需要。(32位)
maxdsiz_64bit
maximum process data segment size for 64_bit
Maxssiz
加大最大堆棧段的大小。(32_bit)
maxssiz_64bit
加大最大堆棧段的大小。(64_bit)
Maxtsiz
提高最大代碼段大小,滿(mǎn)足應用要求
maxtsiz_64bit
原值過(guò)大,應調小
Minfree
提高停止交換操作的自由內存的上限
Shmem
允許進(jìn)行內存共享,以提高內存的利用率
Shmmax
設置最大共享內存段的大小,完全滿(mǎn)足目前的需要
Timeslice
由于系統的瓶頸主要反映在磁盤(pán)I/O上,因此 降低時(shí)間片的大小,一方面可避免因磁盤(pán)I/O不暢造成CPU的等待,從而提高了CPU的綜合利用率。另一方面減少了進(jìn)程的阻塞量。
unlockable_mem
提高了不可鎖內存的大小,使可用于換頁(yè)和交換的內存空間擴大,用以滿(mǎn)足系統對內存管理的要求。
用戶(hù)SQL質(zhì)量
以上講的都是硬件方面的東西,在條件有限的條件下,我們可以調整應用程序的SQL質(zhì)量:
1. 不要進(jìn)行全表掃描(Full Table Scan):全表掃描導致大量的I/O
2. 盡量建好和使用好索引:建索引也是有講究的,在建索引時(shí),也不是索引越多越好,當一個(gè)表的索引達到4個(gè)以上時(shí),ORACLE的性能可能還是改善不了,因為OLTP系統每表超過(guò)5個(gè)索引即會(huì )降低性能,而且在一個(gè)sql 中, Oracle 從不能使用超過(guò) 5個(gè)索引;當我們用到GROUP BY和ORDER BY時(shí),ORACLE就會(huì )自動(dòng)對數據進(jìn)行排序,而ORACLE在INIT.ORA中決定了sort_area_size區的大小,當排序不能在我們給定的排序區完成時(shí),ORACLE就會(huì )在磁盤(pán)中進(jìn)行排序,也就是我們講的臨時(shí)表空間中排序, 過(guò)多的磁盤(pán)排序將會(huì )令 free buffer waits 的值變高,而這個(gè)區間并不只是用于排序的,對于開(kāi)發(fā)人員我提出如下忠告:
1)、select,update,delete 語(yǔ)句中的子查詢(xún)應當有規律地查找少于20%的表行.如果一個(gè)語(yǔ)句查找的行數超過(guò)總行數的20%,它將不能通過(guò)使用索引獲得性能上的提高.
2)、索引可能產(chǎn)生碎片,因為記錄從表中刪除時(shí),相應也從表的索引中刪除.表釋放的空間可以再用,而索引釋放的空間卻不能再用.頻繁進(jìn)行刪除操作的被索引的表,應當階段性地重建索引,以避免在索引中造成空間碎片,影響性能.在許可的條件下,也可以階段性地truncate表,truncate命令刪除表中所有記錄,也刪除索引碎片.
3)、在使用索引時(shí)一定要按索引對應字段的順序進(jìn)行引用。
4)、用(+)比用NOT IN更有效率。
降低ORACLE的競爭:
先講幾個(gè)ORACLE的幾個(gè)參數,這幾個(gè)參數關(guān)系到ORACLE的競爭:
1)、freelists 和 freelist 組:他們負責ORACLE的處理表和索引的空間管理;
2)、pctfree 及 pctused:該參數決定了freelists 和 freelist 組的行為,pctfree 和pctused 參數的唯一目的就是為了控制塊如何在 freelists 中進(jìn)出
設置好pctfree 及 pctused對塊在freelists的移走和讀取很重要。
其他參數的設置
1)、包括SGA區(系統全局區):系統全局區(SGA)是一個(gè)分配給Oracle 的包含一個(gè) Oracle 實(shí)例的數據庫的控制信息內存段。
主要包括數據庫高速緩存(the database buffer cache),
重演日志緩存(the redo log buffer),
共享池(the shared pool),
數據字典緩存(the data dictionary cache)以及其它各方面的信息
2)、db_block_buffers(數據高速緩沖區)訪(fǎng)問(wèn)過(guò)的數據都放在這一片內存區域,該參數越大,Oracle在內存中找到相同數據的可能性就越大,也即加快了查詢(xún)速度。
3)、share_pool_size (SQL共享緩沖池):該參數是庫高速緩存和數據字典的高速緩存。
4)、Log_buffer (重演日志緩沖區)
5)、sort_area_size(排序區)
6)、processes (同時(shí)連接的進(jìn)程數)
7)、db_block_size (數據庫塊大?。篛racle默認塊為2KB,太小了,因為如果我們有一個(gè)8KB的數據,則2KB塊的數據庫要讀4次盤(pán),才能讀完,而8KB塊的數據庫只要1次就讀完了,大大減少了I/O操作。數據庫安裝完成后,就不能再改變db_block_size的值了,只能重新建立數據庫并且建庫時(shí),要選擇手工安裝數據庫。
8)、open_links (同時(shí)打開(kāi)的鏈接數)
9)、dml_locks
10)、open_cursors (打開(kāi)光標數)
11)、dbwr_io_slaves (后臺寫(xiě)進(jìn)程數)
三、oracle的備份與恢復
Oracle數據庫有三種標準的備份方法,它們分別是導出/導入(EXP/IMP)、熱備份和冷備份。導出備件是一種邏輯備份,冷備份和熱備份是物理備份。
導出/導入(Export/Import)
利用Export可將數據從數據庫中提取出來(lái),利用Import則可崛〕隼吹氖菟突氐絆racle數據庫中去。
1、 簡(jiǎn)單導出數據(Export)和導入數據(Import)
Oracle支持三種方式類(lèi)型的輸出:
(1)、表方式(T方式),將指定表的數據導出。
(2)、用戶(hù)方式(U方式),將指定用戶(hù)的所有對象及數據導出。
(3)、全庫方式(Full方式),瘵數據庫中的所有對象導出。
數據導入(Import)的過(guò)程是數據導出(Export)的逆過(guò)程,分別將數據文件導入數據庫和將數據庫數據導出到數據文件。
2、 增量導出/導入
增量導出是一種常用的數據備份方法,它只能對整個(gè)數據庫來(lái)實(shí)施,并且必須作為SYSTEM來(lái)導出。在進(jìn)行此種導出時(shí),系統不要求回答任何問(wèn)題。導出文件名缺省為export.dmp,如果不希望自己的輸出文件定名為export.dmp,必須在命令行中指出要用的文件名。
增量導出包括三種類(lèi)型:
(1)、“完全”增量導出(Complete)
即備份三個(gè)數據庫,比如:
exp system/manager inctype=complete file=040731.dmp
(2)、“增量型”增量導出
備份上一次備份后改變的數據,比如:
exp system/manager inctype=incremental file=040731.dmp
(3)、“累積型”增量導出
累計型導出方式是導出自上次“完全”導出之后數據庫中變化了的信息。比如:
exp system/manager inctype=cumulative file=040731.dmp
數據庫管理員可以排定一個(gè)備份日程表,用數據導出的三個(gè)不同方式合理高效的完成。
比如數據庫的被封任務(wù)可以做如下安排:
星期一:完全備份(A)
星期二:增量導出(B)
星期三:增量導出(C)
星期四:增量導出(D)
星期五:累計導出(E)
星期六:增量導出(F)
星期日:增量導出(G)
四、常用命令
1.啟動(dòng)Oracle Server.
Startup[nomount|mount|open][force][pfile=filename]
參數說(shuō)明:
nomount:只啟動(dòng)實(shí)例
mount:?jiǎn)?dòng)實(shí)例,并裝載數據庫
open:?jiǎn)?dòng)實(shí)例,裝載并打開(kāi)數據庫。
Force:終止實(shí)例,并重新啟動(dòng)數據庫。(默認選項)
Pfile:指定非默認參數文件名。
2.停止Oracle Server
Shutdown [normal|transactional|immediate|abort]
參數說(shuō)明:
normal:等待用戶(hù)斷開(kāi)已存在連接,系統發(fā)出檢查點(diǎn),然后在同步數據文件、控制文
和重做日志文件之后關(guān)閉(默認選項)
transactional:等待客戶(hù)端結束事務(wù)之后,自動(dòng)斷開(kāi)用戶(hù)連接,然后再執行normal。
Immediate:取消當前所有SQL語(yǔ)句,回退所有未完成事務(wù),然后自動(dòng)斷開(kāi),再執行normal。
Abort:終止所有SQL語(yǔ)句,立即終止實(shí)例。不會(huì )發(fā)出檢查點(diǎn),所以也就不會(huì )去同步數據文件、控制文件和重做日志文件。
3. 總結和相關(guān)的一些腳本
A. 修改數據文件名、執行完全恢復、執行不完全恢復、改變日志操作模式時(shí)系統必須在啟動(dòng)實(shí)例并安裝數據庫的情況下startup mount;)
B. 創(chuàng )建數據庫或創(chuàng )建控制文件時(shí)系統只處于啟動(dòng)實(shí)例狀態(tài)(startup nomount;)
C. 顯示SGA尺寸(show sga或select * from v$sga)
D.顯示當前正在運行的后臺進(jìn)程(select name from v$bgprocess where paddr != ‘00’)
E. 顯示Oracle Server狀態(tài)(select status from v$instance)
F. 顯示初始化參數信息(select * from v$parameter);
G.顯示物理文件(select * from v$controfile; select * from v$datafile; select * from v$logfile);
H. 部分數據字典試圖:
all_objects, user_objects, dba_objects, user_source, user_segments,
user_tab_columns, user_constraints, all_users
I.為了客戶(hù)應用可以訪(fǎng)問(wèn)Oracle Server,在服務(wù)器端需要配置listener.ora文件,在客戶(hù)端需配置tnsnames.ora文件
第三章 控制文件
1.控制文件主要記載的信息:
數據庫名稱(chēng);數據庫文件名稱(chēng)和位置;重做日志文件名稱(chēng)和位置;表空間名稱(chēng);
當前日志序列號; 檢查點(diǎn)信息; 日志歷史信息。
2. 多元化控制文件
1. 關(guān)閉數據庫
sqlplus/nolog;
connect system/admin@lgtest as sysdba;
shutdown immediate;
2. 復制控制文件
copy source controlfile to dest controlfile
例如:copy E:\oracle\oradata\lgtest\CONTROL01.CTL f:\controltest.ctl
3. 修改初始化參數control_files
control_files= E:\oracle\oradata\lgtest\CONTROL01.CTL, f:\controltest.ctl
4. 啟動(dòng)數據庫
startup pfile= E:\oracle\admin\lgtest\pfile\ init.ora.108200317263
其作用:多元化控制文件后,只要有一個(gè)控制文件沒(méi)有被損壞,把其它損壞的控制文件從初始化參數文件中去掉重啟之后系統可以繼續運行。
3. 重建控制文件的方法
1. 以nomount方式啟動(dòng)實(shí)例
sqlplus/nolog;
connect system/admin@lgtest as sysdba;
shutdown normal;
startup nomount pfile=%racle_home%\database\init.ora;
2. 建立控制文件
create controlfile reuse database lgtest resetlogs
logfile
group 1 ‘E:\oracle\oradata\lgtest\ REDO01.LOG’ size 20M,
group 2 ‘E:\oracle\oradata\lgtest\ REDO02.LOG’ size 20M
datafile
‘E:\oracle\oradata\lgtest\ SYSTEM01.DBF’,
‘E:\oracle\oradata\lgtest\ UNDOTBS01.DBF’
character set ZHS16GBK;
3. 打開(kāi)數據庫
alter database open resetlogs;
4. 增加臨時(shí)文件
a lter tablespace temp add tempfile ‘E:\oracle\oradata\lgtest\TEMP01.DBF’ reuse;
起作用:當控制文件都被損壞后,只要有全部的數據文件和重做日志文件,那么通過(guò)重建控制文件可以使系統繼續運行。