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