現在、ストアド プロシージャ内でリンクされたデータベースのテーブルを参照できないという問題があります。エラーメッセージが表示されます:
ORA-00942: 表またはビューが存在しません
ホスト マシン (Oracle 10g を実行) でリモート データベース (Oracle 11g を実行) へのデータベース リンクを設定するために実行した手順を次に示します。手順は正確ですが、一部の名前は変更されていますが、一貫性は保たれています。
新しいエントリを追加して、tnsnames.ora を更新します。
REMOTE_DB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = 10.10.10.10) (QUEUESIZE = 20) (PORT = 1521) ) (CONNECT_DATA = (SERVICE_NAME = remote_service) ) )
後でストアド プロシージャを作成して実行するユーザーとして、データベース リンクを作成します。
create database link remote_link connect to "remote_user" identified by "remote_pass" using 'REMOTE_DB';
そこから選択して、データベースリンクが機能していることを証明します。
select id from remote_table@remote_link; id -------------------------------------------------------------------------------- 8ac6eb9b-fcc1-4574-8604-c9fd4412b917 c9e7ee51-2314-4002-a684-7817b181267b cc395a81-56dd-4d68-9bba-fa926dad4fc7 d6b450e0-3f36-411a-ba14-2acc18b9c008
作業中のデータベース リンクに依存するストアド プロシージャを作成します。
create or replace PROCEDURE test_remote_db_link AS v_id varchar(50); BEGIN select id into v_id from remote_table@remote_link where id = 'c9e7ee51-2314-4002-a684-7817b181267b'; dbms_output.put_line('v_id : ' || v_id); END test_remote_db_link;
次のエラー メッセージを 1 日以上見つめた後、自分の頭を爆発させてください。
Error(10,27): PL/SQL: ORA-00942: table or view does not exist
この問題を解決するために、次のような多くのことを試しました。
データベース リンクを作成するときは、ユーザー名とパスワードを引用符で囲みません。リンクは正常に作成されますが、そこから選択すると次のエラーが表示されます。
ERROR at line 1: ORA-01017: invalid username/password; logon denied ORA-02063: preceding line from TWS_LINK
大文字/小文字のユーザー名とパスワードのさまざまな組み合わせを試しました。1と同じエラーを受け取りました。
ユーザー名とパスワードを二重引用符ではなく一重引用符で囲んでみました。このエラーを受け取りました:
ERROR at line 1: ORA-00987: missing or invalid username(s)
sqlplus でリモート db に接続することにより、リモート db に完全にアクセスできることが証明されました。
[oracle]$ sqlplus remote_user/remote_pass@REMOTE_DB SQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 20 22:23:12 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
次に何をすべきかわかりません。考えられる次のステップは、リモート データベースの問題の調査を開始し、他のデータベースが接続できるかどうかを確認することです。もう 1 つは、ホスト 10g からリモート 11g への非互換性を調べることです。