關於Oracle的技術問答

2021-09-27 10:20:27 字數 2247 閱讀 7719

今天和oracle的乙個資深前輩聊了下,聊了不少技術的問題,他也來了興致,隨機提了幾個問題來問我,發現看似簡單的問題還是有不少的乾貨,很多東西似懂非懂其實還是沒有深入理解,限於篇幅,整理了一部分的問題,有些問題回答的對,但是感覺理解還是不夠清晰深入。

log buffer

log buffer的作用

logbuffer的作用主要有兩部分,生成重做記錄,另一部分就是把重做記錄寫入重做日誌檔案。

commit操作的時候,是否會重新整理log buffer?

其實每乙個commit就會觸發一次改動向量,完成了一次事務的更新。

pga

pga的作用

pga的全稱是program global area,它是乙個記憶體區域,該區域中包含了於某個特定伺服器程序 相關的資料和控制資訊。對於每個session來說,其執行的sql語句鎖傳入的繫結變數會儲存在pga中,需要執行比較複雜的sql語句時,排序和hash join連線這類的session所占用的記憶體空間也來自於pga.

程序之間是否會共享pga?

pga所占用的記憶體區域只能被其所屬的程序訪問,而不能被其它程序訪問,所以pga中也不需要latch這樣的記憶體結構來保護其中的資訊。

buffer cache

buffer cache中的演算法

buffer cache中用到的演算法有hash演算法和lru演算法。

當前臺程序發出乙個select或者dml語句的時候,oracle會根據執行計畫找到符合條件的資料塊,然後會根據請求資料塊的位址以及資料塊的型別作為引數,運用hash演算法找到資料塊所處的hash bucket,即確定資料塊是在那個hash chain上。

lru演算法即最近最少使用的buffer header鍊錶,lru鍊錶串聯起來的buffer header都執行可用資料塊,buffer按照被使用的先後順序掛在lrulianbiao shang ,先使用的buffer掛在lru鍊錶的後面,後被使用的buffer則掛在lru鍊錶的前面。

buffer cache中資料塊的狀態

髒資料塊,空閒資料塊,乾淨資料塊,釘住的資料塊。對於空閒資料塊和乾淨資料塊,都統稱為可用資料塊。因為其中的內容可以被新的資料內容覆蓋。

shared pool

資料字典的資訊儲存在**?

資料字典的資訊儲存在shared pool中的dictionary cache中。dictionary cache中存放了執行sql語句的過程中,所參照的資料字典的資訊,包含sql語句所涉及的表名,表列,許可權資訊等,dictionary cache中的資訊都是以資料行的形式存放的。所以也可以叫做row cache.

ckpt

程序ckpt在**找到對應的資訊。

ckpt即檢查點為止(checkpoint position),檢查點的位置記錄在控制檔案中,在檢查點佇列上串起來的都是髒資料塊所對應的buffer header,每次dbwr寫髒資料塊的時候,也是從檢查點佇列上掃瞄髒資料塊,然後將髒資料塊寫入資料檔案的。

資料恢復

資料恢復時的前滾與回滾的過程

如果資料庫例項非正常關閉,則檢查點end scn號為空,在資料恢復的時候,會從控制檔案中取得檢查點的位置,然後smon會到聯機日誌檔案中找到對應的檢查點位置,應用所有的重做條目,從而在buffer cache裡又恢復了例項奔潰前那個時間點的狀態,這個過叫做前滾。

如果前滾完畢之後,smon程序會立即開啟資料庫,但是這個時候資料庫中還含有哪些處於中間狀態的,沒有提交也沒有回滾的資料庫,也就是髒資料塊,因為沒有被提交,所以需要被回滾,開啟資料庫以後,smon會在後台做回滾的操作。   

rman

rman配置修改備份檔案路徑的方法

可以通過em,grid control中的圖形介面來修改rman中的備份檔案的路徑,或者使用config命令方式來設定。

調優

自己sql調優常用的幾個包是?

dbms_sqltune,dbms_sql_advisor

通過這些也發現自己對資料庫有了一定的認識,但是還是需要不斷的深化。可能自己碰到好多問題的時候都是囫圇吞棗,一問得細節一點就卡殼。人就是這樣的過程中不斷的提公升自我,也從側面反映出自己近期有點鬆懈,沒有能夠投入更加高效的精力來,努力努力,有則改進,無則加冕,生活本屬不易,不能得過且過。:)

關於Oracle的技術問答

關於oracle的技術問答 今天和oracle的乙個資深前輩聊了下,聊了不少技術的問題,他也來了興致,隨機提了幾個問題來問我,發現看似簡單的問題還是有不少的乾貨,很多東西似懂非懂其實還是沒有深入理解,限於篇幅,整理了一部分的問題,有些問題回答的對,但是感覺理解還是不夠清晰深入。log buffer ...

技術問答 16

可參考 comparableclassfor returns x s class if it is of the form class c implements comparable else null.如果繼承comparable 就返回他的class 如果不是就返回null 這個方法在puttr...

關於裸裝置及Oracle的20個實用問答

1 什麼叫做裸裝置?裸裝置,也叫裸分割槽 原始分割槽 是一種沒有經過格式化,不被unix通過檔案系統來讀取的特殊字元裝置。它由應用程式負責對它進行讀寫操作。不經過檔案系統的緩衝。2 如何辨別裸裝置?在unix的 dev 目錄下,有許多檔案,其中有兩個大類 字元裝置檔案和塊裝置檔案。字元裝置特殊檔案進...