Oracle學習筆記

######一步一個坑本身搭建rac環境java

http://www.javashuo.com/article/p-datagyhj-ht.html算法

#####安裝oracle中文亂碼解決辦法:sql

mkdir /usr/share/fonts/zh_CN/TrueType -p數據庫

fc-match看下如今用的什麼字體,搞箇中文字體過來,命名爲zysong.ttfwindows

仍是亂碼的話把本身電腦上的宋體拷貝出來,放在/usr/share/fonts/zh_CN/TrueType/下,命名爲:zysong.ttf緩存

windows字體位置:C:\Windows\Fonts安全


image.png

#####Oracle主要兩大部分:實例(Instance)和數據庫(database)服務器

實例:數據庫啓動時初始化的一組進程和內存結構oracle

數據庫服務器的核心,Oracle性能影響最大的是SGA(System Global Area),SGA包含三個部分:ide

一、數據緩衝區,可避免重複讀取經常使用的數據;

    首先,當用戶提交了該條sql語句,由對應的用戶進程將其發送給服務器,監聽程序監聽到該條請求,會爲其創建一個對應的服務器進程,而後服務器進程會先掃描緩衝區中有沒有包含關鍵行的數據塊,若是有,這就算一次緩存命中了,而後相關行會傳輸到PGA進行進一步處理,最終通過格式化後展現給用戶;若是沒有命中,那麼服務器進程會首先將對應行復制到緩衝區內,而後再返回給客戶端。

    DML(insert,update,delete)操做同理,加入用戶發送一條update語句,服務進程依然先去掃描緩衝區,若是緩存命中,則直接更新,數據變髒;若是沒有命中,由服務器進程將對應數據塊先從磁盤上覆制到緩衝區內,再進行更新操做。

    若是緩衝區存儲的塊和磁盤上的塊不一致,該緩衝區就叫作「髒緩衝區」,髒緩衝區最終會由數據庫寫入器(DBWn)寫入到磁盤中去。

    數據庫寫入器是Oracle的一個後臺進程,所謂後臺進程是相對於前臺進程(服務器進程)來說的。DBWn的"n"意味着一個實例是能夠有多個數據庫寫入器的。簡而言之,DBWn的做用就是將變髒了的緩衝區從數據庫緩衝區緩存中寫入到磁盤中的數據文件中去。數據庫緩衝區緩存這塊內存區域和數據庫寫入器這塊是比較重要的概念,別的數據庫產品像mySql也都有對應的實現,只不過叫法不同罷了。瞭解這塊的時候,要時刻意識到會話是不會直接更新磁盤數據的,會話的更新,插入,刪除包括查詢等都是先做用到緩衝區上,隨後,DBWn會將其中的髒緩衝區轉儲到磁盤上去。

    在如下四種狀況它會執行寫入:

        a.沒有任何可用緩衝區

        b.髒緩衝區過多

        c.3秒超時(最晚3秒會執行一次寫入)

        d.遇到檢查點,即checkPoint(檢查點),檢查點是個Oracle事件,遇到檢查點,DBWn會執行寫入。好比實例有序關閉的時候會有檢查點,DBWn會將全部髒緩衝區寫入到磁盤上去的,這很容易理解,要保持數據文件的一致性。

二、日誌緩衝區,提高了數據增刪改的速度,減小磁盤的讀寫而加快速度

    當咱們執行一些DML操做(insert,update,delete),數據塊發生改變了,產生的變動向量則會寫入到重作日誌文件中去。有了這些記錄,當系統因爲斷電等因素忽然宕掉,數據庫緩衝區緩存內的大量髒數據還沒來得及寫入到數據文件中去,在從新啓動的時候,會有一個實例恢復的過程,在此過程當中就應用了重作日誌記錄來使數據保持一致;或者數據庫遭遇了物理損壞,好比磁盤損壞了,此時能夠經過Oracle的備份恢復工具(如RMAN)進行數據恢復,原理就是 提取備份集-->應用重作日誌文件中的變動記錄。

日誌緩衝區是一塊比較小的內存區域,它是用來短時間存儲將寫入到磁盤中的重作日誌文件中的變動向量的。

日誌緩衝區存在的意義依然是爲了減小磁盤IO,減小用戶的等待時間,試想下,若是每一次用戶DML操做都要進行等待重作記錄被寫入到磁盤中去,體驗會有多差勁。

顧名思義,日誌寫入器(LGWR)就是把日誌緩衝區內的內容寫入到磁盤的重作日誌文件中去,相比數據庫寫入器(DBWn),日誌寫入器就勤快多了。

    如下三種狀況LGWR會執行寫入:

        a.commit時寫入

            前面提過,DBWn的寫入和commit沒有任何關係,若是commit時數據庫沒有任何記錄,那數據就真的丟失了,Oracle 的重作日誌就是爲了保證數據安全而存在的,commit時,會話會先掛起,等待LGWR將這些記錄寫入到磁盤上的重作日誌文件中,纔會通知用戶提交完成。因此,LGWR在commit時執行寫入,是爲了確保事務永不丟失。    

        b.日誌緩衝區的佔用率達到1/3。

        c.DBWn要寫入髒緩衝區前

            這個寫入是爲了數據回滾考慮的。DBWn徹底可能寫入還沒提交的事務(參照上面提到的寫入時機),那如何保證事務回滾呢?

            首先要知道,DBWn除了寫入實際的數據,還會寫入撤銷數據.簡單說,事務回滾須要撤銷數據,在寫入撤銷數據前,會先寫入針對撤銷數據的日誌記錄(有點繞),若用戶要進行事務回滾,就能夠應用這些日誌記錄來構造撤銷數據,而後進行回滾。

            數據庫緩衝區緩存和日誌緩衝區都是爲了提升性能,避免頻繁IO而存在的。日誌緩衝區相比數據庫緩衝區緩存要小的多,而且不能進行自動管理,對於日誌緩衝區的修改須要重啓實例,數據庫緩衝區緩存可進行自動管理。做用在數據庫緩衝區緩存上的DBWn進程,爲了不頻繁的磁盤IO致使系統性能降低,會盡量少地執行寫入,且DBWn的寫入和commit操做沒有任何關係;

            而做用在日誌緩衝區上的LGWR進程,則會很是積極地進行寫入,通常狀況下,它幾乎是實時地將重作日誌記錄轉儲到磁盤中去。LGWR是Oracle體系結構中最大的瓶頸之一。DML的速度不可能超過LGWR將變動向量寫入磁盤的速度。

三、共享池,使相同的SQL語句再也不編譯,提高了SQL的執行速度。

共享池是最複雜的SGA結構,它有許多子結構,咱們來看看常見的幾個共享池組件

    1.庫緩存:庫緩存這塊內存區域會按已分析的格式緩存最近執行的代碼,這樣,一樣的sql代碼屢次執行的時候,就不用重複地去進行代碼分析,能夠很大程度上提升系統性能。

    2.數據字典緩存:存儲oracle中的對象定義(表,視圖,同義詞,索引等數據庫對象),這樣在分析sql代碼的時候,就不用頻繁去磁盤上讀取數據字典中的數據了

    3.PL/SQL區:緩存存儲過程、函數、觸發器等數據庫對象,這些對象都存儲在數據字典中,經過將其緩存到內存中,能夠在重複調用的時候提升性能。

    大池:大池是個可選的內存區域,前面咱們提到專有服務器鏈接和共享服務器鏈接,若是數據庫採用了共享服務器鏈接模式,則要使用到大池;RMAN(Oracle的高級備份恢復工具)備份數據也須要大池。

另外一部分是一些後臺進程:

1.系統監控MMON(Manageability Monitor)數據庫的自我監視和自我調整的支持進程。實例在運行中,會收集大量有關實例活動和性能的統計數據,這些數據會收集到SGA中,MMON按期從SGA中捕獲這些統計數據,並將其寫入到數據字典中,便於後續對這些快照進行分析。(默認狀況,MMON每隔一個小時收集一次快照)

2.進程監視器PMON(Process Monitor),主要監視服務器進程。前面提到過,專有服務器體系模式下,用戶進程和服務器進程是一對一的關係,若是某個會話發生異常,PMON會銷燬對應的服務器進程,回滾未提交的事務,並回收會話專有的PGA內存區域。

3.數據庫寫

4.日誌寫

5.檢驗點CKPT(Checkpoint Process):CKPT負責發起檢查點信號,手動設置檢查點的語法:

6.其餘

後臺進程合起來完成數據庫管理任務,在訪問數據庫的時候。器後臺先啓動實例。啓動實例前要先分配內存區。而後在啓動後臺進程。數據庫啓動過程當中必須啓動上面的前五個進程。不然實例沒法建立。

數據庫:數據庫則指的是用戶存儲數據的一些物理文件

物理結構,主要包括三種文件

1.數據文件

    數據文件存儲着實際的數據,DBWn會將數據庫緩衝區中的內容寫入到這類文件中去,數據文件的大小和數量是不受限制的。Oracle從10g開始,建立一個數據庫至少須要兩個數據文件,一個用於SYSTEM表空間,該表空間用來存儲數據字典;一個用於SYSAUX表空間,這個表空間用來存儲一些數據字典的輔助數據。

    數據文件由一個個的Oracle塊組成,這是Oracle的I/O基礎單元,與操做系統塊是不一樣的概念,Oracle塊要比操做系統塊大,這固然有處於性能的一些考慮,但咱們考慮這樣一種狀況,當用戶使用操做系統命令進行數據文件的備份的時候(假設1個Oracle塊=8個操做系統塊),已經複製了4個操做系統塊,而後CPU被DBWn搶佔了,DBWn又從新對這個Oracle塊進行了更新,這時,當複製命令又獲得了CPU時間去複製剩餘的4個塊的時候,就形成了整個Oracle塊的數據不一致,因此,這也是在執行這種備份(用戶自行備份)的時候,須要作一些額外處理,好比將表空間置爲備份模式的緣由。固然,使用RMAN是不存在這樣的問題的,RMAN的備份機制是確定能夠獲得數據一致的塊的。(這塊內容做了解便可)

2.控制文件

控制文件雖小,但做用重大,它包含指向數據庫其他部分的指針(包括重作日誌文件,數據文件,歸檔日誌文件等的位置),存儲重要的序列號和時間戳,存儲RMAN備份的詳細信息。控制文件一旦受損,那實例會立馬終止,通常對數據文件的保護採用多路複用機制,就是冗餘多份在不一樣物理位置。

3.重作日誌文件

    重作日誌文件的做用在講解內存和進程結構的時候有提到過,重作日誌按時間順序存儲應用於數據庫的一連串的變動向量(包含聯機重作日誌文件和歸檔日誌文件)。由SMON在數據庫啓動時自動執行的實例恢復 和 磁盤損壞所要求的提取備份恢復都會應用到重作日誌進行相應的數據恢復

    重作日誌文件也建議進行多路複用,一個數據庫至少要有兩組重作日誌文件。一組供LGWR進行寫入,日誌文件是固定大小,業務高峯期會很快寫滿,寫滿以後會切換到第二組上,在配置爲歸檔模式的數據庫中,這時由歸檔進程(ARCn)開始將第一組的內容進行歸檔備份,如此循環地進行寫入和歸檔。須要注意的是,在歸檔進程還未對當前組的日誌歸檔完畢前,是不容許LGWR對其進行重寫的。


參數文件:定義了數據庫實例的特性,他是正文文件

    這個文件存儲了數據庫所需的一些參數設置,好比各個內存區域的大小,可容許的最大進程數,最大會話數,控制文件的位置,數據庫的名稱等等,參數文件也是實例啓動時首先要加載的文件。

密碼文件:授予用戶啓動和關閉數據庫的實例。主要有二進制數據組成

    通常稱爲外部口令文件。通常的用戶名和口令是存放在數據字典中,不會存放在這個文件中。在一些特殊場景下,好比實例還未啓動,這時,我可能須要以管理員的身份登入系統去執行一些恢復或者啓動操做,然而此時,數據字典因爲實例還沒啓動是不存在的,這時就須要外部口令文件進行用戶身份的驗證。

歸檔日誌文件

    ARCn將聯機重作日誌文件會備份歸檔到這類文件中去,歸檔日誌文件保留了數據更改的完整歷史信息。



###內存結構:SGA和PGA

SGA:數據庫實例的一部分。數據庫實例的啓動會首先分配系統全局區(SGA),是一塊共享的內存區域,也是最大的一塊內存區域,

PGA:則是用戶會話專有的內存區域,每一個會話在服務器端都有一塊專有的內存區域就是PGA。

1.共享池:共享sql和pl/sql代碼,即把解析的sql代碼在這裏緩存,PL/SQL不只緩存還共享。這樣大大提升了直接訪問磁盤得到sql的速度。

1)庫高速緩存:存儲最近使用過的sql語句。利用LRU(最近最少使用)算法來管理緩存。最近最少使用算法是一種比較經常使用的算法。在這裏當庫高速緩存接近滿的時候。它會把緩存中最近最少使用的數據清除緩存中。加入新的緩存sql。

Oracle提供DB_CACHE_SIZE和DB_BLOCK_BUFFERS設置庫高速緩存的大小,即爲二者的成績。

2)數據字典高速緩存

存儲數據文件、表、索引、列、用戶、權限信息和其餘一些數據庫對象的定義。把相關的數據字典信息放入緩存來提升查詢的響應時間。其大小取決於共享池的大小。

2.數據庫高速緩存

存儲了最近從數據文件讀入的數據塊信息或用戶更改後須要寫回數據庫的數據信息。內存讀取比磁盤讀取的速度快的多。提升了訪問速度。這裏的存取也採用了LRU(最近最少使用)算法。

Oracle數據庫引入了緩衝區顧問參數(Buffer cache advisory parameter)用於啓動和關閉統計信息。這些信息用於預測不一樣緩衝區的大小致使的不一樣行爲特性。三種狀態:OFF:ON:READY

設置顧問緩存爲開啓狀態後。能夠經過動態性能視圖:v$db_cache_advice查看緩衝區的建議信息

3.重作日誌緩存

在執行insert、update等操做後。數據發生了改變。這些變化的數據在寫入數據庫高速緩存前會先寫入重作日誌緩衝區。包括變化以前的數據。能夠經過初始化參數log_buffer查看它的大小。此參數爲靜態參數,不能修改。

4.大池和java池

大型池(Large Pool)

在SGA中大型池是可選的緩衝區。它能夠根據須要有管理權進行配置。它能夠提供一個大的區以供象數據庫的備份與恢復等操做。

在如下幾種情形下會啓用:

一,backup 和 restore 操做的時候

二,當啓動UGA, I/O slaves的時候

三,設置MTS服務器的時候,用戶信息的存放也使用到Large Pool

可使用如下命令進行更改Large Pool的大小:

ALTER SYSTEM SET Large_Pool_Size = 64m;

Java池用於編譯java語言編寫的指令。經過java_pool_size查看和修改大小。大小由數據庫在SGA自動分配和管理。因此查看的時候值爲0;

相關文章
相關標籤/搜索