Oracle synonyms總結
synonyms(同義詞)就是給資料庫物件取一個別名,因為同義詞只是一個別名,因此它只需在資料字典中儲存自身的定義,而無需額外的儲存空間。在使用同義詞時,Oracle資料庫將它翻譯成對應方案物件的名字。
同義詞分為兩種:公共同義詞與私有同義詞。公共同義詞由特殊的使用者組 PUBLIC 所擁有,一般由DBA、SYSTEM、SYS建立,資料庫中的每個使用者都能夠訪問。而私有同義詞屬於某個使用者,此使用者可以通過授權來控制哪些使用者可以使用屬於她的私有同義詞。建立同義詞語法:CREATE [PUBLIC] SYNONYM 同義詞名稱 FOR 使用者.物件。
同義詞主要是出於方便和安全性上的考慮,主要作用如下:
下面舉例來說明:
--連線sys使用者
SQL> connect sys/gyb860518 as sysdba;
已連線。
--查詢所有的同義詞
SQL> select synonym_name, table_owner, table_name from user_synonyms;
SYNONYM_NAME TABLE_OWNER TABLE_NAME
------------------------------ ------------------------------ ------------------
DEF$_AQCALL SYSTEM DEF$_AQCALL
DEF$_CALLDEST SYSTEM DEF$_CALLDEST
DEF$_SCHEDULE SYSTEM DEF$_SCHEDULE
DEF$_ERROR SYSTEM DEF$_ERROR
DEF$_DEFAULTDEST SYSTEM DEF$_DEFAULTDEST
DEF$_LOB SYSTEM DEF$_LOB
XMLDOM XDB DBMS_XMLDOM
XMLPARSER XDB DBMS_XMLPARSER
XSLPROCESSOR XDB DBMS_XSLPROCESSOR
已選擇9行。
--建立scott使用者的test表的私有同義詞(預設為私有)
SQL> create synonym test_syn for scott.test;
同義詞已建立。
--使用者可以通過簡單的語句來查詢test表
SQL> select * from test_syn;
ID NAME
---------- --------------------
0437 gyb
002 gao
003 aaa
004 gyb
005 gyb
--連線scott使用者
SQL> connect scott/gyb860518;
已連線。
--執行查詢私有同義詞報錯
SQL> select * from test_syn;
select * from test_syn
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
--在sys使用者下授權給scott
SQL> grant select on test_syn to scott;
授權成功。
-在查詢私有同義詞成功
SQL> select * from sys.test_syn;
ID NAME
---------- --------------------
0437 gyb
002 gao
003 aaa
004 gyb
005 gyb
--在sys使用者下建立共有同義詞(這裡與上面的私有同義詞設為同名,後面用到)
SQL> create public synonym test_syn for scott.test2;
同義詞已建立。
--查詢同名的同義詞,以私有同義詞優先(類似於區域性變數)
SQL> select * from test_syn;
ID NAME
---------- --------------------
0437 gyb
002 gao
003 aaa
004 gyb
005 gyb
--重新建立一個共有同義詞
SQL> create public synonym test2_syn for scott.test2;
同義詞已建立。
--在scott使用者下查詢共有同義詞成功,隱藏了test2表的名稱以及它所屬的schema名
SQL> select * from test2_syn;
ID AGE
---------- ----------
001 23
--通過同義詞來更新表的資料
SQL> update test2_syn set age=24 where id='001';
已更新 1 行。
SQL> select * from test2_syn;
ID AGE
---------- ----------
001 24
--刪除同義詞
SQL> drop synonym test_syn;
同義詞已刪除。
對於同義詞我個人覺得它是不可修改的,因為它的定義是儲存在資料字典中的,而資料字典是一組只讀表的組合,不可更新。試一下看看:
--在sys使用者下查詢所有的同義詞
SQL> select synonym_name, table_owner from user_synonyms;
SYNONYM_NAME TABLE_OWNER
------------------------------ ----------------------------
DEF$_AQCALL SYSTEM
DEF$_CALLDEST SYSTEM
DEF$_SCHEDULE SYSTEM
DEF$_ERROR SYSTEM
DEF$_DEFAULTDEST SYSTEM
DEF$_LOB SYSTEM
XMLDOM XDB
XMLPARSER XDB
XSLPROCESSOR XDB
TEST_SYN SCOTT
已選擇10行。
--更新scott擁有者的同義詞名
SQL> update user_synonyms set synonym_name ='haha' where table_owner='SCOTT';
已更新0行。
SQL> select synonym_name, table_owner from user_synonyms;
SYNONYM_NAME TABLE_OWNER
------------------------------ ------------------------------
DEF$_AQCALL SYSTEM
DEF$_CALLDEST SYSTEM
DEF$_SCHEDULE SYSTEM
DEF$_ERROR SYSTEM
DEF$_DEFAULTDEST SYSTEM
DEF$_LOB SYSTEM
XMLDOM XDB
XMLPARSER XDB
XSLPROCESSOR XDB
TEST_SYN SCOTT //這裡並沒有被更新
已選擇10行。
以上我的理解可能存在一定的問題,希望大家即時指正,一起討論!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28673746/viewspace-1147203/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Check the existence of public synonyms Remove the public synonymsREM
- Oracle特性總結Oracle
- Oracle學習總結Oracle
- Oracle之Hint使用總結Oracle
- ORACLE臨時表總結Oracle
- oracle基本命令總結Oracle
- [重慶思莊每日技術分享]-Oracle expdp ORA-01775: looping chain of synonymsOracleOOPAI
- 原創:oracle 事務總結Oracle
- Oracle LOAD_BALANCE&TAF總結Oracle
- Oracle Partition 分割槽詳細總結Oracle
- Oracle細節及難點總結Oracle
- Oracle SQL隱碼攻擊 總結OracleSQL
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)Oracle
- Oracle:Redhat 7 + Oracle RAC 11g 安裝 bug 總結OracleRedhat
- 例項總結Oracle知識點大全Oracle
- oracle外來鍵約束的總結Oracle
- oracle的interval時間格式的總結Oracle
- Oracle臨時表的用法總結FLOracle
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)2Oracle
- 疾控中心20181122 IBM小型機Oracle故障總結IBMOracle
- 原創 oracle 資料完整性總結Oracle
- Oracle:ORA-27090 問題解決總結Oracle
- [20190102]ORA-01775 looping chain of synonyms.txtOOPAI
- ORACLE會話連線程式三者總結Oracle會話線程
- Oracle 錯誤總結及問題解決 ORAOracle
- MySQL/Oracle資料庫最佳化總結(非常全面)MySqlOracle資料庫
- Oracle 18c&19c physical dg切換總結Oracle
- Oracle:優化方法總結(關於連表查詢)Oracle優化
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- Oracle行轉列、列轉行的Sql語句總結OracleSQL
- Oracle 11g RAC之HAIP相關問題總結OracleAI
- 2020.09 問題總結(Oracle-->MySQL、Maven、JSP-->Thymeleaf、Druid)OracleMySqlMavenJSUI
- javaSE總結(轉+總結)Java
- oracle事務transaction鎖lock一點兒小思考或總結Oracle
- 【經典】連線oracle的總結(關於tnsname和監聽)Oracle
- Oracle11g RAC啟動關閉情況大概總結Oracle
- Oracle資料庫實訓後的大三上總結Oracle資料庫
- Oracle 常用方法彙總Oracle
- Oracle 架構彙總Oracle架構