4

我有一个像这样的查询

INSERT INTO sid_rem@dev_db
(sid)
select sid from v$session

现在,当我执行这个查询时,我得到 ORA-02070: database does not support in this context

仅当我将 v$session 中的数据插入某个远程数据库时,才会发生此错误。它适用于任何其他表。

任何人都知道为什么会出现这个问题以及任何解决方法吗?

4

3 回答 3

7

使用gv$session而不是v$session

INSERT INTO sid_rem@dev_db(sid)
select sid from gv$session;

gv$ 视图是全局视图,也就是说,它们不限于一个节点(实例),而是可以看到整个数据库(RAC)。v$ 视图是 gv$ 的子视图。

在互联网上搜索我发现这与分布式事务有关。

ora-code.com 上的主题

于 2013-01-04T09:38:56.253 回答
2

迟到的答案,但可能仍然有用。我发现当尝试从系统视图中包含 LONG 类型列的数据库链接中选择系统视图时会发生此错误。如果可以改写查询以避免 LONG 列,则这些连接将正常工作。

例子:

SELECT dc_prod.*
  FROM dba_constraints@prod_link dc_prod
  INNER JOIN dba_constraints dc_dev
    ON (dc_dev.CONSTRAINT_NAME = dc_prod.CONSTRAINT_NAME)

由于访问 LONG 列,将失败并返回 ORA-02070 SEARCH_CONDITION,但是

SELECT dc_prod.*
  FROM (SELECT OWNER,
               CONSTRAINT_NAME,
               CONSTRAINT_TYPE,
               TABLE_NAME,
               -- SEARCH_CONDITION,
               R_OWNER,
               R_CONSTRAINT_NAME,
               DELETE_RULE,
               STATUS,
               DEFERRABLE,
               DEFERRED,
               VALIDATED,
               GENERATED,
               BAD,
               RELY,
               LAST_CHANGE,
               INDEX_OWNER,
               INDEX_NAME,
               INVALID,
               VIEW_RELATED
          FROM dba_constraints@prod_link) dc_prod
  INNER JOIN (SELECT OWNER,
                     CONSTRAINT_NAME,
                     CONSTRAINT_TYPE,
                     TABLE_NAME,
                     -- SEARCH_CONDITION,
                     R_OWNER,
                     R_CONSTRAINT_NAME,
                     DELETE_RULE,
                     STATUS,
                     DEFERRABLE,
                     DEFERRED,
                     VALIDATED,
                     GENERATED,
                     BAD,
                     RELY,
                     LAST_CHANGE,
                     INDEX_OWNER,
                     INDEX_NAME,
                     INVALID,
                     VIEW_RELATED
          FROM dba_constraints) dc_dev
    ON (dc_dev.CONSTRAINT_NAME = dc_prod.CONSTRAINT_NAME)

SEARCH_CONDITION工作正常,因为未访问 DBA_CONSTRAINTS 中的 LONG 列。

分享和享受。

于 2013-07-22T14:24:16.913 回答
1

我不知道为什么会这样,它可能在某个地方的文档中,但我的 Oracle-Docs-Fu 今天似乎已经抛弃了我。

一种可能的解决方法是使用全局临时表

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.
于 2013-01-04T09:30:23.713 回答