原文地址:http://blog.csdn.net/alvenz/archive/2008/12/15/3519532.aspx
今天登陸到測試環(huán)境,在做日常操作時需要使用到dual表,但是在使用了一個查詢語句時(SELECT to_char(current_timestamp) FROM dual)卻提示'ORA-00980: 同義詞轉(zhuǎn)換不再有效'錯誤,于是開始了這次的分析和恢復.
一、查找原因
根據(jù)在網(wǎng)上搜索得到的信息判斷可能是同義詞丟失或者是表被刪除,于是進行以下操作以確定問題。
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'
根據(jù)以上數(shù)據(jù)字典反饋的信息確定是表被刪除(因為dba_synonyms表中有此記錄,表明同義詞未被刪除)導致此錯誤,決定重建該表。
二、建表操作
由于在正式環(huán)境中該表存在,故連接到正式環(huán)境查看該表結(jié)構(gòu)
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;
有了以上內(nèi)容,可以開始建表了,因為同義詞后面將重新創(chuàng)建,所以可以在建表前刪除,在操作之前使用sys重新登陸
1、DROP PUBLIC SYNONYM dual; --刪除同義詞
2、create table dual
(dummy varchar2(1)) --創(chuàng)建表
3、INSERT INTO dual VALUES('X') --插入值
4、create public synonym dual for dual --創(chuàng)建同義詞
5、grant select on dual to public with grant option --授權(quán),如果不允許其它人可以將自己的權(quán)限傳遞給其他用戶,可以去掉with后面的內(nèi)容
6、退出,使用普通用戶登陸,測試dual表是否能正常使用
select sysdate from dual;
7、若測試正常則代表dual表已經(jīng)被重新建立,至此,一次對dual表的恢復完成。
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/alvenz/archive/2008/12/15/3519532.aspx
posted on 2009-11-10 09:08
周銳 閱讀(2991)
評論(0) 編輯 收藏 所屬分類:
Oracle