posts - 431,  comments - 344,  trackbacks - 0
原文地址:http://blog.csdn.net/alvenz/archive/2008/12/15/3519532.aspx

今天登陆到测试环境,在做日常操作时需要使用到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

posted on 2009-11-10 09:08 周锐 阅读(2967) 评论(0)  编辑  收藏 所属分类: Oracle

只有注册用户登录后才能发表评论。


网站导航: