在一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)應(yīng)用的數(shù)據(jù)表,這些不同應(yīng)用的表可以放在不同的schema之中,
同時(shí),每一個(gè)schema對(duì)應(yīng)一個(gè)用戶,不同的應(yīng)用可以以不同的用戶連接數(shù)據(jù)庫(kù),
這樣,一個(gè)大數(shù)據(jù)庫(kù)就可以根據(jù)應(yīng)用把其表分開(kāi)來(lái)管理。
不同的schema之間它們沒(méi)有直接的關(guān)系,不同的shcema之間的表可以同名,
也可以互相引用(但必須有權(quán)限),在沒(méi)有操作別的schema的操作根權(quán)下,
每個(gè)用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,
可以存入不同的數(shù)據(jù)(即schema用戶自己的數(shù)據(jù))。 Oracle里schema幾乎和user/用戶是通用的。schema是指一組數(shù)據(jù)庫(kù)object
(比如:表,視圖,包,序列,等等),而這些object是屬于用戶的,
屬于一個(gè)用戶的所有object就叫schema。 如果你使用Oracle的企業(yè)管理器Enterprise Manager,你會(huì)發(fā)現(xiàn)里面的用戶就叫schema。 Schema 中文意思是 方案. "方案"只是 Oracle 一個(gè)分類,不同用戶有不同的方案. 拿 DBA Studio 來(lái)說(shuō)吧,在左邊分了四大類:(例程,存儲(chǔ),安全,方案) 例程: 是管理庫(kù)的啟動(dòng)...之類的.存儲(chǔ): 管理表空間,數(shù)據(jù)文件之類. 安全: 就是管理用戶(密碼,表空間分配...) 方案: 有(表,視圖,存儲(chǔ)過(guò)程...),不同用戶有不同的案. 如: 在"方案"->選你的"用戶名"之后,才會(huì)出現(xiàn)用戶名相關(guān)的表. ----------------------------兩個(gè)不容易理解的概念──user和schema user是控制權(quán)限的,而schema則是一個(gè)容器,非所有者如果需要訪問(wèn)這個(gè)容器下的對(duì)象
就需要在對(duì)象前面寫上schema(owner)的名字,如果不想寫而又沒(méi)有創(chuàng)建synonym,此時(shí)可以通過(guò)alter session set current_schema=schema_name來(lái)改變當(dāng)前session的schema從而在訪問(wèn)對(duì)象時(shí)省去schema(owner);最終能否訪問(wèn)對(duì)象還是要看是否有訪問(wèn)這個(gè)對(duì)象的權(quán)限而和schema無(wú)關(guān)。 深入理解user和schema的區(qū)別: user即Oracle中的用戶,和所有系統(tǒng)的中用戶概念類似,用戶所持有的是系統(tǒng)的權(quán)限及資源; 而schema所涵蓋的是各種對(duì)象,它包含了表、函數(shù)、包等等對(duì)象的“所在地”,并不包括對(duì)他們的權(quán)限控制。 好比一個(gè)房子,里面放滿了家具,對(duì)這些家具有支配權(quán)的是房子的主人(user),而不是房子(schema)。 你可以也是一個(gè)房子的主人(user),擁有自己的房子(schema)??梢酝ㄟ^(guò)alter session的方式
進(jìn)入別人的房子。這個(gè)時(shí)候,你可以看到別人房子里的家具(desc)。 如果你沒(méi)有特別指定的話,你所做的操作都是針對(duì)你當(dāng)前所在房子中的東西。 至于你是否有權(quán)限使用(select)、搬動(dòng)(update)或者拿走(delete)這些家具就看這個(gè)房子的
主人有沒(méi)有給你這樣的權(quán)限了,或者你是整個(gè)大廈(DB)的老大(DBA)。
alter session set schema可以用來(lái)代替synonyms。 如果你想調(diào)用其他schema的對(duì)象(有權(quán)限的前提下),但并沒(méi)有建synonym,
同時(shí)又不想把其他schema名字放入代碼中,就可以首先使用alter session set schema=<其他schema名字>。
更多信息請(qǐng)查看IT技術(shù)專欄