• ベストアンサー

異なるOracleサーバ上のテーブルを結合する方法

異なるOracleサーバ上のテーブルを結合する方法 IPアドレスが異なるOracleのテーブルを結合して出力したいのですが可能でしょうか?2つのテーブルをローカルにダウンロードして結合表示するとパフォーマンスが悪いので、2つのサーバから直接データをダウンロードしたいのです。2つのOracleサーバは読み取り権限しか与えられておらず、SELECT文ぐらいしか使えません。 Oracle 10G Windows 2003 Server

  • Oracle
  • 回答数1
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

DATABASE LINK を使用してください。 ■作成方法 1.CREATE DATABASE LINK文   CREATE [PUBLIC] DATABASE LINK dblink    [CONNECT TO user IDENTIFIED BY password]    [USING connect_string]; dblink データベース・リンク名を指定します。 ドメインを省略した場合は、データベース・リンクを作成したインスタンスのデータベース・ドメインが付加されます。 PUBLIC句  この句を指定するとパブリック・データベース・リンクが作成できます。 CONNECT TO句 接続ユーザを指定する事ができます。CONNECT TO句を指定しないとデータベース・リンクにアクセスした現行セッションのユーザでリンク先へ接続します。 ユーザ名はuserで指定し、パスワードはIDENTIFIED BY句の後のpasswordで指定します。 USING句 リンク先に接続する時の接続文字列を指定します。指定できるのはtnsnames.oraで定義されているネット・サービス名、または簡易接続ネーミングです。 例1 現行セッションのユーザでリンク先に接続するデータベース・リンクの例です。   CREATE DATABASE LINK remote    USING remote 例2 固定のユーザでリンク先に接続するデータベース・リンクの例です。 この例だと現行セッションのユーザに関わらず、常にtest/testでリンク先に接続します。   CREATE DATABASE LINK remote    CONNECT TO test IDENTIFIED BY test    USING remote; ■アクセス方法 データベース・リンクを使用してリンク先にアクセスするには@dblinkをオブジェクト名の後に記述します。 例 remoteインスタンス上のtable1という表にアクセスします。   select * from table1@remote;

参考URL:
http://blogs.yahoo.co.jp/mr_makochi/9103121.html

関連するQ&A

  • Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパ

    Oracle10gで1つのSQLで複数回同じテーブルを結合する場合のパフォーマンス向上 Oracleで1つのSQL内で同じテーブルを2回以上結合すると結果出力にかかる時間が非常に遅くなります。 例: SELECT * FROM A, B b1, B b2 WHERE a.id = b1.id AND a.id = b2.id (テーブルBを2回結合している) こういう場合にパフォーマンスを落とさない方法はありますか?テンポラリテーブルでテーブルBのレプリカを作成して使用するというのはなしです。あくまで1つのSQLで結果出力できることを前提にパフォーマンスを向上する方法を教えてください。

  • Oracle8iでテーブルをエクスポートする方法

    Oracle10gを使用しています。Oracle8iから特定のテーブルを抽出してOracle10gに入れようとしましたが、Oracle10gのexpコマンドは互換性の問題で8iに対して使えませんでした。そこでOracle8iのexpコマンドを使用しようかと考えましたが、テーブルごとのエクスポートができないとのことで不可(データベースが大きすぎるため、そもそも8iのExpコマンドを実行できる権限を持っていないのでできませんが)。 仕方がないのでExpコマンドはあきらめて、テーブル定義抽出→データをCSVまたはSQLで抽出という手順でデータを移そうかと考えています。データの抽出はできたのですが、テーブル定義の取得は10gで使えるdbms_metadata.get_ddlが使用できないので取得できずにこまっています。8iでテーブル定義を取得するにはどうしたらいいのでしょうか? なお当方8iのデータベースのSystem/Sys権限を所有していないません。また8iがインストールされているサーバへログインすることもできません。それを考慮した上で実現可能な方法をご提示願います。

  • オラクルで外部結合

    オラクル8iを使用しています。 テーブルを外部結合する場合のパフォーマンスについてお聞きしたいのですが、 下の二つのSQL文でパフォーマンスは変わってくるのでしょうか? (外部結合記号(+)を=の前後につけた場合) SELECT 項目 FROM テーブル1 A, テーブル2 B WHERE A.項目1 = B.項目1(+); SELECT 項目 FROM テーブル1 A, テーブル2 B WHERE B.項目1(+) = A.項目1;

  • 巨大テーブルの外部結合

    巨大なテーブル同士を結合する際に、みなさんはどのように結合されますか?もっともパフォーマンスのある方法を模索しているところです。 テーブルA:約900万件 テーブルB:約400万件 テーブルAのインデックスはカラム:idです。 テーブルBにはインデックスはありません。 取得したいのはBテーブルに含まれるAテーブルのidの件数です。 select  count(id) from B where A.id = B.id なんてやると、数時間かかります。 select count(id) from B where exists(select * from A where A.id = B.id) ですと、約3hぐらいかかりました。 inで実行すると等価結合したときと変わらないぐらいになります。 こういう場合、皆さんはどう結合されていますか? お知恵を拝借できると幸いです。 ちなみにoracle 8iです。 よろしくお願いいたします。

  • oracle10gと9iの違いについて

    お世話様です。 最近、DBサーバをoracle9iからoracle10gに変えることになったのですが、 oracle9iで select LEVEL, 項目1, 項目2 FROM テーブル1 のSQLが動いていたのですが、 oracle10gでは、このSQLが動かなくなり、 connect by区を指定するようにエラーが出てくるようになってしまいました。 oracleのバージョンによって、動かなくなると言うことはあるのでしょうか? それともORACLEの設定を変更すると動くようになるのでしょうか。 ご教授よろしくお願い致します。

  • 複数テーブルを結合するには?

    OS:WINDOWSXP SP2 ORACLE:Oracle9i Enterprise Edition Release 9.2.0.1.0 A, B, Cというテーブルがあるとします。 それぞれのテーブルには XXカラムと YYカラムがあるとします。 2つのテーブルを結合させるには、以下のSQL文を記述すれば良いと考えています。 SELECT A.*,B.* FROM A JOIN B ON A.XX = B.XX 3つのテーブルを結合するには、以下のSQL文を記述しています。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX JOIN C ON A.XX = C.XX 但し、この記述方法でいきますと、Cテーブルを右側外部結合に指定した場合のみ、 ORA-00904 "C" 無効な識別子です。 というエラーメッセージが表示されます。 SELECT A.*,B.*,C.* FROM A JOIN B ON A.XX = B.XX RIGHT OUTER JOIN C (←LEFT OUTER、FULL OUTER)なら通ります) ON A.XX = C.XX 何故、右側外部結合のみ不正となるのか不明であり、解決策が見つかりません。 複数のテーブルを結合する為のSQL文の記述方法を教えて頂けますでしょうか?

  • AccessからOracleへの外部結合

    AccessのテーブルからOracleのテーブルに外部結合した場合、遅くなるのはなぜでしょうか。対策はありますか。 AccessのテーブルからOracleのテーブルとほぼ同じ内容のサーバー上のAccessのテーブルに外部結合しても遅くない(数秒)ですがOracleのテーブルに外部結合すると30秒以上かかります。Accessの結合元のテーブル約3万件、Orcaleのテーブル約25万件です。 Oracleのテーブルに内部結合した場合は数秒です。 Access2000/Oracle8.0.5です。

  • 2台のサーバー間でのテーブル結合方法

    2台のサーバーでそれぞれSQL Server2000 とSQL Server2005を動かしています。 2台のサーバーの中の別のDBの中にあるテーブルを結合したいのですが、可能なのでしょうか? ちなみに [データベース名1]のサーバーに接続した状態で SELECT a.*,b.* FROM [データベース名1].[dbo].[テーブル名1] AS a INNER JOIN [ServerIPアドレス].[データベース名2].[dbo].[テーブル名2] AS b ON a.ID=b.ID とやると 「sys.serversにサーバー 'ServerIPアドレス' が見つかりませんでした。 正しいサーバー名を指定したかどうかを確認してください。 必要であればストアド プロシージャ sp_addlinkedserver を実行し、 サーバーを sys.servers に追加してください。」 というエラーになってします。 宜しくお願いします。

  • テーブル結合の方法でのパフォーマンス

    テーブルを結合する順番でパフォーマンスが違ってくるものなんでしょうか。 FROM aaa, bbb aとbの順番を入れ替えるだけでパフォーマンスが変ることってあるんですかね。 また、カンマ(,)で結合を指定するよりSTRAIGHT_JOIN指定したほうが速いとか。 SELECT aaa.x, bbb.y FROM aaa, bbb; SELECT aaa.x, bbb.y FROM aaa STRAIGHT_JOIN bbb; おねがいします。

    • ベストアンサー
    • MySQL
  • テーブルの権限 またはユーザの権限

    お世話になっております。 サーバーをいじること自体がはじめてで迷走しています; どうかご助言お願いします >< SQL Serverにおいて ユーザ「9999」がいるとします。 またDB「AA」「BB」「CC」「DD」があり、各DBに「9999」はログインできるようになっています。 各DB内にはそれぞれ複数のテーブルが存在します。 そして各テーブルでは「9999」に 「SELECT、INSERT、UPDATE、DELETE」の権限を与えてあります  ←今ココです そこで質問なのですが、 (1)ユーザ「9999」に与えてあるSELECT等の権限を確認するSQL文は存在しますでしょうか。   →「9999」がどのDBのどのテーブルにどの権限を持っているのか、など。 (2)もしくはDBごとに、どのユーザがどのテーブルに対してどの権限を持っているかを   確認するSQL文はありますでしょうか。   →テーブルごとでも結構です。 「権限を確認するSQLはあるよ」と 先輩に言われ、必死に探しておりますがOracleのものしか見つかりません。。。 とりあえず「9999」がそのテーブルに対して権限を持っているということを 証明したいのです。  ※テーブルのプロパティで権限付与を行ったため、    同じ方法で確認するのは意味がないと言われてしまいました どうかよろしくおねがいします。