|
|
![](bar/8_1.gif) |
|
整個 Oracle
系統架構包含以下三個部分,如圖一所示: |
![](point-18.gif) |
System
Global Area (系統共同區,SGA) |
![](point-18.gif) |
Process
(處理單元) |
![](point-18.gif) |
Files
(系統檔案) |
|
![](8-1.ht2.gif)
圖一 Oracle
系統架構
|
![](bar/8_1_1.gif) |
|
每當 Oracle
系統啟動時,會佔用主機一大塊資料庫專屬的記憶体空間來控制資訊與儲存資料,這塊資料庫專屬的記憶体空間稱為 System Global
Area(SGA)。SGA 與系統 Background Process (背景處理單元) 合稱 Oracle Instance(實例)。SGA
主要是由 Shared Pool、Database Buffer Cache 與 Redo Log Buffer 三個主要部份所組成:
|
![](point-4.gif) |
Shared Pool |
![](point-4.gif) |
Database
Buffer Cache |
![](point-4.gif) |
Redo Log
Buffer |
|
|
![](bar/8_1_2.gif) |
|
在 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 |
|
|
![](bar/8_1_3.gif) |
|
![](point-32.gif) |
Database
Writer (DBWR) |
![](point-32.gif) |
Log Writer
(LGWR) |
![](point-32.gif) |
Process
Monitor (PMON) |
![](point-32.gif) |
System
Monitor (SMON) |
![](point-32.gif) |
Checkpoint
(CKPT) |
![](point-32.gif) |
Archiver
(ARCH) |
![](point-32.gif) |
Recoverer (RECO) |
![](point-32.gif) |
LOCK (LCKn) |
|
![](8-1.ht1.gif) |
DML 指令的執行步驟。 |
|
![](8-1.ht6.gif) |
假設我們下 DML 指令
(UPDATE EMP SET SAL = SAL * 1.05 WHERE EMPNO = 7788)。其步驟如下:
|
|
![](1.gif) |
User
Process 將 DML 指令送給 Server Process。 |
![](2.gif) |
如果資料有在
Database Buffer Cache 中,則直接執行 DML 指令,也就是執行 UPDATE
指令。如果資料沒有在 Database Buffer Cache 中,則 Server Process 會從
Data files 中將資料與 Rollback blocks 讀入 Database Buffer
Cache 中。 |
![](3.gif) |
將從 Data
files 讀入的資料複製一份到 Database Buffer Cache 中。 |
![](4.gif) |
對
Database Buffer Cache 中的資料做鎖定(Lock)的動作,並且執行DML 指令,也就是執行
UPDATE 指令。 |
![](5.gif) |
Server
Process 將未變動前的資料記錄與變動後的資料記錄放入 Redo Log Buffer 中。並且將執行過的
SQL 指令放入 Shared pools 的 Library cache 中。 |
![](6.gif) |
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 並不一致。 |
|
|
![](8-1.ht3.gif)
|
![](bar/8_1_4.gif) |
|
一個 ORACLE 資料庫是資料的集合。一個
ORACLE 資料庫可分為實體結構(Physical Database Structure) 與邏輯結構(Logical Database
Structure)兩種。實體結構是以作業系統(Operating System)觀點去看 ORACLE 資料庫結構,主要是作業系統中
ORACLE 資料庫的所有檔案。而邏輯結構是以 ORACLE 資料庫系統的觀點去 ORACLE 資料庫結構,主要是 ORACLE
資料庫系統的運作的結構。
在實體結構部份,資料庫中 SGA 所存的資料都只是暫時的,所有資料必須存於磁碟檔案中。實體資料庫結構主要由三種型態的檔案所構成:
Redo Log Files、Control
Files 與 Data Files 三種。
|
![](point-18.gif) |
Redo Log
Files(異動交易記錄檔) |
![](point-18.gif) |
Control
File(控制檔) |
![](point-18.gif) |
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):
|
![](point-18.gif) |
資料段(Data
Segments) |
![](point-18.gif) |
簇集段(Cluster
Segments) |
![](point-18.gif) |
回復段(Rollback Segments) |
![](point-18.gif) |
索引段(Index
Segments) |
![](point-18.gif) |
暫存段(Temporary Segments) |
|
|
|
|
![](bar/8_1_5.gif) |
|
一個資料庫劃分為一個或多個邏輯單位,該邏輯單位稱為表空間(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 指令來設定顯示格式:
|
![](8-1.ht8.gif) |
由上面可知,目前我們有七個表空間與其對應的 DATAFILE。除了利用資料字典 DBA_DATA_FILES 外,我們也可以利用查詢資料字典中的
USER_TABLESPACES 來知道目前的表空間中區段(EXTENT) 的詳細設定: |
![](8-1.ht9.gif)
|
![](8-1.ht10.gif) |
新增一個表空間
MY_SPACE,其表空間大小為 20M,其啟始區段為 10K,以後的區段為 50K,第二個區段以後,每次新區段比前一區段增加
10%,起始給一個區段,最多給 999 個區段。 |
|
|
![](8-1.ht11.gif)
|
![](8-1.ht12.gif) |
我們可以利用查詢資料字典中的
DBA_DATA_FILES 來知道目前的表空間與其對應的 DATAFILE: |
|
![](8-1.ht13.gif)
|
|
由上面,我們可以發現多了一個表空間 MY_SPACE,其大小為 20M。再者,我們也可以利用查詢資料字典中的
USER_TABLESPACES 來驗證目前的表空間中區段(EXTENT) 的設定是否與例 1 的要求相同。 |
|
![](8-1.ht14.gif)
|
|
(2)
更改表空間指令-ALTER TABLESPACE |
|
|
此指令修改己存在的表空間,主要功能如下:
|
|
![](point-18.gif) |
增加或重新命名 DATAFILE (資料檔)。 |
![](point-18.gif) |
修改預定的儲存參數。 |
![](point-18.gif) |
使表空間上線(Online) 或離線(Offline)。 |
![](point-18.gif) |
開始或停止備份。 |
![](point-18.gif) |
允許或不允許寫入表空間。 |
|
|
其語法如下:
ALTER TABLESPACE <表空間名>
[ ADD DATAFILE <檔案名> SIZE <檔案大小> ]
[ RENAME DATAFILE <舊檔案名> TO <新檔案名> ]
[ DEFAULT STORAGE <儲存格式> ]
[ {ONLINE | OFFLINE } ]
[ {BEGIN | END } BACKUP ]
|
![](8-1.ht20.gif) |
擴充表空間 MY_SPACE,增加
20M 的空間。DATAFILE 為 c:\ ORACLE\ORADATA\JP8i\my_sp2.ora。 |
|
|
![](8-1.ht21.gif)
|
![](8-1.ht22.gif) |
我們可以利用查詢資料字典中的
DBA_DATA_FILES 來知道目前的表空間與其對應的 DATAFILE。 |
|
![](8-1.ht23.gif)
|
|
從上面的結果,我們可以發現表空間 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 系統會傳回錯誤訊息,而且不允許刪除該表格。 |
|
|
![](8-1.ht7.gif) |
將刪除表空間 MY_SPACE。 |
|
|
SQL> DROP TABLESPACE MY_SPACE
2 INCLUDING CONTENTS CASCADE CONSTRAINTS;
|
|
|
![](bar/8_1_6.gif) |
|
資料字典中的動態效能視觀表格(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等等。
|
![](8-1.ht4.gif) |
查詢 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 |
![](8-1.ht5.gif) |
查詢 Redo Log
File 的參數設定 |
|
|
(1) 查詢 Redo Log File 的狀態: |
|
|
![](8-1.ht8.jpg)
|
|
(2) 查詢 Redo Log File 的檔案名稱: |
|
|
![](8-1.ht8.jpg)
|
![](8-1.ht19.gif) |
查詢表空間(Tablespace)
的資料: |
|
|
![](8-1.ht13.jpg)
|
![](8-1.ht16.gif) |
資料庫系統管理者中止使用者
SCOTT 的 SESSION。 |
|
![](8-1.ht15.gif) |
先利用動態效能視觀表格來查出要中止的使用者的 SESSION 的 Sid (Session ID) 與 Serial#。再執行
ALTER SYSTEM 指令。 |
|
資料庫系統管理者的 SESSION 如下: |
|
![](8-1.ht20.jpg)
|
|
SCOTT 的 SESSION
如下: |
|
![](8-1.ht17.gif)
|
|
![](bar/8_1_7.gif) |
|
剛裝好 Oracle
資料庫系統時,Oracle
會自動設定一些初始資料庫帳號以供系統運作之用,我們列出主要幾個帳號。其中有幾個有關系統的管理與安全,建議安裝完畢後立即更改密碼。 |
使用者帳號 |
密碼 |
主 要 工 作 |
internal |
Oracle |
處理資料庫
Administrator 的工作,它並不是一個真正的使用者帳號而是 sys
帳號的別名,一般的情況下,我們並不直接使用它登錄系統。 |
scott |
tiger |
它是 Oracle
系統的使用者學習帳號,擁有 connect 與 resource 的角色,並擁有 emp、dept、salgrade 與
bonus 四個表格。 |
sys |
change_on_install |
處理資料庫
Administrator 的工作。 |
system |
manager |
處理資料庫
Administrator 的工作。 |
|
|