ストアドプロシジャからデータベースリンクを使っての参照について

このQ&Aのポイント
  • OracleツールのJDeveloperを使用し、PL/SQLでストアドプロシジャを作成しています。
  • DB-Bからデータベースリンクを介してDB-Aのテーブルを参照する際にORA-04052エラーが発生しています。
  • KGLR.SQLとは何かについての情報が求められています。出くわしたことのある方や推測がある方からの情報をお待ちしています。
回答を見る
  • ベストアンサー

ストアドプロシジャからデータベースリンクを使っての参照について

OracleツールのJDeveloperを使って、PL/SQLでストアドプロシジャを作成しています。 (Oracleは9i) DBが2つありまして(DB-AとDB-Bとする)、 DB-Bから、データベースリンクを介してDB-Aのテーブルを参照しています。 (SELECT * FROM XXXXX.テーブル名@データベースリンク名) DB-Bに接続してSQL*PLUS上で上記SELECT文を実行すると正しく処理されるのですが 上記SELECT文が組み込まれているDB-B上のプロシジャをコンパイルすると、 「ORA-04052」が返ってきてしまいます。 エラーコードを調べると、 DB-A側のテーブルを参照できていないようで、 「KGLR.SQLが実行されていることを確認してください」とのことなのですが、 この「KGLR.SQL」とやらが何者かわかりません。 タチの悪いことに、上記の現象が出る端末と出ない端末があります。 みんな同じIDでログインしているので権限の問題ではないと思ってるのですが・・・ 「KGLR.SQL」は置いといて、このような事象に出くわしたことのある方、 推測でもなんらかの情報をお持ちの方がいらっしゃいましたらご教授ください。 よろしくお願い致します。

  • rikiou
  • お礼率95% (223/234)
  • Oracle
  • 回答数3
  • ありがとう数4

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

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

catrpc.sqlですがクライアントにはインストールされませんのでサーバー側にしかありません。もしも、サーバー側も検索されたとなるとインストールに失敗している恐れがあるかも...。(あまり不安にはならないでください。) あった場合の実行方法ですが、 1.SQL*Plusを起動 2.sysで接続(conn sys/[passwrod]@[dbname]) 3.実行(@c:\oracle\ora92\rdbms\admin\catrpc.sql) また、不明点がありましたら、補足お願いします。

rikiou
質問者

お礼

再度、ありがとうございます。 いろいろサイトで調べていたら、「catproc.sql」が出てきて、 desc ORA_KGLR7_DEPENDENCIES で記述が出てこなかったらカタログされていないので 「catproc.sql」を流してみたらどうか・・・というのが載っていました。 そこで、desc~を実行したところ、記述が出てきたので、catproc.sqlは実行済のようです。 この現象が発生する端末と発生しない端末があるので、 Oracleクライアントの設定に問題ありなのかとも考えています。 見当はつきませんが・・・

その他の回答 (2)

回答No.3

またまたですが、 1.catproc.sqlとcatrpc.sqlは別物です。 2.catproc.sqlはOracleのToolでDBを作成したときに自動で流されるシステム用のPL/SQLです。厄介なことにcatproc.sqlは時たま壊れたりしますので、流しなおしは有効です。ちなみに、壊れている場合(validate=false)でもdescで表示されるはずです。両方再度流すことをお勧めします。

rikiou
質問者

お礼

三度ありがとうございます。 サーバー側の処理のため勝手にできない環境なので保守契約先にいろいろ確認してみます。

回答No.1

[ora_home]\RDBMS\ADMINのcatrpc.sqlに Rem glumpkin 10/20/92 - Renamed from KGLR.SQL とコメントがあります。 ひょっとすれば、catrpc.sqlを再度実行(sysユーザーのみ)すればよいかもしれません。保障とかはできませんが...。

rikiou
質問者

お礼

回答ありがとうございます。 残念ながら、catrpc.sqlがありませんでした。 (ora_home以下で検索しても・・・) ちなみにあったら、これをどのように実行すればよいのでしょうか?

関連するQ&A

  • データーベースリンク

    以前にも、データベースリンクについての質問をさせていただきました。さらに問題が発生し、困っております。 【環境】 RedHatLinux Oracle9i Windows2000 Oracle8.0.6 という二つのDBがいます。 Oracle9iからCREATE DATABASE LINKをつかって、 Oracle8を参照します。 【データベースリンク作成】 CREATE DATABASE LINK XXXX_DBLINK CONNECT TO aaaaa IDENTIFIED BY bbbbb USING 'XXXX' でDBLINKを作成し、 select * from test@XXXX_DBLINKとして、 結果を受けることはできました。 そこで、以下のSQLを実行したときに、SQLエラーが発生してしまいました。 【問題のSQL】 select * from test@XXXX_DBLINK where COLUMN1=:hensu1 and COLUMN2=:hensu2 【実行結果】 SQL実行中に以下のエラーが発生しました。 ORA-01026: バインド・リストにサイズが4000を超える複数バッファが存在しています。 ORA-02063: 先行のエラー・メッセージを参照してくださいline(TRINITY_DBLINK) と2つのメッセージからなっています。 【※】 ・変数パラメータとしては、1つの場合、SQLエラーは発生しません。 ・変数パラメータが2つ以上の場合発生します。 ・変数の部分を固定で、条件を指定すれば、正常にSQLが実行されます。 質問は、この問題を解消するためにどのような対処方法がありますでしょうか? CREATE DATABASE LINK時にオプションを設定することや、 Oracle8もしくは、Oracle9iを構築する際に設定する数値など ありましたら、お教えください。

  • データベースリンクについて

    サーバーAからサーバーBにDB_LINKを作成し、サーバーBのテーブル(参照権限付与済)を参照しにいったところ、『ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。』となってしまいました。 またサーバーCにDB_LINKを作成したら何のエラーも発生しませんでした。 ちなみにSQLPLUSからサーバーBにログインは可能で、前述のテーブルも参照できました。しかしSQLPLUSからDBLINKを介しての参照は同じエラーになってしまいます。 ちなみに固定ユーザーでプライベート接続でリンクを作成しました。 相手サーバーにユーザーもIDも登録済みです。 いろいろ調べてみたのですが、全然わかりません。 ご存知の方がいらっしゃったら教えて下さい。 宜しくお願いします。

  • リンクテーブルのようなものは?

    ACCESSのリンクテーブルのような機能は、SQL Server 2000にあるのでしょうか? SQL Serverに作成したデータベースAとBがあり、AにあるテーブルをBから参照更新したりすることはできるのでしょうか? 具体的にはどのようなものになるのでしょうか? 初歩的な質問で申し訳ありませんが、何卒、よろしくお願いします。

  • VB.NETでDataTableにデータ追加したい

    VisualStugio.Net2003でソースコードを記述しており、コード内でSQLのSELECT文を実行して、実行結果をDataTableに格納する処理をしています。 今回、とあるテーブルに対し2パターンのSQLを実行し、それぞれの実行結果を1つのDataTableに格納したいのですが、どのようにすれば良いでしょうか? 自分で調べたところ、先に実行したSQL結果に、後から実行したSQL結果を1行ずつ追加するといった方法は見つかりましたが、1行ずつではなく、一括で追加する方法が知りたいです。 前提として、2回のSQL実行では、同じテーブルの同じ項目をSELECTしております。 下記に簡単ですがコード記述の概要を補足しておきます。 ・コード記述概要 【変数宣言】 Dim DB1 As DataTable Dim DB2 As DataTable 【SQL文1】 SELECT A,B,C FROM テーブル1 WHERE 条件文1 DB1 = SQL文1の実行結果 【SQL文2】 SELECT A,B,C FROM テーブル1 WHERE 条件文2 DB2 = SQL文2の実行結果 【DB1にDB2のデータを追加】←ここのやり方を知りたいです DB1 = DB1 + DB2 よろしくお願いいたします。

  • データベース単位でのCSV出力方法について

    データベース単位でのCSV出力方法について phpからデータベースのバックアップ機能として、 データベース単位でCSV出力を行いたいと思っています。 テーブル単位で出来る記事は見受けられるのですが、 上記の方法は可能でしょうか? それともう一つお聞きしたいことがあります。 SQL文が格納された変数をexec関数で実行しているのですが、 直接phpmyadminでは成功するのにもかかわらず、 csvファイルが生成されません。 下記にSQL文を記しておきます。 --SQL文-- select * from users into outfile "C:/works/~中略~/dump_0426.csv" fields terminated by ',' ENCLOSED BY '"' ご教授よろしくお願い致します。 【環境】 DB:mysql5.0.51b-community PHP:5.2.6

    • ベストアンサー
    • MySQL
  • SQLの結合について

    データベース初心者です。 使用しているデータベースは、DB2です。 質問ですが、テーブルAとテーブルBに対して、それぞれにSelect文を実行した結果があるとして、その2つの結果を結合することは可能でしょうか? テーブルAに対し、Select文を実行した結果 氏名   年齢   ID --------------------- ○○○  50   00001 △△△  20   00002 ×××  30   00003 テーブルBに対し、Select文を実行した結果 出身地  住所   管理No --------------------- ■■■  あああ  00001 ◆◆◆  いいい  00002 ●●●  ううう   00003 上記2つの結果を結合して以下のような結果を求めたい。 氏名   年齢   ID 出身地  住所 ----------------------------------------------- ○○○  50   00001 ■■■  あああ △△△  20   00002 ◆◆◆  いいい ×××  30   00003 ●●●  ううう ご教授のほどお願い致します。

  • ASPから異なる複数のDBサーバーに接続する方法

    ASPの質問です。WEBサーバーと複数のDBサーバーがあります。 ADODB.Connectionでオラクルサーバーに接続し、データベースオブジェクトを作成しています。 別々のDBサーバーにあるテーブルを結合して利用したいのですが、ASPで可能でしょうか? 例えば"select * from A,B where A.ID=B.ID"というSQL文を実行する(AとBは別々のDBサーバーにある)。 とりあえず、代替案で検討しているのは片方のDBサーバーにデータベースリンクで他方のDBサーバーのVIEWを作ろうかと思っています。できればASPで解決したいのですが、よろしく御願いします。

  • DBリンク経由の参照について

    サーバ【A】のスキーマ【あ】にDB【テーブル1】があります。 サーバ【A】のスキーマ【い】に、【あ】からセレクト権限を与えた所、【い】から【テーブル1】を参照できるようになりました。 次に、 サーバ【B】からサーバ【A】にDBLINKをはりました。 (tnspingで接続されているのを確認済)。 これで、 サーバ【B】のスキーマ【あ】からDBLINK経由で【テーブル1】を参照できるようになりました。 しかし、サーバ【B】のスキーマ【い】から【テーブル1】が参照できません。 私としては、スキーマ同士の権限を与え、DBLINKが正しく繋がっているので、参照できるのでは??と思うのですが、 何度やっても、 --------------------------------------------------------------- ORA-04043: オブジェクト"【あ】"."【テーブル1】"は存在しません。 --------------------------------------------------------------- が表示されてしまいます。 原因として何が考えられるでしょうか…?? 説明不足だったらすみません。 何か考えられる可能性があったら教えて下さい。

  • DBリンクの参照について

    オラクルのデータベースリンクについて教えて下さい。仮にデータベース"TEST_A"と"TEST_B"があります。 TEST_AからTEST_Bへデータベースリンクしようとしているのですが、TEST_Bのユーザ(1) ではログオンできるのですが、ユーザを(2)に変更するとログオン出来ません。 その時のエラーの内容としては... -------------------------------------------------"ORA_01017:ユーザ名/パスワードが無効です。ログオンは拒否されました。" "ORA_02063:先行のエラー・メッセージを参照してください。(データベースリンク名称)" ------------------------------------------------- これは権限かなにかの問題でしょうか? 説明不足かもしれませんが解決方法を教えて頂きたく宜しくお願い致します。 ※ 環境: ORACLE10g  また運用保守で Object Browser というソフトを使用しています。 上記のエラー内容はObject BrowserでDBリンクの接続を試みた時に表示されました

  • 他のDBのテーブルと内部結合が可能でしょうか

    他のDBのテーブルと内部結合が可能でしょうか sql sever 2005 を使用します。このたび、データベースAのテーブルaを定期的に検索するsqlを作成することになりました。このsql文は、ストアードプロシージャとして登録予定です。 その際、テーブルbを内部結合で参照します。例として、テーブルaは社員番号があり、テーブルbは社員番号、社員名があります。(テーブルbは社員マスター) テーブルaを参照し、その社員名を内部結合(INNER JOIN)で取り出します。 ここで、テーブルa,bが共に、同じデータベース内にある場合は、問題ないのですが、 テーブルbは、別のマシンのsql sever 上にあります。(したがって、データベース名も異なります) このような状態で、内部結合による参照は可能でしょうか? また、内部結合ができないまでも、ストアードプロシージャで、データベースAのテーブルaを参照しながら、別のマシンのデータベースBのテーブルbを参照することは、原理的に可能でしょうか。 なお、データベースは共にsql server 2005を使用します。