1. 程式人生 > >Oracle資料庫、例項、使用者、表空間、表之間的關係

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

完整的Oracle資料庫通常由兩部分組成:Oracle資料庫和資料庫例項。 
1) 資料庫是一系列物理檔案的集合(資料檔案,控制檔案,聯機日誌,引數檔案等); 
2) Oracle資料庫例項則是一組Oracle後臺程序/執行緒以及在伺服器分配的共享記憶體區。

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

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

1、資料庫

資料庫是資料集合。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、表

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

資料庫:
Oracle資料庫是資料的物理儲存。這就包括(資料檔案ORA或者DBF、控制檔案、聯機日誌、引數檔案)。其實Oracle資料庫的概念和其它資料庫不一樣,這裡的資料庫是一個作業系統只有一個庫。可以看作是Oracle就只有一個大資料庫。

例項:  
一個Oracle例項(Oracle Instance)有一系列的後臺程序(Backguound Processes)和記憶體結構(Memory Structures)組成。一個數據庫可以有n個例項。

使用者:
使用者是在例項下建立的。不同例項可以建相同名字的使用者。

表空間:
表空間是一個用來管理資料儲存邏輯概念,表空間只是和資料檔案(ORA或者DBF檔案)發生關係,資料檔案是物理的,一個表空間可以包含多個數據檔案,而一個數據檔案只能隸屬一個表空間。

資料檔案(dbf、ora):
 資料檔案是資料庫的物理儲存單位。資料庫的資料是儲存在表空間中的,真 正是在某一個或者多個數據檔案中。而一個表空間可以由一個或多個數據檔案組成,一個數據檔案只能屬於一個表空間。一旦資料檔案被加入到某個表空間後,就不能刪除這個檔案,如果要刪除某個資料檔案,只能刪除其所屬於的表空間才行。

注:

表的資料,是有使用者放入某一個表空間的,而這個表空間會隨機把這些表資料放到一個或者多個數據檔案中。由於oracle的資料庫不是普通的概念,oracle是有使用者和表空間對資料進行管理和存放的。但是表不是有表空間去查詢的,而是由使用者去查的。因為不同使用者可以在同一個表空間建立同一個名字的表!這裡區分就是使用者了!

關係示意圖:

 

理解1:

Oracle資料庫可以建立多個例項,每個例項可以建立多個表空間,每個表空間下可以建立多個使用者(同時使用者也屬於表空間對應的例項)和資料庫檔案,使用者可以建立多個表(每個表隨機儲存在一個或多個數據庫檔案中),如下圖:

 

理解2:

理解1MS有誤。

例項下有和,授權訪問,是管理的,經授權在中建立,隨機儲存到不同的中。如下圖所示:

 

操作1:

安裝Oracle後會有預設的例項,即ORCL。一般不建立多個例項,在預設例項下建立表空間和使用者等。

1,執行CMD進入DOS介面,首先輸入:sqlplus,回車;再輸入:sys/sys as sysdba,回車,即進入“SQL〉”操作狀態。

2,輸入:CREATE TABLESPACE 表空間名稱 LOGGING DATAFILE 'c:\表空間資料檔案.ora' SIZE 500M autoextend on next 200m maxsize 2048m;,表空間建立完成。

3,輸入:CREATE USER 使用者名稱稱 PROFILE default IDENTIFIED BY 使用者密碼 DEFAULT TABLESPACE 授權訪問的表空間名稱 TEMPORARY TABLESPACE temp ACCOUNT UNLOCK;,使用者建立完成,並授權使用者訪問某表空間。

具體操作如下圖所示:

 

操作2:

建立表和插入資料,並查詢瀏覽插入的資料。

1,建立表,輸入:

create table 表名(
欄位名稱1 欄位型別,
欄位名稱2 欄位型別,
欄位名稱3 欄位型別
);,回車。

2,插入資料,輸入:insert into 表名(欄位1,欄位2,欄位3) VALUES(值1,值2,值3);,回車。

3,查詢資料,輸入:select * from 表名;,回車。

具體操作如下圖所示:

 


在Oracle中,結合邏輯儲存與物理儲存的概念,我們可以這樣來理解資料庫、表空間、SCHEMA、資料檔案這些概念:
    資料庫是一個大圈,裡面圈著的是表空間,表空間裡面是資料檔案,那麼schema是什麼呢?schema是一個邏輯概念,是一個集合,但schema並不是一個物件,oracle也並沒有提供建立schema的語法。

schema:
一般而言,一個使用者就對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema,使用者是不能建立schema的,schema在建立使用者的時候建立,並可以指定使用者的各種表空間(這點與PostgreSQL是不同,PostgreSQL是可以建立schema並指派給某個使用者)。當前連線到資料庫上的使用者建立的所有資料庫物件預設都屬於這個schema(即在不指明schema的情況下),比如若使用者scott連線到資料庫,然後create table test(id int not null)建立表,那麼這個表被建立在了scott這個schema中;但若這樣create kanon.table test(id int not null)的話,這個表被建立在了kanon這個schema中,當然前提是許可權允許。

建立使用者的方法是這樣的:
create user 使用者名稱 identified by 密碼
default tablespace 表空間名
temporary tablespace 表空間名
quota 限額 (建議建立的時候指明表空間名)
由此來看,schema是一個邏輯概念。
但一定要注意一點:schema好像並不是在建立user時就建立的,而是在該使用者建立了第一個物件之後才將schema真正建立的,只有user下存在物件,他對應的schema才會存在,如果user下不存在任何物件了,schema也就不存在了;

資料庫:
    在oracle中,資料庫是由表空間來組成的,而表空間裡面是具體的物理檔案---資料檔案。我們可以建立資料庫併為其指定各種表空間。

表空間:
    這是個邏輯概念,本質上是一個或者多個數據檔案的集合。

資料檔案:
    具體儲存資料的物理檔案,是一個物理概念。

    一個數據檔案只能屬於一個表空間,一個表空間可以包含一個或多個數據檔案。一個數據庫由多個表空間組成,一個表空間只能屬於一個數據庫。

    若還不理解,下面是我從網上摘的一個比喻,很形象的解釋了什麼是Database,什麼是Schema,什麼是Table,什麼是列,什麼是行,什麼是User,不妨一看。
“我們可以把Database看作是一個大倉庫,倉庫分了很多很多的房間,Schema就是其中的房間,一個Schema代表一個房間,Table可以看作是每個Schema中的床,Table(床)被放入每個房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了,然後床上可以放置很多物品,就好比 Table上可以放置很多列和行一樣,資料庫中儲存資料的基本單元是Table,現實中每個倉庫放置物品的基本單位就是床, User就是每個Schema的主人,(所以Schema包含的是Object,而不是User),user和schema是一一對應的,每個user在沒有特別指定下只能使用自己schema(房間)的東西,如果一個user想使用其他schema(房間)的東西,那就要看那個schema(房間)的user(主人)有沒有給你這個許可權了,或者看這個倉庫的老大(DBA)有沒有給你這個許可權了。換句話說,如果你是某個倉庫的主人,那麼這個倉庫的使用權和倉庫中的所有東西都是你的(包括房間),你有完全的操作權,可以扔掉不用的東西從每個房間,也可以放置一些有用的東西到某一個房間,你還可以給每個User分配具體的許可權,也就是他到某一個房間能做些什麼,是隻能看(Read-Only),還是可以像主人一樣有所有的控制權(R/W),這個就要看這個User所對應的角色Role了。”---摘自網路

建立資料庫表空間的方法:
新建一個Command Window 在提示符下輸入一下命令,回車執行就可以了create tablespace dbspace datafile 'D:\oracle\product\10.2.0\oradata\orcl\dbspace.dbf' size 400M autoextend on next 10m maxsize unlimited;--建立表空間DROP TABLESPACE dbspace INCLUDING CONTENTS AND DATAFILES;--刪除表空間其中1) DATAFILE: 表空間資料檔案存放路徑2) SIZE: 起初設定為200M3) UNIFORM: 指定區尺寸為128k,如不指定,區尺寸預設為64k 4) 空間名稱histdb 與 資料檔名稱 histdb.dbf 不要求相同,可隨意命名.5) AUTOEXTEND ON/OFF 表示啟動/停止自動擴充套件表空間6) alter database datafile ' D:\oracle\product\10.2.0\oradata\orcl\histdb.dbf ' resize 500m; //手動修改資料檔案大小為下列命令用於為表空間建立使用者,將使用者的預設表空間設定為剛建立的表空間create user test1 identified by test1 default tablespace dbspace; alter database default tablespace dbspace; create user test identified by test; select username, default_tablespace defspace from dba_users where username='TEST';

以上為本人從網上找的有用的資料,下面是個人對資料庫例項、表空間、方案、使用者、資料(表等等)的關係理解:

借用上面的很好的例子:一個執行著的資料庫程式就是一個例項(電腦上可以執行多個數據庫)。例項就像一個大倉庫。由於倉庫太大,我們租給不同的企業,每個企業根據自身的需求劃定倉庫的一片區域,這片區域稱為表空間。企業允許員工在自己這片區域的倉庫的房間內放自己的東西。每位員工只有一個房間,當放上你的一件東西后這個房間就屬於你,並且以你的名字自動命名。你就是使用者,而房間就是方案(schema)。你可以在你的房間(方案)裡置辦不同的器具放不同類的東西如:鞋櫃、衣櫥、床等等(這些對應著表、索引、檢視、觸發器等等)。你在這些器具裡面放的具體的東西比如鞋子、衣服就是資料了。