10

创建数据库链接的典型语法如下:

create database link remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db'

但我希望我的数据库链接在创建后由另一个帐户拥有。有没有办法做到这一点?

以下不起作用:

create database link anotheruser.remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db'
4

3 回答 3

20

Sathya 是正确的,因为CREATE DATABASE LINK语法不允许在另一个模式中创建数据库链接。然而...

解决方法

只要anotheruser具有CREATE DATABASE LINK权限,并且您连接的用户具有权限,就可以在另一个用户的模式中创建数据库链接CREATE ANY PROCEDURE

这是我使用的解决方法:

    创建过程另一个用户。“tmp_doit_200906121431”
    是
    开始
      立即执行'
        创建数据库链接 remote_db_link
        连接到远程用户
        由 remote_password 标识
        使用''remote_db''';
    结尾;
    /
    开始
      另一个用户。“tmp_doit_200906121431”;
    结尾;
    /
    删除过程另一个用户。“tmp_doit_200906121431”
    /

让我们放松一下。anotherusers首先,我在's 模式中创建一个过程;此过程包含CREATE DATABASE LINK我要运行的语句。

执行过程时,它作为过程的所有者运行,因此CREATE DATABASE LINK语句由 执行anotheruser

过程的名称并不重要,只是我需要确保它不与任何现有的对象名称冲突。我使用小写字母(将过程名称括在双引号中),使用“tmp”将此对象标记为“临时”,并使用当前的 yyyymmddhh24miss 作为过程名称的一部分。(我通常运行 DBA_OBJECTS 查询来检查匹配的 object_name 是否不存在。)

对于“一次性”类型的管理功能,这是一种可行的解决方法。与另一种选择相比,我更喜欢这个:保存另一个用户的密码,更改密码,以用户身份连接,并将另一个用户的密码重置为已保存的密码。)

于 2009-06-12T19:38:19.387 回答
9

DBLinks的限制- 您不能在另一个用户的架构中创建数据库链接,并且您不能使用架构名称来限定 dblink。

于 2009-06-12T18:33:59.277 回答
-3

作为 sys 用户,您可以在 SYS.DBA_DB_LINKS 视图中查看所有 db 链接。该视图使用 link$ 和 user$ 表。您可以像往常一样创建新的 dblink,它会显示在 link$ 表中。然后更改所有者(使用来自 user$ 的 id)。犯罪。完毕。

于 2012-05-30T17:45:49.973 回答