在產品detail拆分項目中,由於需要將原來的Product表拆分為Product、Product_detail兩個表,數據庫采取的方法是新建了一個Schema——alibaba1949。對schema不了解,現在也對其進行了一點學習。
Oracle數據庫中Schema和User的關系是一一對應的,也就是說一個Schema只對應一個User,一個User對應一個Schema。Oracle中,schema是與擁有此schema的user同名的。Schema可以翻譯成“方案”。
不同的schema之間它們沒有直接的關系,不同的schema之間的表可以同名,也可以互相引用(但必須有權限),在沒有別的schema的操作權限下,每個用戶只能操作它自己的schema下的所有的表。不同的schema下的同名的表,可以存入不同的數據(即schema用戶自己的數據)。
user即Oracle中的用戶,和所有系統的中用戶概念類似,用戶所持有的是系統的權限及資源;而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.改變當前session的schema:
ALTER SESSION SET CURRENT_SCHEMA = alibaba1949
之后就可以直接使用alibaba1949這個schema中的表,不用寫成alibaba1949.table_name
2.查詢另一個schema或另一個user(alibaba)下的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則是一個容器,非所有者如果需要訪問這個容器下的對象,就需要在對象前面寫上schema(owner)的名字,如果不想寫而又沒有創建synonym,此時可以通過alter session set current_schema=schema_name來改變當前session的schema從而在訪問對象時省去schema(owner);最終能否訪問對象還是要看是否有訪問這個對象的權限而和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_B的TABLE1,只能使用USER_B.TABLE1
建一個同義詞abc指向USER_B.TABLE1,那你就可以select * from abc了,而且public的同義詞會直接出現在所有用戶的面前。
http://www.51testing.com/?uid-225738-action-viewspace-itemid-200870