如何建立synonyms同義詞
1.什麼是同義詞
oracle的同義詞從字面上理解是別名的意思,和試圖的功能類似,就是一種對映關係。它可以節省大量的資料庫空間,對不同使用者操作同一張表沒有多少差別。他擴充套件了資料庫的使用範圍,能在不同的資料庫使用者之間實現無縫互動。經常用於簡化物件訪問和提高物件訪問安全性。在使用同義詞時,oracle資料庫將他翻譯成對應方案物件的名字。與試圖物件類似,同義詞不佔用實際儲存空間,只有在資料字典中儲存了同義詞的定義。在oracle資料庫中的大部分資料庫物件,如表,試圖,物化檢視,序列,函式,儲存過程,包同義詞等,資料庫管理員都可以根據實際情況為他們定義同義詞。
2.同義詞種類
oracle有兩種型別同義詞,分別是oracle公用同義詞與私有同義詞,普通使用者建立的同義詞一般是私有同義詞,公用同義詞一般有DBA建立,普通使用者如果希望建立同義詞,則需要create public synonym這個系統許可權。
1)oracle公用同義詞:由一個特殊的使用者組public所擁有。顧名思義,資料庫所有的使用者都可以使用公用同義詞。公用同義詞旺旺來標示一些比較普通的資料庫物件,這些物件往往大家都需要引用。
2)oracle私有同義詞:它是跟公用同義詞所對應,他是由建立他的使用者所有,當然,這個同義詞的建立者可以通過授權控制其他使用者是否有權使用自己的私有同義詞。
3.同義詞作用
1) 多使用者協同開發中,可以遮蔽物件的名字及其持有者。如果沒有同義詞,當操作其他使用者的表時,必須通過user名.object名的形式,採用了Oracle同義詞之後就可以隱蔽掉user名,當然這裡要注意的是:public同義詞只是為資料庫物件定義了一個公共的別名,其他使用者能否通過這個別名訪問這個資料庫物件,還要看是否已經為這個使用者授權。
2) 為使用者簡化sql語句。上面的一條其實就是一種簡化sql的體現,同時如果自己建的表的名字很長,可以為這個表建立一個Oracle同義詞來簡化sql開發。
3)為分散式資料庫的遠端物件提供位置透明性。
4)Oracle同義詞在資料庫連結中的作用
資料庫連結是一個命名的物件,說明一個數據庫到另一個數據庫的路徑,通過其可以實現不同資料庫之間的通訊。
Create database link 資料庫鏈名 connect to user名 identified by 口令 using ‘Oracle連線串’; 訪問物件要通過 object名@資料庫鏈名。同義詞在資料庫鏈中的作用就是提供位置透明性
同義詞許可權管理
與同義詞相關的許可權有CREATE SYNONYM、CREATE ANY SYNONYM、CREATE PUBLIC SYNONYM許可權。
1:使用者在自己的模式下建立私有同義詞,這個使用者必須擁有CREATE SYNONYM許可權,否則不能建立私有同義詞。
如下所示,使用者DM缺少CREATE SYNONYM許可權,建立同義詞時會報ORA-01031錯誤
SQL> CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON; CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON ORA-01031: insufficient privileges
用sys賬號給DM賬號賦予CREATE SYNONYM的許可權
SQL> GRANT CREATE SYNONYM TO DM; Grant succeeded.
然後建立私有同義詞
SQL> CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON; Synonym created
2:如果需要在其它模式下建立同義詞,則必須具有CREATE ANY SYNONYM的許可權。
看下面的例子
使用者DM想建立SCOTT模式下的私有同義詞
SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP; CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP ORA-01031: insufficient privileges
用sys賬號給DM賬號賦予CREATE ANY SYNONYM的許可權
SQL> GRANT CREATE ANY SYNONYM TO DM; Grant succeeded. SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP; Synonym created
3:建立公有同義詞則需要CREATE PUBLIC SYNONYM系統許可權。
建立同義詞
建立同義詞的語法如下:
普通用法如下所示:
CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同義詞名稱 FOR [ schema.] object [ @dblink ];
--專有(私有)同義詞
CREATE SYNONYM SYSN_TEST FOR TEST;
--公共同義詞
CREATE PUBLIC SYNONYM PUBLIC_TEST FOR TEST;
如果要建立一個遠端的資料庫上的某張表的同義詞,需要先建立一個Database Link(資料庫連線)來擴充套件訪問,然後再使用如下語句建立資料庫同義詞:create synonym table_name for [email protected]_Link;
公共同義詞是和使用者的schema無關的,但是公共的意思並不是所有的使用者都可以訪問它,必須被授權後才能進行;私有同義詞是schema的物件
檢視同義詞
SQL> SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_NAME IN ( 'SYSN_TEST','PUBLIC_TEST'); OWNER SYNONYM_NAME TABLE_OWNER TABLE_NAME DB_LINK ------------------------------ ------------------------------ PUBLIC PUBLIC_TEST ETL TEST ETL SYSN_TEST ETL TEST SQL> SELECT * FROM USER_SYNONYMS
使用同義詞
SELECT * FROM SYSN_TEST;
使用同義詞可以保證當資料庫的位置或物件名稱發生改變時,應用程式的程式碼保持穩定不變,僅需要改變同義詞;
當使用一個沒有指定schema的同義詞是,首先在使用者自己的schema中尋找,然後再公共同義詞中尋找
刪除同義詞
DROP [ PUBLIC ] SYNONYM [ schema. ] 同義詞名稱 [ FORCE ];
DROP SYNONYM SYSN_TEST;
DROP PUBLIC SYNONYM PUBLIC_TEST;--當同義詞的原物件被刪除是,同義詞並不會被刪除
編譯同義詞
ALTER SYNONYM T COMPILE; --當同義詞的原物件被重新建立時,同義詞需要重新編譯
對原物件進行DDL操作後,同義詞的狀態會變成INVALID;當再次引用這個同義詞時,同義詞會自動編譯,狀態會變成VALID,無需人工干預,當然前提是不改變原物件的名稱
SQL> SELECT * FROM T; ID NAME ----------- ------------- SQL> SELECT * FROM TEST; ID NAME ----------- -------------- SQL> ALTER TABLE TEST ADD SEX NUMBER(1); Table altered SQL> SELECT OBJECT_NAME, STATUS FROM ALL_OBJECTS WHERE OBJECT_NAME='T'; OBJECT_NAME STATUS ------------------------------ ------- T INVALID
問題錦集
1:公用同義詞與私有同義詞能否同名呢?如果可以,訪問同義詞時,是共有同義詞還是私有同義詞優先?
可以,如果存在公用同義詞和私有同義詞同名的情況,在訪問同義詞是,訪問的是私有同義詞的指向的物件。
2:為啥OE使用者建立的公用同義詞,HR使用者不能訪問呢?
因為HR沒有訪問OE模式下物件的許可權,如果OE模式給HR使用者賦予了SELECT物件等許可權,那麼HR使用者即可訪問。
3:物件、私有同義詞、公共同義詞是否可以存在三者同名的情況?
在使用者kerry下,建立表TEST
SQL>CREATE TABLE TEST
AS SELECT * FROM USER_OBJECTS WHERE 1= 0;
建立私有同義詞TEST
SQL> CREATE SYNONYM TEST FOR REF.REF_WGG_STUDENT; CREATE SYNONYM TEST FOR REF.REF_WGG_STUDENT ORA-00955: name is already used by an existing object
注意:物件(表)與私有同義詞不能同名,否則會報ORA-00955錯誤
建立公共同義詞TEST,如下所示,公共同義詞可以物件同名
SQL> CREATE PUBLIC SYNONYM TEST FOR REF.REF_WGG_STUDENT; Synonym created
訪問TEST時,如下所示:它是表TEST的內容,而不是公共同義詞的內容
SQL> SELECT * FROM TEST; OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS TEMPORARY GENERATED SECONDARY ----------- ---------------- ---------- -------------- ------------ --------- ------------- ----------- ------- --------- --------- ---------
刪除表TEST後,此時資料庫訪問的是公共同義詞
SQL> DROP TABLE TEST PURGE; Table dropped SQL> SELECT * FROM TEST; ID NAME ----------- -------------------------------- 1 12 SQL>
結論:存在同名物件和公共同義詞時,資料庫優先選擇物件作為目標,存在同名私有物件和公共物件時,資料庫優先選擇私有同義詞作為目標
參考:http://www.cnblogs.com/kerrycode/archive/2012/12/19/2824963.html相關推薦
如何建立synonyms同義詞
1.什麼是同義詞 oracle的同義詞從字面上理解是別名的意思,和試圖的功能類似,就是一種對映關係。它可以節省大量的資料庫空間,對不同使用者操作同一張表沒有多少差別。他擴充套件了資料庫的使用範圍,能在不同的資料庫使用者之間實現無縫互動。經常用於簡化物件訪問和提高物件訪問安全
oracle中序列,同義詞的建立
序列 序列是用來生成唯一,連續的整數的資料庫物件.序列通常用來自動生成主機那或唯一鍵的值.序列可以按升序排序, 也可以按降序排序.例如,銷售流水錶中的流水號可以使用序列自動生成. 建立序列語法: create sequence sequence_name [START WITH i
oracle資料庫建立同義詞
好久沒整理知識點了,抽空將零碎的知識點做個整合吧。 所謂同義詞就是在管理員授予你可以對另一個數據庫操作的許可權的時候,你可以對另一個數據庫的資料進行資源共享,而不必將另一個數據庫中的資料copy到自己的資料庫中,這樣會造成資源浪費。 1.首先確定本使用者是否具有
Oracle建立同義詞及dblink
一、定義 同義詞顧名思義,是資料庫方案物件的一個別名。這裡的資料庫方案物件指表、檢視、序列、儲存過程、包等。 Oracle物件知識:同義詞(Synonym)建立刪除,同義詞(Synonym)是資料庫物件的一個別名,Oracle可以為表、檢視、序列、過程、函式、程式包等指定一個別名。同義詞有兩種型別:
ORACLE使用者間 授權以及建立同義詞
假設使用者有兩個: website 較高許可權 websiteapp 沒有創表的許可權 表: 在website使用者下: grant select, insert, update, delete on table_test to websiteapp; 在websiteap
建立表空間、建立表(子查詢建立表)、表的約束、事務、資料庫物件(檢視、序列、索引、同義詞)、PLSQL程式設計、(if,迴圈)、資料的匯入匯出備份
DDL語句管理表 DML管理表資料 1)語法: 建立 和 刪除 表空間 / 建立使用者 create tablespace 表空間的名稱 datafile '檔案路徑' //這個檔案是儲存在伺服器端的電腦上的
如何建立只讀許可權oracle賬戶-同義詞
另見:http://blog.csdn.net/chzhqgood/article/details/52700302 http://blog.csdn.net/louwzh/article/details/40785183 1.建立角色 CREATE ROLE SEL
電商搜尋同義詞庫(synonyms)
目前整理了一些搜尋電商商品的同義詞, 以提供搜尋。 #支援規則 # a=>b # a,b=>c # a=>b,c # 英文中文 # 學名與俗名 # 全稱-簡稱 # 新稱和舊稱 # 同音同義詞 # 傳統同義詞 雨傘=>傘,雨傘
Oracle同義詞建立及其作用
GRANT SELECT ON ADT.BO_EMPLOYEE TO ITAWEB; GRANT INSERT ON ADT.BO_EMPLOYEE TO ITAWEB; GRANT UPDATE ON ADT.BO_EMPLOYEE TO ITAWEB; GRANT DE
windows 建立任務執行計劃 自動執行腳本
windows服務 images 需要 phpstudy 控制 服務器 window 一個 模式 對於windows服務器網站如果要定時執行腳本,則需要在windows控制面板裏找到 管理工具,點擊任務計劃程序,創建任務填寫任務名稱 觸發器裏新建觸發條件,設置間隔時間 在
使用scratchbox2建立交叉編譯環境
ips debian amp net 。。 dir tails details art 使用scratchbox2建立交叉編譯環境,使交叉編譯不再煩人。。。。。os:ubuntu 12.04.4 x641. 安裝相關工具sudo apt-get install deboot
OSPF路由網絡建立過程
路由器 數據庫 優先級 網絡 通告 發現鄰居--選舉DR/BDR--形成鏈路狀態數據庫--SPF算法--形成路由網絡在 發現鄰居--選舉DR/BDR 階段路由器之間互相發送Hello報文,根據Hello包,每臺路由器生成了基本的Datebase;然後根據優先級和RID在每一個網段選出一個D
四:建立高級web測試計劃
cookie 手動 建立 fine support 技術分享 瀏覽器 fix agent 發送帶有Header的請求 參考:http://jmeter.apache.org/usermanual/build-adv-web-test-plan.html#header_m
Qt入門之基礎篇 ( 二 ) :Qt項目建立、編譯、運行和發布過程解析
qt 5 對話 讓我 進度 qmake ctr deploy 設定 設置 轉載請註明出處:CN_Simo。 題解: 本篇內容主講Qt應用從創建到發布的整個過程,旨在幫助讀者能夠快速走進Qt的世界。 本來計劃是講解Qt源碼靜態編譯,如此的話讀者可能並不能清楚地知
Solr6.5與mysql集成建立索引
file 數據庫數據 -c req cal str syn web-inf 想是 首先在solrconfig.xml(我的是保存在/usr/local/tomcat/solrhome/mycore/conf/下)的<requestHandler name="/sele
數據庫、數據表建立索引的原則
order by 復合 數據表 修改 sql 在那 字段 以及 設計 數據庫建立索引的原則 1,確定針對該表的操作是大量的查詢操作還是大量的增刪改操作。 2,嘗試建立索引來幫助特定的查詢。檢查自己的sql語句,為那些頻繁在where子句中出現的字段建立索引。 3,嘗試建立復
非遞歸建立二叉樹
輸入 寫文章 由於 typedef 順序存儲結構 [1] 使用 current 非遞歸 前言 使用遞歸(Recursion)建立二叉樹(Binary Tree)的非順序存儲結構(即二叉鏈表),可以簡化算法編寫的復雜程度,但是遞歸效率低,而且容易導致堆棧溢出,因而很有必要
題目1009:二叉搜索樹(二叉搜索樹的建立)
nor style https 題目 .com tree ont cnblogs char 題目鏈接:http://ac.jobdu.com/problem.php?pid=1009 詳解鏈接:https://github.com/zpfbuaa/JobduInCPlus
使用Eclipse建立web工程
做的 -1 new 窗口 finally spf log png cnblogs 使用Eclipse建立web工程(用jsp文件做例子) 第一步:創建java web工程,打開Eclipse,點擊 File==》new==》Dynamic web Porject 第二步:在
vxworks開發中simulator的使用之建立虛擬網卡
vxworks 說明 卸載 tor 默認 strong ive evel 幫助 在使用windriver workben ch開發vxWorks應用時,有時需要在本機上利用Simulator跑一下程序,這就需要你安裝一個虛擬的網卡。vxWorks自帶了這些工具,下面,以wi