Oracle批量創建同義詞


一、介紹

Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和視圖的功能類似,就是一種映射關系。它可以節省大量的數據庫空間,對不同用戶的操作同一張表沒有多少差別;它擴展了數據庫的使用范圍,能夠在不同的數據庫用戶之間實現無縫交互。

很多時候,會有多個oracle賬號訪問一個賬號下的表,比如:USER_A用戶下面有很多表,相關的sql語句都是USER_A.Tablename等等等,這時候需要用USER_B用戶去訪問USER_A的表,但是sql語句還要保持USER_A.Tablename,就需要用到同義詞了

同義詞分類:
Oracle同義詞有兩種類型,分別是Oracle公用同義詞與Oracle私有同義詞。普通用戶創建的同義詞一般都是私有同義詞,公有同義詞一般由DBA創建,普通用戶如果希望創建同義詞,則需要CREATE PUBLIC SYNONYM這個系統權限。

  • Oracle公用同義詞:由一個特殊的用戶組Public所擁有。顧名思義,數據庫中所有的用戶都可以使用公用同義詞。公用同義詞往往用來標示一些比較普通的數據庫對象,這些對象往往大家都需要引用。

  • Oracle私有同義詞:它是跟公用同義詞所對應,他是由創建他的用戶所有。當然,這個同義詞的創建者,可以通過授權控制其他用戶是否有權使用屬於自己的私有同義詞。

二、創建同義詞

語法:

CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同義詞名稱 FOR [ schema.] object [ @dblink ];

專有(私有)同義詞

CREATE SYNONYM SYSN_TEST FOR TEST;

公共同義詞

CREATE PUBLIC SYNONYM PUBLIC_TEST FOR TEST;

2.1首先需要sys用戶授權USER_B創建同義詞權限

其中USER_B是需要創建同義詞的用戶

GRANT CREATE SYNONYM TO USER_B;  

這個時候還需要一個權限就是USER_B用戶select USER_A用戶table的權限,這個時候是在USER_A用戶下賦值的

grant select on tableA to user_temp;  

2.2創建同義詞

create synonym USER_B.Tablename for USER_A.Tablename;

2.3測試同義詞

使用USER_B用戶oracle,有輸出結果代表可以在USER_B用戶下以USER_B的schema查看USER_A的表

select count(*) from USER_B.Tablename;

三、批量創建同義詞

很多時候,當前環境下的表有幾百張甚至幾千張,很多人說可以select * from dba_tables where owner='UPCENTER' 把表名查出來,用notpad拼成命令,批量執行,這里是行不通的,因為每條命令的行尾都不一樣(表名不同)
這時候可以先用notpad軟件把USER_B用戶select USER_A用戶table的權限批量執行,然后再執行下面的命令,把輸出結果執行以下即可:

select 'create synonym USER_B.'||table_name||' for upcenter.'||table_name||';' from dba_tables where owner='USER_A'

四、查看同義詞和刪除同義詞

4.1查看用戶下的同義詞

SELECT * FROM DBA_SYNONYMS where OWNER = 'UPAPP';

4.2刪除同義詞

DROP SYNONYM SYSN_NAME;


免責聲明!

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



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