代码之家  ›  专栏  ›  技术社区  ›  BFF

无法删除数据库链接

  •  0
  • BFF  · 技术社区  · 6 月前

    我有两个数据库链接,它们具有相同的数据库链接名称,但服务名称不同。作为sys-dba,我试图删除具有错误TNS信息的那个,但我一直得到“找不到数据库链接”,尽管我在dba_db_links中清楚地看到了它。它也是新创建的,因此没有打开的连接(检查了v$dblink,实际上没有返回任何记录)。我试图以所有者的身份放弃它,但还是犯了同样的错误。我尝试将其作为owner.db_link删除,但仍然出现同样的错误。我刷新了共享池,同样的事情。还有其他建议吗?

    1 回复  |  直到 6 月前
        1
  •  2
  •   Paul W    6 月前

    如果数据库链接或任何其他Oracle对象是用双引号创建的,其中包含 任何东西 除大写字母、数字和允许的字符外 _#$ ,那么您将无法在任何DDL中引用该对象,除非您完全重复其区分大小写的名称,并且每次都用双引号括起来:

    drop database link "xyz"

    这就是为什么不值得这样做——在创建对象时省略双引号,并允许Oracle以大写形式存储所有内容,这总是假设没有双引号。

    其次,如果链接是私有的,您必须是链接所有者才能删除它。创建新链接也是如此。因此,请注销并使用链接所有者的用户名和密码重新登录。

    对于DBA(或任何有 create any procedure system-priv),但是,如果你不知道密码:你可以在另一个用户下创建一个过程,并在该过程中删除链接:

    create procedure otheruser.dropmylink
    as
    begin
      execute immediate 'drop database link xyz';
    end;
    /
    
    begin otheruser.dropmylink; end; -- execute the proc
    /
    
    drop procedure otheruser.dropmylink; -- drop the proc
    /
    

    我们不得不使用这样愚蠢的解决方法,这很烦人,但事实就是这样。

    推荐文章