用于创建其他用户拥有的数据库链接的Oracle语法
创建db链接的典型语法如下所示:用于创建其他用户拥有的数据库链接的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
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支持的指导下。