⑴ oracle資料庫分區表的實現原理是什麼
查詢的時候按table來查,一個表的所有分區都屬於table。
但每個分區都是單獨的segment,如果查詢限制了分區鍵,那麼查旦祥啟詢只落在特定模如的segment,而segment在底層對應的數據塊是不同的宴慎,這樣可以減少數據的訪問。
⑵ 從一條select語句看Oracle資料庫查詢工作原理
假如 我們現在利用Select語句從資料庫查詢數據 Oracle資料庫是如何運作的呢?從中我們可以領悟到什麼呢?下面 就結合一條簡單的select語句 看看Oracle資料庫後台的運作機制 這對於我們之後的系統管理與故障排除非常有幫助
第一步 客戶端把語句發給伺服器端執行
當我們在客戶端執行select語句時 客戶端會把這條sql語句發送給伺服器端 讓伺服器端的進程來處理這語句 也就是說 Oracle客戶端是不會做任何的操作 他的主要任務就是把客戶端產生的一些SQL語句發送給伺服器端 雖然在客戶端也有一個資料庫進程 但是 這個進程的作用跟伺服器上的進程作用事游岩慧不相同的 伺服器上的資料庫進程才會對SQL語句進行相關的處理 不過 有個問題需要說明 就是客戶端的進程跟伺服器的進程是一一對應的 也就是說 在客戶端連接上伺服器後 在客戶端與伺服器端都會形成一個進程 客戶端上的我們叫做客戶端進程;而伺服器上的我們叫做伺服器進程 所以 由於所有的SQL語句都是伺服器進程執行的 所以 有些人把伺服器進程形象地比喻成客戶端進程的 影子
第二步 語句解析
當客戶端把SQL語句傳送到伺服器後 伺服器進程會對該語句進行解析 同理 這個解析的工作 也是在伺服器端所進行的 雖然這只是一個解析的動作 但是 其會做很多 小動作
查詢高速緩存 伺服器進程在接到客戶端傳送過來的SQL語句時 不會直接去資料庫查詢 而是會先在資料庫的高速緩存中去查找 是否存在相同語句的執行計劃 如果在數據高速緩存中 剛好有其他人使用這個查詢語句的話 則伺服器進程就會直接執行這個SQL語句 省去後續的工作 所以 採用高速數據緩存的話 可以提高SQL語句的查詢效率 一方面是從內存中讀取數據要比從硬碟中的數據文件中讀取數據效率要高 另一方面 也是因為這個語句解析的原因
不過這里要注意一點 這個數據緩存跟有些客戶端軟體的數據緩存是兩碼事 有些客戶端軟體為了提高查詢效率 會在應用軟體的客戶端設置數據緩存 由於這些數據緩存的存在 可以提高客戶端應用軟體的查詢效率 但是 若其他人在伺服器進行了相關的修改 由於應用軟體數據緩存的存在 導致修改的數據不能及時反映到客戶端上 從這也可以看出 應用軟體的數據緩存跟資料庫伺服器的高速數據緩存不是一碼事
語句合法性檢查
當在高速緩存中找不到對應的SQL語句時 則資料庫伺服器進程就會開始檢查這條語句的合法性 這里主要是對SQL語句的語法進行檢查 看看其是否合乎語法規則 如果伺服器進程認為這條SQL語句不符合語法規則的時候 就會把這個錯誤信息 反饋給客戶端 在這個語法檢查的過程中 不會對SQL語句中所包含的表名 列名等等進行SQL他只是語法上的檢查
語言含義檢神答查
若SQL語句符合語法上的定義的話 則伺服器進程接下去會對語句中的欄位 表等內容進行檢查 看看這些欄位 表是否在資料庫中 如果表名與列名不準確的話 則資料庫會就會反饋錯誤信息給客戶端
所以 有時候我們寫select語句的時候 若語法與表名或者列名同時寫錯的話 則系統是先提示說語法錯誤 等到語法完全正確後 再提示說列名或表名錯誤 若能夠掌握這個順序的話 則在應用程序排錯的時候 可以節省時間
獲得對象解析鎖
當語法 語義都正確後 系統就會對我們需要查詢的對象加鎖 這主要是為了保障數據的一致性 防止我們在查詢的過程中 其他用戶對這個對象的結構發生改變 對於加鎖的原理與方法 我在其他文章中已經有專門敘述 在這里就略過不談了
數據訪問許可權的核對
當語法 語義通過檢查之後 客戶端還不一定能夠取得數據 伺服器進棗手程還會檢查 你所連接的用戶是否有這個數據訪問的許可權 若你連接上伺服器的用戶不具有數據訪問許可權的話 則客戶端就不能夠取得這些數據 故 有時候我們查詢數據的時候 辛辛苦苦地把SQL語句寫好 編譯通過 但是 最後系統返回個 沒有許可權訪問數據 的錯誤信息 讓我們氣半死 這在前端應用軟體開發調試的過程中 可能會碰到 所以 要注意這個問題 資料庫伺服器進程先檢查語法與語義 然後才會檢查訪問許可權
確定最佳執行計劃
當語句與語法都沒有問題 許可權也匹配的話 伺服器進程還是不會直接對資料庫文件進行查詢 伺服器進程會根據一定的規則 對這條語句進行優化 不過要注意 這個優化是有限的 一般在應用軟體開發的過程中 需要對資料庫的sql語言進行優化 這個優化的作用要大大地大於伺服器進程的自我優化 所以 一般在應用軟體開發的時候 資料庫的優化是少不了的
當伺服器進程的優化器確定這條查詢語句的最佳執行計劃後 就會將這條SQL語句與執行計劃保存到數據高速緩存 如此的話 等以後還有這個查詢時 就會省略以上的語法 語義與許可權檢查的步驟 而直接執行SQL語句 提高SQL語句處理效率
第三步 語句執行
語句解析只是對SQL語句的語法進行解析 以確保伺服器能夠知道這條語句到底表達的是什麼意思 等到語句解析完成之後 資料庫伺服器進程才會真正的執行這條SQL語句
這個語句執行也分兩種情況 一是若被選擇行所在的數據塊已經被讀取到數據緩沖區的話 則伺服器進程會直接把這個數據傳遞給客戶端 而不是從資料庫文件中去查詢數據 若數據不在緩沖區中 則伺服器進程將從資料庫文件中查詢相關數據 並把這些數據放入到數據緩沖區中
這里仍然要注意一點 就是Oracle資料庫中 定義了很多種類的高速緩存 像上面所說的SQL語句緩存與現在講的數據緩存 我們在學習資料庫的時候 需要對這些緩存有一個清晰的認識 並了解各個種類緩存的作用 這對於我們後續資料庫維護與資料庫優化是非常有用的
第四步 提取數據
當語句執行完成之後 查詢到的數據還是在伺服器進程中 還沒有被傳送到客戶端的用戶進程 所以 在伺服器端的進程中 有一個專門負責數據提取的一段代碼 他的作用就是把查詢到的數據結果返回給用戶端進程 從而完成整個查詢動作
從這整個查詢處理過程中 我們在資料庫開發或者應用軟體開發過程中 需要注意以下幾點
一是要了解資料庫緩存跟應用軟體緩存是兩碼事情 資料庫緩存只有在資料庫伺服器端才存在 在客戶端是不存在的 只有如此 才能夠保證資料庫緩存中的內容跟資料庫文件的內容一致 才能夠根據相關的規則 防止數據臟讀 錯讀的發生 而應用軟體所涉及的數據緩存 由於跟資料庫緩存不是一碼事情 所以 應用軟體的數據緩存雖然可以提高數據的查詢效率 但是 卻打破了數據一致性的要求 有時候會發生臟讀 錯讀等情況的發生 所以 有時候 在應用軟體上有專門一個功能 用來在必要的時候清除數據緩存 不過 這個數據緩存的清除 也只是清除本機上的數據緩存 或者說 只是清除這個應用程序的數據緩存 而不會清除資料庫的數據緩存
lishixin/Article/program/Oracle/201311/17595
⑶ oracle能創建多少個資料庫,每個庫的工作原理是什麼共享一套程序還是獨立佔用一套
oracle的服務體系是:服務實例--表空間--表或者分區。
每個實例是單獨運行和管理的手銀。unix、linux中是一個實例使用多進程方式位不同用戶服務的,windows中每個實例是亮此使用多線程位用戶提供服務,不同的實例才分為不同的進程。
要刪除畢鍵宴實例最好的辦法是,使用dbca的向導程序來刪除,這樣系統中所有涉及此實例的信息都會被刪除,下次使用此實例名就不會有沖突。(不熟悉的人手工刪除會有疏漏,從而出現沖突。)
⑷ oracle 資料庫中 一個簡單的原理
commit 後不一定直接寫硬碟的數據文件而一定是會寫日誌文件,任意一條修改語句oracle都是把他作頌灶爛為事務來執行,commit,rollback 是事務的終結符。修改辯悉數據野漏都是在緩沖區進行修改的,頻繁的寫硬碟會導致系統性能低。
⑸ Oracle資料庫運行的原理是怎麼樣的是不是企業建有一個總的資料庫,然後員工或者用戶在通過客戶端
其實Oracle資料庫說簡單點啟畝,就是資料庫,承擔著存儲數據的作用,客戶端散旁埋或網站一般起到顯示功能,再通過中間層數據處理層處理數據,最後把處理到沖螞的數據傳到資料庫進行交互。再返回到最上層客戶端顯示。
⑹ oracle資料庫的工作原理是什麼
不知道你現在oracle是什盯凳么水平,資料庫原理什麼孝則配的書看過沒,假如你這些都沒問題,想深鑽一下oracle的內部運行機制,我建議你可以打開oracle的10046事件,然後仔細閱讀trace文件,這些文件里記錄了oracle所有運行的實際內容,包括巧指如何分析SQL語句,如何解析問題等
⑺ oracle具有開放源代碼方式特點嗎
Oracle資料庫的特點
1.開放性:
Oracle能在所有主流平台上運行(包括Windows),完全支持所有的工業標准,採用完全開放策略,可以使客戶選擇最適合的解決方案,對開發商全力支持。
2.可伸縮性,並行性:
Oracle的並行伺服器通過使一組結點共享同一簇中的工作來擴展Windownt的能力,提供高可用性和高伸縮性的簇的解決方案。如果WindowsNT不能滿足需要,用戶可以把資料庫移到UNIX中。Oracle的並行伺服器對各種UNIX平台的集群機制都有著相當高的集成度。
3.性能:
Oracle幾乎是性能最高的關系型資料庫,保持開放平台下的TPC-D和TPC-C的世界記錄。
4.客戶端支持及應用模式:
Oracle支持多層次網路計算,支持多種工業標准,可以用ODBC、JDBC、OCI等網路客戶連接。
5.操作性:
Oracle相對於其他RDBMS來講較復雜,同時提供GUI和命令行,在WindowsNT和Unix下瞎灶戚操作相同。
6.使用性:
Oracle具有相當長時間的開發經驗,完全向下兼容。得到廣泛的認可與應用,完全沒有風險。
7.安全性:
Oracle獲得了最高認證級別的ISO標准認證。它提供多層安全性,包括用於評估風險、防止未授權的數據泄露、檢測和報告資料庫活動,以及通過數據驅動的安全性在資料庫中實施數據訪問控制的控制。
Oracle資料庫的工作原理
1、在資料庫伺服器上啟動Oracle實例。
2、應用程序在客戶端的用戶進程中運行,啟用Oracle網路服務驅動器與伺服器建立連接。
3、伺服器運行Oracle網路服務驅磨陵動器,建立專用的伺服器進程執行用戶進程。
4、客戶端提交事務。
5、伺服器進程獲取sql語句並檢查共享池中是否有相似的sql語句,如果有,伺服器進程再檢查用戶的訪問許可權;否則分配新的sql共享區分析並執行sql語句。
6、伺服器從實際的數據文件或SGA中取得所需數據。
7、伺服器進程在SGA中更新數據,進程DBWn在特定條件下將更新過的數據塊寫回磁碟,進程LGWR在重做日誌文件中記錄事務。
8、如果事務成功,伺服器進程發送消息到應用程序中。
解釋:
SGA(System Global Area):是Oracle Instance的 基本組成部分,在實例啟動時分配。是一組包含一個Oracle實例的數據和控制信息的共享內存結構,主要作用是用於存儲資料庫信息的一個內存區域。
DBWn(Database Writer):辯纖Oracle資料庫後台寫入進程,是Oracle資料庫實例中的一個進程。
LGWR(Log Writer):也是Oracle的後台進程之一,LGWR的作用是把日誌緩存區的數據從內存寫到磁碟的REDO文件里,完成資料庫對象創建、更新數據等操作過程的記錄。
⑻ oracle資料庫外層條件內推機制是什麼原理
但是,這種行為從Oracle 8i開始就變了:新數據緩沖區被放置在緩沖區鏈的中部。在調節資料庫的時候,你的目標就是為數據緩前兆沖區分配盡量多的內存,而不會導致資料庫伺服器在內存里分頁。數據緩殲慶沖區每小時的命中率一旦低於90%,你就應該為數據塊緩沖區增加緩沖區。
數據塊的存活時間
在調入數據塊之後,Oracle會不停地跟蹤數據塊的使用計數(touch count,也就是說,這個數據塊被用戶線程所訪問的次數)。如果一個數據塊被多次使用,它就被移動到最近使用過的數據列表的最前面,這樣就能確保它會在內存里保存一段較長的時間。這種新的中點插入技術會確保最常使用的數據塊被保留在最近使用過的數據列表的最前面,因為新慧改租的數據塊只有在它們被重復使用的時候才會被移動到緩沖區鏈的最前面。
⑼ 簡述Oracle資料庫RAC真實應用集群的工作原理
Oracle集群
Oracle集群,最早稱作OPS(Oracle Parallel Server)出現在Oracle 7版本中,從Oracle 9i開始正式改稱為Oracle RAC,RAC即Real Application Clusters的簡寫,譯為「真正應用集群」;RAC 是Oracle新版資料庫中採用的一項新技術,也是Oracle資料庫支持網格計算環境的核心技術。 10g以前的OPS或者RAC都依賴於第三方集群軟體(Vendor Clusterware)方能正常工作,在10g版本中Oracle推出了Oracle Clusterware集群軟體以及ASM自動存儲管理技術,換而言之10g以後版本的RAC不再依賴於第三方的集群軟體(譬如IBM的HACMP,Veritas的VCS等),但必須安裝Oracle自己的Clusterware集群軟體。 Oracle RAC主要支持Oracle9i、10g、11g版本,可以可以支持24 x 7 有效的資料庫應用 系統,在低成本伺服器上構建高可用性資料庫系統,並且自由部署應用,無需修改代碼。 在Oracle RAC環境下,Oracle集成提供了集群軟體和存儲管理軟體,為用戶降低了應用成本。當應用規模需要擴充時,用戶可以按需擴展系統,以保證系統的性能。 參考編輯本段Oracle集群參考文檔
Oracle RAC一般也可構建於大型SMP主機,IBM的AIX系列伺服器往往是其中高端平台,Intel Linux往往作為其低端平台。當AIX UNIX用來運行Oracle RAC作為大型資料庫系統平台時,其集群系統構建、實施、運維、高可用設置,有其平台特點。可以參照《Oracle大型資料庫系統在AIX/UNIX上的實戰詳解》,該書以AIX UNIX平台為主線,以其他UNIX系統為參照,描述了資料庫系統Oracle 10g、Oracle 11g的RAC的構架方法和過程。在Linux平台,則《大話OracleRAC集群、高可用性、備份與恢復》有著很好的論述。
⑽ oracle資料庫的存儲原理是什麼
表空間,oracle邏緝存儲結構,表空間下包含一個或者多個物理的文件存儲。
所有用戶對象存放在表空間中。
與系統有關的對象存放在系統表空間中。