8-1 Oracle 系統架構

8-2 資料字典

8-3 使用者(User)

8-4 資料庫安全性

8-5 權限與角色

 
   

整個 Oracle 系統架構包含以下三個部分,如圖一所示:

System Global Area (系統共同區,SGA)

Process (處理單元)

Files (系統檔案)



圖一 Oracle 系統架構
 

每當 Oracle 系統啟動時,會佔用主機一大塊資料庫專屬的記憶体空間來控制資訊與儲存資料,這塊資料庫專屬的記憶体空間稱為 System Global Area(SGA)。SGA 與系統 Background Process (背景處理單元) 合稱 Oracle Instance(實例)。SGA 主要是由 Shared Pool、Database Buffer Cache 與 Redo Log Buffer 三個主要部份所組成:
 

Shared Pool

Database Buffer Cache

Redo Log Buffer

 

在 Oracle 中的 Process 分為兩種:User Process 與 Oracle Process 兩種:
 

User Process:

當使用者的應用程式欲以 SQL 指令存取資料庫資料時,例如:Pro*C程式、Oracle Tools、SQL*plus、Oracle Form 等等,Oracle 會產生 User Process去執行這些工作。
 

Oracle Process:

Oracle Process 依執行的方式不同可大概分為 Server Process 與 Background Process 兩種:
                       ※Server Process
                       ※Background Proces

 

Database Writer (DBWR)

Log Writer (LGWR)

Process Monitor (PMON)

System Monitor (SMON)

Checkpoint (CKPT)

Archiver (ARCH)

Recoverer (RECO)

LOCK (LCKn)

DML 指令的執行步驟。

假設我們下 DML 指令 (UPDATE EMP SET SAL = SAL * 1.05 WHERE EMPNO = 7788)。其步驟如下:
 

 

User Process 將 DML 指令送給 Server Process。

如果資料有在 Database Buffer Cache 中,則直接執行 DML 指令,也就是執行 UPDATE 指令。如果資料沒有在 Database Buffer Cache 中,則 Server Process 會從 Data files 中將資料與 Rollback blocks 讀入 Database Buffer Cache 中。

將從 Data files 讀入的資料複製一份到 Database Buffer Cache 中。

對 Database Buffer Cache 中的資料做鎖定(Lock)的動作,並且執行DML 指令,也就是執行 UPDATE 指令。

Server Process 將未變動前的資料記錄與變動後的資料記錄放入 Redo Log Buffer 中。並且將執行過的 SQL 指令放入 Shared pools 的 Library cache 中。

Server Process 將未變動前的資料記錄放入 Database Buffer Cache 中的 Rollback blocks。並將變動後的資料記錄放入 Database Buffer Cache 中 Data blocks 中。這些 Rollback blocks 與 Data blocks 都會被註記為 Database Buffer Cache 中的 Dirty buffers,也就是這些 blocks 與硬碟中的 Data files 中 Data blocks 與 Rollback blocks 並不一致。



 

一個 ORACLE 資料庫是資料的集合。一個 ORACLE 資料庫可分為實體結構(Physical Database Structure) 與邏輯結構(Logical Database Structure)兩種。實體結構是以作業系統(Operating System)觀點去看 ORACLE 資料庫結構,主要是作業系統中 ORACLE 資料庫的所有檔案。而邏輯結構是以 ORACLE 資料庫系統的觀點去 ORACLE 資料庫結構,主要是 ORACLE 資料庫系統的運作的結構。

在實體結構部份,資料庫中 SGA 所存的資料都只是暫時的,所有資料必須存於磁碟檔案中。實體資料庫結構主要由三種型態的檔案所構成: Redo Log FilesControl Files Data Files 三種。 
 

Redo Log Files(異動交易記錄檔)

Control File(控制檔)

Data File(資料檔)


除了上述的實體結構部份,邏輯資料庫結構是由以下所組成:

   1. 表空間(Tablespace) 
   2 段(Segment)、區段(Extent) 與資料區塊(Data Block)


ORACLE 透過段(Segment)、區段(Extent) 與資料區塊(Data Block) 等邏輯資料庫結構來控制磁碟實體空間的使用。其中資料區塊(Data Block) 是 ORACLE 管理儲存空間單位中,使用 I/O 的最小單位。而一個區段(Extent) 是由連續的資料區塊(Data Block) 所組成;一個段(Segment) 是由一個或多個區段(Extent) 所組成。在 ORACLE 資料庫系統中包含五種類型的段(Segment):

 

資料段(Data Segments)

簇集段(Cluster Segments)

回復段(Rollback Segments)

索引段(Index Segments)

暫存段(Temporary Segments)

 
   

一個資料庫劃分為一個或多個邏輯單位,該邏輯單位稱為表空間(Tablespace)。每一個表空間是由一個或多個資料檔(Data File) 所組成,該資料檔(Data File) 儲存表空間中全部邏輯結構資料。只有具有 DBA 角色的使用者才能建立新的表空間;為表空間增加或刪除資料檔(Data File);設定或修改表空間的儲存格式。
 

(1) 建立表空間-CREATE TABLESPACE
此指令的作用是在資料庫中建立一表空間,其語法如下:

    CREATE TABLESPACE <表空間名>
    DATAFILE <檔案名> SIZE <檔案大小>
    [ DEFAULT STORAGE <儲存格式> ]
    [ { ONLINE | OFFLINE } ]


其中:

DATAFILE <檔案名> 為表空間在作業系統(OS) 中的所儲存的檔案名稱。表空間(Tablespace) 是我們以資料庫系統的觀點所用的儲存空間,而事實上,以作業系統的觀點而言,它可能是一個或多個檔案,而表空間所對應的作業系統檔案,我們稱為 DATAFILE(資料檔案)。一個表空間可由一個或一個以上的 DATAFILE 所組成。DEFAULT STORAGE <儲存格式> 是用來設定儲存表空間的。

其 <儲存格式> 的語法為:

    INITIAL <初始區段大小>
    NEXT <下一個區段大小>
    MINEXTENTS <最小區段數>
    MAXEXTENTS <最大區段數>
    PCTINCREASE <第二區段以後,每區段比前區段的增長百分比>


假設目前我們是以具有 DBA 權限的帳號登錄,例如:SYSTEM,我們可以利用查詢資料字典中的 DBA_DATA_FILES 來知道目前的表空間與其對應的 DATAFILE。為了方便起見,我們利用 COLUMN 指令來設定顯示格式:

 


由上面可知,目前我們有七個表空間與其對應的 DATAFILE。除了利用資料字典 DBA_DATA_FILES 外,我們也可以利用查詢資料字典中的 USER_TABLESPACES 來知道目前的表空間中區段(EXTENT) 的詳細設定:



 

新增一個表空間 MY_SPACE,其表空間大小為 20M,其啟始區段為 10K,以後的區段為 50K,第二個區段以後,每次新區段比前一區段增加 10%,起始給一個區段,最多給 999 個區段。

 



 

我們可以利用查詢資料字典中的 DBA_DATA_FILES 來知道目前的表空間與其對應的 DATAFILE:

 



 

 

由上面,我們可以發現多了一個表空間 MY_SPACE,其大小為 20M。再者,我們也可以利用查詢資料字典中的 USER_TABLESPACES 來驗證目前的表空間中區段(EXTENT) 的設定是否與例 1 的要求相同。

 



 

 

(2) 更改表空間指令-ALTER TABLESPACE

 

此指令修改己存在的表空間,主要功能如下:
 

 

增加或重新命名 DATAFILE (資料檔)。

修改預定的儲存參數。

使表空間上線(Online) 或離線(Offline)。

開始或停止備份。

允許或不允許寫入表空間。

 


其語法如下:
   ALTER TABLESPACE <表空間名>
   [ ADD DATAFILE <檔案名> SIZE <檔案大小> ]
   [ RENAME DATAFILE <舊檔案名> TO <新檔案名> ]
   [ DEFAULT STORAGE <儲存格式> ]
   [ {ONLINE | OFFLINE } ]
   [ {BEGIN | END } BACKUP ]
 

擴充表空間 MY_SPACE,增加 20M 的空間。DATAFILE 為 c:\ ORACLE\ORADATA\JP8i\my_sp2.ora。

 



 

我們可以利用查詢資料字典中的 DBA_DATA_FILES 來知道目前的表空間與其對應的 DATAFILE。

 



 

 

從上面的結果,我們可以發現表空間 MY_SPACE 有兩個對應的 DATAFILE,一個為 MYSPACE.ORA,另一個為 MY_SP2.ORA。

   
 

(3) 刪除表空間指令-DROP TABLESPACE

 

此指令將已存在的表空間從資料庫中刪除。其語法如下:

    DROP TABLESPACE <表空間名>
    [ INCLUDING CONTENTS [ CASCADE CONSTRAINTS] ]

其中 INCLUDING CONTENTS 參數為要刪除包含任何資料庫物件的表空間時,必須使用此參數,否則 ORACLE 系統會傳回一個錯誤訊息,而且不允許刪除該表空間。而 CASCADE CONSTRAINTS 參數為刪除其他表格所引用的整合性限制(Integrity Constraint),例如:其他表格參考表空間中某些表格的主鍵(Primary Key) 或唯一鍵(Unique) 的參考整合性限制。如果忽略該參數,刪除表空間時,若有參考整合性限制存在,ORACLE 系統會傳回錯誤訊息,而且不允許刪除該表格。

   

將刪除表空間 MY_SPACE。

 


SQL> DROP TABLESPACE MY_SPACE
2 INCLUDING CONTENTS CASCADE CONSTRAINTS;

 

 

資料字典中的動態效能視觀表格(Dybamic Performance Views)都以 ”V$” 開頭的。這些動態效能視觀表格最主要是與系統的執行效能有關,而且會隨資料庫系統的改變而自動更改。例如:V$PARAMETER,V$SGA,V$OPTION,V$PROCESS,V$SESSION,V$INSTANCE,V$VERSION,V$THREAD,V$CONTROLFILE,V$DATABASE,V$DATAFILE,V$DATAFILE_HEADER,V$LOGFILE等等。
 

查詢 Oracle Instance 的參數設定

 

(1) 查詢所有參數與其設定值,利用 SQL*Plus 指令:
     SHOW PARAMETER
   或是利用資料字典中的 V$PARAMETER:(資料比較詳細)
     SELECT * FROM V$PARAMETER
(2) 查詢 SGA 的參數設定,利用 SQL*Plus 指令:
     SHOW SGA
  
或是利用資料字典中的 V$SGA:
     SELECT * FROM V$SGA

查詢 Redo Log File 的參數設定

 

(1) 查詢 Redo Log File 的狀態:

 
 

 
 

(2) 查詢 Redo Log File 的檔案名稱:

 

 

 

查詢表空間(Tablespace) 的資料:

 



 

資料庫系統管理者中止使用者 SCOTT 的 SESSION。

先利用動態效能視觀表格來查出要中止的使用者的 SESSION 的 Sid (Session ID) 與 Serial#。再執行 ALTER SYSTEM 指令。

 


資料庫系統管理者的 SESSION 如下:

 



 

 

SCOTT 的 SESSION 如下:

 



 

剛裝好 Oracle 資料庫系統時,Oracle 會自動設定一些初始資料庫帳號以供系統運作之用,我們列出主要幾個帳號。其中有幾個有關系統的管理與安全,建議安裝完畢後立即更改密碼。

使用者帳號

密碼

主 要 工 作

internal

Oracle

處理資料庫 Administrator 的工作,它並不是一個真正的使用者帳號而是 sys 帳號的別名,一般的情況下,我們並不直接使用它登錄系統。

scott

tiger

它是 Oracle 系統的使用者學習帳號,擁有 connect 與 resource 的角色,並擁有 emp、dept、salgrade 與 bonus 四個表格。

sys

change_on_install

處理資料庫 Administrator 的工作。

system

manager

處理資料庫 Administrator 的工作。