Oracle體系結構和用戶管理

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


一、Oralce體系結構

1、概述

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

楊書凡00.png


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

1)實例

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

楊書凡01.png 


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

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

Oracle分爲單進程實例和多進程實例,現在普遍都是多進程實例,多進程就是多用戶,不同用戶使用不同進程來執行oracle的不同部分。

 

2)數據庫

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

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

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

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

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

 

二、oracle存儲結構

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

楊書凡02.png

1、物理結構:

物理結構就是oracle數據庫創建後使用的操作系統物理文件,分爲以下兩種:

1)主要文件

數據文件:數據文件是物理存儲數據庫的文件,數據文件的特點:每個數據文件只與一個數據庫相聯繫,一個表空間可以包含一個或多個數據文件,一個數據文件只能屬於一個表空間。數據文件包含數據庫的用戶或應用程序數據,以及元數據和數據字典。

 

重做日誌文件:它記錄了對數據的所有更改信息,並提供一種數據恢復機制,如果數據庫服務器發生崩潰,但未丟失任何數據文件,那麼實例便可使用這些文件中的信息恢復數據庫。

 

控制文件:當數據庫讀取時,要根據控制文件的信息查找數據文件。控制文件存儲了數據文件和重做日誌文件的名稱和位置。一個數據庫至少有兩份控制文件,oracle11g默認包括3個控制文件,各個控制文件內容相同,可以避免因爲一個控制文件的損壞導致無法啓動數據庫。控制文件記錄了以下關鍵信息:數據文件的位置和大小、重做日誌文件的位置及大小、數據庫名稱及創建時間、日誌序列號。控制文件對數據庫至關重要。沒有這些文件,就無法打開數據文件以訪問數據庫中的數據。

 

 

2)其他文件

參數文件:用於定義實例啓動時的配置

口令文件:允許sysdba、sysoper 和sysasm 遠程連接到實例並執行管理任務

歸檔日誌文件:使用這些文件和數據庫備份,可以恢復丟失的數據文件。也就是說,歸檔日誌能夠恢復還原的數據文件

 

2、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

 

 

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

楊書凡08.png

 

楊書凡09.png

 

案例四、如何查看錶空間

楊書凡10.png

 

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

楊書凡11.png

 

 

 

2)段

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

  段由一組區組成

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

楊書凡12.png 

3)區

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

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

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

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

 

4)數據塊

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

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

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

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

 

5)模式

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

  當創建一個用戶時,oracle會自動創建一個與用戶名相同的模式,因此,模式又稱爲用戶模式。

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

 

 


 

三、oracle的內存結構

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

  程序代碼

  關於已經連接的會話信息,包括當前所有活動會話和非活動會話

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

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

 

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

楊書凡13.png

 

1、系統全局區 ( SGA )

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

楊書凡14.png

 

 


 

2、PGA

  PGA不是實例的一部分,包含單個服務器進程或者單個後臺進程所需的數據和控制信息。

  PGA是在用戶進程連接到數據庫並創建一個會話時自動分配

  該區域內保留每個與oracle數據庫連接的用戶進程所需的內存

  當一個用戶會話結束,PAG就會釋放

 

 

3、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

 

通過上面的測試發現,緩存提高了查詢的速度。

 

 

 

 

 

 

四、oracle進程結構

 

楊書凡21.png

 

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

楊書凡22.png 


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

 

 

相關命令:

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

Ps –elf | greporacleocl |grep–v grep

楊書凡23.png 



 

2、守護進程

Ps –elf |grep oha


 

3、查看日誌進程LGWR

Ps –elf |grep ora_ | grep lgwr 

 

五、oracle用戶管理

當創建一個新數據庫時,oracle將常見一些默認的數據庫用戶,如SYS,SYSTEM和SCOTT等用戶。SYS和SYSTEM用戶都是oracle管理用戶,而SCOTT用戶是oracle數據庫的一個示範用戶,SCOTT數據庫裏面包含一些測試展示用的示例表(用於學習交流)

1、默認數據庫用戶

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。

 

2、創建自定義用戶

步驟:

  選擇用戶名和密碼

  識別用戶需用於存儲對象的表空間

  決定每個表空間的限額

  分配缺省表空間和臨時表空間

  創建用戶

  向用戶授予權限和角色

 

 

語法:

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 


 

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

楊書凡25.png

 

 

4、刪除用戶YDW

楊書凡26.png

 

 

5、查詢oracle的所有用戶

楊書凡27.png

 

6、解鎖用戶

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

楊書凡29.png

 

 

六、oracle數據庫權限管理

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

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

  系統權限允許用戶執行某些數據庫操作,如創建表就是一個系統權限

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

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

 

1、使用系統權限

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

楊書凡30.png

 

 

常用的系統權限如下:

CREATE  SESSION:連接到數據庫

CREATE TABLE:創建表

CREATE VIEW:創建視圖

CREATE SEQUENCE:創建序列

 

2、對象權限

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

楊書凡31.png

 

3、授權

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表中的記錄

 

 

4、撤銷權限的語法:

使用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

查詢成功了

 

 

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章