oracle基本概念和術語

  Oracle數據庫系統是一個複雜的軟件系統。如果不瞭解其內部的結構原理及關係,就不可能設計和編寫出高質量的應用軟件系統,也不可能管理好一個複雜的應用系統。爲了給以後章節的打好基礎,本章簡要給出 ORACLE 8 /ORACLE8i數據庫系統結構的描述。

§2.1 術語

  數據庫塊(BLOCK)

  ORACLE 數據庫中的最小存儲和處理單位,包含塊本身的頭信息數據或PL/SQL代碼。
  ORACLE 塊的大小是可以在安裝時選擇“自定義安裝”來指定,也可以在CREATE DATABASE創建數據庫實例時指定。其最小爲2K,最大可達爲64K.

  瓶頸(Bottleneck)

  指限制系統性能的部件。

  面向對象的關係數據庫

  具有關係數據庫的全部功能,同時又支持面向對象的數據庫,稱作面向對象關係數據庫系統。Oracle7是一種功能完備的關係數據庫系統;oracle8是一種面向對象的關係數據庫系統。

  客戶/服務器結構(Client/Server)

  有客戶機、服務器、網絡三要素的結構,客戶機(PC機)通過網絡與服務器相連和工作。

  胖客戶機(Fat Client)

  一般的Client/Server結構中的客戶機均爲胖客戶機。因爲這些客戶機需要配置較高的設備,如內存、硬盤、主頻、CD_ROM等。

  瘦客戶機(Thin Client)

  也稱作NC(網絡計算機),是一種內存配置小(過去指一般只有4M,現無法定義),無硬盤,只有處理心片的處理機。

  數據在線分析處理(OLAP)

  是一種能以快速、交互、方便的方式洞察數據情況的技術。如Oracle Express,Cognos(加拿大)的Power Play, Business Objects公司的Business Object 等。

  多線程(MTS)

  一個用戶可以同時運行多個程序對數據庫進行訪問,比如Visual C/C 可以提供同時啓動多個進程,而Visual Basic則不能。

  數據倉庫(Data Warehouse)

  支持大量數據信息存儲的叫做支持數據倉儲或數據倉庫。當把幾個小型數據庫集成爲一個大型數據庫,併爲一個較廣泛的組織服務時,如果該數據庫存儲歷史數據,提供決策支持,提供數據彙總,提供只讀數據,並且實質上充當所有向它提供數據的相關成品數據庫的數據接收器,那麼它通常被叫做數據倉庫。

  實例(Instance)

  是訪問Oracle數據庫所需的一部分計算機內存和輔助處理後臺進程。

  對象(Objects)

  是實現世界實體的軟件表示,如表、索引、視圖、同義詞、過程等。

  數據庫文件(Datafile)

  Oracle系統中用於存放數據(應用系統數據)的文件。(<<Oracle8初學者指南>;>14中的例子不準確,容易誤導讀者)。

  控制文件(Control File)

  Oracle中存放系統用的一些數據的文件。如數據文件的路徑及文件名,初始化文件路徑及 文件名等都存放在控制文件中。

  日誌文件(Logs File)

  也叫事務記錄文件,該文件記錄有事物對數據庫進行的一切修改操作或事務。

  DBA(Database administrator-數據庫管理員)

  是管理數據庫系統的技術工具或人員,在完備的數據庫系統中都提供DBA功能。

  灰數據塊(Dirty data block)

  存放在內存中的原始數據已被修改,而修改後的數據還未寫入數據庫中。

  熱數據塊(Hot data block)

  存放着那些經常被修改數據叫熱數據塊。

  LRU(Least Recently Used-最近最少用)

  Oracle系統使用的一種算法,對於在內存中但最近又不用的數據塊(內存塊)叫做LRU,Oracle會根據那些數據屬於LRU而將其移出內存而騰出空間來加載另外的數據。

  表(Table)

  存放專門數據而建立和分配的空間。

  表空間(Tablespace)

  是一個或多個數據文件的集合,所有的數據對象都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。

  回滾(Rollback)

  將用戶(或者說事務)改變的數據恢復到上一次所處的狀態。

  恢復信息(Undo Information)

  記錄用於恢復的信息稱作恢復信息。回滾就是根據恢復信息內容進行恢復的。

§2.2

  Oracle數據庫結構Oracle數據庫結構是Oracle數據庫系統的主要部分,它是一些可以看得見的軟件,包括:

  Oracle 數據字典l 表空間與數據文件l Oracle實例(Instance)

 §2.2.1

  Oracle 數據字典Oracle數據庫的重要部分是數據字典。它存放有Oracle數據庫所用的有關信息,對用戶來說是一組只讀的表。數據字典內容包括:

  數據庫中所有模式對象的信息,如表、視圖、簇、及索引等。
  分配多少空間,當前使用了多少空間等。
  列的缺省值。
  約束信息的完整性。
  Oracle用戶的名字。
  用戶及角色被授予的權限。
  用戶訪問或使用的審計信息。
  其它產生的數據庫信息。

  數據庫數據字典是一組表和視圖結構。它們存放在SYSTEM表空間中。數據庫數據字典不僅是每個數據庫的中心。而且對每個用戶也是非常重要的信息。用戶可以用SQL語句訪問數據庫數據字典。

 §2.2.2

  表空間與數據文件簡單說,表空間就是一個或多個數據文件(物理文件)的集合(邏輯文件)。一般有下面的表空間:

  1)系統表空間(System tablespace)

  是各種不同版本的Oracle必備的部分,存放Oracle系統的一些信息,一般只有一個SYSTEM表空間。

  2)臨時表空間(Temporary tablespace )

  由於Oracle工作時經常需要一些臨時的磁盤空間,這些空間主要用作查詢時帶有排序(Group by,Order by等)等算法所用,當用完後就立即釋放,對記錄在磁盤區的信息不再使用,因此叫臨時表空間。一般安裝之後只有一個TEMP臨時表空間。

  3)工具表空間(Tools tablespace)

  用於保存Oracle數據庫工具所需的數據庫對象,這些工具表空間存放在工作時所用的專用表。舊的Oracle版本無此表空間。安裝之後的工具表空間是Tools.

  4)用戶表空間(Users tablespace)

  用於存放一些實驗例子用的空間,當然也可以用於存放應用系統的數據。舊版本無Users表空間。現在的用戶表空間爲 USERS .

  5)數據及索引表空間存放數據及索引的表空間,Oracle7以後都提倡在應用系統中,特別是具有大量數據的系統,要把數據和索引分開存放在不同的分區中,以便提高查詢速度。在安裝後索引表空間可能是INDX.數據表空間就是USERS.

  6)回滾段表空間(Rollback Segment)

  Oracle數據庫系統在運行Insert、Update、Delete時都需要一個磁盤空間來存放恢復信息(Undo Information),以便在進行恢復時能將原來信息讀出來。安裝後的回滾段表空間是RBS表空間。數據庫管理員也可根據應用的需要建立另外的回滾段表空間。Oracle 以表空間來存儲邏輯數據並 以物理數據相連。

  數據庫被分成一個或多個邏輯部件稱作表空間。而表空間又被分成稱作段(segment)的邏輯部件。這些段再細分就叫擴展(extents)。

 §2.2.3

  Oracle實例Oracle實例(Instance)是由一組後臺進程和內存結構組成。每個運行的數據庫系統都與實例有關。所以,有時稱Oracle實例爲數據庫操作系統。下面是Oracle實例的解釋。

  Oracle 進程Oracle有兩種類型的進程: 服務器進程和後臺進程(server processes and background processes)。

  服務器進程Oracle 服務器進程是處理用戶與實例連接的事務。任務是:

  分析和執行應用所發出的SQL語句。
  從數據文件讀必要的數據到SGA區的共享數據區。
  返回必要信息給應用。

  後臺進程Oracle系統使用一些附加的進程來處理系統的必須的工作。這些進程叫後臺進程:

  數據庫寫 (DBW0 或DBWn)
  日誌寫 (LGWR)
  檢測點 (CKPT)
  系統監視 (SMON)
  進程監視 (PMON)
  歸檔 (ARCn)
  恢復 (RECO)
  鎖(LCK0)
  工作隊列 (SNPn)
  隊列監視 (QMNn)
  發佈(Dispatcher) (Dnnn)
  服務器 (Snnn)

  Oracle 的內存結構(SGA)

  SGA 結構爲:

  數據高速緩衝區  重做日誌緩衝區  共享池  大的共享池(可選)
  數據字典緩衝區  其它數據緩衝區

§2.3

  Oracle數據庫文件ORACLE 數據庫是一個複雜的數據庫操作系統,由一系列部件組成,主要有:1)初始化參數文件、2)數據文件、3)控制文件、4)日誌文件等。

 §2.3.1

  初始化參數文件初始化參數文件(initialization parameter file) INITsid.ORA,是 ORALE RDBMS 主要的配置點,它是配置參數和數值的集合。每一個參數值都控制或修改數據庫和實例的某個方面。 早期的版本把參數都寫在 initsid.ora 文件中,但在ORACLE8 之後,多數參數已不在該文件中出現,需修改這些參數時只能在SQL>;下用 SET SESSION 或 SET SYSTEM 來進行。 查看系統參數可用。例如:

  SQL>;select * from v$parameter;

來列出。

  Oracle初始化參數文件是一個可以編輯的文本文件。它是在數據庫實例啓動時被訪問,從而得到數據文件、日誌文件、控制文件等的路徑,此外,初始化參數文件還提供實例所用的參數等。

 §2.3.2

  數據文件用於存放所有數據庫的數據文件,Oracle安裝過程中自動建立多個必要的數據文件。這些數據文件用於存放Oracle系統的基本數據。在應用系統開發過程中,我們可根據需要另建立一些數據文件。

  如果數據文件按它們存放的數據類型來分的話,可以分爲:用戶數據(存放應用系統的數據爲用戶數據);系統數據。

  管理用戶數據和數據庫系統本身的數據,如數據字典,用戶建立的表的名字,類型等都記錄在系統數據中。

 §2.3.3

  控制文件控制文件是由Oracle數據庫實例在啓動時被訪問的內部二進制文件,它們所存放的路徑由參數文件的control_files=參數來確定。

  Oracle一般有兩個或更多的控制文件,每個控制文件記錄有相同的信息,在數據庫運行中如果某個控制文件出錯時,Oracle會自動使用另外一個控制文件。當所有的控制文件都損壞時系統將不能工作。

  Oracle數據庫至少有一個控制文件;一般數據庫系統安裝完成後,自動創建兩個以上控制文件;爲了安全一般建議創建多個控制文件;控制文件可用下面命令查到:

select name,value from v$parameter where name like 'control_files';

 §2.3.4

  重做日誌文件重做日誌文件是Oracle系統中一個很重要的文件。特點是:

  重做日誌是Oracle的日記帳,負責記錄所有用戶對象或系統變更的信息;安裝完成後有多個重做日誌文件,它們是幾個分爲一組,組內的重做日誌文件大小要一樣;爲了使系統性能更好可以在創建多重做日誌文件組;重做日誌文件可以名下面命令查到:


 

 

select * from v$logfile;

 §2.3.5

  其它支持文件除了上面的三類文件外,還有:Sqlnet.ora文件;Tnsnames.ora文件;Listener.ora文件等。

§2.4

  重做日誌和重做日誌工作模式重做日誌、日誌文件及重做日工作模式是Oracle系統中很重要的概念,管理員要完全理解它們的原理和使用方法。下面只給簡單的概念,有關的管理在另外章節給出。

 §2.4.1

  重做日誌Oracle所作的一切操作都記錄在日誌文件中,Oracle系統在工作當中並不是每作一條記錄的修改就立即存盤(寫入數據文件),而是隻作修改記錄,聯機重做日誌就保存所有這些改變的信息。當所有的修改最後寫入數據文件時,所有的修改仍記錄在聯機重做日誌中,這將有利於對這些事務記錄進行恢復操作。但如果不是聯機重做日誌,則只能恢復部分近期的操作。

 §2.4.2

  重做日誌工作模式Oracle可以在兩種模式之一來工作:

  1)ARCHIVELOG模式(可恢復)

  Oracle 一般至少有兩個日誌文件。它們輪流交替地被寫入所作的一切修改信息。當系統設置爲可恢復模式,Oracle自動將每次即將被覆蓋(沖掉)的日誌信息先作備份,然後再其上記錄所修改的信息。這樣的方式,就可以利用備份與恢復工作進行某時期的數據恢復。

  2)NOARCHIVELOG模式(有限的恢復)

  缺省情況下爲NOARCHIVELOG,Oracle不保留舊的重做日誌信息(可以在原來基礎覆蓋寫入)。因此一般情況下不可恢復的。

§2.5 數據塊、區間和段

 §2.5.1 數據塊(data block)

  Oracle的數據塊也叫Oracle塊;Oracle系統在創建表空間時將數據文件格式化成若干個Oracle塊;每個Oracle塊是Oracle系統處理的最小單位;塊的大小在安裝系統時確定,可以選擇“自定義安裝”來設置大小;塊的大小一旦確定下來就不能改動;塊的大小可以從2k至64k不等;塊的大小可以用下面命令查到:

select name,value from v$parameter where name like 'db_block_size';

 §2.5.2 區間(extent)

  分配給對象(如表)的任何連續塊叫區間;區間也叫擴展,因爲當它用完已經分配的區間後,再有新的記錄插入就必須在分配新的區間(即擴展一些塊);區間的大小由 next 決定;一旦區間分配給某個對象(表、索引及簇),則該區間就不能再分配給其它的對象;一個對象所用去多少區間可用下命令查到:

select segment_name,tablespace_name,count(*) from dba_extents having count(*)>;1 group by segment_name,tablespace_name;

 §2.5.3 段(segment)

  段是指佔用數據文件空間的通稱,或數據庫對象使用的空間的集合;段可以有表段、索引段、回滾段、臨時段和高速緩存段等;段使用同表空間中的若干Oracle塊(可以位於不同數據文件中)。

例:CREATE TABLE abc ( empno number(4),ename varchar2(20),sal number(9,2))

TABLESPACE user_data storage(initial 500k next 256k pctincrease 0);

  1) 段被分配=初始區間=500k;
  2) 當開始的500k用完後就再分配256k; 此時段=500k 256k;
  3) 如果所分配的區間又用完後,就再分配256k, …

§2.6

  Oracle數據庫進程一般情況,當數據庫啓動完成後(Instance 啓動成功)就至少有六個後臺進程在活動,這些進程根據數據庫的需要而分工不同。他們分別是:

  1)數據庫寫入器(DBWR)

  數據庫寫入器(Database Writer)的任務是將修改後的(在內存)數據塊寫回數據庫文件中。在某些操作系統中,Oracle可以有兩個BDWR進程。

  2)校驗點(CKPT)

  是一個可選進程。在系統運行中當出現查找數據請求時,系統從數據庫中找出這些數據並存入內存區,這樣用戶就可以對這些內存區數據進行修改等。當需要對被修改的數據寫回數據文件時就產生重做日誌的交替寫(Switch),這時就出現校驗點。系統要把內存中灰數據(修改過)塊中的信息寫回磁盤的數據文件中,此外系統還將重做日誌通知控制文件。DBA可以改變參數文件中CHECKPOINT_PROCESS TRUE來使能( 使有效或無效)該進程。

  3)日誌寫入器(LGWR)

  用於將SGA區中的日誌信息寫入日誌文件的進程。一般是用戶所作的修改值先記入日誌文件。等到一定時才真正將修改結果寫回數據文件。

  4)系統監控器(SMON)

  系統監控器(System monitor)是在數據庫系統啓動時執行恢復工作的強制性進程。比如在並行服務器模式下(兩臺服務器共用一磁盤組),SMON可以恢復另一臺處於失敗的數據庫。使系統切換到另一臺正常的服務器上。

  5)進程監控器(PMON)

  進程監控器(Process Monitor)用於終止那些失敗的用戶,釋放該用戶所佔用的資源等。

  6)歸檔器(ARCH)

  可選進程,當數據庫系統處於歸檔(ARCHIVELOG)模式時使用。

  7)鎖(LCKn)

  可選進程,當在並行服務器模式可出現多個鎖定進程以利於數據庫通信。

  8) 恢復器(RDCO)

  分佈式數據庫(不同地點有不同機器和不同的Oracle系統)模式下使用的可選進程,用於數據不一致時作的恢復工作。在RECO解決恢復前,所作的修改數據的標誌均標爲“可疑”。

  9)調度(Dnnn)

  可選進程,在多線程下使用,即對每個在用(D000,……,Dnnn)的通信協議至少創建一個調度進程,每個調度進程負責從所聯接的用戶進程到可用服務器進程的路由請求。把響應返回給合適的用戶進程。

  10)快照進程(SNPn)

  快照進程處理數據庫快照的自動刷新,並通過 DBMS_JOB 包運行預定的數據庫過程。 INITsid.ORA 參數 JOB_QUEUE_PROCESS 設置快照進程數, 參數 JOB_QUEUE_INTERVAL 決定快照進程在被喚醒以處理掛起的作業或事務之前休眠的秒數。

  11)並行查詢進程(Pnnn)

  可根據數據庫的活動並行查詢選項的設置,ORACLE服務器起動或停止查詢進程。這些進程涉及並行索引的創建,表的創建及查詢。 啓動的數量與參數 PARALLEL_MIN_SERVERS指定的數量相同,不能超出該參數指定的值。

§2.7

  Oracle內存結構前面提到過Oracle的數據庫實例是一組後臺進程和內存結構組成。而內存結構是包括:

  系統全局區(System Global Area)
  程序全局區(Program Global Area)

 §2.7.1

  系統全局區Oracle 系統用於存放系統信息的一塊存儲區域,用戶進程和Oracle後臺進程都可以使用SGA.在SGA中含有許多組件(不同的部分)。

  數據高速緩衝區(Data Buffer Cache)

  在數據高速緩衝區中存放着Oracle系統最近使用過的數據塊(即用戶的高速緩衝區),當把數據寫入數據庫時,它以數據塊爲單位進行讀寫,當數據高速緩衝區填滿時,則系統自動去掉一些不常被用訪問的數據。如果用戶要查的數據不在數據高速緩衝區時,Oracle自動從磁盤中去讀取。數據高速緩衝區包括三個類型的區:

  1) 髒的區(Dirty Buffers):包含有已經改變過並需要寫回數據文件的數據塊。

  2) 自由區(Free Buffers):沒有包含任何數據並可以再寫入的區,Oracle可以從數據文件讀數據塊該區。

  3) 保留區(Pinned Buffers):此區包含有正在處理的或者明確保留用作將來用的區。

  Oracle8i以後將緩衝池分爲三個區(使用多個緩衝池特性時):1) KEEP 緩衝池(KEEP buffer pool):在內存中保留數據塊,它們不會被從內存中擠掉;2) RECYCLE緩衝池從不需要的內存將數據移掉;3) DEFAULT緩衝池包含有被分配的塊。

  重做日誌緩衝區(Rado Log Buffer)

  任何事務(Transaction)在記錄到重做日誌(恢復工作需要使用聯機重做日誌)之前都必須首先放到重做日誌緩衝區(Redo Log Buffer)中。然後由日誌寫入進程(LGWR)定期將此緩衝區的內容寫入重做日誌中。

  共享池(Shared Pool)

  共享池是SGA保留的區,用於存儲如SQL、PL/SQL存儲過程及包、數據字典、鎖、字符集信息、安全屬性等。共享池包含有:1) 庫高速緩存(Library Cache);2) 字典高速緩衝區(Dictionary Cache )。

  庫高速緩存(Library Cache)

  該區包含有:1) 共享SQL區(Shared Pool Area);2) 私有SQL區(Private SQL Area);3) PL/SQL存儲過程及包(PL/SQL Procedure and Package);4) 控制結構(Control Structure)。也就是說該區存放有經過語法分析並且正確的SQL語句,並隨時都準備被執行。

  字典高速緩衝區(Data Dictionary Cache)

  用於存放Oracle系統管理自身需要的所有信息,這些信息是登錄到Oracle的用戶名,這些用戶有那些數據庫對象以及這些數據庫對象的位置等。

SVRMGR>; Show SGA Total System Global Area 35544188 bytes Fixed Size 22208 bytes Variable Size 3376332 bytes Database Buffer 122880 bytes Redo Buffer 32768 bytes

後四項相加等於前一項。也可以使用 select * from v$SGA; 查詢當前實例的SGA.

  大的池(Large Pool)

  在SGA中大池是可選的緩衝區。它可以根據需要有管理權進行配置。它可以提供一個大的區以供象數據庫的備份與恢復等操作。

  程序全局區(PGA)

  PGA是Oracle使用的內存區域,該區同一時 間只能被一單個進程存放數據和控制,用於存放會話變量及內部數組等。

 §2.7.2

  程序全局區PGA是Oracle使用的內存區域,該區同一時 間只能被一單個進程存放數據和控制,用於存放會話變量及內部數組等。

§2.8

  Oracle實例一個Oracle 實例(Instance) 是由SGA,後臺進程以及數據文件組成,每個數據庫有自己的SGA和獨立的Oracle進程集。

  在分佈情況下,爲使不同的數據庫系統的名字不致混淆,Oracle使用了一個SID(System Identifer)來標識每個Oracle Server的名字,在UNIX環境中以變量Oracle_Sid來區分。

§2.9 多線程服務器 (MTS)

  Oracle多線程服務器(Multithreader Server )允許對數據庫進行多個連接以充分共享內存和資源,這使得可以用較少的內存來支持較多的用戶。連接到Oracle數據庫的進程都需要佔用一定的內存空間,這樣如果有過多的進程連接到Oracle,則出現了一個性能瓶頸。

  Oracle8可以允許一萬個以上用戶同時連接到Oracle,但並不是所有的用戶都使用MTS.目前的一些4GL工具並不支持MTS,象VB,PB等不支持MTS,象VC/C 可以支持MTS. Oracle多線程服務器有自己的連接池(即共享服務器進程)。由於用戶共享開放連接,這比原來的專用方法快的多(消除瓶頸)。

  多線程對於一些專用的應用系統來說是非常合適的,比如訂單登記系統,顧客提交訂單,錄入員該訂單的數據;另外的錄入員在與顧客交涉,並不都在錄入數據(專用服務器進程閒着)。單這些終端被迫與系統連着,佔據了其他用戶的資源。

  多線程服務器則消除這些缺點。多線程服務器只維護一個連接池,當某個終端需和系統對話則給其分配一個連接即可。不需要則可以去掉。這樣系統的資源被多個用戶平攤。

  改變參數文件中的相關參數來達到使系統成爲多線程服務器配置(重新啓動即可有效)。另外,數據庫實例必須提供用戶數目與所放置的一樣才行。

§2.10 Oracle事務處理流程銀行取款業務處理流程:

  1. 發出查詢餘款的SQL語句,如:Select account_balance From banktable Where account_number='111222333' And account_type='SAVINGS';

  SQL語句通過SGA得到服務器進程;服務器進程檢查共享池中有無該條語句,無該條語句則將放置共享池中並準備運行;執行SQL語句,把存放有餘款的數據塊從數據文件中讀到SGA的數據高速緩衝區;顯示結果,比如餘款爲$325.

  2. 取款$25:SQL語句爲:Update Bank_table set account_balanct=300 Where account_number='111222333' And account_type='SAVINGS';

  客戶進程通過SGA把SQL語句傳給服務器進程;服務器進程查找有無該條語句,有執行;分析SQL語句並存入共享池;執行SQL語句;

  要處理的數據在數據高速緩衝區嗎?是轉7;l 從數據文件中讀數據塊到數據高速緩衝區;在回滾段中記錄原來的數值($325);在重做日誌中生成該事務的一個拷貝;將數據高速緩衝區中的餘額改爲$300;銀行櫃員機通過SGA發出工作完成信號(提交):在重做日誌中記錄已完成事務;清除回滾段中的恢復信息(Undo Information);顧客取錢完成。

§2.11

  ORACLE系統的SYS和SYSTEM模式SYS和SYSTEM 是每個ORACLE 數據庫系統缺省安裝的兩個帳戶。SYS 是所有內部數據庫表、結構、過程包、等擁有者,此外它還擁有 V$ 和數據字典視圖,並創建所有封裝的數據庫角色(DBA,CONNECT,RESOURCE)。 Sys是一個唯一能訪問特定內部數據字典的用戶。 System 也是在安裝ORACLE 時創建的用戶,用於 DBA 任務的管理。

  SYS 安裝後的缺省口令爲 change_on_install; SYSTEM 缺省口令爲 manager. 爲了安全,可在安裝完成後。 用 ALTER USER sys IDENTIFIED BY password; 命令修改這兩個特權帳戶的口令。

§2.12

  ORACLE系統跟蹤文件所有ORACLE 數據庫都至少有一個文件用於記錄系統信息,錯誤及主要事件。這個文件叫做ALERTsid.log(這裏的sid 爲 oracle 的系統標識),存儲位置由INITsid.ORA 文件的 BACKGROUND_DUMP_DEST 參數給出。

  後臺進程和用戶進程都可以建立各自的跟蹤文件,後臺進程跟蹤文件位置由BACKGROUND_DUMP_DEST 參數給出, 而用戶跟蹤文件位置由 USER_DUMP_DEST 參數給出。 如參數文件 initora8.ora 中給出:

# define directories to store trace and alert files background_dump_dest=d:/oracle/admin/ora8/bdump user_dump_dest=d:/oracle/admin/ora8/udump後臺跟蹤文件被命名爲 sidPROC.TRC

§2.13

  ORACLE系統數據字典數據字典(data dictionary)是存儲在數據庫中的所有對象信息的知識庫,ORACLE數據庫系統使用數據字典獲取對象信息和安全信息,而用戶和DBA用它來查閱數據庫信息。數據字典保存數據對象和段的信息。如表、視圖、索引、包、過程以及用戶、權限、角色、審計等的信息。數據字典是隻讀對象,不允許任何人對其進行修改。

§2.14

  其它數據對象ORACLE 除前面給出的數據對象外,還有包括視圖,序列,同義詞,觸發器,數據庫鏈及程序包,過程和函數。下面是必要介紹。

 §2.14.1

  視圖視圖是存儲在數據庫中的查詢的SQL 語句,它主要出於兩種主要原因:安全原因, 視圖可以隱藏一些數據,如:社會保險基金錶,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使複雜的查詢易於理解和使用。

 §2.14.2

  序列序列是用於產生唯一數碼的數據庫對象,序列創建時帶有 初始值,增量值,最大值等,最大可達38 位整數。

 §2.14.3

  觸發器觸發器(trigger)是個特殊的存儲過程,它的執行不是由程序調用,也不是手工啓動,而是由個事件來觸發,比如當對一個表進行操作( insert,delete, update)時就會激活它執行。觸發器經常用於加強數據的完整性約束和業務規則等。 觸發器可以從 DBA_TRIGGERS ,USER_TRIGGERS 數據字典中查到。

 §2.14.4

  同義詞同義詞(synonym)是指向其它數據庫表的數據庫指針。同義詞有兩種類型:私有(private)和公共(public)。私有的同義詞是在指定的模式中創建並且只創建者使用的模式訪問。公共同義詞是由public 指定的模式訪問,所有數據庫模式(用戶)都可以訪問它。

 §2.14.5

  數據庫鏈數據庫鏈( database link )是與遠程數據庫連接的存儲定義, 它們用於查詢分佈數據庫環境的遠程者。 由於存儲在 DBA_DB_LINKS 數據字典中,所以可以把它們看作一種數據庫對象類型。


 

  Oracle數據庫系統是一個複雜的軟件系統。如果不瞭解其內部的結構原理及關係,就不可能設計和編寫出高質量的應用軟件系統,也不可能管理好一個複雜的應用系統。爲了給以後章節的打好基礎,本章簡要給出 ORACLE 8 /ORACLE8i數據庫系統結構的描述。

§2.1 術語

  數據庫塊(BLOCK)

  ORACLE 數據庫中的最小存儲和處理單位,包含塊本身的頭信息數據或PL/SQL代碼。
  ORACLE 塊的大小是可以在安裝時選擇“自定義安裝”來指定,也可以在CREATE DATABASE創建數據庫實例時指定。其最小爲2K,最大可達爲64K.

  瓶頸(Bottleneck)

  指限制系統性能的部件。

  面向對象的關係數據庫

  具有關係數據庫的全部功能,同時又支持面向對象的數據庫,稱作面向對象關係數據庫系統。Oracle7是一種功能完備的關係數據庫系統;oracle8是一種面向對象的關係數據庫系統。

  客戶/服務器結構(Client/Server)

  有客戶機、服務器、網絡三要素的結構,客戶機(PC機)通過網絡與服務器相連和工作。

  胖客戶機(Fat Client)

  一般的Client/Server結構中的客戶機均爲胖客戶機。因爲這些客戶機需要配置較高的設備,如內存、硬盤、主頻、CD_ROM等。

  瘦客戶機(Thin Client)

  也稱作NC(網絡計算機),是一種內存配置小(過去指一般只有4M,現無法定義),無硬盤,只有處理心片的處理機。

  數據在線分析處理(OLAP)

  是一種能以快速、交互、方便的方式洞察數據情況的技術。如Oracle Express,Cognos(加拿大)的Power Play, Business Objects公司的Business Object 等。

  多線程(MTS)

  一個用戶可以同時運行多個程序對數據庫進行訪問,比如Visual C/C 可以提供同時啓動多個進程,而Visual Basic則不能。

  數據倉庫(Data Warehouse)

  支持大量數據信息存儲的叫做支持數據倉儲或數據倉庫。當把幾個小型數據庫集成爲一個大型數據庫,併爲一個較廣泛的組織服務時,如果該數據庫存儲歷史數據,提供決策支持,提供數據彙總,提供只讀數據,並且實質上充當所有向它提供數據的相關成品數據庫的數據接收器,那麼它通常被叫做數據倉庫。

  實例(Instance)

  是訪問Oracle數據庫所需的一部分計算機內存和輔助處理後臺進程。

  對象(Objects)

  是實現世界實體的軟件表示,如表、索引、視圖、同義詞、過程等。

  數據庫文件(Datafile)

  Oracle系統中用於存放數據(應用系統數據)的文件。(<<Oracle8初學者指南>;>14中的例子不準確,容易誤導讀者)。

  控制文件(Control File)

  Oracle中存放系統用的一些數據的文件。如數據文件的路徑及文件名,初始化文件路徑及 文件名等都存放在控制文件中。

  日誌文件(Logs File)

  也叫事務記錄文件,該文件記錄有事物對數據庫進行的一切修改操作或事務。

  DBA(Database administrator-數據庫管理員)

  是管理數據庫系統的技術工具或人員,在完備的數據庫系統中都提供DBA功能。

  灰數據塊(Dirty data block)

  存放在內存中的原始數據已被修改,而修改後的數據還未寫入數據庫中。

  熱數據塊(Hot data block)

  存放着那些經常被修改數據叫熱數據塊。

  LRU(Least Recently Used-最近最少用)

  Oracle系統使用的一種算法,對於在內存中但最近又不用的數據塊(內存塊)叫做LRU,Oracle會根據那些數據屬於LRU而將其移出內存而騰出空間來加載另外的數據。

  表(Table)

  存放專門數據而建立和分配的空間。

  表空間(Tablespace)

  是一個或多個數據文件的集合,所有的數據對象都存放在指定的表空間中,但主要存放的是表, 所以稱作表空間。

  回滾(Rollback)

  將用戶(或者說事務)改變的數據恢復到上一次所處的狀態。

  恢復信息(Undo Information)

  記錄用於恢復的信息稱作恢復信息。回滾就是根據恢復信息內容進行恢復的。

§2.2

  Oracle數據庫結構Oracle數據庫結構是Oracle數據庫系統的主要部分,它是一些可以看得見的軟件,包括:

  Oracle 數據字典l 表空間與數據文件l Oracle實例(Instance)

 §2.2.1

  Oracle 數據字典Oracle數據庫的重要部分是數據字典。它存放有Oracle數據庫所用的有關信息,對用戶來說是一組只讀的表。數據字典內容包括:

  數據庫中所有模式對象的信息,如表、視圖、簇、及索引等。
  分配多少空間,當前使用了多少空間等。
  列的缺省值。
  約束信息的完整性。
  Oracle用戶的名字。
  用戶及角色被授予的權限。
  用戶訪問或使用的審計信息。
  其它產生的數據庫信息。

  數據庫數據字典是一組表和視圖結構。它們存放在SYSTEM表空間中。數據庫數據字典不僅是每個數據庫的中心。而且對每個用戶也是非常重要的信息。用戶可以用SQL語句訪問數據庫數據字典。

 §2.2.2

  表空間與數據文件簡單說,表空間就是一個或多個數據文件(物理文件)的集合(邏輯文件)。一般有下面的表空間:

  1)系統表空間(System tablespace)

  是各種不同版本的Oracle必備的部分,存放Oracle系統的一些信息,一般只有一個SYSTEM表空間。

  2)臨時表空間(Temporary tablespace )

  由於Oracle工作時經常需要一些臨時的磁盤空間,這些空間主要用作查詢時帶有排序(Group by,Order by等)等算法所用,當用完後就立即釋放,對記錄在磁盤區的信息不再使用,因此叫臨時表空間。一般安裝之後只有一個TEMP臨時表空間。

  3)工具表空間(Tools tablespace)

  用於保存Oracle數據庫工具所需的數據庫對象,這些工具表空間存放在工作時所用的專用表。舊的Oracle版本無此表空間。安裝之後的工具表空間是Tools.

  4)用戶表空間(Users tablespace)

  用於存放一些實驗例子用的空間,當然也可以用於存放應用系統的數據。舊版本無Users表空間。現在的用戶表空間爲 USERS .

  5)數據及索引表空間存放數據及索引的表空間,Oracle7以後都提倡在應用系統中,特別是具有大量數據的系統,要把數據和索引分開存放在不同的分區中,以便提高查詢速度。在安裝後索引表空間可能是INDX.數據表空間就是USERS.

  6)回滾段表空間(Rollback Segment)

  Oracle數據庫系統在運行Insert、Update、Delete時都需要一個磁盤空間來存放恢復信息(Undo Information),以便在進行恢復時能將原來信息讀出來。安裝後的回滾段表空間是RBS表空間。數據庫管理員也可根據應用的需要建立另外的回滾段表空間。Oracle 以表空間來存儲邏輯數據並 以物理數據相連。

  數據庫被分成一個或多個邏輯部件稱作表空間。而表空間又被分成稱作段(segment)的邏輯部件。這些段再細分就叫擴展(extents)。

 §2.2.3

  Oracle實例Oracle實例(Instance)是由一組後臺進程和內存結構組成。每個運行的數據庫系統都與實例有關。所以,有時稱Oracle實例爲數據庫操作系統。下面是Oracle實例的解釋。

  Oracle 進程Oracle有兩種類型的進程: 服務器進程和後臺進程(server processes and background processes)。

  服務器進程Oracle 服務器進程是處理用戶與實例連接的事務。任務是:

  分析和執行應用所發出的SQL語句。
  從數據文件讀必要的數據到SGA區的共享數據區。
  返回必要信息給應用。

  後臺進程Oracle系統使用一些附加的進程來處理系統的必須的工作。這些進程叫後臺進程:

  數據庫寫 (DBW0 或DBWn)
  日誌寫 (LGWR)
  檢測點 (CKPT)
  系統監視 (SMON)
  進程監視 (PMON)
  歸檔 (ARCn)
  恢復 (RECO)
  鎖(LCK0)
  工作隊列 (SNPn)
  隊列監視 (QMNn)
  發佈(Dispatcher) (Dnnn)
  服務器 (Snnn)

  Oracle 的內存結構(SGA)

  SGA 結構爲:

  數據高速緩衝區  重做日誌緩衝區  共享池  大的共享池(可選)
  數據字典緩衝區  其它數據緩衝區

§2.3

  Oracle數據庫文件ORACLE 數據庫是一個複雜的數據庫操作系統,由一系列部件組成,主要有:1)初始化參數文件、2)數據文件、3)控制文件、4)日誌文件等。

 §2.3.1

  初始化參數文件初始化參數文件(initialization parameter file) INITsid.ORA,是 ORALE RDBMS 主要的配置點,它是配置參數和數值的集合。每一個參數值都控制或修改數據庫和實例的某個方面。 早期的版本把參數都寫在 initsid.ora 文件中,但在ORACLE8 之後,多數參數已不在該文件中出現,需修改這些參數時只能在SQL>;下用 SET SESSION 或 SET SYSTEM 來進行。 查看系統參數可用。例如:

  SQL>;select * from v$parameter;

來列出。

  Oracle初始化參數文件是一個可以編輯的文本文件。它是在數據庫實例啓動時被訪問,從而得到數據文件、日誌文件、控制文件等的路徑,此外,初始化參數文件還提供實例所用的參數等。

 §2.3.2

  數據文件用於存放所有數據庫的數據文件,Oracle安裝過程中自動建立多個必要的數據文件。這些數據文件用於存放Oracle系統的基本數據。在應用系統開發過程中,我們可根據需要另建立一些數據文件。

  如果數據文件按它們存放的數據類型來分的話,可以分爲:用戶數據(存放應用系統的數據爲用戶數據);系統數據。

  管理用戶數據和數據庫系統本身的數據,如數據字典,用戶建立的表的名字,類型等都記錄在系統數據中。

 §2.3.3

  控制文件控制文件是由Oracle數據庫實例在啓動時被訪問的內部二進制文件,它們所存放的路徑由參數文件的control_files=參數來確定。

  Oracle一般有兩個或更多的控制文件,每個控制文件記錄有相同的信息,在數據庫運行中如果某個控制文件出錯時,Oracle會自動使用另外一個控制文件。當所有的控制文件都損壞時系統將不能工作。

  Oracle數據庫至少有一個控制文件;一般數據庫系統安裝完成後,自動創建兩個以上控制文件;爲了安全一般建議創建多個控制文件;控制文件可用下面命令查到:

select name,value from v$parameter where name like 'control_files';

 §2.3.4

  重做日誌文件重做日誌文件是Oracle系統中一個很重要的文件。特點是:

  重做日誌是Oracle的日記帳,負責記錄所有用戶對象或系統變更的信息;安裝完成後有多個重做日誌文件,它們是幾個分爲一組,組內的重做日誌文件大小要一樣;爲了使系統性能更好可以在創建多重做日誌文件組;重做日誌文件可以名下面命令查到:

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