Oracle資料庫的一些重要概念
一.oracle資料庫的結構
完整的Oracle資料庫通常由兩部分組成:Oracle資料庫和資料庫例項。 1) 資料庫是一系列物理檔案的集合(資料檔案,控制檔案,聯機日誌,引數檔案等); 2) Oracle資料庫例項則是一組Oracle後臺程序/執行緒以及在伺服器分配的共享記憶體區(oracle官方文件中給出的概念)。
在啟動Oracle資料庫伺服器時,實際上是在伺服器的記憶體中建立一個Oracle例項(即在伺服器記憶體中分配共享記憶體並建立相關的後臺記憶體),然後由這個Oracle資料庫例項來訪問和控制磁碟中的資料檔案。Oracle有一個很大的記憶體快,成為全域性區(SGA)。
1.資料庫的概念
資料庫是資料集合。Oracle是一種資料庫管理系統,是一種關係型的資料庫管理系統。 通常情況我們稱的“資料庫”,並不僅指物理的資料集合,他包含物理資料、資料庫管理系統。也即物理資料、記憶體、作業系統程序的組合體。
(1)全域性資料庫名:就是一個數據庫的標識,在安裝時就要想好,以後一般不修改,修改起來也麻煩,因為資料庫一旦安裝,資料庫名就寫進了控制檔案,資料庫表,很多地方都會用到這個資料庫名。(2)啟動資料庫:也叫全域性資料庫,是資料庫系統的入口,它會內建一些高階許可權的使用者如SYS,SYSTEM等。我們用這些高階許可權賬號登陸就可以在資料庫例項中建立表空間,使用者,表了。
select name from v$database;
2.資料庫例項
例項是訪問Oracle資料庫所需的一部分計算機記憶體和輔助處理後臺程序,是由程序和這些程序所使用的記憶體(SGA)所構成一個集合其實就是用來訪問和使用資料庫的一塊程序,它只存在於記憶體中。就像Java中new出來的例項物件一樣。我們訪問Oracle都是訪問一個例項,但這個例項如果關聯了資料庫檔案,就是可以訪問的,如果沒有,就會得到例項不可用的錯誤。例項名指的是用於響應某個資料庫操作的資料庫管理系統的名稱。她同時也叫SID。例項名是由引數instance_name決定的。
查詢當前資料庫例項名:
select instance_name from v$instance;
資料庫例項名(instance_name)用於對外部連線。在作業系統中要取得與資料庫的聯絡,必須使用資料庫例項名。比如我們作開發,要連線資料庫,就得連線資料庫例項名:
jdbc:oracle:thin:@localhost:1521:orcl(orcl就為資料庫例項名)
3.表空間
Oracle資料庫是通過表空間來儲存物理表的,一個數據庫例項可以有N個表空間,一個表空間下可以有N張表。
有了資料庫,就可以建立表空間。
表空間(tablespace)是資料庫的邏輯劃分,每個資料庫至少有一個表空間(稱作SYSTEM表空間)。為了便於管理和提高執行效率,可以使用一些附加表空間來劃分使用者和應用程式。例如:USER表空間供一般使用者使用,RBS表空間供回滾段使用。一個表空間只能屬於一個數據庫。
建立表空間語法:
Create TableSpace 表空間名稱 DataFile 表空間資料檔案路徑 Size 表空間初始大小 Autoextend on
如:
create tablespace db_test datafile 'D:\oracle\product\10.2.0\userdata\db_test.dbf' size 50m autoextend on;
檢視已經建立好的表空間:
select default_tablespace, temporary_tablespace, d.username from dba_users d
ORACLE資料庫被劃分成稱作為表空間的邏輯區域——形成ORACLE資料庫的邏輯結構。一個ORACLE資料庫能夠有一個或多個表空間,而一個表空間則對應著一個或多個物理的資料庫檔案。表空間是ORACLE資料庫恢復的最小單位,容納著許多資料庫實體,如表、檢視、索引、聚簇、回退段和臨時段等。 每個ORACLE資料庫均有SYSTEM表空間,這是資料庫建立時自動建立的。SYSTEM表空間必須總要保持聯機,因為其包含著資料庫執行所要求的基本資訊(關於整個資料庫的資料字典、聯機求助機制、所有回退段、臨時段和自舉段、所有的使用者資料庫實體、其它ORACLE軟體產品要求的表)。 一個小型應用的ORACLE資料庫通常僅包括SYSTEM表空間,然而一個稍大型應用的ORACLE資料庫採用多個表空間會對資料庫的使用帶來更大的方便。 Oracle表空間之作用 表空間的作用能幫助DBA使用者完成以下工作: 1.決定資料庫實體的空間分配; 2.設定資料庫使用者的空間份額; 3.控制資料庫部分資料的可用性; 4.分佈資料於不同的裝置之間以改善效能; 5.備份和恢復資料。 使用者建立其資料庫實體時其必須於給定的表空間中具有相應的權力,所以對一個使用者來 說,其要操縱一個ORACLE資料庫中的資料,應該: 1.被授予關於一個或多個表空間中的RESOURCE特權; 2.被指定預設表空間; 3.被分配指定表空間的儲存空間使用份額; 4.被指定預設臨時段表空間。
編輯本段控制Oracle使用者表空間配額
在一些大型的資料庫應用中,我們需要控制某個使用者或者某一組使用者其所佔用的磁碟空間。這就好像在檔案伺服器中,需要為每個使用者設定磁碟配額一樣,以防止硬碟空間耗竭。所以,在資料庫中,我們也需要限制使用者所可以使用的磁碟空間大小。為了達到這個目的,我們就可以通過表空間來實現。 我們可以在Oracle資料庫中,建立不同的表空間,為其設定最大的儲存容量,然後把使用者歸屬於這個表空間。如此的話,這個使用者的儲存容量,就受到這個表空間大小的限制。當然,表空間的優勢還不僅僅這些,企業對於資料庫的效能要求越高,或者資料庫容量越大,則表空間的優勢就會越大。 下面,我們就具體來看看Oracle資料庫中表空間的處理方式,看其在效能與安全性方面是否有足夠的優勢與SQL Server資料庫抗衡。
編輯本段Oracle資料庫中表空間的處理方式
在資料庫設計的時候,我們建議資料庫管理員按如下順序設定表空間。 第一步:建立Oracle使用者表空間。 在設計資料庫的時候,首先需要設計表空間。我們需要考慮,是隻建立一個表空間呢,還是需要建立多個表空間,以及各個表空間的存放位置、磁碟限額等等。 到底設計多少個表空間合理,沒有統一的說法,這主要根據企業的實際需求去判斷。如企業需要對使用者進行磁碟限額控制的,則就需要根據使用者的數量來設定表空間。當企業的資料容量比較大,而其又對資料庫的效能有比較高的要求時,就需要根據不同型別的資料,設定不同的表空間,以提高其輸入輸出效能。 第二步:建立Oracle使用者表空間,並制定使用者的預設表空間。 在建立使用者的時候,我們建議資料庫管理員要指定使用者的預設表空間。因為我們在利用CREATE語句建立資料庫物件,如資料庫表的時候,其預設是儲存在資料庫的當前預設空間。若不指定使用者預設表空間的話,則使用者每次建立資料庫物件的時候,都要指定表空間,顯然,這並不是很合理。 另外要注意,不同的表空間有不同的許可權控制。使用者對於表空間A具有完全控制權限,可能對於表空間B就只有查詢許可權,甚至連連線的許可權的都沒有。所以,合理為使用者配置表空間的訪問許可權,也是提高資料庫安全性的一個方法。