一次對dual表的恢復操作(ORA-00980:同義詞轉換不再有效錯誤解決方法) (轉載)

polalisi發表於2007-08-31

今天登陸到測試環境,在做日常操作時需要使用到dual表,但是在使用了一個查詢語句時(SELECT to_char(current_timestamp) FROM dual)卻提示'ORA-00980: 同義詞轉換不再有效'錯誤,於是開始了這次的分析和恢復.

一、查詢原因

根據在網上搜尋得到的資訊判斷可能是同義詞丟失或者是表被刪除,於是進行以下操作以確定問題。

SELECT * FROM Dba_Objects do WHERE do.object_type ='TABLE' AND do.object_name = 'DUAL'

SELECT * FROM Dba_Tables dt WHERE dt.table_name = 'DUAL'

SELECT * FROM Dba_Synonyms ds WHERE ds.table_name = 'DUAL'

根據以上資料字典反饋的資訊確定是表被刪除(因為dba_synonyms表中有此記錄,表明同義詞未被刪除)導致此錯誤,決定重建該表。

二、建表操作

由於在正式環境中該表存在,故連線到正式環境檢視該表結構

SQL> desc dual;
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
DUMMY VARCHAR2(1) Y

檢視建表指令碼:

-- Create table
create table SYS.DUAL
(
DUMMY VARCHAR2(1)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 104
next 104
minextents 1
maxextents 505
pctincrease 100
);
-- Grant/Revoke object privileges
grant select on SYS.DUAL to PUBLIC;

有了以上內容,可以開始建表了,因為同義詞後面將重新建立,所以可以在建表前刪除,在操作之前使用sys重新登陸

1、DROP PUBLIC SYNONYM dual; --刪除同義詞

2、create table dual
 (dummy varchar2(1)) --建立表

3、INSERT INTO dual VALUES('X') --插入值

4、create public synonym dual for dual --建立同義詞

5、grant select on dual to public with grant option --授權,如果不允許其它人可以將自己的許可權傳遞給其他使用者,可以去掉with後面的內容

6、退出,使用普通使用者登陸,測試dual表是否能正常使用

select sysdate from dual;

7、若測試正常則代表dual表已經被重新建立,至此,一次對dual表的恢復完成。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10455649/viewspace-967234/,如需轉載,請註明出處,否則將追究法律責任。

相關文章