1. 程式人生 > 其它 >Oracle 同義詞詳解(synonym)

Oracle 同義詞詳解(synonym)

Oracle 同義詞詳解(synonym)

一、Oracle同義詞概念

  Oracle 資料庫中提供了同義詞管理的功能。同義詞是資料庫方案物件的一個別名,經常用於簡化物件訪問和提高物件訪問的安全性。在使用同義詞時,Oracle資料庫 將它翻譯成對應方案物件的名字。與檢視類似,同義詞並不佔用實際儲存空間,只有在資料字典中儲存了同義詞的定義。在Oracle資料庫中的大部分資料庫對 象,如表、檢視、同義詞、序列、儲存過程、包等等,資料庫管理員都可以根據實際情況為他們定義同義詞。

二、Oracle同義詞分類

  Oracle同義詞有兩種型別,分別是公用Oracle同義詞與私有Oracle同義詞。

  1)公用Oracle同義詞:由一個特殊的使用者組Public所擁有。顧名思義,資料庫中所有的使用者都可以使用公用同義詞。公用同義詞往往用來標示一些比較普通的資料庫物件,這些物件往往大家都需要引用。

  2)私有Oracle同義詞:它是跟公用同義詞所對應,他是由建立他的使用者所有。當然,這個同義詞的建立者,可以通過授權控制其他使用者是否有權使用屬於自己的私有同義詞。

三、Oracle同義詞建立及刪除

  建立公有Oracle同義詞的語法:Create [public] synonym 同義詞名稱 for [username.]objectName;

  Drop [public] synonym 同義詞名稱

四、Oracle同義詞的作用

  1) 多使用者協同開發中,可以遮蔽物件的名字及其持有者。如果沒有同義詞,當操作其他使用者的表時,必須通過user名.object名的形式,採用了 Oracle同義詞之後就可以隱蔽掉user名,當然這裡要注意的是:public同義詞只是為資料庫物件定義了一個公共的別名,其他使用者能否通過這個別 名訪問這個資料庫物件,還要看是否已經為這個使用者授權。


  2) 為使用者簡化sql語句。上面的一條其實就是一種簡化sql的體現,同時如果自己建的表的名字很長,可以為這個表建立一個Oracle同義詞來簡化sql開發。
  3)為分散式資料庫的遠端物件提供位置透明性。

五、Oracle同義詞在資料庫鏈中的作用

  資料庫鏈是一個命名的物件,說明一個數據庫到另一個數據庫的路徑,通過其可以實現不同資料庫之間的通訊。

  Create database link 資料庫鏈名 connect to user名 identified by 口令 using ‘Oracle連線串’; 訪問物件要通過 object名@資料庫鏈名。同義詞在資料庫鏈中的作用就是提供位置透明性。

六、Oracle同義詞資訊的查詢

  同義詞作為一種資料庫物件,它的相關資訊被儲存在資料字典中。與同義詞有關的資料字典有三個:user_sysnonyms、all_synonyms、dba_synonyms。

  其中在資料字典user_synonyme中記錄了當前使用者所擁有的同義詞。這個表的個列定義及其意義如下所示:

名 稱是否為空? 型別意義 SYNONYM_NAME NOT NULL VARCHAR2(30) 同義詞的名稱 TABLE_OWNER VARCHAR2(30) 所指向的物件屬主 TABLE_NAME NOT NULL VARCHAR2(30) 所指向的物件名稱 DB_LINK VARCHAR2(128) 資料庫連結

  如果要查詢當前使用者建立了哪些同義詞,它們各代表哪個使用者的哪個物件,可以執行下面的SELECT語句進行查詢:

SQL> SELECT synonym_name,table_name,table_owner FROM user_synonyms;

  在資料字典all_synonyms中記錄了當前使用者所能使用的所有同義詞,包括私有同義詞和公共同義詞。

  在資料字典dba_synonyms中記錄了資料庫中所有的同義詞,包括每個使用者建立的私有同義詞和DBA建立的公共同義詞。這個檢視只有DBA能夠訪問,它的結構除了包含資料字典user_synonyms的所有列外,還有一個列owner代表同義詞的建立者。

  如果要在整個資料庫範圍內查詢某個同義詞的資訊,可以對資料字典dba_synonyms進行查詢。例如,要查詢使用者scott所建立的所有同義詞,可以執行下面的SELECT語句:

SQL> SELECT synonym_name, table_name, table_owner FROM dba_synonyms WHERE owner='SCOTT';

  如果要查詢使用者scott的表dept具有哪些同義詞,可以執行下面的SELECT語句:

SQL> SELECT synonym_name,owner FROM dba_synonyms WHERE table_owner='SCOTT' AND table_name='DEPT';

  如果要查詢系統中所有的公共同義詞,可以執行下面的SELECT語句:

SQL> SELECT synonym_name, table_name, table_owner FROM dba_synonyms WHERE owner='PUBLIC';

做自己的太陽,成為別人的光!