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'; 

 


免責聲明!

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



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