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

  • 相关阅读:
    ajax提交的javascript代码
    简述jpg、gif、png-8、png-24的区别,分别使用场景
    5种IE hasLayoutt的属性及其值
    EF线程唯一与DBSession接口对接
    报错:未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件
    报错:无法将类型"System.Data.EntityState"隐式转换为"System.Data.Entity.EntityState"
    ASP.NET 之异步处理一(Session处理)
    C#基础之类的出现
    Hadoop
    Hadoop
  • 原文地址:https://www.cnblogs.com/yuanchaoyong/p/10097019.html
Copyright © 2020-2023  润新知