今天登陸到測試環境,在做日常操作時需要使用到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表的恢復完成。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/alvenz/archive/2008/12/15/3519532.aspx