1. 程式人生 > >Oracle同義詞以及同義詞迴圈鏈錯誤。

Oracle同義詞以及同義詞迴圈鏈錯誤。

同義詞:

就是別名的意思。與檢視類似,是一種對映關係。

是表、索引、檢視的物件的別名。

建立:

create public synonym table_name for user.table_name;

好處:節省資料空間,不同使用者操作同一種表無差別。能夠在不同的資料使用者之間實現無縫互動。

簡化物件訪問  和  提高物件訪問安全性。在開發中對統一資料庫,多使用者操作。如果沒有同義詞,個人使用者要操作其他表時  需要  使用者名稱.Object,來訪問。

用同義詞就不需要 加使用者了。簡化sql語句。

為分散式資料庫,的遠端物件,提供位置,透明性。

分為共用同義詞和私有同義詞。

若建立的是公有同義詞,則其定義儲存在dba_synonyms中,查詢時需要具有相關許可權。


同義詞迴圈鏈報錯:

因為存在同義詞,但同義詞沒有相應的物件(對應的表,等物件 被刪了)。

刪除資料庫物件,但是忘記刪除同義詞。

刪除一個使用者,但忘記刪除此使用者中相關的同名。

建立同名時,同名對應的資料庫物件已經被刪掉了。

網上有很多解決方法。

1.一般同義詞是和表名或者檢視名一樣的。這樣方便使用。

select * from dba_synonyms where  table_owner='TEST' and synonym_name<>table_name;

這裡table_owner是你的使用者 synonym_name是同義詞名稱 table_name 是表名。先看一下是否有不一樣的。

2.select * from dba_synonyms

where table_owner='HD40'
and
synonym_name in
(select a.synonym_name from dba_synonyms a where a.table_owner='HD40'
minus
select object_name from user_objects) 

dba_synonyms是儲存 同義詞和表名等物件的關聯表。

這條語句 查出,存在同義詞,但是table_name對應的表或者物件已經被刪了。

你會發現查詢這些同義詞都報同義詞迴圈鏈錯誤。

一般就是這個原因。

網上說的查詢結果,然後刪除,其實就是刪除這些資料。

或者你再創建出表等物件。