创建数据库链接的典型语法如下:
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'
答案 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)。承诺。完成。