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

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

 

使用拥有dba权限的帐号sys的登陆,进行相同的操做没有报错正常运行。安全

 

-------执行查找全部失效的同义词,生成删除脚本以下:spa

select 'drop 'code

 

       || decode(s.owner,对象

 

                 'PUBLIC',table

 

                 'public synonym ',登录

 

                 'synonym ' || s.owner || '.')软件

 

       || s.synonym_nameobject

 

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

 

  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数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员均可以根据实际状况为他们定义同义词。 

 

三、建立、删除、查询操做

(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.建立同名时,同名对应的数据库对象已经被删除掉了(这种状况颇有意思)。

相关文章
相关标签/搜索