7

同じサーバー上のスキーマへのリンクであるデータベース リンクを作成する必要があります。これに使用する特別なキーワードはありますか? ( local または localhost など)

サーバーの名前が tnsnames にあることは完全にはわかりませんが、それが問題の一部である可能性があります。

これは、続行するためにデータベース リンクが必要なスクリプトを含む複雑な状況のためのものです。

4

3 に答える 3

8

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 ファイル内の対応するエントリを見つけることができるはずです。

于 2010-06-02T19:27:43.457 に答える
4

TNSNAMES.ORAを修正できない場合は、DBリンクに対してもEasyConnect構文を使用できます。リスナーがデフォルトのポートにあると仮定すると、次のSQLは接続文字列を取得します

デュアルからutl_inaddr.get_host_address||':1521 /'|| sys_context('USERENV'、'INSTANCE_NAME')を選択します

于 2010-06-02T23:38:29.817 に答える
1

「同じサーバー上のスキーマ」が同じデータベース内のスキーマを意味する場合、問題が発生する可能性があります。(たとえば、スクリプトがスキーマの外部にあるものを外部データベースとして処理し、後続の SQL 操作を平坦化した場合)。

Oracle ではループバック リンクの扱いが多少異なります。リンクにデータベース グローバル名を使用すると、ORA-02082 エラー (「ループバック データベース リンクには接続修飾子が必要です」) が表示される場合があります。このエラーが発生した場合は、リンクに「loopback」など別の名前を付ける必要がありますが、global_names データベース パラメータを false に設定する必要もあります。そうしないと、「ORA-02085: データベース リンク someName が someOtherName に接続します」というメッセージが表示されます。

于 2010-06-03T13:01:19.300 に答える