完整的Oracle資料庫通常由兩部分組成:Oracle資料庫和資料庫例項。

1) 資料庫是一系列物理檔案的集合(資料檔案,控制檔案,聯機日誌,引數檔案等);

2) Oracle資料庫例項則是一組Oracle後臺程序/執行緒以及在伺服器分配的共享記憶體區。

在啟動Oracle資料庫伺服器時,實際上是在伺服器的記憶體中建立一個Oracle例項(即在伺服器記憶體中分配共享記憶體並建立相關的後臺記憶體),然後由這個Oracle資料庫例項來訪問和控制磁碟中的資料檔案。Oracle有一個很大的記憶體快,成為全域性區(SGA)。

一、資料庫、表空間、資料檔案

1、資料庫

資料庫是資料集合。Oracle是一種資料庫管理系統,是一種關係型的資料庫管理系統。

通常情況了我們稱的“資料庫”,並不僅指物理的資料集合,他包含物理資料、資料庫管理系統。也即物理資料、記憶體、作業系統程序的組合體。

我們在安裝Oracle資料庫時,會讓我們選擇安裝啟動資料庫(即預設的全域性資料庫)如下圖:

Oracle - 資料庫的例項、表空間、使用者、表之間關係

全域性資料庫名:就是一個數據庫的標識,在安裝時就要想好,以後一般不修改,修改起來也麻煩,因為資料庫一旦安裝,資料庫名就寫進了控制檔案,資料庫表,很多地方都會用到這個資料庫名。

啟動資料庫:也叫全域性資料庫,是資料庫系統的入口,它會內建一些高階許可權的使用者如SYS,SYSTEM等。我們用這些高階許可權賬號登陸就可以在資料庫例項中建立表空間,使用者,表了。

查詢當前資料庫名:

select name from v$database;

2、資料庫例項

用Oracle官方描述:例項是訪問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

4、使用者

Oracle資料庫建好後,要想在資料庫裡建表,必須先為資料庫建立使用者,併為使用者指定表空間。

上面我們建好了資料庫和表空間,接下來建使用者:

建立新使用者:

CREATE USER 使用者名稱 IDENTIFIED BY 密碼 DEFAULT TABLESPACE 表空間(預設USERS) TEMPORARY TABLESPACE 臨時表空間(預設TEMP)

如:

CREATE USER utest IDENTIFIED BY utestpwd DEFAULT TABLESPACE db_test TEMPORARY TABLESPACE temp;(這裡臨時表空間不能使用我們建立的db_test,不知為何?)

有了使用者,要想使用使用者賬號管理自己的表空間,還得給它分許可權:

GRANT CONNECT TO utest; GRANT RESOURCE TO utest; GRANT dba TO utest;——dba為最高階許可權,可以建立資料庫,表等。

檢視資料庫使用者:

select * from dba_users;

5、表

有了資料庫,表空間和使用者,就可以用自定義的使用者在自己的表空間建立表了。有了表,我們可以開發了。

從定義中我們可以看出schema為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema裡面包含了各種物件如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。

一個使用者一般對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema。這也就是我們在企業管理器的方案下看到schema名都為資料庫使用者名稱的原因。Oracle資料庫中不能新建立一個schema,要想建立一個schema,只能透過建立一個使用者的方法解決(Oracle中雖然有create schema語句,但是它並不是用來建立一個schema的),在建立一個使用者的同時為這個使用者建立一個與使用者名稱同名的schem並作為該使用者的預設shcema。即schema的個數同user的個數相同,而且schema名字同user名字一一 對應並且相同,所有我們可以稱schema為user的別名,雖然這樣說並不準確,但是更容易理解一些。

一個使用者有一個預設的schema,其schema名就等於使用者名稱,當然一個使用者還可以使用其他的schema。如果我們訪問一個表時,沒有指明該表屬於哪一個schema中的,系統就會自動給我們在表上加上預設的sheman名。比如我們在訪問資料庫時,訪問scott使用者下的emp表,透過select * from emp; 其實,這sql語句的完整寫法為select * from scott。emp。在資料庫中一個物件的完整名稱為schema。object,而不屬user。object。類似如果我們在建立物件時不指定該物件的schema,在該物件的schema為使用者的預設schema。這就像一個使用者有一個預設的表空間,但是該使用者還可以使用其他的表空間,如果我們在建立物件時不指定表空間,則物件儲存在預設表空間中,要想讓物件儲存在其他表空間中,我們需要在建立物件時指定該物件的表空間。