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

用于创建其他用户拥有的数据库链接的Oracle语法,oracle,owner,dblink,Oracle,Owner,Dblink,创建db链接的典型语法如下所示: 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 ident

创建db链接的典型语法如下所示:

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'

-不能在其他用户的架构中创建数据库链接,也不能用架构名称限定dblink。

Sathya是正确的,因为
创建数据库链接
语法不允许在其他架构中创建数据库链接。然而

变通办法

可以在另一个用户的架构中创建数据库链接,只要另一个用户具有创建数据库链接权限,并且您连接的用户具有创建任何过程权限

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

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" / 创建另一个用户的过程。“tmp_doit_200906121431” 是 开始 立即执行' 创建数据库链接远程数据库链接 连接到远程用户 由远程密码标识 使用“远程数据库”; 结束; / 开始 另一位用户:“tmp_doit_200906121431”; 结束; / 删除另一个用户的程序。“tmp_doit_200906121431” / 让我们放松一下。首先,我在另一个用户的模式中创建一个过程;此过程包含我要运行的
CREATE DATABASE LINK
语句

当执行过程时,它作为过程的所有者运行,这样,
CREATE DATABASE LINK
语句由另一个用户执行

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


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

作为sys用户,您可以在sys.DBA\u db\u links视图中查看所有数据库链接。 该视图使用link$和user$表。
您可以像往常一样创建新的dblink,它显示在link$表中。然后更改所有者(使用用户$中的id)。犯罪完成。

:-(我很害怕。谢谢您的时间。说“您不能在其他用户的架构中创建数据库链接”是不准确的。这不是真的。创建数据库链接语法不允许这样做,但这是可能的。请参阅我的回答。“选定”回答说“您不能在其他用户的架构中创建数据库链接”.这不完全正确。存在“Oracle语法”这可以实现这一点。请参阅我的答案。感谢您的回答,但此问题的答案已经被接受。请注意,Oracle不支持此答案中描述的方法。Oracle强烈警告不要发出DML来修改SYS架构中表的内容,除非在Oracle支持的指导下。