資料庫鏈與同義詞
建立包含資料庫鏈的同義詞時需要額外的注意,否則很可能會出現問題。
如果同義詞指向當前使用者的物件,那麼不會存在任何問題:
SQL> CONN YANGTK/YANGTK@YTK已連線。
SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING 'TEST2';
資料庫連結已建立。
SQL> SELECT COUNT(*) FROM TEST@TEST2;
COUNT(*)
----------
5
SQL> CREATE SYNONYM TEST FOR TEST@TEST2;
同義詞已建立。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)
----------
5
如果是其他使用者建立同義詞指向TEST@TEST2,則會出現問題:
SQL> CREATE USER ABC IDENTIFIED BY ABC;
使用者已建立。
SQL> GRANT DBA TO ABC;
授權成功。
SQL> CONN ABC/ABC@YTK已連線。
SQL> CREATE SYNONYM TEST FOR YANGTK.TEST;
同義詞已建立。
SQL> SELECT COUNT(*) FROM TEST;
SELECT COUNT(*) FROM TEST
*第 1 行出現錯誤:
ORA-02019: 未找到遠端資料庫的連線說明
導致這個問題的最根本原因是資料庫鏈,由於資料庫鏈格式的特殊性,決定了其無法通過SCHEMA.DBLINK_NAME的方式訪問。所以,使用者只能訪問當前使用者下的資料庫鏈或PUBLIC資料庫鏈。
而對於同義詞而言,只是一個別名而已,實際執行的時候,仍然會替換成原本的名稱,所以實際上執行的是:SELECT COUNT(*)FROM TEST@TEST2。
而當前使用者並不包含資料庫鏈,所以出現了上面的錯誤。
這個時候需要在當前使用者下建立同樣的資料庫鏈:
SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING 'TEST2';
資料庫連結已建立。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)
----------
5
如果同義詞指向的是全域性資料庫鏈則不會出現這個問題。
還有一點需要注意,如果當前使用者已經存在一個同名的指向其他資料庫的資料庫鏈,或者使用者人為的建立了一個這樣的資料庫鏈,就會造成錯誤的結果。
SQL> CREATE DATABASE LINK TEST2 CONNECT TO TEST IDENTIFIED BY TEST USING 'TESTDATA';
資料庫連結已建立。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)
----------
1
SQL> SELECT COUNT(*) FROM YANGTK.TEST;
COUNT(*)
----------
1
SQL> CONN YANGTK/YANGTK@YTK已連線。
SQL> SELECT COUNT(*) FROM TEST;
COUNT(*)
----------
5
表面上兩個使用者訪問的是同一個物件,但是兩個使用者時間上訪問的是不同的資料庫,這裡一定要小心。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-69184/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle資料鏈+同義詞+訪問遠端資料庫Oracle資料庫
- Oracle——04同義詞與資料庫連結Oracle資料庫
- Oracle資料庫開發——同義詞Oracle資料庫
- 【Oracle】-【同義詞】-public與非public同義詞Oracle
- 授權與同義詞
- 物件、同義詞和公有同義詞順序選取物件
- oracle學習筆記(十四) 資料庫物件 索引 檢視 序列 同義詞Oracle筆記資料庫物件索引
- 資料庫物件、表空間、表、檢視、索引、同義詞序列等的字典資料庫物件索引
- 在一個資料庫中模擬兩個資料庫(每個資料庫中使用者都建立表的同義詞)資料庫
- ORACLE公有/私有同義詞Oracle
- 詳解同義詞(synonym)
- 實驗:用檢視加同義詞實現資料安全
- 批量的遷移一個資料庫上某使用者所有表的同義詞資料庫
- 中考常見同義詞和同義短語總結
- 匯出oracle公有同義詞Oracle
- Oracle中的同義詞SYNONYMOracle
- Oracle同義詞建立方法Oracle
- 多層巢狀同義詞巢狀
- Oracle同義詞 kingsql作品OracleSQL
- 官檔同義詞學習
- 匯出Oracle中的同義詞Oracle
- SYS查詢不到的同義詞
- Oracle同義詞建立方法(轉)Oracle
- 大資料---單詞釋義大資料
- Oracle出現ORA-01775: 同義詞的迴圈鏈問題Oracle
- 6.5. 常用物件——6.5.4. 同義詞物件
- 臨時表在Oracle資料庫與SQL Server資料庫中的異同Oracle資料庫SQLServer
- 同義詞相似度可以怎樣計算
- 同義詞The schema object cannot be contained in a package.ObjectAIPackage
- 學習筆記 過程、同義詞、序列筆記
- SQLServer訪問Oracle(通過同義詞-檢視-資料字典)出現的問題SQLServerOracle
- 同時使用資料庫鏈和序列時應注意的幾點資料庫
- 資料供應鏈驅動企業與消費者協同
- 語義分析發現:靈玖大資料檢索與分詞大資料分詞
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- 【學習】SQL基礎-017-同義詞SQL
- Oracle之處理synonym同義詞無效物件Oracle物件
- 同時使用資料庫鏈和序列時應注意的幾點(轉)資料庫