同じサーバー上のスキーマへのリンクであるデータベース リンクを作成する必要があります。これに使用する特別なキーワードはありますか? ( local または localhost など)
サーバーの名前が tnsnames にあることは完全にはわかりませんが、それが問題の一部である可能性があります。
これは、続行するためにデータベース リンクが必要なスクリプトを含む複雑な状況のためのものです。
同じサーバー上のスキーマへのリンクであるデータベース リンクを作成する必要があります。これに使用する特別なキーワードはありますか? ( local または localhost など)
サーバーの名前が tnsnames にあることは完全にはわかりませんが、それが問題の一部である可能性があります。
これは、続行するためにデータベース リンクが必要なスクリプトを含む複雑な状況のためのものです。
DB リンク メカニズムは TNS を経由するため、ローカル データベースの TNS エントリを定義し、それをリンクで使用するだけです。
クライアントの TNSNAMES.ORA ファイルには、次のようなエントリが含まれている必要があります。
YourDBAlias =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = yourHOST)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = YourDB)
)
)
このエントリがデータベース サーバーの TNSNAMES.ORA ファイルにも存在することを確認してください。
次に、データベース リンクを次のように作成します。
CREATE [PUBLIC] DATABASE LINK yourLinkName
CONNECT TO theSchema IDENTIFIED BY thePW
USING 'YourDBAlias';
これでうまくいくはずです (TNS ネーミングを使用していると仮定します)。
さらに、データベースの TNS 名がわからない場合は、SQL*Plus で次のコマンドを発行できます。
show parameter service_names
これにより、データベースがリスナーに登録されている名前が表示されます。そこから TNSNAMES.ORA ファイル内の対応するエントリを見つけることができるはずです。
TNSNAMES.ORAを修正できない場合は、DBリンクに対してもEasyConnect構文を使用できます。リスナーがデフォルトのポートにあると仮定すると、次のSQLは接続文字列を取得します
デュアルからutl_inaddr.get_host_address||':1521 /'|| sys_context('USERENV'、'INSTANCE_NAME')を選択します
「同じサーバー上のスキーマ」が同じデータベース内のスキーマを意味する場合、問題が発生する可能性があります。(たとえば、スクリプトがスキーマの外部にあるものを外部データベースとして処理し、後続の SQL 操作を平坦化した場合)。
Oracle ではループバック リンクの扱いが多少異なります。リンクにデータベース グローバル名を使用すると、ORA-02082 エラー (「ループバック データベース リンクには接続修飾子が必要です」) が表示される場合があります。このエラーが発生した場合は、リンクに「loopback」など別の名前を付ける必要がありますが、global_names データベース パラメータを false に設定する必要もあります。そうしないと、「ORA-02085: データベース リンク someName が someOtherName に接続します」というメッセージが表示されます。