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
- Overview of Synonyms (193)View
- Oracle特性總結Oracle
- Oracle session總結OracleSession
- oracle sqlldr 總結OracleSQL
- oracle體系結構總結Oracle
- Oracle學習總結Oracle
- Oracle rman 命令總結Oracle
- Oracle 調優總結Oracle
- Oracle SET 命令總結Oracle
- oracle hints用法總結Oracle
- ORACLE鎖的總結Oracle
- Oracle調優總結Oracle
- Oracle 函式總結Oracle函式
- Oracle Tuning總結Oracle
- ORACLE 繫結變數用法總結Oracle變數
- oracle基本命令總結Oracle
- Oracle之Hint使用總結Oracle
- ORACLE臨時表總結Oracle
- Oracle常用函式總結Oracle函式
- Oracle 行列轉換總結Oracle
- oracle自測總結1Oracle
- Oracle物理體系總結Oracle
- Oracle SQL優化總結OracleSQL優化
- Oracle行列互換總結Oracle
- oracle 轉義字元 總結Oracle字元
- ORACLE EXPLAIN PLAN的總結OracleAI
- Oracle RAC 安裝總結Oracle
- ORACLE壞塊總結(轉)Oracle
- ORACLE壞塊總結2Oracle
- oracle 分割槽表總結Oracle
- Oracle 9.2.0.4 DataGuard 總結(轉)Oracle
- Oracle 分割槽表 總結Oracle
- Oracle行列轉換總結Oracle
- oracle RAC術語總結Oracle
- Oracle事務控制總結Oracle
- Oracle基本檢視總結Oracle