用于创建另一个用户拥有的数据库链接的 Oracle 语法
题
创建数据库链接的典型语法如下:
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
语法不允许在另一个模式中创建数据库链接。然而...
解决方法
它 是 可以在另一个用户的模式中创建数据库链接,只要 anotheruser
有 CREATE 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)的。承诺。完成。