Sathyaは正しいです。CREATE DATABASE LINK
構文では、別のスキーマにデータベースリンクを作成することはできません。でも...
回避策
特権があり、接続しているユーザーが特権をanotheruser
持っている限り、別のユーザーのスキーマにデータベースリンクを作成することは可能です。CREATE DATABASE LINK
CREATE ANY PROCEDURE
これが私が使用する回避策です:
プロシージャanotheruserを作成します。"tmp_doit_200906121431"
は
始める
即時実行'
データベースリンクを作成しますremote_db_link
remote_userに接続します
remote_passwordで識別
''remote_db'''を使用します;
終わり;
/
始める
anotheruser。"tmp_doit_200906121431";
終わり;
/
プロシージャanotheruserを削除します。"tmp_doit_200906121431"
/
それをほどきましょう。まず、anotherusers
のスキーマにプロシージャを作成します。このプロシージャには、CREATE DATABASE LINK
実行したいステートメントが含まれています。
プロシージャが実行されると、プロシージャの所有者として実行され、CREATE DATABASE LINK
ステートメントはによって実行されanotheruser
ます。
プロシージャの名前は重要ではありませんが、既存のオブジェクト名と競合しないことを確認する必要があります。小文字(プロシージャ名を二重引用符で囲む)を使用し、「tmp」を使用してこのオブジェクトを「一時」としてマークし、現在のyyyymmddhh24missをプロシージャ名の一部として使用します。(私は通常、DBA_OBJECTSのクエリを実行して、一致するobject_nameが存在しないことを確認します。)
「1回限りの」タイプの管理機能の場合、これは実行可能な回避策です。私はこれを他の選択肢よりも好みます:別のユーザーのパスワードを保存し、パスワードを変更し、ユーザーとして接続し、別のユーザーのパスワードを保存済みにリセットします。)