用于创建其他用户拥有的数据库链接的Oracle语法

时间:2009-06-12 18:25:42

标签: oracle owner dblink

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

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'

3 个答案:

答案 0 :(得分:14)

Sathya是正确的,因为 CREATE DATABASE LINK 语法不允许在另一个架构中创建数据库链接。无论其...

替代方法

IS 可以在另一个用户的架构中创建数据库链接,只要anotheruser具有CREATE DATABASE LINK权限,并且您连接的用户具有{{1特权。

以下是我使用的解决方法:

    create procedure anotheruser."tmp_doit_200906121431"
    is
    begin
      execute immediate '
        create database link remote_db_link 
        connect to remote_user 
        identified by remote_password 
        using ''remote_db'' ';
    end;
    /
    begin
      anotheruser."tmp_doit_200906121431";
    end;
    /
    drop procedure anotheruser."tmp_doit_200906121431"
    /

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

执行该过程时,它将作为过程的所有者运行,以便CREATE DATABASE LINK语句由CREATE DATABASE LINK执行。

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

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

答案 1 :(得分:8)

Restrictions on DBLinks - 您无法在其他用户的架构中创建数据库链接,也无法使用架构名称限定dblink。

答案 2 :(得分:-3)

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