Oracle體系結構和用戶管理

   本篇博客將對Oracle的體系結構、存儲結構、內存結構和進程結構進行初步介紹,從而從宏觀上把握它的物理組成、文件組成和各類進程,對於進一步的瞭解能夠起到很好地做用
sql


1、Oralce體系結構數據庫

一、概述緩存

    Oracle的體系結構是數據庫的組成,工做過程,以及數據庫中數據的組織與管理機制,要了解oracle數據庫的體系結構,就必需要理解oracle的主要組件和重要的概念。Oracle體系結構包含一系列組件,包括實例、用戶進程、服務進程、數據文件及其餘文件,如參數文件、口令文件和歸檔日誌文件等。以下圖所示:安全

楊書凡00.png


實例和數據庫是oracle數據庫體系結構的核心組成部分,也是最重要的兩個概念,dba的主要工做就是維護實例和數據庫。服務器

1)實例session

實例是後臺進程和內存的集合,必須啓動實例才能訪問數據庫中的數據。oracle

楊書凡01.png 


Oracle啓動時,將分配一個系統全局區(SGA),並啓動一系列oracle後臺進程ide

一個實例只能打開並使用一個數據庫工具

Oracle分爲單進程實例和多進程實例,如今廣泛都是多進程實例,多進程就是多用戶,不一樣用戶使用不一樣進程來執行oracle的不一樣部分。性能

 

2)數據庫

數據庫是一個數據的集合,該集合被視爲一個邏輯單元。

Oracle 數據庫由操做系統文件組成,這些文件爲數據庫信息提供實際物理存儲區

Oracle 數據庫包括邏輯結構和物理結構。

物理結構:是指存儲數據庫信息的一組操做系統文件,每一個數據庫有一個邏輯結構和一個物理結構。物理結構是指構成數據庫的一組操做系統文件,主要由3種類型文件組成:數據文件,控制文件和重作日誌文件。

邏輯結構:是指數據庫數據的邏輯存儲結構,包括:表空間,數據段,表,視圖等。

 

2、oracle存儲結構

Oracle的存儲結構分爲物理結構和邏輯結構,這兩種存儲結構既相互獨立又相互聯繫。

楊書凡02.png

一、物理結構:

物理結構就是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命令以後再建立。

楊書凡03.png

 

若是空間不夠用了,能夠調整表空間大小。

方法一:更改數據文件大小,並指明數據文件的存放路徑,使用RESIZE關鍵字執行調整後的表空間大小。

楊書凡04.png

 

方法二:向表空間內添加新的數據文件,當數據文件滿了以後自動存儲到新的數據文件。

楊書凡05.png

 

 

案例二:改變表空間的讀寫狀態,ONLY表示只讀,WRITE表示可讀寫。

楊書凡06.png

 

刪除表空間

楊書凡07.png

 

 

案例3、想查看系統中有多少個數據文件

楊書凡08.png

 

楊書凡09.png

 

案例4、如何查看錶空間

楊書凡10.png

 

案例5、查看錶空間和數據文件之間的對應關係

楊書凡11.png

 

 

 

2)段

  段存在於表空間中,是一種指定類型的邏輯存儲結構。

  段由一組區組成

  段分爲4類:數據段、索引段、回退段、臨時段。

楊書凡12.png 

3)區

  區是磁盤空間分配的最小單位。磁盤按區劃分,每次至少分配一個區。

  區是由連續的數據塊組成。

  段主要有一個或多個區構成,當建立段時,至少包含一個區。

  區不能跨數據文件存在,只能存在於一個數據文件中。

 

4)數據塊

  是數據中最小的數據組織單位與管理單位

  Oracle數據中的數據存儲於數據塊中

  數據塊是oracle服務器所能讀取或寫入的最小存儲單元

  數據塊的取值範圍是2K-64KB,默認值與oracle版本有關

 

5)模式

  模式是數據庫對象的集合。包括:表、視圖、索引、同義詞、序列、過程和程序包等。

  當建立一個用戶時,oracle會自動建立一個與用戶名相同的模式,所以,模式又稱爲用戶模式。

  用戶登陸後,默認訪問的是與本身的名稱相同的模式中的數量庫對象。

 

 


 

3、oracle的內存結構

內存是影響數據庫性能的第一要素,oracle內存存儲的主要內容以下:

  程序代碼

  關於已經鏈接的會話信息,包括當前全部活動會話和非活動會話

  程序運行時必須的相關信息,如查詢計劃

  Oracle進程之間通訊和共享的信息,如鎖

 

按照內存的使用方法不一樣,oracle數據庫的內存又可分爲系統全局區(SGA)、程序全局區(PGA)、用戶全局區(UGA)

楊書凡13.png

 

一、系統全局區 ( SGA )

數據庫信息存儲於系統全局區,由多個數據庫進程共享,當數據庫實例啓動時SGA的內存本自動分配,SGA是數據庫中佔用服務器內存最大的一個區域,也是影響數據庫性能的一個重要指標,SGA按做用不一樣,分爲如下幾個部分。

楊書凡14.png

 

 


 

二、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的相關信息

若是控制檯打不開,能夠執行命令打開:

楊書凡15.png

 

楊書凡16.png

 

 楊書凡17.png


楊書凡18.png 

 

楊書凡19.png

 


能夠從v$sgainfo中查看shared pool size

楊書凡20.png

 

測試語句執行時間:

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進程結構

 

楊書凡21.png

 

Oracle有5個後臺進程是必須啓動的,不然數據庫實例沒法啓動成功,分別是:進程監控(PMON)進程、系統監控(SMON)進程、數據寫入(DBWR)進程、日誌寫入(LGWR)進程、檢查點(CKPT)進程。

楊書凡22.png 


CKPT進程:確保數據緩衝區中全部修改過的數據塊都被寫入數據庫文件的機制。保證數據庫日誌文件和數據文件的同步。

 

 

相關命令:

一、查看用戶進程和數據庫進程

Ps –elf | greporacleocl |grep–v grep

楊書凡23.png 



 

二、守護進程

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;                   --第一次登陸須要修改密碼

楊書凡24.png 


 

三、修改YDW用戶的密碼爲pwd123456

楊書凡25.png

 

 

四、刪除用戶YDW

楊書凡26.png

 

 

五、查詢oracle的全部用戶

楊書凡27.png

 

六、解鎖用戶

1)先查看hr用戶的狀態是鎖定的

楊書凡29.png

 

 

6、oracle數據庫權限管理

  權限指的是執行特定命令或訪問數據庫對象的權利

  權限有兩種類型,系統權限和對象權限

  系統權限容許用戶執行某些數據庫操做,如建立表就是一個系統權限

  對象權限容許用戶對數據庫對象(如表、視圖、序列等)執行特定操做

  角色是一組相關權限的組合,能夠將權限授予角色,再把角色授予用戶,以簡化權限管理

 

一、使用系統權限

系統權限是指在數據庫中執行某種系統級別的操做,或者針對某一類對象執行某種操做的權利,例如:在數據庫中建立表空間的權利,或者建立表的權利,都屬於系統權限,具體以下圖:

楊書凡30.png

 

 

經常使用的系統權限以下:

CREATE  SESSION:鏈接到數據庫

CREATE TABLE:建立表

CREATE VIEW:建立視圖

CREATE SEQUENCE:建立序列

 

二、對象權限

對象權限是指針對某個特定模式對象執行操做的權利,只能針對模式對象來設置管理對象權限,包括:表、視圖、序列、存儲過程等。

楊書凡31.png

 

三、受權

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

楊書凡32.png

 

2)使用YDW用戶登陸

楊書凡33.png

提示第一次登陸須要更改密碼

 

3)使用新密碼從新登陸,提示沒有任何權限。

楊書凡34.png

 

4)爲用戶授予session(鏈接到數據庫)權限

楊書凡35.png

 

5)從新登陸oracle

楊書凡36.png

 

6)測試YDW可否建立表,提示權限不足

楊書凡37.png

 

7)授予用戶建立表的權限

楊書凡38.png

 

8)再次使用YDW登陸,測試可以建立表

楊書凡39.png

建立成功了

 

9)測試插入數據,並查詢

楊書凡40.png

 

10)查看用戶擁有的權限

楊書凡41.png

 

11)撤銷用戶的權限

楊書凡42.png

 

12)測試用戶YDW可以查詢scott.emp

楊書凡43.png

提示沒有權限

 

13)授予用戶查詢scott.emp的權限

楊書凡44.png

 

14)測試查詢scott.emp

楊書凡45.png

查詢成功了

相關文章
相關標籤/搜索