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

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'
有帮助吗?

解决方案

上DBLinks限制 - 您不能创建在另一个用户模式的数据库链接,你不能用一个模式的名字资格DBLINK。

其他提示

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

解决方法

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

这是我使用的解决方法:

    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"
    /

让我们放松一下。首先,我在 anotherusers的架构;该程序包含 CREATE DATABASE LINK 声明我想运行。

当执行过程时,它作为过程的所有者运行,这样 CREATE DATABASE LINK 语句执行者 anotheruser.

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

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

AS一个sys用户可以查看SYS.DBA_DB_LINKS视图所有分贝链接。 这种观点的使用环$和$用户表。 您可以按通常会创建新的DBLINK,它显示在链接$表。然后换老板(从用户使用$ id)的。承诺。完成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top