ORACLE體系結構分析報告_第1頁
ORACLE體系結構分析報告_第2頁
ORACLE體系結構分析報告_第3頁
ORACLE體系結構分析報告_第4頁
ORACLE體系結構分析報告_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 窗體頂端DotNet Java DataMining知識改變命運,DataMining,Java,C/C+ 博客園: 首頁: 新隨筆: 聯(lián)系: 訂閱: 管理posts - 29, comments - 22, trackbacks - 0 與我聯(lián)系 發(fā)短消息搜索常用 我的隨筆 我的空間 我的短信 我的評論 更多 我的參與 我的新聞 最新評論 我的標簽留言簿(9) 給我留言 查看留言隨筆檔案(29) 2006年3月 (1) 2006年2月 (5) 2006年1月 (10) 2005年11月 (1) 2005年7月 (1) 2005年1月 (6) 2004年12月 (2) 2004年11月 (3

2、)文章檔案(1) 2004年11月 (1)相冊 什剎海數(shù)據(jù)挖掘blog 數(shù)據(jù)挖掘列表 我的Google主頁 我的Google主頁,English Home Page數(shù)據(jù)挖掘經典資源 rabbit blog 月亮的別稱 moon。如:兔魄,兔輪,兔月(月亮的別名);兔鉤(彎月);兔宮(月宮);兔起鳥沉(月出日落);兔輝(月光);兔闕(月宮);兔華(明月)最新隨筆 1.經過2個星期的日夜奮戰(zhàn),終于答辯完了 2.已經信息化的我們能否想起使用或第一想起用信息化的手段辦事 3.對一個懶散的國家或個人,沒有什么比成功更令人鼓舞 4.8小時是能做很多事的 5.這幾天做論文,作為消遣看了一本很棒的書金錢魔杖現(xiàn)

3、代猶太商法 6.新的年又完全開始了,回到了,一切又是那么忙碌。 7.生活工作無小事 8.把有限的精力放在最有意義的事上 9.保爾柯察金的那句話太對了,原來人最不能忍受的是碌碌無為 10.sql交叉查詢 11.SqlServer如何生成動態(tài)交叉表查詢-zz 12.玖玖精品軟件下載基地,當前最棒的軟件基地 13.管理十大經典理論終生受用 14.成長中應該知道的20個故事-不錯的噢 15.05年最經典語言解析 16.2006年,希望是我更有收獲的一年,也是大家更有成就的一年 17.ORACLE 體系結構(Architecture of ORACLE) 18.中國軟件業(yè)失望與希望-超有理的文章 19.

4、論程序員應具備的職業(yè)素質 20.Oracle 常用命令大匯總最新評論 1.re: Internet與Intranet中的人工智能技術 不錯的容,容信息很多,了解不少相關信息。幸苦了樓主。 -孤劍閱讀排行榜 1.05年最經典語言解析(3915) 2.JDBC的作用與重要接口(2040) 3.世界500強名稱中英對照 (1877) 4.數(shù)據(jù)挖掘術語簡介(1703) 5.Oracle 常用命令大匯總(1261)評論排行榜 1.數(shù)據(jù)挖掘術語簡介(5) 2.歡迎大家訪問我的blog(4) 3.Internet與Intranet中的人工智能技術(3) 4.已經信息化的我們能否想起使用或第一想起用信息化的手

5、段辦事(2) 5.ORACLE 體系結構(Architecture of ORACLE)(1)ORACLE 體系結構(Architecture of ORACLE)ORACLE 體系結構(Architecture of ORACLE)第一部分:ORACLE8i體系結構第一章. 概要在本章里你可以了解以下容1、理解ORACLE 實例的組成2、理解ORACLE 數(shù)據(jù)庫的組成3、理解ORACLE存結構的組成4、理解后臺進程的作用與分工5、理解數(shù)據(jù)庫的物理文件與對應的邏輯結構6、理解ORACLE的整體構架第二章. 理解ORACLE實例2.1 ORACLE SERVERORACLE是一個可移植的數(shù)據(jù)庫它

6、在相關的每一個平臺上都可以使用,即所謂的跨平臺特性。在不同的操作系統(tǒng)上也略有差別,如在UNIX/LINUX上,ORACLE是多個進程實現(xiàn)的,每一個主要函數(shù)都是一個進程;而在Windows上,則是一個單一進程,但是在該進程中包含多個線程。但是從整體構架上來看,ORACLE在不同的平臺上是一樣的,如存結構、后臺進程、數(shù)據(jù)的存儲。一個運行著的ORACLE數(shù)據(jù)庫就可以看成是一個ORACLE SERVER,該SERVER由數(shù)據(jù)庫(Database)和實例(Instance)組成,在一般的情況下一個ORACLE SERVER包含一個實例和一個與之對應的數(shù)據(jù)庫,但是在特殊情況下,如8i的OPS,9i的RAC

7、,一個SERVER中一個數(shù)據(jù)庫可以對應多個實例。一系列物理文件(數(shù)據(jù)文件,控制文件,聯(lián)機日志等)的集合或與之對應的邏輯結構(表空間,段等)被稱為數(shù)據(jù)庫,簡單的說,就是一系列與磁盤有關系的物理文件的組成。ORACLE存結構和后臺進程被成為數(shù)據(jù)庫的實例,一個實例最多只能安裝(Mount)和打開(Open)在一個數(shù)據(jù)庫上,負責數(shù)據(jù)庫的相應操作并與用戶交互。實例與數(shù)據(jù)庫的關系如下圖所示:圖一 ORACLE SERVER2.2 ORACLE存結構 (Memory structure)2.2.1 存結構的組成Oracle存結構主要可以分共享存區(qū)與非共享存區(qū),共享存區(qū)主要包含SGA(System Globa

8、l Area),非共享存區(qū)主要由PGA(Program Global Area)組成,可以用如下圖形表示。圖二 ORACLE MEMOERY STRUCTRUE2.2.2全局共享區(qū)System Global Area(SGA) System Global Area 是一塊巨大的共享存區(qū)域,他被看做是Oracle 數(shù)據(jù)庫的一個大緩沖池,這里的數(shù)據(jù)可以被ORACLE的各個進程共用。其大小可以通過如下語句查看:SQL select * from v$sga;NAME VALUE- -Fixed Size 39816Variable Size 259812784Database Buffers 1.0

9、49E+09Redo Buffers 327680更詳細的信息可以參考V$sgastat、V$buffer_pool主要包括以下幾個部分:共享池(Shared pool)共享池是SGA中最關鍵的存片段,特別是在性能和可伸縮性上。一個太小的共享池會扼殺性能,使系統(tǒng)停止,太大的共享池也會有同樣的效果,將會消耗大量的CPU來管理這個共享池。不正確的使用共享池只會帶來災難。共享池主要又可以分為以下兩個部分:1、SQL語句緩沖(Library Cache)當一個用戶提交一個SQL語句,Oracle會將這句SQL進行分析(parse),這個過程類似于編譯,會耗費相對較多的時間。在分析完這個S

10、QL,Oracle會把他的分析結果給保存在Shared pool的Library Cache中,當數(shù)據(jù)庫第二次執(zhí)行該SQL時,Oracle自動跳過這個分析過程,從而減少了系統(tǒng)運行的時間。這也是為什么第一次運行的SQL 比第二次運行的SQL要慢一點的原因。下面舉例說明parse的時間SQLStartupSQL select count(*) from usertable;COUNT(*)-243Elapsed: 00:00:00.08這是在Share_pool 和Data buffer 都沒有數(shù)據(jù)緩沖區(qū)的情況下所用的時間SQL alter system flush SHARED_POOL;Sys

11、tem altered.清空Share_pool,保留Data bufferSQL select count(*) from usertable;COUNT(*)-243Elapsed: 00:00:00.02SQL select count(*) from usertable;COUNT(*)-243Elapsed: 00:00:00.00從兩句SQL 的時間差上可以看出該SQL 的Parse 時間約為00:00:00.02對于保存在共享池中的SQL語句,可以從V$Sqltext、v$Sqlarea中查詢到,對于編程者來說,要盡量提高語句的重用率,減少語句的分析時間。一個設計的差的應用程序可

12、以毀掉整個數(shù)據(jù)庫的Share pool,提高SQL語句的重用率必須先養(yǎng)成良好的變成習慣,盡量使用Bind變量。2、數(shù)據(jù)字典緩沖區(qū)(Data Dictionary Cache)顯而易見,數(shù)據(jù)字典緩沖區(qū)是ORACLE特地為數(shù)據(jù)字典準備的一塊緩沖池,供ORACLE部使用,沒有什么可以說的。塊緩沖區(qū)高速緩存(Database Buffer Cache)這些緩沖是對應所有數(shù)據(jù)文件中的一些被使用到的數(shù)據(jù)塊。讓他們能夠在存中進行操作。在這個級別里沒有系統(tǒng)文件,,戶數(shù)據(jù)文件,臨時數(shù)據(jù)文件,回滾段文件之分。也就是任何文件的數(shù)據(jù)塊都有可能被緩沖。數(shù)據(jù)庫的任何修改都在該緩沖里完成,并由DBWR進程將修

13、改后的數(shù)據(jù)寫入磁盤。這個緩沖區(qū)的塊基本上在兩個不同的列表中管理。一個是塊的“臟”表(Dirty List),需要用數(shù)據(jù)庫塊的書寫器(DBWR)來寫入,另外一個是不臟的塊的列表(LRU List),一般的情況下,是使用最近最少使用(Least Recently Used,LRU)算法來管理。塊緩沖區(qū)高速緩存又可以細分為以下三個部分(Default pool,Keep pool,Recycle pool)。如果不是人為設置初始化參數(shù)(Init.ora),ORACLE將默認為Default pool。由于操作系統(tǒng)尋址能力的限制,不通過特殊設置,在32位的系統(tǒng)上,塊緩沖區(qū)高速緩存最大可以達到1.7G,

14、在64位系統(tǒng)上,塊緩沖區(qū)高速緩存最大可以達到10G。重做日志緩沖區(qū)(Redo log buffer)重做日志文件的緩沖區(qū),對數(shù)據(jù)庫的任何修改都按順序被記錄在該緩沖,然后由LGWR進程將它寫入磁盤。這些修改信息可能是DML語句,如(Insert,Update,Delete),或DDL語句,如(Create,Alter,Drop等)。重做日志緩沖區(qū)的存在是因為存到存的操作比較存到硬盤的速度快很多,所以重作日志緩沖區(qū)可以加快數(shù)據(jù)庫的操作速度,但是考慮的數(shù)據(jù)庫的一致性與可恢復性,數(shù)據(jù)在重做日志緩沖區(qū)中的滯留時間不會很長。所以重作日志緩沖區(qū)一般都很小,大于3M之后的重作日志緩沖區(qū)已經沒有太

15、大的實際意義。 Java程序緩沖區(qū)(Java Pool)Java 的程序區(qū),Oracle 8I 以后,Oracle 在核中加入了對Java的支持。該程序緩沖區(qū)就是為Java 程序保留的。如果不用Java程序沒有必要改變該緩沖區(qū)的默認大小。大池(Large Pool)大池的得名不是因為大,而是因為它用來分配大塊的存,處理比共享池更大的存,在8.0開始引入。下面對象使用大池:1、 MTS在SGA的Large Pool中分配UGA2、 語句的并行查詢(Parallel Executeion of Statements)允許進程間消息緩沖區(qū)的分配,用來協(xié)調并行查詢服務器3、

16、 備份(Backup)用于RMAN磁盤I/O緩存2.2.3程序共享區(qū) Program Global Area(PGA)Program Global Area(PGA)是用來保存與用戶進程相關的存段,PGA總是由進程或線程在本地分配,其它進程與線程無法訪問。User Global Area(UGA)實際上是會話的狀態(tài),它是會話必須始終能夠得到的存。對于專用服務器進程,UGA在PGA中分配。對于多線程進程,UGA在Large pool中分配。PGA/UGA一般保存了用戶的變量、權限、堆棧、排序(Sort)空間等信息。影響PGA/UGA最大的也就是Sort信息,由初始化參數(shù)sort_area_siz

17、e決定,由于Sort信息分配在UGA中,所以在共享服務器中能更好的利用存。2.3 后臺進程 (Background process)后臺進程是Oracle的程序,用來管理數(shù)據(jù)庫的讀寫,恢復和監(jiān)視等工作。Server Process主要是通過他和user process進行聯(lián)系和溝通,并由他和user process進行數(shù)據(jù)的交換。在Unix機器上,Oracle后臺進程相對于操作系統(tǒng)進程,也就是說,一個Oracle后臺進程將啟動一個操作系統(tǒng)進程;在Windows機器上,Oracle后臺進程相對于操作系統(tǒng)線程,打開任務管理器,我們只能看到一個ORACLE.EXE的進程,但是通過另外的工具,就可以看

18、到包含在這里進程中的線程。后臺進程與其它結構的關系如圖所示:圖三ORACLE BACKGROUP PROCESS在Unix上可以通過如下方法查看后臺進程:ps ef | grep ora_# ps -ef | grep ora_ | grep XCLUAToracle 29431 1 0 Sep 02 ? 2:02 ora_dbwr_SIDoracle 29444 1 0 Sep 02 ? 0:03 ora_ckpt_SIDoracle 29448 1 0 Sep 02 ? 2:42 ora_smon_SIDoracle 29442 1 0 Sep 02 ? 3:25 ora_lgwr_SID

19、oracle 29427 1 0 Sep 02 ? 0:01 ora_pmon_SIDOracle系統(tǒng)有5 個基本進程他們是DBWR(數(shù)據(jù)文件寫入進程)LGWR(日志文件寫入進程)SMON(系統(tǒng)監(jiān)護進程)PMON(用戶進程監(jiān)護進程)CKPT(檢查點進程,同步數(shù)據(jù)文件, 日志文件,控制文件)2.3.1 數(shù)據(jù)寫進程DBWR將修改過的數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)寫入對應數(shù)據(jù)文件維護系統(tǒng)的空緩沖區(qū)這里指出幾個容易錯誤的概念:當一個更新提交后,DBWR把數(shù)據(jù)寫到磁盤并返回給用戶提交完成。DBWR會觸發(fā)CKPT 后臺進程DBWR不會觸發(fā)LGWR 進程上面的概念都是錯誤的。DBWR是一個很底層的工作進程,他批量的把緩沖

20、區(qū)的數(shù)據(jù)寫入磁盤。和任何前臺用戶的進程幾乎沒有什么關系,也不受他們的控制。至于DBWR會不會觸發(fā)LGWR和CKPT進程,我們將在下面幾節(jié)里討論。DBWR工作的主要條件如下DBWR 超時系統(tǒng)中沒有多的空緩沖區(qū)用來存放數(shù)據(jù)CKPT 進程觸發(fā)DBWR 等2.3.2日志寫進程LGWR將重做日志緩沖區(qū)的數(shù)據(jù)寫入重做日志文件,LGWR是一個必須和前臺用戶進程通信的進程。當數(shù)據(jù)被修改的時候,系統(tǒng)會產生一個重做日志并記錄在重做日志緩沖區(qū)。這個重做日志可以類似的認為是以下的一個結構:SCN=0數(shù)據(jù)塊ID對象ID=0801數(shù)據(jù)行=02修改后的數(shù)據(jù)=0011提交的時候,LGWR必須將被修改的數(shù)據(jù)的重做日志緩沖區(qū)數(shù)據(jù)

21、寫入日志數(shù)據(jù)文件,然后再通知前臺進程提交成功,并由前臺進程通知用戶。從這點可以看出LGWR承擔了維護系統(tǒng)數(shù)據(jù)完整性的任務。LGWR 工作的主要條件如下用戶提交有1/3 重做日志緩沖區(qū)未被寫入磁盤有大于1M 重做日志緩沖區(qū)未被寫入磁盤超時DBWR需要寫入的數(shù)據(jù)的SCN號大于LGWR 記錄的SCN號,DBWR 觸發(fā)LGWR寫入2.3.3系統(tǒng)監(jiān)控SMON工作主要包含清除臨時空間在系統(tǒng)啟動時,完成系統(tǒng)實例恢復聚結空閑空間從不可用的文件中恢復事務的活動OPS中失敗節(jié)點的實例恢復清除OBJ$表縮減回滾段使回滾段脫機2.3.4進程監(jiān)控PMON主要用于清除失效的用戶進程,釋放用戶進程所用的資源。如PMON將回

22、滾未提交的工作,釋放鎖,釋放分配給失敗進程的SGA資源。2.3.5檢查點進程CKPT同步數(shù)據(jù)文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了數(shù)據(jù)文件,日志文件,控制文件的不一至,這就需要CKPT進程來同步。CKPT會更新數(shù)據(jù)文件/控制文件的頭信息。CKPT工作的主要條件如下在日志切換的時候數(shù)據(jù)庫用immediate ,transaction , normal 選項shutdown 數(shù)據(jù)庫的時候根據(jù)初始話文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設置的數(shù)值來確定用戶觸發(fā)以下進程的

23、啟動需要手工配置2.3.6歸檔進程ARCH當數(shù)據(jù)庫以歸檔方式運行的時候,Oracle會啟動ARCH進程,當重做日志文件被寫滿時,日志文件進行切換,舊的重做日志文件就被ARCH進程復制到一個/多個特定的目錄/遠程機器。這些被復制的重做日志文件被叫做歸檔日志文件。2.3.7分布式恢復RECO負責解決分布事物中的故障。Oracle可以連接遠程的多個數(shù)據(jù)庫,當由于網絡問題,有些事物處于懸而未決的狀態(tài)。RECO進程試圖建立與遠程服務器的通信,當故障消除后,RECO進程自動解決所有懸而未決的會話。2.3.8服務進程Server Process服務進程的分類專用服務進程(Dedicated Server P

24、rocess)一個服務進程對應一個用戶進程共享服務進程(MultiTreaded Server Process)一個服務進程對應多個用戶進程,輪流為用戶進程服務。2.3.9用戶進程User Process在客戶端,負責將用戶的SQL 語句傳遞給服務進程,并從服務器段拿回查詢數(shù)據(jù)。2.4 一個貫穿數(shù)據(jù)庫全局的概念-系統(tǒng)改變號SCN(System Change Number)系統(tǒng)改變號,一個由系統(tǒng)部維護的序列號。當系統(tǒng)需要更新的時候自動增加,他是系統(tǒng)中維持數(shù)據(jù)的一致性和順序恢復的重要標志。運行以下語句可以得到系統(tǒng)SCN號SQL select max(ktuxescnw * power(2, 32)

25、 + ktuxescnb) scn from x$ktuxe; SCN- 31014SCN有如下特點:a. 查詢語句不會使SCN增加,就算是同時發(fā)生的更新,數(shù)據(jù)庫部對應的SCN也是不同的。這樣一來就保證了數(shù)據(jù)恢復時候的順序。b. 維持數(shù)據(jù)的一致性,當一個查詢執(zhí)行的時候,他會先從系統(tǒng)中得到一個當前的SCN號,在他查找數(shù)據(jù)的同時,他會檢查每個數(shù)據(jù)行和他對應的SCN號,只有那些不比他的SCN號大的行才能從對應用戶數(shù)據(jù)文件的緩沖區(qū)取出,而那些大于他SCN號的行,就應該從回滾段數(shù)據(jù)文件的緩沖中取出。實例分析:一個查詢返回以下5 行ID Name-1 ShangHai2 Beijing3 Gugangzh

26、ou4 ShenZhen5 HanZhou用戶A從12:00開始運行,到12:05結束在12:01用戶B執(zhí)行了一條Update語句,更新了ID是2的那條記錄把Beijing該成了Tianjing.并提交,這時候用戶A 的那個查詢是不會出現(xiàn)Tianjing的記錄。12:00查詢時候的SCN是N然后用戶B的更新使得系統(tǒng)的SCN變成N+1當用戶A查詢到ID=2的記錄的時候發(fā)現(xiàn)他的SCN已經大于查詢開始時候的SCN,他就會在回滾段數(shù)據(jù)緩沖中找到SCN=N的那條記錄,并把它返回。第三章. ORACLE 數(shù)據(jù)庫(Database)3.1物理結構物理操作系統(tǒng)文件的集合.3.1.1 控制文件(Control

27、files)參數(shù)文件init.ora記錄了控制文件的位置,控制文件是一個非常小的二進制文件,最大可以增長到64MB,控制文件包括如下主要信息數(shù)據(jù)庫的名字,檢查點信息,數(shù)據(jù)庫創(chuàng)建的時間戳所有的數(shù)據(jù)文件,聯(lián)機日志文件,歸檔日志文件信息備份信息等有了這些信息,Oracle就知道那些文件是數(shù)據(jù)文件,現(xiàn)在的重做日志文件是哪些,這些都是系統(tǒng)啟動和運行的基本條件,所以他是Oracle運行的根本。如果沒有控制文件系統(tǒng)是不可能啟動的??刂莆募欠浅V匾?,一般采用多個鏡相復制來保護控制文件,或采用RAID來保護控制文件??刂莆募膩G失,將使數(shù)據(jù)庫的恢復變的很復雜。控制文件信息可以從V$Controlfile中查

28、詢獲得3.1.2數(shù)據(jù)文件(Data files)數(shù)據(jù)文件的詳細信息記載在控制文件中可以通過如下方式查看數(shù)據(jù)文件SQL select name from v$datafile;NAME-/u05/dbf/PROD/system_01.dbf/u06/dbf/PROD/temp_01.dbf/u04/dbf/PROD/users_01.dbf/u09/dbf/PROD/rbs_01.dbf/u06/dbf/PROD/applsys_indx_01.dbf/u05/dbf/PROD/applsys_data_01.dbf數(shù)據(jù)文件是ORACLE中最重要的物理文件,直接記錄了用戶數(shù)據(jù)。按照使用上的不同,

29、可以把數(shù)據(jù)文件分成如下幾類:系統(tǒng)數(shù)據(jù)文件回滾數(shù)據(jù)文件臨時數(shù)據(jù)文件用戶數(shù)據(jù)文件以上各類文件分別屬于不同性質的表空間,在以下的邏輯結構中,將進一步說明該類型文件的作用。3.1.3重做日志文件(Redo files)用戶對數(shù)據(jù)庫進行的任何操作都會記錄在重做日志文件。在了解重做日志之前必須了解重做日志的兩個概念,重做日志組和重做日志組成員(Member),一個數(shù)據(jù)庫中至少要有兩個日志組文件,一組寫完后再寫另一組,即輪流寫。每個日志組中至少有一個日志成員,一個日志組中的多個日志成員是鏡相關系,有利于日志文件的保護,因為日志文件的損壞,特別是當前聯(lián)機日志的損壞,對數(shù)據(jù)庫的影響是巨大的。聯(lián)機日志組的交換過程

30、叫做切換,需要特別注意的是,日志切換在一個優(yōu)化效果不好的數(shù)據(jù)庫中會引起臨時的“掛起”。掛起大致有兩種情況:在歸檔情況下,需要歸檔的日志來不與歸檔,而聯(lián)機日志又需要被重新利用檢查點事件還沒有完成(日志切換引起檢查點),而聯(lián)機日志需要被重新利用解決這種問題的常用手段是:i.增加日志組ii.增大日志文件成員大小一個包含三個日志組,每個日志組兩個成員的聯(lián)機日志組成與運行大致如圖所示:圖四 REDO LOG通過v$log可以查看日志組,v$logfile可以查看具體的成員文件。3.1.4歸檔日志文件(Archived files)Oracle可 以運行在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模

31、式,當然,你就不會有歸檔日志,但是,你的系統(tǒng)將不會是一個實用系統(tǒng),特別是不能用于生產系 統(tǒng),因為你可能會丟失數(shù)據(jù)。但是在歸檔模式中,為了保存用戶的所有修改,在重做日志文件切換后和被覆蓋之間系統(tǒng)將他們另外保存成一組連續(xù)的文件系列,該文 件系列就是歸檔日志文件。有 人或許會說,歸檔日志文件占領我大量的硬盤空間,其實,具體想一想,你是愿意浪費一點磁盤空間來保護你的數(shù)據(jù),還是愿意丟失你的數(shù)據(jù)呢?顯而義見,我們需 要保證我們的數(shù)據(jù)的安全性。其實,歸檔并不是一直占領你的磁盤空間,你可以把她備份到磁帶上,或則刪除上一次完整備份前的所有日志文件。通過v$archived_log和v$log_history可以

32、查看歸檔日志文件的信息。3.1.5初始化參數(shù)文件(Parameter file)initSID.ora或init.ora文件,因為版本的不一樣,其位置也可能會不一樣。在8i中,通常位于$ORACLE_HOME/admin/Pfile下。在9i以下參數(shù)文件是一個純文本文件,可以用文本編輯器打開修改,從9i開始,多了一個叫spfile的參數(shù)文件,以二進制方式保存。初始化文件記載了許多數(shù)據(jù)庫的啟動參數(shù),如存,控制文件,進程數(shù)等,在數(shù)據(jù)庫啟動的時候加載(Nomount時加載),初始化文件記錄了很多重要參數(shù),對數(shù)據(jù)庫的性能影響很大,如果沒有它,數(shù)據(jù)庫將無法啟動。在9i以前,對參數(shù)文件的修改,必須重新啟動

33、數(shù)據(jù)庫才能使參數(shù)生效,從9i開始,可以用命令來修改spfile文件的容了。參數(shù)文件中的參數(shù)不是一直一成不變的,隨著版本的不同而不同。大多數(shù)參數(shù),如Db_block_size的壽命就很長,其它很多參數(shù)隨著版本的改變就被廢棄了。除了文檔記錄的參數(shù)外,ORACLE還支持很多部參數(shù),當然,這些參數(shù)是不建議被使用的。通過v$parameter視圖可以查詢當前的參數(shù)設置。3.1.6其他文件i . 密碼文件用于Oracle 的具有sysdba權限用戶的認證,在9i以前主要指Internal用戶,從9i開始已經取消了這個用戶。密碼文件的密碼可以通過ORAPWD命令來修改。ii. 日志文件報警日志文件(aler

34、t.log或alrt.ora)記錄數(shù)據(jù)庫啟動,關閉和一些重要的出錯信息。數(shù)據(jù)庫管理員應該經常檢查這個文件,并對出現(xiàn)的問題作出即使的反應。你可以通過以下SQL 找到他的路徑select value from v$parameter where name =background_dump_dest,或通過參數(shù)文件獲得其路徑。后臺跟蹤文件路徑與報警文件路徑一致,記載了系統(tǒng)后臺進程出錯時寫入的信息。用戶跟蹤文件記載了用戶進程出錯時寫入的信息,一般不可能讀懂,可以通過ORACLE的TKPROF工具轉化為可以讀懂的格式。用戶跟蹤文件的路徑,你可以通過以下SQL找到他的路徑select value from

35、 v$parameter where name =user_dump_dest,或通過參數(shù)文件獲得其路徑??梢酝ㄟ^設置用戶跟蹤或dump命令來產生用戶跟蹤文件,一般在調試、優(yōu)化、系統(tǒng)分析中有很大的作用。第四章. ORACLE邏輯結構(Logical structure)ORACLE邏輯結構由一系列有相互關系的邏輯對象組成。如圖:圖五LOGICAL STRUCTURE4.1表空間(tablespace)表空間是數(shù)據(jù)庫中的基本邏輯結構,一系列數(shù)據(jù)文件的集合。一個表空間可以包含多個數(shù)據(jù)文件,但是一個數(shù)據(jù)文件只能屬于一個表空間。在8i以前,表空間的管理類型只有一種,被稱為字典管理表空間(DMT),即在

36、數(shù)據(jù)字典中管理表空間中的空間的分配。在8i以后的版本,為了減少在字典上的開銷,引入了本地管理的表空間(LMT),在該類型的表空間中,在每個數(shù)據(jù)文件中存儲的位圖來管理空間的分配,不再要求使用數(shù)據(jù)字典。本地管理的表空間有速度快,無碎片等眾多優(yōu)點,建議用戶表空間都實現(xiàn)本地管理。通過v$tablespace可以查詢表空間,DBA_TABLESPACE可以查詢詳細表空間信息。4.2 段(Segment)段是對象在數(shù)據(jù)庫中占用的空間,雖然段和數(shù)據(jù)庫對象是一一對應的,但段是從數(shù)據(jù)庫存儲的角度來看的。一個段只能屬于一個表空間,當然一個表空間可以有多個段。表空間和數(shù)據(jù)文件是物理存儲上的一對多的關系,表空間和段是

37、邏輯存儲上的一對多的關系,段不直接和數(shù)據(jù)文件發(fā)生關系。一個段可以屬于多個數(shù)據(jù)文件,關于段可以指定擴展到哪個數(shù)據(jù)文件上面。段基本可以分為以下四種數(shù)據(jù)段(Data Segment)索引段(Index Segment)回滾段(Rollback Segment)臨時段(Temporary Segment)通過DBA/ALL/USER_SEGMENTS可以查詢詳細的段信息。4.3區(qū)間(Extent)關于Extent的翻譯有多種解釋,有的譯作擴展,有的譯作盤區(qū),我這里通常譯為區(qū)間。在一個段中可以存在多個區(qū)間,區(qū)間是為數(shù)據(jù)一次性預留的一個較大的存儲空間,直到那個區(qū)間被用滿,數(shù)據(jù)庫會繼續(xù)申請一個新的預留存儲空

38、間,即新的區(qū)間,一直到段的最大區(qū)間數(shù)(Max Extent)或沒有可用的磁盤空間可以申請。在ORACLE8i以上版本,理論上一個段可以無窮個區(qū)間,但是多個區(qū)間對ORACLE卻是有性能影響的,ORACLE建議把數(shù)據(jù)分布在盡量少的區(qū)間上,以減少ORACLE的管理與磁頭的移動,但是在某些特殊情況下,需要把一個段分布在多個數(shù)據(jù)文件或多個設備上,適當?shù)募佣鄥^(qū)間數(shù)也是有很大好處的。通過DBA/ALL/USER_EXTENTS可以查詢詳細的區(qū)間信息。4.4 Oracle數(shù)據(jù)塊(Block)ORACLE最基本的存儲單位,在建立數(shù)據(jù)庫的時候指定,雖然在初始化文件中可見,但是不能修改。為了保證存取的速度,它是OS

39、數(shù)據(jù)塊的整數(shù)倍。ORACLE的操作都是以塊為基本單位,一個區(qū)間可以包含多個塊,如果區(qū)間大小不是塊大小的整數(shù)倍,ORACLE實際也擴展到塊的整數(shù)倍。塊的部結構與數(shù)據(jù)的存取方法都是比較復雜的,以表段的塊為例,從簡單的結構上劃分,可以把塊的部劃分成如下幾個部分:公用頭,表目錄,行目錄,可存取空間等。以下是一個表塊的大致結構圖:圖六 TABLE BLOCK塊頭(BLOCK HEADER)包含著關于塊類型(表塊、索引塊等等)的信息、關于塊上活動和過時事務信息、磁盤上筷的地址的信息。表目錄(Table directory),如果給出的話,包含著此塊中存儲各行的表的信息(多個表的數(shù)據(jù)可能保存在同一個塊中)。

40、行目錄(Row directory)包含在塊中發(fā)現(xiàn)的描述行的信息。以上3部分為塊的開銷(Block Overhead),其余部分為可用存儲空間,可以用如下查詢獲得可用空間大小。Select kvisval,kvistag,kvisdsc from sys.x$kvis;一般的8K(8192)的塊可用空間為8168PCTFREE與PCTUSED是表的兩個存取參數(shù),其實是作用在表中的塊上面的,PCTFREE與PCTUSED表示兩個百分比,默認分別是10與40。PCTFREE表示保留該百分比的可用空間用于以后的行更新,避免行遷移。如果行數(shù)據(jù)達到PCTFREE保留的空間,該塊從FREE LIST上撤消

41、下來,不再接收數(shù)據(jù)。PCTUSED表示當行的空閑空間降低(如刪除數(shù)據(jù))到該參數(shù)指定的百分比的時候,該塊重新進入FREE LIST,開始接收新的數(shù)據(jù)。PCTFREE與PCTUSED的配置與系統(tǒng)的優(yōu)化有一定的關系,所以要慎重,PCTFREE+PCTUSED不要大于等于100,否則將導致塊不斷的在FREELIST移上移下,嚴重影響性能。4.5基本表空間介紹4.5.1系統(tǒng)表空間(System)該表空間包含的數(shù)據(jù)文件稱為系統(tǒng)數(shù)據(jù)文件。該存放系統(tǒng)表和數(shù)據(jù)字典,一般不放用戶的數(shù)據(jù),但是用戶腳本,如過程,函數(shù),包等卻是保存在數(shù)據(jù)字典中的。數(shù)據(jù)字典是一些系統(tǒng)表或視圖,他存放系統(tǒng)的信息,他包括數(shù)據(jù)庫版本,數(shù)據(jù)文件

42、信息,表與索引等段信息,系統(tǒng)的運行狀態(tài)等各種和系統(tǒng)有關的信息和用戶腳本信息。數(shù)據(jù)庫管理員可以通過對數(shù)據(jù)字典的查詢,就可以了解到Oracle的運行狀態(tài)。查看數(shù)據(jù)數(shù)據(jù)字典的SQLselect * from dict查看部系統(tǒng)表的SQLselect * from v$fixed_view_definitionDBA對系統(tǒng)的系統(tǒng)表中的數(shù)據(jù)字典必須有一個很深刻的了解,他們必須準備一些基礎的SQL語句,通過這些SQL可以立即了解系統(tǒng)的狀況和數(shù)據(jù)庫的狀態(tài),這些基本的SQL包括系統(tǒng)的剩余空間系統(tǒng)的SGA 狀態(tài)系統(tǒng)的等待用戶的權限當前的用戶鎖緩沖區(qū)的使用狀況等在成為DBA 的道路上我們不建議你過分的依賴于OEM

43、/Quest 等優(yōu)秀的數(shù)據(jù)庫管理工具,因為他們不利于你對數(shù)據(jù)數(shù)據(jù)字典的理解,SQL語句可以完成幾乎全部的數(shù)據(jù)庫管理工作。大量的讀少量的寫是該表空間的一個顯著的特點。4.5.2 臨時表空間(Temporary)該表空間包含的數(shù)據(jù)文件稱為臨時數(shù)據(jù)文件主要存放用戶的排序等臨時數(shù)據(jù),因為沒有辦法在一個永久表空間上開辟臨時段,所以就必須有一個臨時表空間,主要用于不能在存上進行的排序操作。我們必須為用戶指定一個臨時表空間。臨時段占有的空間會在下次系統(tǒng)啟動的時候全部被釋放。4.5.3 回滾段表空間(Rollback)如果數(shù)據(jù)庫進行對數(shù)據(jù)的修改,那么就必須使用回滾段,回滾段是用來臨時存放修改前的數(shù)據(jù)(UNDO

44、)?;貪L段通常都放在一個單獨的表空間上(回滾表空間),避免表空間碎片化,這個表空間包含的數(shù)據(jù)文件就是回滾數(shù)據(jù)文件。回滾段在系統(tǒng)中的作用當數(shù)據(jù)庫進行更新插入刪除等操作的時候,新的數(shù)據(jù)被更新到原來的數(shù)據(jù)文件,而舊的數(shù)據(jù)(Before Image)就被放到回滾段中,如果數(shù)據(jù)需要回滾,那么可以從回滾段將數(shù)據(jù)再復制到數(shù)據(jù)文件中。來完成數(shù)據(jù)的回滾。在系統(tǒng)恢復的時候,回滾段可以用來回滾沒有被commit 的數(shù)據(jù),解決系統(tǒng)的一直性讀?;貪L段在一般情況下都是大量的寫,少量讀,因此建議把回滾段單獨出來放在一個單獨的設備(如單獨的磁盤或RAID),以減少磁盤的IO爭用?;貪L段的工作方式一

45、個回滾表空間可以被劃分成多個回滾段.一個回滾段可以保存多個會話的數(shù)據(jù).回滾段是一個圓形的數(shù)據(jù)模型假設回滾段由4 個區(qū)間組成,他們的使用順序就是區(qū)間1區(qū)間2區(qū)間3區(qū)間4區(qū)間1。也就是說,區(qū)間是可以循環(huán)使用的,當區(qū)間4到區(qū)間1的時候,區(qū)間1里面的會話還沒有結束, 區(qū)間4用完后就不能再用區(qū)間1,這時系統(tǒng)必須分配區(qū)間5,來繼續(xù)為其他會話服務服務。這也就是為什么回滾段在大事務的情況下會不斷“漲大”的原因,回滾段的擴充是影響性能的,要盡量避免。這是一個回滾段從4個區(qū)間簡單的擴充到5個區(qū)間的例子:圖七 ROLLBACK SEGMENT我們分析一個Update 語句的完成1、用戶提交一個Update 語句2、

46、Server Process 檢查存緩沖.如果沒有該數(shù)據(jù)塊的緩沖,則從磁盤讀入i. 如果沒有存的有效空間,DBWR被啟動將未寫入磁盤的臟緩沖寫入磁盤ii. 如果有有效空間,則讀入3、在緩沖更新數(shù)據(jù)i. 申請一個回滾段入口,將舊數(shù)據(jù)寫如回滾段ii. 加鎖并更新數(shù)據(jù)iii. 并在同時將修改記錄在Redo log buffer中4、用戶提交一個Commit 語句i. SCN增加ii. 將Redo log buffer 寫入Redo log fileiii. 返回用戶Commit 完成4.5.4用戶表空間(User)其包含的數(shù)據(jù)文件稱為用戶數(shù)據(jù)文件一般是由用戶建立,來存取用戶數(shù)據(jù)的表空間,一般有兩類常

47、見的用戶型數(shù)據(jù),數(shù)據(jù)和索引,一般來說,如果條件許可的話,可以考慮放在不同的磁盤上。第五章. 常見問題1、實例和SID的關系是什么?經常有人問SID 是什么?在Oracle 系統(tǒng)中SID 是一個經常出現(xiàn)的變量,如環(huán)境變量ORACLE_SID,初始化文件initSID.ora,那究竟什么是SID 呢?其實SID 就是Oracle 實例的標識,不同的SID 對應不同的存緩沖(SGA)和不同的后臺進程。這樣一來我們就可以得當在一臺物理的服務器上可以有多個SID 的數(shù)據(jù)庫實例。2、Oracle數(shù)據(jù)庫和實例的關系是什么?數(shù)據(jù)庫是由物理文件和存取數(shù)據(jù)文件的實例組成,當存取數(shù)據(jù)文件的實例是一個的時候,數(shù)據(jù)庫被

48、稱做單節(jié)點數(shù)據(jù)庫。這是我們看到的最多的數(shù)據(jù)庫形式。當然還有一種多節(jié)點數(shù)據(jù)庫,就是一個以上的實例共同訪問一個數(shù)據(jù)庫(或者說共同訪問一組數(shù)據(jù)文件),更好的提供穩(wěn)定性和并行處理能力。這在8i中被稱為OPS(Oracle Parallel Server ),在Oracle9i 中被稱為RAC(real application cluster)。在這種數(shù)據(jù)庫中。兩個/多個實例分別在不同服務器上,所有Oracle 數(shù)據(jù)文件在共享的磁盤陣列上,多個服務器上的實例可以同時工作,他們通過一個部的網絡進行通信。如果一臺服務器不能提供服務的話,另一臺會接管它的工作,特別是在關鍵的業(yè)務有很大的潛力。3、在運行的數(shù)據(jù)庫

49、中數(shù)據(jù)文件中是不是可能存在沒有被提交的數(shù)據(jù)?這是可能存在的,因為用戶數(shù)據(jù)文件的數(shù)據(jù)是由DBWR寫入的,DBWR是一個很底層的后臺進程,不負責與用戶交互。用戶的交互是由LGWR完成的。4、在問題3中,如果存在沒有寫入的數(shù)據(jù),那么機器突然斷電,數(shù)據(jù)完整性會不會損壞?不會的,因為數(shù)據(jù)庫的完整性是LGWR來保證的,而且ORACLE保證了DBWR寫入數(shù)據(jù)文件的任何修改已經被記錄在重做日志文件中。當系統(tǒng)再次啟動的時候,通過讀取重做日志文件就可以知道那些數(shù)據(jù)沒有被提交。這時候ORACLE 會自動回滾那些數(shù)據(jù)。所以說聯(lián)機日志的損壞,特別是當前聯(lián)機日志的損壞,對數(shù)據(jù)庫的影響是巨大的,可能會導致數(shù)據(jù)庫的不完整。5

50、、數(shù)據(jù)文件損壞會丟失數(shù)據(jù)嗎?可以這么說,如果你有備份和歸檔,就不會。因為所有對數(shù)據(jù)修改的記錄都在重做日志中有記錄,所以不會丟失數(shù)據(jù),你只要恢復以前的備份再用歸檔日志文件恢復和當前的在線重做日志就可以恢復所有數(shù)據(jù)。6、在線重做日志損壞會丟失數(shù)據(jù)嗎?以上說了,在線日志對數(shù)據(jù)庫的損壞是極大的,所以不僅可能丟失數(shù)據(jù),還可能引起數(shù)據(jù)庫的不同步。在重做日志中的所有commit的記錄都會丟失,這也是Oracle 為什么要對在線重做日志文件做鏡像的原因。任何的數(shù)據(jù)丟失都是不允許的。7、我在事務能不能指定不寫回滾段?不可以的,寫回滾段是ORACLE保證一致性讀和事務一致性的根本?;貪L段是高寫入段,建議把它放到單

51、獨的設備上來。對于DDL語句,如DROP,TRUNCATE卻可以不寫回滾段(沒有UNDO信息),所以對于整個表的刪除,如果數(shù)據(jù)量比較大,建議用Truncate Table的方法。不寫聯(lián)機日志也是不可能的,但可以在某些特定操作中,可以寫很少的聯(lián)機日志,如以NOLOGGING的方式通過Create table tablename as select創(chuàng)建表,或以Append的方式Insert數(shù)據(jù)到表,或直接載入等操作。第六章. 小結這里,我們了解了實例和數(shù)據(jù)庫的關系,一個數(shù)據(jù)庫可以有多個實例,但是一個實例卻不可能對應多個數(shù)據(jù)庫,在一般的情況下,我們都是用的單節(jié)點數(shù)據(jù)庫,即一個實例僅僅對應一個數(shù)據(jù)庫。

52、我們了解了ORACLE實例的組成,包括存和后臺進程,進一步解釋了SGA的組成與SGA的作用,并分析了語句重用的好處。在后臺進程中,重要的闡述了DBWR與LGWR,其中DBWR是一個底層的由ORACLE控制的后臺進程,而LGWR負責與用戶交互.在ORACLE數(shù)據(jù)庫中,我們重要闡述了數(shù)據(jù)庫的物理與邏輯結構,在物理結構中,需要注意四類以下文件:控制文件,聯(lián)機日志,數(shù)據(jù)文件與參數(shù)文件。在邏輯結構中,需要清楚每個邏輯結構的關系,從大到小的順序為:表空間段區(qū)間塊。第二部分:ORACLE9i新特性一、創(chuàng)建數(shù)據(jù)庫9i創(chuàng)建數(shù)據(jù)庫的工具改名為DBCA,也可以通過腳本更輕松容易的創(chuàng)建數(shù)據(jù)庫,如:create dat

53、abase $ORACLE_SIDuser sys identified by sysuser system identified by systemlogfile group 1 ($ORACLE_BASE/oradata/$ORACLE_SID/redo01.log) size 10M,group 2 ($ORACLE_BASE/oradata/$ORACLE_SID/redo02.log) size 10M,group 3 ($ORACLE_BASE/oradata/$ORACLE_SID/redo03.log) size 10Mmaxlogfiles 5maxlogmembers 5m

54、axloghistory 1maxdatafiles 254 maxinstances 1archivelogcharacter set ZHS16GBKnational character set AL16UTF16datafile $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf size 300Mdefault temporary tablespace tbstemp tempfile$ORACLE_BASE/oradata/$ORACLE_SID/temp01.dbf size 500Mundo tablespace tbsundo datafile$ORACLE_BASE/oradata/$ORACLE_SID/undo01.dbf size 500M;其特點為使用專用的回滾和臨時表空間,而不象Oracle 8i中的那樣,回滾和臨時表空間與普通表空間沒有差異,這樣既簡化了配置也有利于效能提高。要注意臨時表空間的指定文件關鍵字是tempfile而不是通用的datafile,而且臨時表空間的存儲選項由Oracle系統(tǒng)決定。同樣回滾表空間也是由Oracle系統(tǒng)決定,不必人工干預。二、二進制

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論