Oracle中的Schema和User


Oracle中的SchemaUser

在產品detail拆分項目中,由於需要將原來的Product表拆分為ProductProduct_detail兩個表,數據庫采取的方法是新建了一個Schema——alibaba1949。對schema不了解,現在也對其進行了一點學習

Oracle數據庫中SchemaUser的關系是一一對應的,也就是說一個Schema只對應一個User,一個User對應一個SchemaOracle中,schema是與擁有此schemauser同名的。Schema可以翻譯成“方案”。

不同的schema之間它們沒有直接的關系,不同的schema之間的表可以同名,也可以互相引用(但必須有權限),在沒有別的schema的操作權限下,每個用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數據(即schema用戶自己的數據)。

userOracle中的用戶,和所有系統的中用戶概念類似,用戶所持有的是系統的權限及資源;而schema所涵蓋的是各種對象,它包含了表、視圖、函數、包等等對象的“所在地”,並不包括對他們的權限控制。

好比一個房子,里面放滿了家具,對這些家具有支配權的是房子的主人(user),而不是房子(schema)。你可以也是一個房子的主人(user),擁有自己的房子(schema)。可以通過alter session的方式進入別人的房子。這個時候,你可以看到別人房子里的家具如果你沒有特別指定的話,你所做的操作都是針對你當前所在房子中的東西。

至於你是否有權限使用(select)、搬動(update)或者拿走(delete)這些家具就看這個房子的主人有沒有給你這樣的權限了,或者你是整個大廈(DB)的老大(DBA)。alter session set schema可以用來代替synonyms。如果你想調用其他schema的對象(有權限的前提下),但並沒有建synonym,同時又不想把其他schema名字放入代碼中,就可以首先使用alter session set schema=<其他schema名字>

例子:

1.改變當前sessionschema

ALTER SESSION SET CURRENT_SCHEMA = alibaba1949

之后就可以直接使用alibaba1949這個schema中的表,不用寫成alibaba1949.table_name

 2.查詢另一個schema或另一個useralibaba)下的table

SELECT * FROM alibaba.product

 3.根據表名查詢所有者:

select owner,table_name from all_tables where table_name = Upper('product')

select owner,table_name from all_tables where table_name = Upper('product_detail')

其他參考資料:

user是控制權限的,而schema則是一個容器,非所有者如果需要訪問這個容器下的對象,就需要在對象前面寫上schemaowner)的名字,如果不想寫而又沒有創建synonym,此時可以通過alter session set current_schema=schema_name來改變當前sessionschema從而在訪問對象時省去schemaowner);最終能否訪問對象還是要看是否有訪問這個對象的權限而和schema無關。

 The schema (pronounced skee-ma) of a database system is its structure described in a formal language supported by the database management system (DBMS). In a relational database, the schema defines the tables, the fields, relationships, views, indexes, packages, procedures, functions, queues, triggers, types, sequences, materialized views, synonyms, database links, directories, Java, XML schemas, and other elements.

schema: Collection of database objects, including logical structures such as tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links. A schema has the name of the user who controls it.

Synonym(同義詞):建立一個同義詞可以排除一個對象名字的限制
如果你的數據庫有多個用戶,USER_A要訪問USER_BTABLE1,只能使用USER_B.TABLE1
建一個同義詞abc指向USER_B.TABLE1,那你就可以select * from abc,而且public的同義詞會直接出現在所有用戶的面前。

 

http://www.51testing.com/?uid-225738-action-viewspace-itemid-200870 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM