程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

ORACLE基礎

編輯:Oracle數據庫基礎
Oracle 基礎知識講解
Oracle的體系結構:
Oracle數據庫的體系結構決定了數據庫如何使用內存,硬盤,CPU及網絡。
一個 oracle server是由Oracle實例(instance)和數據庫兩部分組成。
     實例=內存結構+一組後台進程;
一個oracle數據庫是一個數據單位的集合。主要目的是為了存儲和讀取信息。Oracle數據庫可以分為邏輯結構和物理結構。數據邏輯存儲在表空間中,物理存儲在數據文件中。略圖如下:對應關系如下圖:1.邏輯結構主要是從數據庫使用者的角度考查數據庫的組成。
如下圖:Oracle的邏輯結構是由一個或多個表空間組成:
一個數據庫由若干個表空間組成;
一個表空間由邏輯對象組成;
一個邏輯對象由多個數據段組成;
一個數據段由一批數據區間組成;
一個數據區間由若干個連續的數據塊組成;
一個數據塊對應一個或多個物理塊;
基本概念介紹:
數據塊(data block):是數據庫使用的I/O最小單元,又稱邏輯塊或Oracle塊。常用大小為2KB或者4KB(是OS塊的倍數)。一個數據塊對應一個或多個物理塊,塊的大小由參數DB_BLOCK_SIZE確定。(init.ora)
區間(extent):是數據庫存儲空間分配的邏輯單位,一個區間由一組數據塊組成,區間是由段分配的,分配的第一個區間稱初始區間,以後分配的區間稱增量區間。
段(segment):是表空間中一個指定類型的邏輯邏輯存儲結構,它由一個或多個區間組成,段將占用並增長存儲空間。
表空間(table spaces):是數據庫的邏輯組成部分,對應一個或多個數據文件,表空間的大小是它所對應的數據文件的大小之和。一個表空間只能同時屬於一個database;一個表空間可能包含一個或多個段,但段不能跨越表空間。
2.數據庫的物理結構:
物理結構包含數據文件,日志文件,控制文件,參數文件。
數據文件(data file):是物理操作系統文件,用於物理存儲Oracle數據庫數據,如:系統數據、用戶數據等。其特點如下:
每個數據文件只與一個數據庫相聯系,在Oracle數據庫中,至少要包含一個數據文件。當數據庫空間不足時,數據文件具有自動擴展的特性。一個或多個數據文件構成數據庫的邏輯存儲單元叫做表空間(table space).數據文件中的數據以塊為單位,任何數據庫創建時至少包含一個數據文件。
重做日志文件(redo log file):記錄所有對數據庫數據的修改,以備恢復數據時使用。其特點如下:
每一個數據庫包含多個日志文件,日志文件以循環方式進行寫操作,每個日志文件成員對應一個物理文件,工作模式分為:歸檔模式和非歸檔模式。
參數文件(parameter file):是一個文本文件,可直接使用操作系統下的文本編輯器對其內容進行修改。該文件只在建立數據庫或啟動實例時才被訪問,在修改該文件之前必須關閉實例。
包含如下文件:
初始參數文件:init.ora任何一個實例都對應一個初始化文件init.ora,它決定實例的大小及組成參數。
參數文件的作用:
確定存儲結構的大小,設置數據庫的全部缺省值,設置數據庫的區間,設置數據庫的各種物理屬性,優化數據庫性能。
在參數文件中包括大量影響Oracle數據庫實例功能的設置:比如,數據庫控制文件的定位;oracle用來緩存從磁盤上讀取的數據的內存數量;Oracle用來緩存sql語句的執行計劃,PL/SQL過程和數據字典信息以便於它們不必從磁盤連續讀取的內存的數量;默認的優化程序的選擇;參數的數據類型(整形參數、字符型參數)等等。
控制文件(control file):是一個較小的二進制文件,用於記錄和維護數據庫的物理結構。
    描述信息如下:
數據庫名稱及創建時間;數據文件的位置及大小;重做日志文件的位置及大小;日志序列號。
     要點注意:在打開和存取數據庫時都訪問該文件;數據庫至少包含一個控制文件;記錄控制文件名及路徑的參數為:CONTROL_FILES。
     控制文件把oracle引導到數據文件的其他部分。啟動一個實例時,oracle從參數文件中讀取控制文件的名字和位置。安裝數據庫時,Oracle打開控制文件,最終打開數據庫時,Oracle從控制文件中讀取數據文件的列表並打開其中的每個文件。
    各個文件的關系如下圖:3.Oracle的內存結構:
按照系統對內存使用方法的不同,Oracle數據庫的的內存可以分為以下幾個部分:
系統全局區:SGA(system global area)
程序全局區:PGA(programe global area)
排序池:(sort area)
大池:(large pool)
Java池:(Java pool)
1)     系統全局區是:由所有用戶進程共享的一塊內存區域。包括:數據緩沖區、重做日志緩沖區、共享池。
數據緩沖區:(database buffer cache)用於存儲最近從數據庫中讀取出來的數據塊。
DB_BLOCK_SIZE   確定數據塊的大小,一般為2K或4K,對於大數據塊的數據庫,此參數值為物理塊的倍數。
DB_ nK_CACHE_SIZE 定義非標准數據庫的大小。     重做日志緩沖區:(redo log buffer)是由一條條重做記錄組成,每條記錄記載了被修改數據塊的位置和變化後的數據。
LOG_BUFFER 
確定日志緩沖區的大小。
     
     共享池:
SQL程序的高速緩沖區,存放的是所有通過SQL語法分析並准備執行的SQL語句。主要由庫高速緩存和數據字典高速緩存組成。
SHARED_POOL_SIZE定義其大小。
2)程序全局區:是包含單個用戶服務器數據和控制信息的內存區域,它是在用戶進程連接到oracle並創建一個會話時由Oracle自動分配的,不可共享,主要用於用戶在編程存儲變量和數組。
3)排序區:(sort area)為由排序要求的SQL語句提供內存空間,系統使用專用的內存區域進行數據排序,這部分空間就是排序區。
參數sort_area_size用來設置排序區的大小。
4)大池:(large pool)用於數據庫備份工具---恢復管理器(RMAN:recovery manager).
Large pool 的大小由large_pool_size確定。
5)JAVA池:主要用於Java語言開發,一般來說不低於20M.
其大小由 Java_pool_size 來確定,可以動態調整。
4.Oracle的進程結構:
包含三類進程:
用戶進程、服務器進程、後台進程。
1)     用戶進程:
向服務器進程提出操作請求,當用戶運行一個應用程序時,就建立一個用戶進程。
2)     服務器進程:
接受用戶進程發出的請求並完成其相應的操作。服務器進程主要包括:分析、優化和執行SQL語句,將硬盤數據讀到系統全局區(SGA),將SQL語句的結果返回給用戶進程,完成系統的維護等。
3)     後台進程:
多進程系統中使用的一些附加進程,為所有數據庫用戶異步完成各種事務。數據庫的物理結構與內存結構之間的交互要通過後台進程來完成。
主要的後台進程有:
DBWR(database writer):數據寫進程
將數據緩沖區中所有修改過的緩沖塊數據寫到數據文件中,並使用LRU算法(最近最少使用算法)來保持緩沖區中的數據塊為最近使用過的,以減少I/O次數。該進程在啟動實例時自動啟動。通過設置DB_writer_processes 定DBWR個數。
LGWR(log writer):日志寫進程
將日志緩沖區中的所有記錄項寫到日志文件中,該進程在啟動實例時自動啟動。
LGWR進行寫操作的情況:用戶進程提交一個事務(commit);重做日志緩沖區達到1/3區間;在DBWR進程將髒緩沖區寫入到數據文件之前;出現超時(3秒鐘內未活動,則進行一次些操作)。Oracle總是先日志後修改。
CKPT(checkpoint process):檢查點寫進程
在檢查點出現期間,DBWR進程將數據緩沖區中的所有髒緩沖區塊寫到數據文件中,LGWR將日志緩沖區中的所有記錄項寫到日志文件中,以確保上一個檢查點至今修改過的所有數據塊都被寫到磁盤上。在控制文件中記錄檢查點,參數CHECKPOINT_PROCESS確定了檢查點的啟動/不啟動狀態。若CKPT不啟動,則該進程的工作將LGWR進程代勞(如果數據庫的文件過多,這樣操作會降低系統性能)。該進程主要用於同步數據庫的數據文件、控制文件和重做日志。
SMON(system monitor):系統監控進程
在實例啟動時執行實例恢復,合並空間碎片並釋放臨時段。
主要包括:REDO;打開數據庫;UNDO。
PMON(process monitor):進程監控進程
監視服務器進程的執行,並且在服務器進程失敗時清除該服務器進程。主要執行以下操作:
回退用戶的當前事務;釋放服務器進程所占用的所有表鎖和行鎖;釋放用戶所占用的其他資源。
ARCH(archive process):歸檔進程
Oracle數據庫有兩種運行模式,歸檔和非歸檔模式。以非歸檔模式運行時,日志在切換時被直接覆蓋,不產生歸檔日志,這是數據庫默認的運行模式。數據庫運行在歸檔模式時,在日志切換之前,由ARCH進程將日志信息寫入磁盤,也就是說自動備份在線日志。
Oracle數據庫的是REDO文件數量是有限的,所以Oracle以循環的方式向它們中寫入,它順序寫滿每個REDO日志文件,當達到最後一個文件時,再循環回去開始填寫第一個REDO文件。如果為了能恢復數據庫而想保存日志文件。那麼在它們被重新使用之前需要對其進行備份,歸檔進程管理此工作。
RECO :              恢復進程
用於分布式數據庫維持在分布環境中的數據的一致性。
LCKn:               封鎖進程
在並行服務器中用於多個實例間的封鎖。
5、Oracle server工作原理:
訪問Oracle數據庫時,必須首先連接到Oracle server ,才能執行各種數據庫訪問操作。開一終端,執行命令:sqlplus /nolog即可連接數據庫。應用程序的所有SQL操作都是有服務器進程來執行的,用戶進程只是發送SQL語句並接收SQL語句的結果。
SQL語句介紹:
1) 數據庫查詢
用SELECT語句從表中提取查詢數據。語法為
SELECT [DISTINCT] {column1,column2,…} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC]; 
2)數據庫操縱語言(DML)命令用於查詢和操縱模式對象中的數據,它不隱式地提交當前事務。它包含UPDATE、INSERT、DELETE、EXPLAIN PLAN、SELECT和LOCK TABLE 等命令。下面簡單介紹一下:
UPDATE tablename SET {column1=expression1,column2=expression2,…} WHERE {conditions};
INSERT INTO tablename {column1,column2,…} VALUES {expression1,expression2,…};
DELETE FROM tablename WHERE {conditions}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved