freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

oracle體系結(jié)構(gòu)-文庫吧

2025-06-14 08:42 本頁面


【正文】 會話始于用戶成功地登錄Oracle服務器,終止于用戶退出或非正常終止連接。一個數(shù)據(jù)庫用戶可能同時有多個會話存在,即用相同的用戶名和密碼同時登錄多次。 各種不同的連接方式連接是用戶進程與Oracle服務器之間的通信路徑。與Oracle服務器(server)的3種安裝方式相對應,一個數(shù)據(jù)庫用戶可能用以下3種方式之一與Oracle服務器連接。(1)基于主機方式:此時的用戶進程與服務器進程是在同一臺計算機的相同的操作系統(tǒng)上的,用戶進程與Oracle服務器之間的通信路徑是通過操作系統(tǒng)內(nèi)部進程通信(inter process munication,IPC)機制來建立的。(2)客戶端服務器(clientserver)(兩層模型)方式:用戶進程與Oracle服務器之間的通信是通過網(wǎng)絡協(xié)議(如TCP/IP)來完成的。(3)客戶端應用服務器服務器(client application server server)(三層模型):用戶的個人計算機通過網(wǎng)絡與應用服務器或網(wǎng)絡服務器通信,而這個應用服務器或網(wǎng)絡服務器又是通過網(wǎng)絡與運行數(shù)據(jù)庫的計算機相連的。例如,用戶使用瀏覽器通過網(wǎng)絡運行NT服務器上的應用程序,而NT服務器又從運行在UNIX主機上的Oracle數(shù)據(jù)庫中提取數(shù)據(jù)。以上所介紹的連接是用戶進程與服務器進程的一對一的連接,也稱為專用服務器連接(dedicated server connection)。除了這種連接外,在聯(lián)機事務處理(online transaction processing,OLTP)系統(tǒng)的配置時還有另外的一種連接,它在Oracle9i之前的版本中稱為多線程(MTS)連接,在Oracle 9i或以后的版本中稱為共享服務器(shared server)連接。有關(guān)這種連接在Oracle的網(wǎng)絡和調(diào)優(yōu)的書籍中介紹。 服務器進程當Oracle創(chuàng)建一個服務器進程的同時要為該服務器進程分配一個內(nèi)存區(qū),這個內(nèi)存區(qū)稱為程序全局區(qū)(program global area,PGA)。與SGA不同,PGA是一個私有的內(nèi)存區(qū),是不能共享的,是只屬于一個進程的。它隨著進程的創(chuàng)建而被分配,隨著進程的終止而被回收。在專用服務器進程的配置情況下,程序全局區(qū)包括了以下結(jié)構(gòu):(1)排序區(qū)(sort area):用于處理SQL語句所需的排序。(2)游標狀態(tài)區(qū)(cursor state):用于指示會話當前所使用的SQL語句的處理狀態(tài)。(3)會話信息區(qū)(session information):包括了會話的用戶權(quán)限和優(yōu)化統(tǒng)計信息。(4)堆棧區(qū)(stack space):包括了其他的會話變量。如果是共享服務器進程或多線程的配置,以上這些結(jié)構(gòu)除了堆棧區(qū)外大部分將存在SGA中。如果有l(wèi)arge pool,它們就會被存在large pool,否則它們就會被存在共享池中。 Oracle執(zhí)行SQL查詢語句的步驟如果用戶在SQL*Plus下輸入了如下的查詢語句:SELECT * FROM dept。,那么Oracle又是如何來處理這個語句的呢?SQL語句的執(zhí)行主要由用戶進程與服務器進程來完成,其他的一些進程可能要輔助完成這一過程。查詢語句與其他的SQL語句有所不同,如果一個查詢語句執(zhí)行成功,它要返回查詢的結(jié)果。而其他的SQL語句只是返回執(zhí)行成功或失敗的信息。查詢語句的處理主要包括以下3個階段:編譯(parse)、執(zhí)行(execute)和提取數(shù)據(jù)(fetch)。l 編譯(parse):在進行編譯時,服務器進程會將SQL語句的正文放入共享池(shared pool)的庫高速緩存(library cache)中并將完成以下處理:216。 首先在共享池中搜索是否有相同的SQL語句(正文),如果沒有就進行后續(xù)的處理。216。 檢查該SQL語句的語法是否正確。216。 通過查看數(shù)據(jù)字典來檢查表和列的定義。216。 對所操作的對象加編譯鎖(parse locks)以便在編譯語句期間這些對象的定義不能被改變。216。 檢查所引用對象的用戶權(quán)限。216。 生成執(zhí)行該SQL語句所需的優(yōu)化的執(zhí)行計劃(執(zhí)行步驟)。216。 將SQL語句和執(zhí)行計劃裝入共享的SQL區(qū)。以上的每一步操作都是在處理正確時才進行后續(xù)的處理。如果不正確,就返回錯誤。l 執(zhí)行(execute):Oracle服務器進程開始執(zhí)行SQL語句是因為它已獲得了執(zhí)行SQL語句所需的全部資源和信息。l 提取數(shù)據(jù)(fetch):Oracle服務器進程選擇所需的數(shù)據(jù)行,并在需要時將其排序,最后將結(jié)果返回給用戶(進程)。 共享池(shared pool)SGA中的共享池(shared pool)是由庫高速緩存(library cache)和數(shù)據(jù)字典高速緩存(data dictionary cache)兩部分所組成。服務器進程將SQL(也可能是PL/SQL)語句的正文和編譯后的代碼(parsed code)以及執(zhí)行計劃都放在共享池(shared pool)的庫高速緩存中。在進行編譯時,服務器進程首先會在共享池中搜索是否有相同的SQL或PL/SQL語句(正文),如果有就不進行任何后續(xù)的編譯處理,而是直接使用已存在的編譯后的代碼和執(zhí)行計劃。U提示:庫高速緩存包含了共享SQL區(qū)和共享PL/SQL區(qū)兩部分,它們分別存放SQL和PL/SQL語句以及相關(guān)的信息。要想共享SQL或PL/SQL語句,第一,庫高速緩存(library cache)要足夠大,因為只有這樣要共享的SQL或PL/SQL語句才不會很快地淘汰出內(nèi)存。第二,SQL或PL/SQL語句要是能共享的通用代碼(generic code),因為Oracle是通過比較SQL或PL/SQL語句的正文來決定兩個語句是否相同的,只有當兩個語句的正文完全相同時Oracle才重用已存在的編譯后的代碼和執(zhí)行計劃。這里通過以下的實例來進一步解釋這一點。讀者猜如下的兩個SQL語句是否相同?select * from emp where sal = 1500。 和select * from emp where sal = 1501。答案是不相同的(在Oracle默認的配置下,Oracle 8i和Oracle 9i以及更高的版本可以通過重新設置CURSOR_SHARING參數(shù)來修改默認配置,有興趣的讀者可參閱Oracle調(diào)優(yōu)方面的書籍)??梢酝ㄟ^使用綁定變量的方式來重寫以上的SQL語句,如下:select * from emp where sal = amp。v_sal。這個語句就是可以共享的通用代碼,因為變量不是在編譯階段而是在運行階段賦值的。引入庫高速緩存(library cache)的目的是共享SQL或PL/SQL代碼。那么Oracle又是怎樣有效地管理庫高速緩存(library cache)的呢?Oracle是使用一個稱為LRU(least recently used)的隊列(list)或算法(algorithm)來實現(xiàn)對庫高速緩存的管理的。LRU隊列的算法大致如下:剛使用的內(nèi)存塊(的地址)放在LRU隊列的頭上(最前面),當一個服務器進程需要庫高速緩存的內(nèi)存空間而又沒有空閑的內(nèi)存空間時,該進程就從LRU隊列的尾部(最后面)獲得所需的內(nèi)存塊,這些內(nèi)存塊一旦被使用,它們(的地址)就立即放在LRU隊列的最前面。這樣那些長時間沒使用過的內(nèi)存塊將自然地移到LRU隊列的尾部而被最先使用。從以上的討論可知,為了能夠共享SQL或PL/SQL的代碼,庫高速緩存要足夠大,因為這樣那些可以共享的SQL或PL/SQL代碼才不會被很快地淘汰出內(nèi)存。不過Oracle并沒有給出直接設置庫高速緩存大小的方法,只能通過設置共享池的大小來間接地設置庫高速緩存的大小。介紹完了庫高速緩存,接下來將介紹數(shù)據(jù)字典高速緩存(data dictionary cache)。當Oracle在執(zhí)行SQL語句時,服務器進程將把數(shù)據(jù)文件、表、索引、列、用戶和其他的數(shù)據(jù)對象的定義和權(quán)限的信息放入數(shù)據(jù)字典高速緩存。如果在這之后,有進程(用戶)需要同樣的信息,如表和列的定義,那么所有的這些信息將從數(shù)據(jù)字典高速緩存中獲得。因為以上所說的這些信息都是存在Oracle數(shù)據(jù)庫的數(shù)據(jù)字典中,這也可能就是該部分內(nèi)存叫做數(shù)據(jù)字典高速緩存的原因。表和列的定義等重用的機會要比SQL語句大,因此為了能達到共享這些信息的目的,數(shù)據(jù)字典高速緩存應該盡可能設置得大一些。不過與庫高速緩存一樣,Oracle并沒有給出直接設置數(shù)據(jù)字典高速緩存大小的方法,只能通過設置共享池的大小來間接地設置數(shù)據(jù)字典高速緩存的大小。在Oracle9i之前的版本,可以通過修改參數(shù)文件中的SHARED_POOL_ SIZE的值來改變共享池的大小,但一定要重新啟動Oracle數(shù)據(jù)庫。在Oracle 9i或以后的版本中,也可以使用類似于例11的命令來改變共享池的大?。豪?1SQL ALTER SYS
點擊復制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1