標籤:
Oracle資料庫中提供了同義字管理的功能。Oracle同義字是資料庫方案對象的一個別名,經常用於簡化對象訪問和提高對象訪問的安全性。
在Oracle中對使用者的管理是使用許可權的方式來管理的,也就是說,如果我們想使用資料庫,我們就必須得有許可權,但是如果是別人將許可權授予了我們,
我們也是能對資料庫進行操作的,但是我們必須要已授權的表的名稱前鍵入該表所有者的名稱,所以這就是比較麻煩的,遇到這種情況,我們該怎麼辦呢?
建立個Oracle同義字吧!這樣我們就可以直接使用同義字來使用表了。
1.同義字的概念
Oracle資料庫中提供了同義字管理的功能。同義字是資料庫方案對象的一個別名,經常用於簡化對象訪問和提高對象訪問的安全性。在使用同義字時,Oracle資料庫將它翻譯成對應方案對象的名字。與視圖類似,同義字並不佔用實際儲存空間,只有在資料字典中儲存了同義字的定義。在Oracle資料庫中的大部分資料庫物件,如表、視圖、同義字、序列、預存程序、包等等,資料庫管理員都可以根據實際情況為他們定義同義字。
2.Oracle同義字的分類
Oracle同義字有兩種類型,分別是公用Oracle同義字與私人Oracle同義字。
1)公用Oracle同義字:由一個特殊的使用者組Public所擁有。顧名思義,資料庫中所有的使用者都可以使用公用同義字。公用同義字往往用來標示一些比較普通的資料庫物件,這些對象往往大家都需要引用。
2)私人Oracle同義字:它是跟公用同義字所對應,他是由建立他的使用者所有。當然,這個同義字的建立者,可以通過授權控制其他使用者是否有權使用屬於自己的私人同義字。
3.Oracle同義字建立及刪除
建立公有Oracle同義字的文法:Create [public] synonym 同義字名稱 for [username.]objectName;
Drop [public] synonym 同義字名稱
4.Oracle同義字的作用
1) 多使用者協同開發中,可以屏蔽對象的名字及其持有人。如果沒有同義字,當操作其他使用者的表時,必須通過user名.object名的形式,採用了Oracle同義字之後就可以隱蔽掉user名,當然這裡要注意的是:public同義字只是為資料庫物件定義了一個公用的別名,其他使用者能否通過這個別名訪問這個資料庫物件,還要看是否已經為這個使用者授權。
2) 為使用者簡化sql語句。上面的一條其實就是一種簡化sql的體現,同時如果自己建的表的名字很長,可以為這個表建立一個Oracle同義字來簡化sql開發。
3)為分散式資料庫的遠程對象提供位置透明性。
5.Oracle同義字在資料庫鏈中的作用
資料庫鏈是一個命名的對象,說明一個資料庫到另一個資料庫的路徑,通過其可以實現不同資料庫之間的通訊。
Create database link 資料庫鏈名 connect to user名 identified by 口令 using ‘Oracle串連串’; 訪問對象要通過 object名@資料庫鏈名。同義字在資料庫鏈中的作用就是提供位置透明性。
5.同義字普通用法如下所示:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同義字名稱 FOR [ schema.] object [ @dblink ];
--1》專有(私人)同義字
CREATE SYNONYM SYSN_TEST FOR TEST; (授予帳號建立同義字的許可權:GRANT CREATE ANY SYNONYM TO DM;)
--2》公用同義字
CREATE PUBLIC SYNONYM PUBLIC_TEST FOR TEST;(授予帳號建立同義字的許可權:GRANT CREATE PUBLIC SYNONYM TO DM;)
--3》此外如果要建立一個遠端資料庫上的某張表的同義字,需要先建立一個Database Link(資料庫連接)來擴充訪問,
然後在使用如下語句建立資料庫同義字:create synonym table_name for [email protected]_Link;
6.使用同義字:
SELECT * FROM SYSN_TEST;
使用同義字可以保證當資料庫的位置或對象名稱發生改變時,應用程式的代碼保持穩定不變,僅需要改變同義字;
當使用一個沒有指定schema的同義字是,首先在使用者自己的schema中尋找,然後再公用同義字中尋找
7.刪除同義字
DROP [ PUBLIC ] SYNONYM [ schema. ] 同義字名稱 [ FORCE ];
DROP SYNONYM SYSN_TEST;
DROP PUBLIC SYNONYM PUBLIC_TEST;--當同義字的原對象被刪除是,同義字並不會被刪除
8.編譯同義字
ALTER SYNONYM T COMPILE; --當同義字的原對象被重建立立時,同義字需要重新編譯
oracle學習篇七:同義字