ITPub博客

首页 > 数据库 > Oracle > 【SYNONYM】使用同名时导致ORA-00980报错原因

【SYNONYM】使用同名时导致ORA-00980报错原因

原创 Oracle 作者:OCMU联盟 时间:2011-02-24 22:53:25 0 删除 编辑
为便于理解ORA-00980报错的原因,我们通过几种方式来再现这个报错。

1.全新创建sec1和sec2用户用于演示
create user sec1 identified by sec1 default tablespace tbs_sec_d;
grant dba to sec1;
create user sec2 identified by sec2 default tablespace tbs_sec_d;
grant dba to sec2;

2.在目标不存在的情况下同名创建是可以成功的
sec@ora10g> conn sec1/sec1
Connected.
sec1@ora10g> create synonym syn_t for sec2.t;

Synonym created.

注意,此时全新用户sec2中是不存在T这张表的,但是sec1用户下可以完成同名的创建。
但是此时该同名是不可以使用的。

3.此时查询同名便会抛出ORA-00980错误
sec1@ora10g> select * from syn_t;
select * from syn_t
              *
ERROR at line 1:
ORA-00980: synonym translation is no longer valid

4.验证错误是否得到解决
sec1@ora10g> conn sec2/sec2
Connected.

sec2@ora10g> create table t (x varchar2(10));

Table created.

OK,在目标对象存在的情况下,问题得到解决。

5.当目标表名发生变化时问题重现
sec1@ora10g> conn sec2/sec2
Connected.
sec2@ora10g> alter table t rename to t1;

Table altered.

sec2@ora10g> conn sec1/sec1
Connected.
sec1@ora10g> select * from syn_t;
select * from syn_t
              *
ERROR at line 1:
ORA-00980: synonym translation is no longer valid

这也是显然的。总之,当同名指向的目标对象不存在的时,查询同名是便会抛出ORA-00980错误。

6.有关ORA-00980报错信息的原因和处理方法参考如下
Error:  ORA 980
Text:   synonym translation is no longer valid
-------------------------------------------------------------------------------
Cause:  The synonym used is based on a table, view, or synonym that no longer
        exists.
Action: Replace the synonym with the name of the object it references or re-
        create the synonym so that it refers to a valid table, view, or
        synonym.

7.小结
使用同名时导致ORA-00980报错原因基本上是由于同名指向的目标对象不存在的时发生的。
在知道问题原因后,问题处理将会是比较顺畅的。

Good luck.

secooler
11.02.24

-- The End --

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70034820/viewspace-2994435/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
OCM联盟( Oracle Certified Master Union)是由侯圣文(ACE总监)发起的一个公益组织,旨在为每一个OCM大师提供一个可以继续展示自己才华,技术和实力的平台。

注册时间:2007-05-27

  • 博文量
    799
  • 访问量
    8406997