簡體   English   中英

用於創建其他用戶擁有的數據庫鏈接的Oracle語法

[英]Oracle Syntax for Creating Database Link Owned by Another User

創建數據庫鏈接的典型語法如下:

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'

Sathya是正確的,因為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是否不存在。)

對於“一次性”類型的管理功能,這是一種可行的解決方法。 我更喜歡這個替代方案:保存另一個用戶的密碼,更改密碼,以用戶身份連接,以及將另一個用戶的密碼重置為已保存的密碼。)

對DBLink的限制 - 您無法在其他用戶的架構中創建數據庫鏈接,也無法使用架構名稱限定dblink。

作為sys用戶,您可以在SYS.DBA_DB_LINKS視圖中查看所有數據庫鏈接。 該視圖使用link $和user $ table。 您可以像往常一樣創建新的dblink,它顯示在鏈接$ table。 然后更改所有者(使用來自用戶$的id)。 承諾。 完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM