3

DB リンクを使用して Oracle データベースにアクセスしているデータベースの詳細を見つける方法はありますか? Dba_db_linksは、他のデータベースにアクセスするためにデータベースにある DB リンクに関する情報を保持しますが、データベースにアクセスする DB リンクを見つけることができる同様の種類のテーブルがありますか、それともどこかに記録されていますか?

前もって感謝します。

4

3 に答える 3

3

特定のデータベースへのデータベース リンクを持つすべてのデータベースの明示的なリストを決定する方法がないという Justin の意見に同意します。

ただし、アクティブなデータベース リンクを監視することは可能です。次のクエリを使用して、データベース リンクを介したセッションと、どのデータベースからのセッションかを確認できます。

-- who is querying via dblink?
-- Courtesy of Tom Kyte, via AskTom
-- this script can be used at both ends of the database link
-- to match up which session on the remote database started
-- the local transaction
-- the GTXID will match for those sessions
-- just run the script on both databases

Select /*+ ORDERED */
substr(s.ksusemnm,1,10)||'-'|| substr(s.ksusepid,1,10)      "ORIGIN",
substr(g.K2GTITID_ORA,1,35) "GTXID",
substr(s.indx,1,4)||'.'|| substr(s.ksuseser,1,5) "LSESSION" ,
s2.username,
substr(
   decode(bitand(ksuseidl,11),
      1,'ACTIVE',
      0, decode( bitand(ksuseflg,4096) , 0,'INACTIVE','CACHED'),
      2,'SNIPED',
      3,'SNIPED',
      'KILLED'
   ),1,1
) "S",
substr(w.event,1,10) "WAITING"
from  x$k2gte g, x$ktcxb t, x$ksuse s, v$session_wait w, v$session s2
where  g.K2GTDXCB =t.ktcxbxba
and   g.K2GTDSES=t.ktcxbses
and  s.addr=g.K2GTDSES
and  w.sid=s.indx
and s2.sid = w.sid;

それが役立つことを願っています。

于 2012-08-17T02:47:01.743 に答える
1

あなたはこれを探しているかもしれません。

ステップ 1: X データベースでセッションの hash_value を確認します。sid=&sid; の v$session から sql_hash_value を選択します。

ステップ 2: SQL が起動される X データベースでセッションの完全な SQL を確認します。hash_value=&hash_value; の v$sql から sql_fulltext を選択します。

ステップ 3: SQL に含まれるすべての DB リンクを書き留め、それらの DB リンクのホストを特定します。select * from dba_db_links where db_link like upper('&db_link');

ステップ 4: 各ホスト (たとえば、データベース Y を指す 1 つのリモート ホストのみ) とデータベース X 自体で、上記のクエリ (Tom Kyte の) を実行して、リモート DB からのセッションの詳細を収集します。

ステップ 5: データベース X で、対象の SID とそれに対応する GTXID を確認します。リモート ホスト Y で同じ GTXID を探します。

ステップ 6: この GTXID のデータベース Y からセッション ID を取得し、セッション待機またはその他の詳細を確認します。

于 2014-02-23T11:46:56.677 に答える
1

データベース B を指すデータベース A にデータベース リンクを作成すると、データベース B に通知が送信されないため、A にリンクがあることを知らせるデータ ディクショナリ テーブルが B にありません。B に関する限り、データベース A は、データベースへの接続を定期的に開く別のクライアントにすぎません。

一般に、A が B へのデータベース リンクを作成する場合、この目的のために B にユーザーが作成されます (データベース リンクが現在のユーザーではなく固定ユーザーを使用すると仮定します)。定期的に有効期限が切れ、特定の人が退職してアカウントが削除された場合にデータベース リンクが切断されないようにする必要があります。B で、データベース リンク用に作成された特定のアカウントまたはすべてのユーザーの接続を監査し、監査ログを調べて、他のデータベースを収容するサーバーからの接続を特定できます。

于 2012-08-16T16:50:45.693 に答える