答えがここで議論された:場合リンクにhttp://dba010.wordpress.com/2011/01/05/oracle-errorsora/#ORA-02069
は動作しません:
エラー:
ORA-02069:GLOBAL_NAMESをこの操作では、パラメータをTRUEに設定する必要があります。
原因:
あなたは地元の機能を使用してリモート・データベースでDML操作をしようとしています。
これは「Oracle Bug」ですが、動作するはずですが、そうではありません。
例(よりよく理解するために):
-assume我々は二つのデータベースDB1とDB2我々が持っている
-On DB1我々が持っている機能のFUN1
create function fun1 return number is
begin
return 1;
end;
-On DB1を持っていますDB2を参照するデータベース・リンクは、簡単のために、DB2と呼ばれています。
- 動作することを確認してください。
select *
from [email protected]
- 出力が次の場合は動作します。
DUMMY
-----
X
-LEtの
create table tesTable(
id number,
testColumn number
);
(DB2データベースに接続)DB2のテストテーブルを作成-LEtのこのORA-02069エラーが発生しなければならないいくつかのDML操作を、作ります。
insert into [email protected](id,testColumn)
values(1, fun1);
“ORA-02069: global_names parameter must be set to TRUE for this operation”
ここで、このエラーがどのような状況で発生しているかを知っていれば、解決策を書きましょう。これは、2つのソリューションがあります。
策1:trueにGLOBAL_NAMESパラメータを設定
- 、それは
(そのセッションレベルは時々利用できません考える)、システムレベルまたはセッションレベルで行うことができます
--on DB1
alter session set global_names=true;
- DB2の場合、データベースDB1(データベースのグローバル名と同じリンク名を指定します。これはglobal_namesパラメータにtrueを設定する必要があるため)を参照する、データベースのリンクを作成します。
-On DB2
Create database link DB1 connect to <username> identified by <password>
using ‘DB1’;
今では動作するはずですが、ので、それは、あなたはなぜ推測する必要があります(セキュリティで保護されていないので、私は、データベース・リンクを作成することは好ましいことではないことを
を言及する必要がありますこれを行うと、 データベースリンクを介していくつかのユーザーとDB1に接続することができます...それはあなたのために重要でない場合はそれを使用してJ)。
対処方法2:
- ローカルデータベースに一時テーブルを作成します。
- 一時テーブルに行を挿入します。
- テンポラリ・テーブルのテンポラリ・ローをリモート・データベースに挿入します。
- 一時的な行を削除します。 このソリューションは、最初のものよりも遅いことに注意してください。しかし、それはまた、問題を解決し、はるかに安全です。 http://dbtricks.com/?p=263:
このエラーが発生したときに何をしようとしていますか(コードのどの行)ですか? –
ご回答いただきありがとうございます...私はdblink経由で行を挿入しようとしています...私のSQL文の一部は、この挿入がtmp_b_transfer_amt @ xl02 select(select acc.acct_no from [email protected] ... – kupa
実際のアドバイスとして、** @ user_name **を使用してメッセージを開始すると、あなたのコメントへの返答が速くなります。**のように**使用されているDBリンクを作成する前にコードを使用してください(コメントではなく、オリジナルの投稿に追加してください) –