




已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
窗體頂端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)文章檔案(1) 2004年11月 (1)相冊 什剎海數據挖掘blog 數據挖掘郵件列表 我的Google主頁 我的Google主頁,English Home Page數據挖掘經典資源 rabbit blog 月亮的別稱 moon。如:兔魄,兔輪,兔月(月亮的別名);兔鉤(彎月);兔宮(月宮);兔起鳥沉(月出日落);兔輝(月光);兔闕(月宮);兔華(明月)最新隨筆 1.經過2個星期的日夜奮戰(zhàn),終于答辯完了 2.已經信息化的我們能否想起使用或第一想起用信息化的手段辦事 3.對一個懶散的國家或個人,沒有什么比成功更令人鼓舞 4.8小時是能做很多事的 5.這幾天做論文,作為消遣看了一本很棒的書金錢魔杖現代猶太商法 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.論程序員應具備的職業(yè)素質 20.Oracle 常用命令大匯總最新評論 1.re: Internet與Intranet中的人工智能技術 不錯的內容,內容信息很多,了解不少相關信息。幸苦了樓主。 -孤劍閱讀排行榜 1.05年內最經典語言解析(3915) 2.JDBC的作用及重要接口(2040) 3.世界500強名稱中英對照 (1877) 4.數據挖掘術語簡介(1703) 5.Oracle 常用命令大匯總(1261) 評論排行榜 1.數據挖掘術語簡介(5) 2.歡迎大家訪問我的blog(4) 3.Internet與Intranet中的人工智能技術(3) 4.已經信息化的我們能否想起使用或第一想起用信息化的手段辦事(2) 5.ORACLE 體系結構(Architecture of ORACLE)(1) ORACLE 體系結構(Architecture of ORACLE) ORACLE 體系結構(Architecture of ORACLE)第一部分:ORACLE8i體系結構第一章. 概要在本章里你可以了解以下內容1、 理解ORACLE 實例的組成2、 理解ORACLE 數據庫的組成3、 理解ORACLE內存結構的組成4、 理解后臺進程的作用與分工5、 理解數據庫的物理文件與對應的邏輯結構6、 理解ORACLE的整體構架第二章. 理解ORACLE實例2.1 ORACLE SERVERORACLE是一個可移植的數據庫它在相關的每一個平臺上都可以使用,即所謂的跨平臺特性。在不同的操作系統(tǒng)上也略有差別,如在UNIX/LINUX上,ORACLE是多個進程實現的,每一個主要函數都是一個進程;而在Windows上,則是一個單一進程,但是在該進程中包含多個線程。但是從整體構架上來看,ORACLE在不同的平臺上是一樣的,如內存結構、后臺進程、數據的存儲。一個運行著的ORACLE數據庫就可以看成是一個ORACLE SERVER,該SERVER由數據庫(Database)和實例(Instance)組成,在一般的情況下一個ORACLE SERVER包含一個實例和一個與之對應的數據庫,但是在特殊情況下,如8i的OPS,9i的RAC,一個SERVER中一個數據庫可以對應多個實例。一系列物理文件(數據文件,控制文件,聯(lián)機日志等)的集合或與之對應的邏輯結構(表空間,段等)被稱為數據庫,簡單的說,就是一系列與磁盤有關系的物理文件的組成。ORACLE內存結構和后臺進程被成為數據庫的實例,一個實例最多只能安裝(Mount)和打開(Open)在一個數據庫上,負責數據庫的相應操作并與用戶交互。實例與數據庫的關系如下圖所示:圖一 ORACLE SERVER2.2 ORACLE內存結構 (Memory structure)2.2.1 內存結構的組成Oracle內存結構主要可以分共享內存區(qū)與非共享內存區(qū),共享內存區(qū)主要包含SGA(System Global Area),非共享內存區(qū)主要由PGA(Program Global Area)組成,可以用如下圖形表示。圖二 ORACLE MEMOERY STRUCTRUE2.2.2全局共享區(qū)System Global Area(SGA) System Global Area 是一塊巨大的共享內存區(qū)域,他被看做是Oracle 數據庫的一個大緩沖池,這里的數據可以被ORACLE的各個進程共用。其大小可以通過如下語句查看:SQL select * from v$sga;NAME VALUE- -Fixed Size 39816Variable Size 259812784Database Buffers 1.049E+09Redo Buffers 327680更詳細的信息可以參考V$sgastat、V$buffer_pool主要包括以下幾個部分:共享池(Shared pool)共享池是SGA中最關鍵的內存片段,特別是在性能和可伸縮性上。一個太小的共享池會扼殺性能,使系統(tǒng)停止,太大的共享池也會有同樣的效果,將會消耗大量的CPU來管理這個共享池。不正確的使用共享池只會帶來災難。共享池主要又可以分為以下兩個部分:1、SQL語句緩沖(Library Cache)當一個用戶提交一個SQL語句,Oracle會將這句SQL進行分析(parse),這個過程類似于編譯,會耗費相對較多的時間。在分析完這個SQL,Oracle會把他的分析結果給保存在Shared pool的Library Cache中,當數據庫第二次執(zhí)行該SQL時,Oracle自動跳過這個分析過程,從而減少了系統(tǒng)運行的時間。這也是為什么第一次運行的SQL 比第二次運行的SQL要慢一點的原因。下面舉例說明parse的時間SQLStartupSQL select count(*) from usertable;COUNT(*)-243Elapsed: 00:00:00.08這是在Share_pool 和Data buffer 都沒有數據緩沖區(qū)的情況下所用的時間SQL alter system flush SHARED_POOL;System 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中查詢到,對于編程者來說,要盡量提高語句的重用率,減少語句的分析時間。一個設計的差的應用程序可以毀掉整個數據庫的Share pool,提高SQL語句的重用率必須先養(yǎng)成良好的變成習慣,盡量使用Bind變量。2、數據字典緩沖區(qū)(Data Dictionary Cache)顯而易見,數據字典緩沖區(qū)是ORACLE特地為數據字典準備的一塊緩沖池,供ORACLE內部使用,沒有什么可以說的。塊緩沖區(qū)高速緩存(Database Buffer Cache)這些緩沖是對應所有數據文件中的一些被使用到的數據塊。讓他們能夠在內存中進行操作。在這個級別里沒有系統(tǒng)文件,,戶數據文件,臨時數據文件,回滾段文件之分。也就是任何文件的數據塊都有可能被緩沖。數據庫的任何修改都在該緩沖里完成,并由DBWR進程將修改后的數據寫入磁盤。這個緩沖區(qū)的塊基本上在兩個不同的列表中管理。一個是塊的“臟”表(Dirty List),需要用數據庫塊的書寫器(DBWR)來寫入,另外一個是不臟的塊的列表(LRU List),一般的情況下,是使用最近最少使用(Least Recently Used,LRU)算法來管理。塊緩沖區(qū)高速緩存又可以細分為以下三個部分(Default pool,Keep pool,Recycle pool)。如果不是人為設置初始化參數(Init.ora),ORACLE將默認為Default pool。由于操作系統(tǒng)尋址能力的限制,不通過特殊設置,在32位的系統(tǒng)上,塊緩沖區(qū)高速緩存最大可以達到1.7G,在64位系統(tǒng)上,塊緩沖區(qū)高速緩存最大可以達到10G。重做日志緩沖區(qū)(Redo log buffer)重做日志文件的緩沖區(qū),對數據庫的任何修改都按順序被記錄在該緩沖,然后由LGWR進程將它寫入磁盤。這些修改信息可能是DML語句,如(Insert,Update,Delete),或DDL語句,如(Create,Alter,Drop等)。重做日志緩沖區(qū)的存在是因為內存到內存的操作比較內存到硬盤的速度快很多,所以重作日志緩沖區(qū)可以加快數據庫的操作速度,但是考慮的數據庫的一致性與可恢復性,數據在重做日志緩沖區(qū)中的滯留時間不會很長。所以重作日志緩沖區(qū)一般都很小,大于3M之后的重作日志緩沖區(qū)已經沒有太大的實際意義。 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、 備份(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信息,由初始化參數sort_area_size決定,由于Sort信息分配在UGA中,所以在共享服務器中能更好的利用內存。2.3 后臺進程 (Background process)后臺進程是Oracle的程序,用來管理數據庫的讀寫,恢復和監(jiān)視等工作。Server Process主要是通過他和user process進行聯(lián)系和溝通,并由他和user process進行數據的交換。在Unix機器上,Oracle后臺進程相對于操作系統(tǒng)進程,也就是說,一個Oracle后臺進程將啟動一個操作系統(tǒng)進程;在Windows機器上,Oracle后臺進程相對于操作系統(tǒng)線程,打開任務管理器,我們只能看到一個ORACLE.EXE的進程,但是通過另外的工具,就可以看到包含在這里進程中的線程。后臺進程與其它結構的關系如圖所示:圖三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_SIDoracle 29427 1 0 Sep 02 ? 0:01 ora_pmon_SIDOracle系統(tǒng)有5 個基本進程他們是DBWR(數據文件寫入進程)LGWR(日志文件寫入進程)SMON(系統(tǒng)監(jiān)護進程)PMON(用戶進程監(jiān)護進程)CKPT(檢查點進程,同步數據文件, 日志文件,控制文件)2.3.1 數據寫進程DBWR將修改過的數據緩沖區(qū)的數據寫入對應數據文件維護系統(tǒng)內的空緩沖區(qū)這里指出幾個容易錯誤的概念:當一個更新提交后,DBWR把數據寫到磁盤并返回給用戶提交完成。DBWR會觸發(fā)CKPT 后臺進程DBWR不會觸發(fā)LGWR 進程上面的概念都是錯誤的。DBWR是一個很底層的工作進程,他批量的把緩沖區(qū)的數據寫入磁盤。和任何前臺用戶的進程幾乎沒有什么關系,也不受他們的控制。至于DBWR會不會觸發(fā)LGWR和CKPT進程,我們將在下面幾節(jié)里討論。DBWR工作的主要條件如下DBWR 超時系統(tǒng)中沒有多的空緩沖區(qū)用來存放數據CKPT 進程觸發(fā)DBWR 等2.3.2日志寫進程LGWR將重做日志緩沖區(qū)的數據寫入重做日志文件,LGWR是一個必須和前臺用戶進程通信的進程。當數據被修改的時候,系統(tǒng)會產生一個重做日志并記錄在重做日志緩沖區(qū)內。這個重做日志可以類似的認為是以下的一個結構:SCN=000000001000數據塊ID對象ID=0801數據行=02修改后的數據=0011提交的時候,LGWR必須將被修改的數據的重做日志緩沖區(qū)內數據寫入日志數據文件,然后再通知前臺進程提交成功,并由前臺進程通知用戶。從這點可以看出LGWR承擔了維護系統(tǒng)數據完整性的任務。LGWR 工作的主要條件如下用戶提交有1/3 重做日志緩沖區(qū)未被寫入磁盤有大于1M 重做日志緩沖區(qū)未被寫入磁盤超時DBWR需要寫入的數據的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將回滾未提交的工作,釋放鎖,釋放分配給失敗進程的SGA資源。2.3.5檢查點進程CKPT同步數據文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了數據文件,日志文件,控制文件的不一至,這就需要CKPT進程來同步。CKPT會更新數據文件/控制文件的頭信息。CKPT工作的主要條件如下在日志切換的時候數據庫用immediate ,transaction , normal 選項shutdown 數據庫的時候根據初始話文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設置的數值來確定用戶觸發(fā)以下進程的啟動需要手工配置2.3.6歸檔進程ARCH當數據庫以歸檔方式運行的時候,Oracle會啟動ARCH進程,當重做日志文件被寫滿時,日志文件進行切換,舊的重做日志文件就被ARCH進程復制到一個/多個特定的目錄/遠程機器。這些被復制的重做日志文件被叫做歸檔日志文件。2.3.7分布式恢復RECO負責解決分布事物中的故障。Oracle可以連接遠程的多個數據庫,當由于網絡問題,有些事物處于懸而未決的狀態(tài)。RECO進程試圖建立與遠程服務器的通信,當故障消除后,RECO進程自動解決所有懸而未決的會話。2.3.8服務進程Server Process服務進程的分類專用服務進程(Dedicated Server Process)一個服務進程對應一個用戶進程共享服務進程(MultiTreaded Server Process)一個服務進程對應多個用戶進程,輪流為用戶進程服務。2.3.9用戶進程User Process在客戶端,負責將用戶的SQL 語句傳遞給服務進程,并從服務器段拿回查詢數據。2.4 一個貫穿數據庫全局的概念-系統(tǒng)改變號SCN(System Change Number)系統(tǒng)改變號,一個由系統(tǒng)內部維護的序列號。當系統(tǒng)需要更新的時候自動增加,他是系統(tǒng)中維持數據的一致性和順序恢復的重要標志。運行以下語句可以得到系統(tǒng)SCN號SQL select max(ktuxescnw * power(2, 32) + ktuxescnb) scn from x$ktuxe; SCN- 31014SCN有如下特點:a. 查詢語句不會使SCN增加,就算是同時發(fā)生的更新,數據庫內部對應的SCN也是不同的。這樣一來就保證了數據恢復時候的順序。b. 維持數據的一致性,當一個查詢執(zhí)行的時候,他會先從系統(tǒng)中得到一個當前的SCN號,在他查找數據的同時,他會檢查每個數據行和他對應的SCN號,只有那些不比他的SCN號大的行才能從對應用戶數據文件的緩沖區(qū)內取出,而那些大于他SCN號的行,就應該從回滾段數據文件的緩沖中取出。實例分析:一個查詢返回以下5 行ID Name-1 ShangHai2 Beijing3 Gugangzhou4 ShenZhen5 HanZhou用戶A從12:00開始運行,到12:05結束在12:01用戶B執(zhí)行了一條Update語句,更新了ID是2的那條記錄把Beijing該成了Tianjing.并提交,這時候用戶A 的那個查詢是不會出現Tianjing的記錄。12:00查詢時候的SCN是N然后用戶B的更新使得系統(tǒng)的SCN變成N+1當用戶A查詢到ID=2的記錄的時候發(fā)現他的SCN已經大于查詢開始時候的SCN,他就會在回滾段數據緩沖中找到SCN=N的那條記錄,并把它返回。 第三章. ORACLE 數據庫(Database)3.1物理結構物理操作系統(tǒng)文件的集合.3.1.1 控制文件 (Control files)參數文件init.ora記錄了控制文件的位置,控制文件是一個非常小的二進制文件,最大可以增長到64MB,控制文件包括如下主要信息數據庫的名字,檢查點信息,數據庫創(chuàng)建的時間戳所有的數據文件,聯(lián)機日志文件,歸檔日志文件信息備份信息等有了這些信息,Oracle就知道那些文件是數據文件,現在的重做日志文件是哪些,這些都是系統(tǒng)啟動和運行的基本條件,所以他是Oracle運行的根本。如果沒有控制文件系統(tǒng)是不可能啟動的??刂莆募欠浅V匾?,一般采用多個鏡相復制來保護控制文件,或采用RAID來保護控制文件。控制文件的丟失,將使數據庫的恢復變的很復雜。控制文件信息可以從V$Controlfile中查詢獲得3.1.2數據文件(Data files)數據文件的詳細信息記載在控制文件中可以通過如下方式查看數據文件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數據文件是ORACLE中最重要的物理文件,直接記錄了用戶數據。按照使用上的不同,可以把數據文件分成如下幾類:系統(tǒng)數據文件回滾數據文件臨時數據文件用戶數據文件以上各類文件分別屬于不同性質的表空間,在以下的邏輯結構中,將進一步說明該類型文件的作用。3.1.3重做日志文件(Redo files)用戶對數據庫進行的任何操作都會記錄在重做日志文件。在了解重做日志之前必須了解重做日志的兩個概念,重做日志組和重做日志組成員(Member),一個數據庫中至少要有兩個日志組文件,一組寫完后再寫另一組,即輪流寫。每個日志組中至少有一個日志成員,一個日志組中的多個日志成員是鏡相關系,有利于日志文件的保護,因為日志文件的損壞,特別是當前聯(lián)機日志的損壞,對數據庫的影響是巨大的。聯(lián)機日志組的交換過程叫做切換,需要特別注意的是,日志切換在一個優(yōu)化效果不好的數據庫中會引起臨時的“掛起”。掛起大致有兩種情況:在歸檔情況下,需要歸檔的日志來不及歸檔,而聯(lián)機日志又需要被重新利用檢查點事件還沒有完成(日志切換引起檢查點),而聯(lián)機日志需要被重新利用解決這種問題的常用手段是:i.增加日志組ii.增大日志文件成員大小一個包含三個日志組,每個日志組兩個成員的聯(lián)機日志組成與運行大致如圖所示:圖四 REDO LOG通過v$log可以查看日志組,v$logfile可以查看具體的成員文件。3.1.4歸檔日志文件(Archived files)Oracle可 以運行在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模式,當然,你就不會有歸檔日志,但是,你的系統(tǒng)將不會是一個實用系統(tǒng),特別是不能用于生產系 統(tǒng),因為你可能會丟失數據。但是在歸檔模式中,為了保存用戶的所有修改,在重做日志文件切換后和被覆蓋之間系統(tǒng)將他們另外保存成一組連續(xù)的文件系列,該文 件系列就是歸檔日志文件。有 人或許會說,歸檔日志文件占領我大量的硬盤空間,其實,具體想一想,你是愿意浪費一點磁盤空間來保護你的數據,還是愿意丟失你的數據呢?顯而義見,我們需 要保證我們的數據的安全性。其實,歸檔并不是一直占領你的磁盤空間,你可以把她備份到磁帶上,或則刪除上一次完整備份前的所有日志文件。通過v$archived_log和v$log_history可以查看歸檔日志文件的信息。3.1.5初始化參數文件(Parameter file)initSID.ora或init.ora文件,因為版本的不一樣,其位置也可能會不一樣。在8i中,通常位于$ORACLE_HOME/admin/Pfile下。在9i以下參數文件是一個純文本文件,可以用文本編輯器打開修改,從9i開始,多了一個叫spfile的參數文件,以二進制方式保存。初始化文件記載了許多數據庫的啟動參數,如內存,控制文件,進程數等,在數據庫啟動的時候加載(Nomount時加載),初始化文件記錄了很多重要參數,對數據庫的性能影響很大,如果沒有它,數據庫將無法啟動。在9i以前,對參數文件的修改,必須重新啟動數據庫才能使參數生效,從9i開始,可以用命令來修改spfile文件的內容了。參數文件中的參數不是一直一成不變的,隨著版本的不同而不同。大多數參數,如Db_block_size的壽命就很長,其它很多參數隨著版本的改變就被廢棄了。除了文檔記錄的參數外,ORACLE還支持很多內部參數,當然,這些參數是不建議被使用的。通過v$parameter視圖可以查詢當前的參數設置。3.1.6其他文件i . 密碼文件用于Oracle 的具有sysdba權限用戶的認證,在9i以前主要指Internal用戶,從9i開始已經取消了這個用戶。密碼文件的密碼可以通過ORAPWD命令來修改。ii. 日志文件報警日志文件(alert.log或alrt.ora)記錄數據庫啟動,關閉和一些重要的出錯信息。數據庫管理員應該經常檢查這個文件,并對出現的問題作出即使的反應。你可以通過以下SQL 找到他的路徑select value from v$parameter where name =background_dump_dest,或通過參數文件獲得其路徑。后臺跟蹤文件路徑與報警文件路徑一致,記載了系統(tǒng)后臺進程出錯時寫入的信息。用戶跟蹤文件記載了用戶進程出錯時寫入的信息,一般不可能讀懂,可以通過ORACLE的TKPROF工具轉化為可以讀懂的格式。用戶跟蹤文件的路徑,你可以通過以下SQL找到他的路徑select value from v$parameter where name =user_dump_dest,或通過參數文件獲得其路徑。可以通過設置用戶跟蹤或dump命令來產生用戶跟蹤文件,一般在調試、優(yōu)化、系統(tǒng)分析中有很大的作用。第四章. ORACLE邏輯結構(Logical structure)ORACLE邏輯結構由一系列有相互關系的邏輯對象組成。如圖:圖五LOGICAL STRUCTURE4.1表空間(tablespace)表空間是數據庫中的基本邏輯結構,一系列數據文件的集合。一個表空間可以包含多個數據文件,但是一個數據文件只能屬于一個表空間。在8i以前,表空間的管理類型只有一種,被稱為字典管理表空間(DMT),即在數據字典中管理表空間中的空間的分配。在8i以后的版本,為了減少在字典上的開銷,引入了本地管理的表空間(LMT),在該類型的表空間中,在每個數據文件中存儲的位圖來管理空間的分配,不再要求使用數據字典。本地管理的表空間有速度快,無碎片等眾多優(yōu)點,建議用戶表空間都實現本地管理。通過v$tablespace可以查詢表空間,DBA_TABLESPACE可以查詢詳細表空間信息。4.2 段(Segment)段是對象在數據庫中占用的空間,雖然段和數據庫對象是一一對應的,但段是從數據庫存儲的角度來看的。一個段只能屬于一個表空間,當然一個表空間可以有多個段。表空間和數據文件是物理存儲上的一對多的關系,表空間和段是邏輯存儲上的一對多的關系,段不直接和數據文件發(fā)生關系。一個段可以屬于多個數據文件,關于段可以指定擴展到哪個數據文件上面。段基本可以分為以下四種數據段(Data Segment)索引段(Index Segment)回滾段(Rollback Segment)臨時段(Temporary Segment)通過DBA/ALL/USER_SEGMENTS可以查詢詳細的段信息。4.3區(qū)間(Extent)關于Extent的翻譯有多種解釋,有的譯作擴展,有的譯作盤區(qū),我這里通常譯為區(qū)間。在一個段中可以存在多個區(qū)間,區(qū)間是為數據一次性預留的一個較大的存儲空間,直到那個區(qū)間被用滿,數據庫會繼續(xù)申請一個新的預留存儲空間,即新的區(qū)間,一直到段的最大區(qū)間數(Max Extent)或沒有可用的磁盤空間可以申請。在ORACLE8i以上版本,理論上一個段可以無窮個區(qū)間,但是多個區(qū)間對ORACLE卻是有性能影響的,ORACLE建議把數據分布在盡量少的區(qū)間上,以減少ORACLE的管理與磁頭的移動,但是在某些特殊情況下,需要把一個段分布在多個數據文件或多個設備上,適當的加多區(qū)間數也是有很大好處的。通過DBA/ALL/USER_EXTENTS可以查詢詳細的區(qū)間信息。4.4 Oracle數據塊(Block)ORACLE最基本的存儲單位,在建立數據庫的時候指定,雖然在初始化文件中可見,但是不能修改。為了保證存取的速度,它是OS數據塊的整數倍。ORACLE的操作都是以塊為基本單位,一個區(qū)間可以包含多個塊,如果區(qū)間大小不是塊大小的整數倍,ORACLE實際也擴展到塊的整數倍。塊的內部結構與數據的存取方法都是比較復雜的,以表段的塊為例,從簡單的結構上劃分,可以把塊的內部劃分成如下幾個部分:公用頭,表目錄,行目錄,可存取空間等。以下是一個表塊的大致結構圖:圖六 TABLE BLOCK塊頭(BLOCK HEADER)包含著關于塊類型(表塊、索引塊等等)的信息、關于塊上活動和過時事務信息、磁盤上筷的地址的信息。表目錄(Table directory),如果給出的話,包含著此塊中存儲各行的表的信息(多個表的數據可能保存在同一個塊中)。行目錄(Row directory)包含在塊中發(fā)現的描述行的信息。以上3部分為塊的開銷(Block Overhead),其余部分為可用存儲空間,可以用如下查詢獲得可用空間大小。Select kvisval,kvistag,kvisdsc from sys.x$kvis;一般的8K(8192)的塊可用空間為8168PCTFREE與PCTUSED是表的兩個存取參數,其實是作用在表中的塊上面的,PCTFREE與PCTUSED表示兩個百分比,默認分別是10與40。PCTFREE表示保留該百分比的可用空間用于以后的行更新,避免行遷移。如果行數據達到PCTFREE保留的空間,該塊從FREE LIST上撤消下來,不再接收數據。PCTUSED表示當行的空閑空間降低(如刪除數據)到該參數指定的百分比的時候,該塊重新進入FREE LIST,開始接收新的數據。PCTFREE與PCTUSED的配置與系統(tǒng)的優(yōu)化有一定的關系,所以要慎重,PCTFREE+PCTUSED不要大于等于100,否則將導致塊不斷的在FREELIST移上移下,嚴重影響性能。4.5基本表空間介紹4.5.1系統(tǒng)表空間(System)該表空間包含的數據文件稱為系統(tǒng)數據文件。該存放系統(tǒng)表和數據字典,一般不放用戶的數據,但是用戶腳本,如過程,函數,包等卻是保存在數據字典中的。數據字典是一些系統(tǒng)表或視圖,他存放系統(tǒng)的信息,他包括數據庫版本,數據文件信息,表與索引等段信息,系統(tǒng)的運行狀態(tài)等各種和系統(tǒng)有關的信息和用戶腳本信息。數據庫管理員可以通過對數據字典的查詢,就可以了解到Oracle的運行狀態(tài)。查看數據數據字典的SQLselect * from dict查看內部系統(tǒng)表的SQLselect * from v$fixed_view_definitionDBA對系統(tǒng)的系統(tǒng)表中的數據字典必須有一個很深刻的了解,他們必須準備一些基礎的SQL語句,通過這些SQL可以立即了解系統(tǒng)的狀況和數據庫的狀態(tài),這些基本的SQL包括系統(tǒng)的剩余空間系統(tǒng)的SGA 狀態(tài)系統(tǒng)的等待用戶的權限當前的用戶鎖緩沖區(qū)的使用狀況等在成為DBA 的道路上我們不建議你過分的依賴于OEM/Quest 等優(yōu)秀的數據庫管理工具,因為他們不利于你對數據數據字典的理解,SQL語句可以完成幾乎全部的數據庫管理工作。大量的讀少量的寫是該表空間的一個顯著的特點。4.5.2 臨時表空間(Temporary)該表空間包含的數據文件稱為臨時數據文件主要存放用戶的排序等臨時數據,因為沒有辦法在一個永久表空間上開辟臨時段,所以就必須有一個臨時表空間,主要用于不能在內存上進行的排序操作。我們必須為用戶指定一個臨時表空間。臨時段占有的空間會在下次系統(tǒng)啟動的時候全部被釋放。4.5.3 回滾段表空間(Rollback)如果數據庫進行對數據的修改,那么就必須使用回滾段,回滾段是用來臨時存放修改前的數據(UNDO)。回滾段通常都放在一個單獨的表空間上(回滾表空間),避免表空間碎片化,這個表空間包含的數據文件就是回滾數據文件?;貪L段在系統(tǒng)中的作用當數據庫進行更新插入刪除等操作的時候,新的數據被更新到原來的數據文件,而舊的數據(Before Image)就被放到回滾段中,如果數據需要回滾,那么可以從回滾段將數據再復制到數據文件中。來完成數據的回滾。在系統(tǒng)恢復的時候, 回滾段可以用來回滾沒有被commit 的數據,解決系統(tǒng)的一直性讀。回滾段在一般情況下都是大量的寫,少量讀,因此建議把回滾段單獨出來放在一個單獨的設備(如單獨的磁盤或RAID),以減少磁盤的IO爭用。 回滾段的工作方式一個回滾表空間可以被劃分成多個回滾段.一個回滾段可以保存多個會話的數據.回滾段是一個圓形的數據模型假設回滾段由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、Server Process 檢查內存緩沖.如果沒有該數據塊的緩沖,則從磁盤讀入i. 如果沒有內存的有效空間,DBWR被啟動將未寫入磁盤的臟緩沖寫入磁盤ii. 如果有有效空間,則讀入3、在緩沖內更新數據i. 申請一個回滾段入口,將舊數據寫如回滾段ii. 加鎖并更新數據iii. 并在同時將修改記錄在Redo log buffer中4、用戶提交一個Commit 語句i. SCN增加ii. 將Redo log buffer 寫入Redo log fileiii. 返回用戶Commit 完成4.5.4用戶表空間(User)其包含的數據文件稱為用戶數據文件一般是由用戶建立,來存取用戶數據的表空間,一般有兩類常見的用戶型數據,數據和索引,一般來說,如果條件許可的話,可以考慮放在不同的磁盤上。第五章. 常見問題1、實例和SID的關系是什么?經常有人問SID 是什么?在Oracle 系統(tǒng)中SID 是一個經常出現的變量,如環(huán)境變量ORACLE_SID, 初始化文件initSID.ora,那究竟什么是SID 呢?其實SID 就是Oracle 實例的標識,不同的SID 對應不同的內存緩沖(SGA)和不同的后臺進程。這樣一來我們就可以得當在一臺物理的服務器上可以有多個SID 的數據庫實例。2、Oracle數據庫和實例的關系是什么?數據庫是由物理文件和存取數據文件的實例組成,當存取數據文件的實例是一個的時候,數據庫被稱做單節(jié)點數據庫。這是我們看到的最多的數據庫形式。當然還有一種多節(jié)點數據庫,就是一個以上的實例共同訪問一個數據庫(或者說共同訪問一組數據文件), 更好的提供穩(wěn)定性和并行處理能力。這在8i中被稱為OPS(Oracle Parallel Server ),在Oracle9i 中被稱為RAC(real application cluster)。在這種數據庫中。兩個/多個實例分別在不同服務器上,所有Oracle 數據文件在共享的磁盤陣列上,多個服務器上的實例可以同時工作,他們通過一個內部的網絡進行通信。如果一臺服務器不能提供服務的話,另一臺會接管它的工作,特別是在關鍵的業(yè)務有很大的潛力。3、在運行的數據庫中數據文件中是不是可能存在沒有被提交的數據?這是可能存在的,因為用戶數據文件的數據是由DBWR寫入的,DBWR是一個很底層的后臺進程,不負責與用戶交互。用戶的交互是由LGWR完成的。4、在問題3中,如果存在沒有寫入的數據,那么機器突然斷電,數據完整性會不會損壞?不會的,因為數據庫的完整性是LGWR來保證的,而且ORACLE保證了DBWR寫入數據文件的任何修改已經被記錄在重做日志文件中。當系統(tǒng)再次啟動的時候,通過讀取重做日志文件就可以知道那些數據沒有被提交。這時候ORACLE 會自動回滾那些數據。所以說聯(lián)機日志的損壞,特別是當前聯(lián)機日志的損壞,對數據庫的影響是巨大的,可能會導致數據庫的不完整。5、數據文件損壞會丟失數據嗎?可以這么說,如果你有備份和歸檔,就不會。因為所有對數據修改的記錄都在重做日志中有記錄,所以不會丟失數據,你只要恢復以前的備份再用歸檔日志文件恢復和當前的在線重做日志就可以恢復所有數據。6、在線重做日志損壞會丟失數據嗎?以上說了,在線日志對數據庫的損壞是極大的,所以不僅可能丟失數據,還可能引起數據庫的不同步。在重做日志中的所有commit的記錄都會丟失,這也是Oracle 為什么要對在線重做日志文件做鏡像的原因。任何的數據丟失都是不允許的。7、我在事務能不能指定不寫回滾段?不可以的,寫回滾段是ORACLE保證一致性讀和事務一致性的根本?;貪L段是高寫入段,建議把它放到單獨的設備上來。對于DDL語句,如DROP,TRUNCATE卻可以不寫回滾段(沒有UNDO信息),所以對于整個表的刪除,如果數據量比較大,建議用Truncate Table的方法。不寫聯(lián)機日志也是不可能的,但可以在某些特定操作中,可以寫很少的聯(lián)機日志,如以NOLOGGING的方式通過Create table tablename as select創(chuàng)建表,或以Append的方式Insert數據到表,或直接載入等操作。第六章. 小結這里,我們了解了實例和數據庫的關系,一個數據庫可以有多個實例,但是一個實例卻不可能對應多個數據庫,在一般的情況下,我們都是用的單節(jié)點數據庫,即一個實例僅僅對應一個數據庫。我們了解了ORACLE實例的組成,包括內存和后臺進程,進一步解釋了SGA的組成與SGA的作用,并分析了語句重用的好處。在后臺進程中,重要的闡述了DBWR與LGWR,其中DBWR是一個底層的由ORACLE控制的后臺進程,而LGWR負責與用戶交互.在ORACLE數據庫中,我們重要闡述了數據庫的物理與邏輯結構,在物理結構中,需要注意四類以下文件:控制文件,聯(lián)機日志,數據文件與參數文件。在邏輯結構中,需要清楚每個邏輯結構的關系,從大到小的順序為:表空間段區(qū)間塊。第二部分:ORACLE9i新特性一、創(chuàng)建數據庫9i創(chuàng)建數據庫的工具改名為DBCA,也可以通過腳本更輕松容易的創(chuàng)建數據庫,如:create database $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 5maxloghistory 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,而且臨時表空間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版五年級英語互動教學計劃
- 2025~2025蘇教版小學數學六年級上冊教學目標分解計劃
- 幼兒園體格鍛煉計劃安全管理
- 2025年學校教學成果宣傳計劃
- 湘少版英語四年級上寫作訓練計劃
- 教育培訓資源配備計劃
- 小學資源教室資源共享計劃
- 2025年公務員考試時事政治模擬試題ab卷附答案詳解
- 2025年公務員考試時事政治模擬考試題庫B卷及參考答案詳解(培優(yōu)b卷)
- 2025年公務員考試時事政治模擬考試試卷帶答案詳解(奪分金卷)
- 無錫市2024-2025學年四年級下學期數學期末試題一(有答案)
- 2024年醫(yī)生三基三嚴模擬習題(附答案解析)
- 2025春季學期國家安全教育期末考試-國開(XJ)-參考資料
- 醫(yī)學教育常識考試試題及答案
- 智能在線問卷調查系統(tǒng)開發(fā)合同
- 汽車4S店展廳布局設計
- 酒店客房經理培訓
- 2025年廣東省珠海市香洲區(qū)5月中考模擬化學試題(含答案)
- 2025年江蘇省無錫市惠山區(qū)中考一模英語試題(含答案)
- 【課件】醫(yī)學研究項目申請書的撰寫-以國家自然科學基為例
- 《咖啡的風味》課件
評論
0/150
提交評論