Oracle 用戶(user)和模式(schema)的區別

Oracle 用戶(user)和模式(schema)的區別

概述:sql

(一)什麼Oracle叫用戶(user):
  A user is a name defined in the database that can connect to and access objects.
大意:Oracle用戶是用鏈接數據庫和訪問數據庫對象的。(用戶是用來鏈接數據庫訪問數據庫)。數據庫

(二)什麼叫模式(schema):
  A schema is a collection of database objects (used by a user.). Schema objects are the logical structures that directly refer to the database’s data.
大意:模式是數據庫對象的集合。模式對象是數據庫數據的邏輯結構。(把數據庫對象用模式分開成不一樣的邏輯結構)。
(三)用戶(user)與模式(schema)的區別:
  Schemas and users help database administrators manage database security.
大意:用戶是用來鏈接數據庫對象。而模式用是用建立管理對象的。(模式跟用戶在oracle 是一對一的關係。)bash

 

詳解:網絡

  從官方的定義中,咱們能夠看出schema爲數據庫對象的集合。爲了區分各個集合,咱們須要給這個集合起個名字,這些名字就是咱們在企業管理器的方案下看到 的許多相似用戶名的節點,這些相似用戶名的節點其實就是一個schema。schema裏面包含了各類對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。oracle

  一個用戶通常對應一個schema,該用戶的schema名等於用戶名,並做爲該用戶缺省schema。這也就是咱們在企業管理器的方案下看 到schema名都爲數據庫用戶名的緣由。而Oracle數據庫中不能新建立一個schema,要想建立一個schema,只能經過建立一個用戶的方法解決 (Oracle中雖然有create schema語句,可是它並非用來建立一個schema的),在建立一個用戶的同時爲這個用戶建立一個與用戶名同名的schem並做爲該用戶的缺省 shcema。ide

  即schema的個數同user的個數相同,並且schema名字同user名字一一 對應而且相同,全部咱們能夠稱schema爲user的別名,雖然這樣說並不許確,可是更容易理解一些。spa

  一個用戶有一個缺省的schema,其schema名就等於用戶名,固然一個用戶還可使用其餘的schema。若是咱們訪問一個表時,沒有指明該 表屬於哪個schema中的,系統就會自動給咱們在表上加上缺省的sheman名。好比咱們在訪問數據庫時,訪問scott用戶下的emp表,經過 select * from emp; 其實,這sql語句的完整寫法爲select * from scott.emp。code

  在數據庫中一個對象的完整名稱爲schema.object,而不屬user.object。相似若是咱們在建立對象時不指定該對象 的schema,在該對象的schema爲用戶的缺省schema。這就像一個用戶有一個缺省的表空間,可是該用戶還可使用其餘的表空間,若是咱們在創 建對象時不指定表空間,則對象存儲在缺省表空間中,要想讓對象存儲在其餘表空間中,咱們須要在建立對象時指定該對象的表空間。對象

 

Oracle常見的各類概念描述

instance是一大坨內存sga,pga....和後臺的進程smon pmon.....組成的一個大的應用。
schema就是一個用戶和他下面的全部對象。。
tablspace 邏輯上用來放objects.物理上對應磁盤上的數據文件或者裸設備。

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了。」---摘自網絡

相關文章
相關標籤/搜索