ORA-00980: 同義詞轉換不再有效


客戶賬號TB在操作軟件時,報錯:“[Microsoft][ODBC driver for Oracle][Oracle]ORA-00980: 同義詞轉換不再有效”。

 

使用擁有dba權限的賬號sys的登錄,進行相同的操作沒有報錯正常運行。

 

-------執行查找所有失效的同義詞,生成刪除腳本如下:

select 'drop '

 

       || decode(s.owner,

 

                 'PUBLIC',

 

                 'public synonym ',

 

                 'synonym ' || s.owner || '.')

 

       || s.synonym_name

 

       || ';' as "Dropping invalid synonyms:"

 

  from dba_synonyms s

 

 where table_owner not in ('SYSTEM', 'SYS')

 

   and db_link is null

 

   and not exists

 

 (select null

 

          from dba_objects o

 

         where s.table_owner = o.owner

 

           and s.table_name = o.object_name);

發現其中對應的存儲過程zl_人員表_INSERT的同義詞失效,處理辦法刪除重建:

SQL>Drop public synonym zl_人員表_INSERT;

SQL>Create public synonym zl_人員表_INSERT for zlhis.zl_人員表_INSERT;

 

----PS:查詢當前用戶下,沒有創建同義詞的對象有哪些?

Select *

 

  from dba_objects s

 

 where owner in ('ZLHIS') And object_type In('TABLE','PROCEDURE','FUNCTIONS')

 

   and Not exists

 

 (select null

 

          from dba_synonyms o

 

         Where o.table_owner = s.owner

 

           and o.table_name = s.object_name And o.db_link is null)

 

藉此引出了幾個思考:

1、什么是同義詞?為什么要創建同義詞?同義詞失效的影響?

2、哪些對象可以創建同義詞?

3、同義詞的操作? 

 

1同義詞定義:Oracle的同義詞(synonyms)從字面上理解就是別名的意思,和視圖的功能類似,就是一種映射關系

常用於簡化對象訪問和提高對象訪問的安全性。

同義詞並不占用實際存儲空間,只有在數據字典中保存了同義詞的定義。

 

為什么要創建?

簡單的說就是,為了直接使用特定用戶(例如:用戶ZS的表"人員表")的某個數據庫對象!!!

ZS用戶將表"人員表"的權限授予給用戶LS,在沒有創建公共同義詞的前提下,LS用戶登陸后要使用該表,需要在表名字前加"ZS.表名".

 

例如:

查詢:SQL>select * from ZS.人員表;

為表創建公共同義詞: SQL>create public synonym 人員表 for ZS.人員表;

創建表后可以直接訪問SQL>select * from 人員表

 

2、在Oracle數據庫中的大部分數據庫對象,如表、視圖、同義詞、序列、存儲過程、包等等,數據庫管理員都可以根據實際情況為他們定義同義詞。 

 

3、創建、刪除、查詢操作

(1).創建同義詞語句:

create public synonym table_name for user.table_name;

(2).刪除同義詞:

drop public synonym table_name;

(3).3.查看所有同義詞:

select * from dba_synonyms

 

導致“ORA-00980”錯誤的原因小結:

1.刪除了數據庫對象,但是忘記刪除同名;

2.刪除一個用戶,但是忘記刪除與此用戶中相關的同名;

3.創建同名時,同名對應的數據庫對象已經被刪除掉了(這種情況很有意思)。


免責聲明!

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



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