私は次のようなクエリがあります
INSERT INTO sid_rem@dev_db
(sid)
select sid from v$session
さて、このクエリを実行すると、
ORA-02070: database does not support in this context
このエラーは、v$sessionからリモートデータベースにデータを挿入した場合にのみ発生します。他のテーブルでも問題なく動作します。
この問題とその回避策を知っている人はいますか?
gv$session
の代わりに使用して動作しますv$session
:
INSERT INTO sid_rem@dev_db(sid)
select sid from gv$session;
gv $ビューはグローバルビューです。つまり、1つのノード(インスタンス)に制限されていませんが、データベース全体(RAC)を表示します。v$ビューはgv$のサブビューです。
インターネットで検索すると、これは分散トランザクションと関係があることがわかりました。
なぜこれが起こっているのかわかりません。おそらくドキュメントのどこかにあるのですが、私の Oracle-Docs-Fu は今日私を見捨てたようです。
考えられる回避策の 1 つは、グローバル一時テーブルを使用することです。
SQL> create table tmp_ben ( sid number );
Table created.
SQL> connect schema/pw@db2
Connected.
SQL> create table tmp_ben ( sid number );
Table created.
SQL> insert into tmp_ben@db1 select sid from v$session;
insert into tmp_ben@db1 select sid from v$session
*
ERROR at line 1:
ORA-02070: database does not support in this context
SQL> create global temporary table tmp_ben_test ( sid number );
Table created.
SQL> insert into tmp_ben_test select sid from v$session;
73 rows created.
SQL> insert into tmp_ben@db1 select * from tmp_ben_test;
73 rows created.