1. 程式人生 > >ORACLE 資料庫、表空間、SCHEMA、資料檔案的概念

ORACLE 資料庫、表空間、SCHEMA、資料檔案的概念

      在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了。”---摘自網路