本篇博客將對Oracle的體系結構、存儲結構、內存結構和進程結構進行初步介紹,從而從宏觀上把握它的物理組成、文件組成和各類進程,對於進一步的瞭解能夠起到很好地做用
sql
1、Oralce體系結構數據庫
一、概述緩存
Oracle的體系結構是數據庫的組成,工做過程,以及數據庫中數據的組織與管理機制,要了解oracle數據庫的體系結構,就必需要理解oracle的主要組件和重要的概念。Oracle體系結構包含一系列組件,包括實例、用戶進程、服務進程、數據文件及其餘文件,如參數文件、口令文件和歸檔日誌文件等。以下圖所示:安全
實例和數據庫是oracle數據庫體系結構的核心組成部分,也是最重要的兩個概念,dba的主要工做就是維護實例和數據庫。服務器
1)實例session
實例是後臺進程和內存的集合,必須啓動實例才能訪問數據庫中的數據。oracle
Oracle啓動時,將分配一個系統全局區(SGA),並啓動一系列oracle後臺進程ide
一個實例只能打開並使用一個數據庫工具
Oracle分爲單進程實例和多進程實例,如今廣泛都是多進程實例,多進程就是多用戶,不一樣用戶使用不一樣進程來執行oracle的不一樣部分。性能
2)數據庫
數據庫是一個數據的集合,該集合被視爲一個邏輯單元。
Oracle 數據庫由操做系統文件組成,這些文件爲數據庫信息提供實際物理存儲區
Oracle 數據庫包括邏輯結構和物理結構。
物理結構:是指存儲數據庫信息的一組操做系統文件,每一個數據庫有一個邏輯結構和一個物理結構。物理結構是指構成數據庫的一組操做系統文件,主要由3種類型文件組成:數據文件,控制文件和重作日誌文件。
邏輯結構:是指數據庫數據的邏輯存儲結構,包括:表空間,數據段,表,視圖等。
2、oracle存儲結構
Oracle的存儲結構分爲物理結構和邏輯結構,這兩種存儲結構既相互獨立又相互聯繫。
一、物理結構:
物理結構就是oracle數據庫建立後使用的操做系統物理文件,分爲如下兩種:
1)主要文件
數據文件:數據文件是物理存儲數據庫的文件,數據文件的特色:每一個數據文件只與一個數據庫相聯繫,一個表空間能夠包含一個或多個數據文件,一個數據文件只能屬於一個表空間。數據文件包含數據庫的用戶或應用程序數據,以及元數據和數據字典。
重作日誌文件:它記錄了對數據的全部更改信息,並提供一種數據恢復機制,若是數據庫服務器發生崩潰,但未丟失任何數據文件,那麼實例即可使用這些文件中的信息恢復數據庫。
控制文件:當數據庫讀取時,要根據控制文件的信息查找數據文件。控制文件存儲了數據文件和重作日誌文件的名稱和位置。一個數據庫至少有兩份控制文件,oracle11g默認包括3個控制文件,各個控制文件內容相同,能夠避免由於一個控制文件的損壞致使沒法啓動數據庫。控制文件記錄瞭如下關鍵信息:數據文件的位置和大小、重作日誌文件的位置及大小、數據庫名稱及建立時間、日誌序列號。控制文件對數據庫相當重要。沒有這些文件,就沒法打開數據文件以訪問數據庫中的數據。
2)其餘文件
參數文件:用於定義實例啓動時的配置
口令文件:容許sysdba、sysoper 和sysasm 遠程鏈接到實例並執行管理任務
歸檔日誌文件:使用這些文件和數據庫備份,能夠恢復丟失的數據文件。也就是說,歸檔日誌可以恢復還原的數據文件
二、oracle邏輯結構
Oracle的邏輯組件包括表空間、段、區、塊和模式等。
1)表空間
表空間是數據庫中最大的邏輯單位, SYSTEM 和SYSAUX 表空間是在建立數據庫時建立的必須存在的表空間,還會有TEMP,USERS等。
每一個表空間是由一個或多個數據文件組成的,一個數據文件只能與一個表空間相關聯。
表空間的大小等於構成該表空間的全部數據文件大小之和。
表空間和數據文件是相對應的,若是沒有數據文件,表空間不可能獨立存在,若是隻有表空間沒有數據文件也是不行的,就比如若是電腦沒有硬盤,你不能再邏輯上看到C盤D盤,在這裏硬盤就至關因而數據文件,而C盤就至關因而表空間。咱們能夠把多個數據文件組成一個表空間,而後在表空間裏面存儲數據,表空間和數據文件是對應的,一個表空間能夠是由一個或多個數據文件組成的,可是一個數據文件只能在一個表空間當中。
表空間的做用:
對於不一樣的用戶分配不一樣的表空間,對不一樣的模式對象分配不一樣的表空間,方便對用戶操做和模式對象的管理。
能夠將不一樣數據文件建立到不一樣的磁盤中,有利於管理磁盤空間,提升i/o性能,備份和恢復數據等。
SYSTEM表空間:用於存放oracle系統內部表和數據字典的數據,如代表、列名、用戶名等。
SYSAUX表空間:做爲SYSTEM的輔助表空間,用於存放各類數據庫工具(如企業管理器、StasPack、logMiner等)用到的數據。用於存放各類模式的對象數據,如智能代理用戶DBSNMP、數據挖掘用戶ODM等。
USERS表空間:做爲用戶使用的表空間,能夠在這個表空間上建立各類對象,如建立表,索引等。
TEMP表空間:存放臨時數據的特殊表空間,例如:當須要進行排序時,系統就將排序的數據臨時存放在該表空間,排序處理完成後,便可釋放排序數據所佔用的空間,稱之爲臨時表空間。
以上表空間咱們不能建立,系統安裝好以後自動建立好了,咱們也能夠根據須要本身建立。
建立表空間的語法是:
CREATE TABLESPACE tablespacename
DATAFILE ‘filename’ [SIZE integer [K|M]]
[AUTOEXTEND [OFF|ON]];
案例一:建立一個自動增加的表空間tbs_work
若是不能建立,說明數據庫沒有啓動,執行STARTUP命令以後再建立。
若是空間不夠用了,能夠調整表空間大小。
方法一:更改數據文件大小,並指明數據文件的存放路徑,使用RESIZE關鍵字執行調整後的表空間大小。
方法二:向表空間內添加新的數據文件,當數據文件滿了以後自動存儲到新的數據文件。
案例二:改變表空間的讀寫狀態,ONLY表示只讀,WRITE表示可讀寫。
刪除表空間
案例3、想查看系統中有多少個數據文件
案例4、如何查看錶空間
案例5、查看錶空間和數據文件之間的對應關係
2)段
段存在於表空間中,是一種指定類型的邏輯存儲結構。
段由一組區組成
段分爲4類:數據段、索引段、回退段、臨時段。
3)區
區是磁盤空間分配的最小單位。磁盤按區劃分,每次至少分配一個區。
區是由連續的數據塊組成。
段主要有一個或多個區構成,當建立段時,至少包含一個區。
區不能跨數據文件存在,只能存在於一個數據文件中。
4)數據塊
是數據中最小的數據組織單位與管理單位
Oracle數據中的數據存儲於數據塊中
數據塊是oracle服務器所能讀取或寫入的最小存儲單元
數據塊的取值範圍是2K-64KB,默認值與oracle版本有關
5)模式
模式是數據庫對象的集合。包括:表、視圖、索引、同義詞、序列、過程和程序包等。
當建立一個用戶時,oracle會自動建立一個與用戶名相同的模式,所以,模式又稱爲用戶模式。
用戶登陸後,默認訪問的是與本身的名稱相同的模式中的數量庫對象。
3、oracle的內存結構
內存是影響數據庫性能的第一要素,oracle內存存儲的主要內容以下:
程序代碼
關於已經鏈接的會話信息,包括當前全部活動會話和非活動會話
程序運行時必須的相關信息,如查詢計劃
Oracle進程之間通訊和共享的信息,如鎖
按照內存的使用方法不一樣,oracle數據庫的內存又可分爲系統全局區(SGA)、程序全局區(PGA)、用戶全局區(UGA)
一、系統全局區 ( SGA )
數據庫信息存儲於系統全局區,由多個數據庫進程共享,當數據庫實例啓動時SGA的內存本自動分配,SGA是數據庫中佔用服務器內存最大的一個區域,也是影響數據庫性能的一個重要指標,SGA按做用不一樣,分爲如下幾個部分。
二、PGA
PGA不是實例的一部分,包含單個服務器進程或者單個後臺進程所需的數據和控制信息。
PGA是在用戶進程鏈接到數據庫並建立一個會話時自動分配
該區域內保留每一個與oracle數據庫鏈接的用戶進程所需的內存
當一個用戶會話結束,PAG就會釋放
三、UGA
用戶全局區(UGA)爲用戶進程存儲會話狀態
UGA能夠做爲SGA或者PGA的一部分。具體位置取決於如何鏈接Oracle:
若是經過一個共享服務器鏈接,UGA包含在SAG中
若是經過一個專有服務器鏈接,UGA就包含在專有服務器的PGA中
案例一:驗證內存結構工做的原理(select語句是如何被執行的?)
當用戶執行語句select * from scott.emp的時候,工做原理分爲四步,以下:
第一步:先作編譯,編譯包含了語法的檢查和語義的檢查。
第二步:若是編譯沒有問題會進入shared pool(共享池 )中,而shared pool 是由library cache和data dictionary cache(數據字典緩存)組成。Sql語句第一時間會進入library cache中,即library cache中會存放被編譯過的正確的sql語句,僅僅是sql語句而已。library cache中沒有緩存的sql語句須要進行硬解析(即須要耗費設備的I/0資源從硬盤讀取)。假設library cache中有這個sql語句,就不須要作硬解析,接着會查 data dictionary cache。data dictionary cache中緩存了權限和對象數據及屬性,全部data dictionary cache檢查用戶是否對scott.emp表是否具備訪問權限,若是有權限繼續往下執行,若是沒有權限,直接給用戶返回一個結果。若是一條語句歷來都沒有被執行過,這條語句首先被緩存在share pool中的library cache中,下一次被執行的時候直接從share pool中取sql語句。存放sql語句也須要佔用空間,share pool的空間也是有限的,爲了防止share pool空間不夠用,採用先進先出的規則即後執行的sql語句會覆蓋先執行的sql語句來釋放空間,固然share pool的空間越大越好。
第三步:data buffer cache如今hr用戶能夠訪問scott.emp表了,data buffer cache的做用就是從磁盤或存儲中將數據塊調入內存,緩存在buffer cache中。總結:buffer cache緩存數據自己,library cache緩存sql語句自己。
第四步:redo log buffer<重作日誌緩衝區>當用戶執行insert,update,delete,create,alter等操做後,數據發生了變化,這些變化了的數據寫入數據緩衝區(buffer cache)以前,先寫入重作日誌緩衝區,同時變化以前的數據也放入重作日誌緩存中,這樣作,是爲了保證在數據恢復時oracle就知道哪些事務須要提交,哪些事務須要撤回。
能夠經過企業管理器來查看share pool的相關信息
若是控制檯打不開,能夠執行命令打開:
能夠從v$sgainfo中查看shared pool size
測試語句執行時間:
SQL> set timing on
SQL> select * from scott.emp;第一次執行sql語句
已用時間: 00: 00: 00.05
SQL> /再次執行上一條命令所用的時間爲00: 00: 00.00
已用時間: 00: 00: 00.00
經過上面的測試發現,緩存提升了查詢的速度。
4、oracle進程結構
Oracle有5個後臺進程是必須啓動的,不然數據庫實例沒法啓動成功,分別是:進程監控(PMON)進程、系統監控(SMON)進程、數據寫入(DBWR)進程、日誌寫入(LGWR)進程、檢查點(CKPT)進程。
CKPT進程:確保數據緩衝區中全部修改過的數據塊都被寫入數據庫文件的機制。保證數據庫日誌文件和數據文件的同步。
相關命令:
一、查看用戶進程和數據庫進程
Ps –elf | greporacleocl |grep–v grep
二、守護進程
Ps –elf |grep oha
三、查看日誌進程LGWR
Ps –elf |grep ora_ | grep lgwr
5、oracle用戶管理
當建立一個新數據庫時,oracle將常見一些默認的數據庫用戶,如SYS,SYSTEM和SCOTT等用戶。SYS和SYSTEM用戶都是oracle管理用戶,而SCOTT用戶是oracle數據庫的一個示範用戶,SCOTT數據庫裏面包含一些測試展現用的示例表(用於學習交流)
一、默認數據庫用戶
1)SYS
SYS用戶是oracle中的一個超級用戶,數據庫中全部數據字典和視圖都存在SYS模式中,數據字典存儲了用來管理數據庫對象的全部信息,是oracle數據庫中很是重要的系統信息。SYS用戶主要用來維護系統信息和管理實例。SYS用戶只能以SYSOPER或SYSDBA角色登陸系統。
2)SYSTEM
SYSTEM用戶是oracle中默認的數據庫管理員,它擁有DBA權限。該用戶模式中存儲了oracle管理工具使用的內部表和視圖。一般經過SYSTEM用戶管理數據庫的用戶、權限和存儲等。不建議在SYSTEM模式中建立用戶表。SYSTEM不能以SYSOPER和SYSDBA角色登陸系統,只能以默認方式登陸。
3)SCOTT
SCOTT用戶是oracle數據庫的一個示範用戶,通常在數據庫安裝時建立。SCOTT用戶模式包含4個示例表,其中一個是EMP表,使用USERS表空間存儲模式對象。
一般出於安全考慮,對於不一樣用途的表須要不一樣的訪問權限,此時,就須要建立不一樣的用戶,oracle中的create user命令用於建立用戶,每一個用戶都有一個默認表空間和一個臨時表空間。若是沒有指定,oracle就將USERS設爲默認表空間,將TEMP設爲臨時表空間。
4)Sysdba和sysoper兩個系統權限區別
sysdba和sysoper屬於system privilege,也稱爲administrative privilege,擁有例如數據庫開啓關閉之類一些系統管理級別的權限。sysdba和sysoper具體的權限以下:
【SYSOPER】權限,即數據庫操做員權限,權限包括:
打開數據庫服務器
關閉數據庫服務器
備份數據庫
恢復數據庫
日誌歸檔
會話限制
【SYSDBA】權限,即數據庫管理員權限,權限包括:
打開數據庫服務器
關閉數據庫服務器
備份數據庫 恢復數據庫
日誌歸檔
會話限制
管理功能
建立數據庫
【sysdba】擁有最高的系統權限,登錄後是sys。
【sysoper】主要用來啓動、關閉數據庫,sysoper 登錄後用戶是public。
二、建立自定義用戶
步驟:
選擇用戶名和密碼
識別用戶需用於存儲對象的表空間
決定每一個表空間的限額
分配缺省表空間和臨時表空間
建立用戶
向用戶授予權限和角色
語法:
CREATE USER user
IDENTIFIED BY password
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA {integer [K|M] | UNLIMITED}ON tablespace
[QUOTA {integer [K|M] | UNLIMITED}ON tablespace ] ...]
[PASSWORD EXPIRE ]
案例1:建立用戶YDW
CREATE USER YDW --用戶名爲YDW
IDENTIFIED BY pwd123 --密碼爲martinpwd
DEFAULT TABLESPACE tbs_work --默認表空間爲tbs_work
TEMPORARY TABLESPACE temp --臨時表空間爲temp
QUOTA UNLIMITED ON tbs_work --對tbs_work表空間的使用沒有限制
PASSWORD EXPIRE; --第一次登陸須要修改密碼
三、修改YDW用戶的密碼爲pwd123456
四、刪除用戶YDW
五、查詢oracle的全部用戶
六、解鎖用戶
1)先查看hr用戶的狀態是鎖定的
6、oracle數據庫權限管理
權限指的是執行特定命令或訪問數據庫對象的權利
權限有兩種類型,系統權限和對象權限
系統權限容許用戶執行某些數據庫操做,如建立表就是一個系統權限
對象權限容許用戶對數據庫對象(如表、視圖、序列等)執行特定操做
角色是一組相關權限的組合,能夠將權限授予角色,再把角色授予用戶,以簡化權限管理
一、使用系統權限
系統權限是指在數據庫中執行某種系統級別的操做,或者針對某一類對象執行某種操做的權利,例如:在數據庫中建立表空間的權利,或者建立表的權利,都屬於系統權限,具體以下圖:
經常使用的系統權限以下:
CREATE SESSION:鏈接到數據庫
CREATE TABLE:建立表
CREATE VIEW:建立視圖
CREATE SEQUENCE:建立序列
二、對象權限
對象權限是指針對某個特定模式對象執行操做的權利,只能針對模式對象來設置管理對象權限,包括:表、視圖、序列、存儲過程等。
三、受權
Oracle數據庫用戶有兩種途徑得到權限
1)直接向用戶授予權限
2)將權限授予給角色,再將角色授予給一個或者多個用戶
使用角色能更高效,方便地對權限進行管理,因此數據庫管理員一般使用角色向用戶授予權限,而不是直接向用戶授予權限。
Oracle中經常使用系統預約義角色有如下種類:
1)CONNECT:擁有鏈接數據庫權限
2)RESOURCE:擁有建立表、觸發器、過程等權限
3)DBA:數據庫管理員,擁有管理數據庫最高權限
新用戶必須授予必定的權限才能進行相關數據庫操做,受權經過grant語句,取消受權經過revoke語句
受權的語法:
1)GRANT CONNECT TO MARTIN;
授予授予CONNET角色給MARTIN
2)GRANT CONNECT,RESOURCE TO MARTIN;
同時授予CONNET,RESOURCE這2個角色給MARTIN
3)GRANT SELECT ON SCOTT.emp TO MARTIN;
容許用戶MARTIN查詢 SCOTT.emp表的記錄
4)GRANT UPDATE ON SCOTT.emp TO MARTIN;
容許用戶MARTIN更新 SCOTT.emp表中的記錄
5)GRANT ALL ON SCOTT.emp TO MARTIN;
容許用戶MARTIN插入、刪除、更新和查詢SCOTT.emp表中的記錄
四、撤銷權限的語法:
使用REVOKE命令撤銷用戶分配的權限或角色
1)REVOKE CONNECT,RESOURCE FROM MARTIN;
撤銷CONNET,RESOURCE這2個角色
2)REVOKE SELECT FROM SCOTT.emp TO MARTIN;
撤銷MARTIN查詢 SCOTT.emp表的記錄的權限
案例1:爲用戶設置權限
1)首先創建用戶YDW
2)使用YDW用戶登陸
提示第一次登陸須要更改密碼
3)使用新密碼從新登陸,提示沒有任何權限。
4)爲用戶授予session(鏈接到數據庫)權限
5)從新登陸oracle
6)測試YDW可否建立表,提示權限不足
7)授予用戶建立表的權限
8)再次使用YDW登陸,測試可以建立表
建立成功了
9)測試插入數據,並查詢
10)查看用戶擁有的權限
11)撤銷用戶的權限
12)測試用戶YDW可以查詢scott.emp
提示沒有權限
13)授予用戶查詢scott.emp的權限
14)測試查詢scott.emp
查詢成功了