Oracle中Schema和User的區(qū)別

在 Oracle 數(shù)據(jù)庫中,"Schema" 和 "User" 是兩個(gè)相關(guān)但具有不同概念的術(shù)語。

Schema(模式):在 Oracle 中,Schema 是一個(gè)邏輯容器,用于組織和管理數(shù)據(jù)庫對象,如表、視圖、存儲過程、函數(shù)等。它可以看作是一個(gè)命名空間,用于將數(shù)據(jù)庫對象進(jìn)行分組和隔離。一個(gè) Schema 可以包含多個(gè)表和其他對象,并為這些對象提供命名空間和訪問控制。Schema 可以由一個(gè) User 擁有,并與 User 的身份關(guān)聯(lián)。

User(用戶):在 Oracle 中,User 是一個(gè)登錄和訪問數(shù)據(jù)庫的實(shí)體。每個(gè)用戶都有自己的用戶名和密碼,并擁有在數(shù)據(jù)庫中創(chuàng)建對象和執(zhí)行操作的權(quán)限。用戶可以擁有一個(gè)或多個(gè) Schema,并在其所擁有的 Schema 中創(chuàng)建和管理對象。一個(gè)用戶可以是一個(gè)數(shù)據(jù)庫管理員(DBA),或者是一個(gè)應(yīng)用程序的特定用戶。

區(qū)別:

1. Schema 是邏輯上的概念,用于組織和隔離數(shù)據(jù)庫對象,而 User 是物理上的實(shí)體,用于登錄和訪問數(shù)據(jù)庫。

2. 一個(gè) User 可以擁有一個(gè)或多個(gè) Schema,但一個(gè) Schema 只能被一個(gè) User 擁有。

3. User 擁有在數(shù)據(jù)庫中創(chuàng)建對象和執(zhí)行操作的權(quán)限,而 Schema 本身沒有直接的權(quán)限,它繼承自關(guān)聯(lián)的 User。

4. User 的身份是登錄數(shù)據(jù)庫的標(biāo)識,而 Schema 的身份是用于在 SQL 語句中引用和操作對象的標(biāo)識。

總的來說,Schema 和 User 在 Oracle 中有密切關(guān)聯(lián),但它們表示不同的概念。Schema 用于組織和隔離數(shù)據(jù)庫對象,而 User 用于登錄和訪問數(shù)據(jù)庫,并擁有在其所擁有的 Schema 中創(chuàng)建和管理對象的權(quán)限。


從定義中我們可以看出方案(Schema)為數(shù)據(jù)庫對象的集合,為了區(qū)分各個(gè)集合,我們需要給這個(gè)集合起個(gè)名字,這些名字就是我們在企業(yè)管理器的方案下看到的許多類似用戶名的節(jié)點(diǎn),這些類似用戶名的節(jié)點(diǎn)其實(shí)就是一個(gè)schema,schema里面包含了各種對象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。

? ? ? 一個(gè)用戶一般對應(yīng)一個(gè)schema,該用戶的schema名等于用戶名,并作為該用戶缺省schema。這也就是我們在企業(yè)管理器的方案下看到schema名都為數(shù)據(jù)庫用戶名的原因。Oracle數(shù)據(jù)庫中不能新創(chuàng)建一個(gè)schema,要想創(chuàng)建一個(gè)schema,只能通過創(chuàng)建一個(gè)用戶的方法解決(Oracle中雖然有create schema語句,但是它并不是用來創(chuàng)建一個(gè)schema的),在創(chuàng)建一個(gè)用戶的同時(shí)為這個(gè)用戶創(chuàng)建一個(gè)與用戶名同名的schema并作為該用戶的缺省shcema。即schema的個(gè)數(shù)同user的個(gè)數(shù)相同,而且schema名字同user名字一一對應(yīng)并且相同,所有我們可以稱schema為user的別名,雖然這樣說并不準(zhǔn)確,但是更容易理解一些。


? ? ? 一個(gè)用戶有一個(gè)缺省的schema,其schema名就等于用戶名,當(dāng)然一個(gè)用戶還可以使用其他的schema。如果我們訪問一個(gè)表時(shí),沒有指明該表屬于哪一個(gè)schema中的,系統(tǒng)就會自動(dòng)給我們在表上加上缺省的schema名。比如我們在訪問數(shù)據(jù)庫時(shí),訪問scott用戶下的emp表,通過select * from emp; 其實(shí),這sql語句的完整寫法為select * from scott.emp。在數(shù)據(jù)庫中一個(gè)對象的完整名稱為schema.object,而不屬user.object。類似如果我們在創(chuàng)建對象時(shí)不指定該對象的schema,在該對象的schema為用戶的缺省schema。這就像一個(gè)用戶有一個(gè)缺省的表空間,但是該用戶還可以使用其他的表空間,如果我們在創(chuàng)建對象時(shí)不指定表空間,則對象存儲在缺省表空間中,要想讓對象存儲在其他表空間中,我們需要在創(chuàng)建對象時(shí)指定該對象的表空間。


? ? ? oracle中的schema就是指一個(gè)用戶下所有對象的集合,schema本身不能理解成一個(gè)對象,oracle并沒有提供創(chuàng)建schema的語法,schema也并不是在創(chuàng)建user時(shí)就創(chuàng)建,而是在該用戶下創(chuàng)建第一個(gè)對象之后schema也隨之產(chǎn)生,只要user下存在對象,schema就一定存在,user下如果不存在對象,schema也不存在;這一點(diǎn)類似于temp tablespace group,另外也可以通過oem來觀察,如果創(chuàng)建一個(gè)新用戶,該用戶下如果沒有對象則schema不存在,如果創(chuàng)建一個(gè)對象則和用戶同名的schema也隨之產(chǎn)生。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容