我有一个像
这样的查询INSERT INTO sid_rem@dev_db
(sid)
select sid from v$session
现在,当我执行此查询时,我得到
ORA-02070: database does not support in this context
仅当我将数据从v $ session插入某个远程数据库时才会发生此错误。它适用于任何其他桌子。
任何人都知道这个问题的原因以及解决方法吗?
答案 0 :(得分:7)
使用gv$session
代替v$session
:
INSERT INTO sid_rem@dev_db(sid)
select sid from gv$session;
gv $ views是全局视图,也就是说,它们不限于一个节点(实例),而是查看整个数据库(RAC)。 v $ views是gv $。
的子视图在互联网上搜索我发现这与分布式交易有关。
答案 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
。
分享并享受。