1. 程式人生 > >Oracle中User與Schema的簡單理解

Oracle中User與Schema的簡單理解

方案(Schema)為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema裡面包含了各種物件如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。  一個使用者一般對應一個schema,該使用者的schema名等於使用者名稱,並作為該使用者預設schema。

SQL Server中的Schema

SQL Server中一個使用者有一個預設的schema,其schema名就等於使用者名稱,這也就是我們在企業管理器的方案下看到schema名都為

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


Oracle中的Schema

Oracle中的schema就是指一個使用者下所有物件的集合,schema本身不能理解成一個物件,oracle並沒有提供建立schema的語法,schema也並不是在建立user時就建立,而是在該使用者下建立第一個物件之後schema也隨之產生,只要user下存在物件,schema就一定存在,user下如果不存在物件,schema也不存在;如果建立一個新使用者,該使用者下如果沒有物件則schema不存在,如果建立一個物件則和使用者同名的schema也隨之產生。實際上在使用上,shcema與user完全一樣,沒有什麼區別,在出現schema名的地方也可以出現user名。

Tablspace 

邏輯上用來放objects,,這是個邏輯概念,本質上是一個或者多個數據檔案的集合,物理上對應磁碟上的資料檔案或者裸裝置。


資料檔案

具體儲存資料的物理檔案,是一個物理概念。一個數據檔案只能屬於一個表空間,一個表空間可以包含一個或多個數據檔案。一個數據庫由多個表空間組成,一個表空間只能屬於一個數據庫。

下邊是源自網路的一個形象的比喻

我們可以把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了。

相關推薦

OracleUserSchema簡單理解

方案(Schema)為資料庫物件的集合,為了區分各個集合,我們需要給這個集合起個名字,這些名字就是我們在企業管理器的方案下看到的許多類似使用者名稱的節點,這些類似使用者名稱的節點其實就是一個schema,schema裡面包含了各種物件如tables, views, sequ

OracleTable函數簡單應用實例

ble lac rac 數據 div 輸出 pan bject 查詢語句 說明 表函數可接受查詢語句或遊標作為輸入參數,並可輸出多行數據。 該函數可以平行執行,並可持續輸出數據流,被稱作管道式輸出。 應用表函數可將數據轉換分階段處理,並省去中間結果的存儲和緩沖表。 優勢

【轉】C#FuncAction的理解

.net ring UNC 簡單 代碼 操作 不必要 返回值 tps 原文地址:https://www.cnblogs.com/ultimateWorld/p/5608122.html Action 與 Func是.NET類庫中增加的內置委托,以便更加簡潔方便的使用委托。最

python裝飾器的簡單理解

裝飾器 裝飾器也屬於閉包的一種 #裝飾器是一個很著名的設計模式,經常被用於有切面需求的場景,較為經典的有插入日誌、效能測試、事務處理等。裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量函式中與函式功能本身無關的雷同程式碼並繼續重用。概括的講,裝飾器的作用就是為

淺談Oracleexistsin的執行效率問題

淺談Oracle中exists與in的執行效率問題 原創 Oracle 作者:迷倪小魏 時間:2017-11-29 13:43:30  5149  1 in 是把外表和內表作hash join,而exist

oraclenumber資料型別簡單學習

NUMBER (p,s)  p和s範圍: p 1-38  s -84-127 (1)如果s大於0:這時number(p,s),表示有效位最大為p,小數位最多為s,小數點右邊s位置開始四捨五入。 舉例: number(2,1) 有效位最大為2,小數點後最多保留1

Oracle的儲存過程簡單例子

---建立表 create table TESTTABLE (   id1  VARCHAR2(12),   name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE

Oracel資料庫檢視同義詞的理解及應用場景

轉載至: https://blog.csdn.net/u012411219/article/details/51321162 1. 資料庫物件之【檢視】簡單介紹    1.1 What:什麼叫檢視?          

Oracleinstrlike

在Oracle中like是經常用到的,但是對於資料比較多的查詢使用like這種模糊查詢效率會比較低,所以可以嘗試用instr代替like進行查詢。 用法: instr(‘源字串/列名’,’目標字串’) >0 相當於 like instr(‘源字串/列名’,’目標字串’) = 0

Oracle truncatedelete的區別

                truncate是oracle中獨有的關鍵字吧!它的作用是清空一個表格,在刪除資料方面,其與delete有一些區別,以便自己記住:1、在功能上,truncate是清空一個表的內容,它相當於delete from table_name。2、delete是dml操作,truncat

JavaServerSocketSocket簡單的使用

這是一個客戶端與伺服器端的簡單互動程式碼,用於理解之間的資料傳遞。 廢話不多說,直接上程式碼。 客戶端 package com.quaint.scoket; import java.io.InputStream; import java.io.OutputSt

OracleUnionUnion All的區別(適用多個數據庫)

 Union 將查詢到的結果集合並後進行重查,將其中相同的行去除。缺點:效率低;          對兩個結果集進行並集操作,不包括重複行,同時進行預設規則的排序;    Union ALL 則只是合併查詢的結果集,並不重新查詢,效率高,但是可能會出現冗餘資料。    

oracleinexist的用法比較

最近在工作中用到oracle的in函式,但是該函式的引數個數存在上限(1000)的限制,而且涉及查詢的兩個表還在兩個不同的資料庫中,就無法使用exists函式來替代in的使用了。但還是總結一下in與exists的用法差異。 1.in適用於內表比外表資料量小的場景:select * from te

理解javascriptthis的指向(簡單理解篇)

先列舉幾種常用的this指向: // 全域性下this=windowconsole.log(this==window);this.a = 1;console.log(window.a);// 物件屬性上函式的this指向的是物件objvar obj = {a:1,sayA

oraclecharvarchar2的區別 | 面試

概括:char與varchar2都是Oracle的資料儲存格式。char是定長的,varchar2是變長。都可以儲存字串。 char是定長的 char(10) , varchar2(10)是變長的 當我們同樣存 a ,char佔用了10個字元(a佔一個,另外9個使用空格佔用),varch

ORACLE inexists語句的區別(一)

select * from A where id in(select id from B) 以上查詢使用了in語句,in()只執行一次,它查出B表中的所有id欄位並快取起來.之後,檢查A表的id是否與B表中的id相等,如果相等則將A表的記錄加入結果集中,直到遍歷完A表的所有

oracle rownum connect by的結合使用

原文:http://blog.sina.com.cn/s/blog_a26966d90102wwkb.html oracle中 rownum 與 connect by的結合使用 SELECT ROWNUM FROM DUAL CONNECT BY ROWNUM <= N 可以生成1到N的整數序列,N

SQL那些事兒(十三)--Oraclevarcharvarchar2區別

部落格統計 [removed]var cnzz_protocol = (("https:" == [removed].protocol) ? " https://" : " http://");[removed](unescape("[removed][removed]")

AndroidActivityAppCompatActivity的理解

package com.chy.myapplication; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; /* * support v4 FragmentActivity 相容2.x模式下使用Fragm

OracleUnionUnionAll的區別(union會合並多個重複結果)

轉自:http://www.educity.cn/wenda/389698.html Oracle中Union與UnionAll的區別如果我們需要將兩個select語 句的結果作為一個整 提問者: saixijiaoyu     釋出時間:2014-06-18