ORA-02070:数据库在此上下文中不支持

时间:2013-01-04 08:59:19

标签: oracle dblink

我有一个像

这样的查询
INSERT INTO sid_rem@dev_db
(sid)
select sid from v$session

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

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

任何人都知道这个问题的原因以及解决方法吗?

3 个答案:

答案 0 :(得分:7)

使用gv$session代替v$session

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

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

的子视图

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

Thread on ora-code.com

答案 1 :(得分:1)

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

一种可能的解决方法是使用global temporary table

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.

答案 2 :(得分:0)

迟到的答案,但可能仍然有用。我发现在尝试从系统视图包含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列SEARCH_CONDITION

将因ORA-02070而失败,但

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)

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

分享并享受。