ORA-00980: 同义词转换不再有效


客户账号TB在操作软件时,报错:“[Microsoft][ODBC driver for Oracle][Oracle]ORA-00980: 同义词转换不再有效”。


使用拥有dba权限的账号sys的登录,进行相同的操作没有报错正常运行。


-------执行查找所有失效的同义词,生成删除脚本如下:

select 'drop '


       || decode(s.owner,


                 'PUBLIC',


                 'public synonym ',


                 'synonym ' || s.owner || '.')


       || s.synonym_name


       || ';' as "Dropping invalid synonyms:"


  from dba_synonyms s


 where table_owner not in ('SYSTEM', 'SYS')


   and db_link is null


   and not exists


 (select null


          from dba_objects o


         where s.table_owner = o.owner


           and s.table_name = o.object_name);

发现其中对应的存储过程zl_人员表_INSERT的同义词失效,处理办法删除重建:

SQL>Drop public synonym zl_人员表_INSERT;

SQL>Create public synonym zl_人员表_INSERT for zlhis.zl_人员表_INSERT;


----PS:查询当前用户下,没有创建同义词的对象有哪些?

Select *


  from dba_objects s


 where owner in ('ZLHIS') And object_type In('TABLE','PROCEDURE','FUNCTIONS')


   and Not exists


 (select null


          from dba_synonyms o


         Where o.table_owner = s.owner


           and o.table_name = s.object_name And o.db_link is null)


藉此引出了几个思考:

1、什么是同义词?为什么要创建同义词?同义词失效的影响?

2、哪些对象可以创建同义词?

3、同义词的操作? 


1同义词定义:Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系

常用于简化对象访问提高对象访问的安全性

同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。


为什么要创建?

简单的说就是,为了直接使用特定用户(例如:用户ZS的表"人员表")的某个数据库对象!!!

ZS用户将表"人员表"的权限授予给用户LS,在没有创建公共同义词的前提下,LS用户登陆后要使用该表,需要在表名字前加"ZS.表名".


例如:

查询:SQL>select * from ZS.人员表;

为表创建公共同义词: SQL>create public synonym 人员表 for ZS.人员表;

创建表后可以直接访问SQL>select * from 人员表; 


2、在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。 


3、创建、删除、查询操作

(1).创建同义词语句:

create public synonym table_name for user.table_name;

(2).删除同义词:

drop public synonym table_name;

(3).3.查看所有同义词:

select * from dba_synonyms


导致“ORA-00980”错误的原因小结:

1.删除了数据库对象,但是忘记删除同名;

2.删除一个用户,但是忘记删除与此用户中相关的同名;

3.创建同名时,同名对应的数据库对象已经被删除掉了(这种情况很有意思)。


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

转载于:http://blog.itpub.net/27025927/viewspace-1270040/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值