暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 虚拟列问题: ORA-31495: Schema.Tablename上的同步变更表出错

askTom 2017-07-06
1487

问题描述

嗨,团队,

我面临着以前从未参与过我的数据库的棘手问题。我们有一些表,其中包含很少的虚拟列。这些虚拟列是使用用户定义函数生成的,该函数只是将字符串添加到上方。它工作正常,但是从最近2周开始,它通过应用程序代码在此表中插入记录时出现错误。Insert语句仅传递物理列,因此insert语句没有问题。

一种观察结果是,它是在生成此表的扩展统计信息之后发生的。

所以我在另一个环境中尝试相同的场景,生成扩展的统计信息和插入。它工作正常,因此我删除了扩展的统计信息,然后再次尝试插入。同样,它工作正常。

我试图从Oracle支持中获取一些详细信息,但是它只有1-2个线程,这对我的情况没有帮助。

我正在提交我的错误和测试用例供您参考。

错误:
ORA-31495: “TEST” 上的同步变更表出错。“ISTEST”
ORA-54013: 在虚拟列上不允许插入操作
ORA-06512: 在第1行


我遵循的步骤如下

创建表TESTTABLE
(“ID” 号不为空启用,
“特征” 号不为空启用,
“值” VARCHAR2(2000 CHAR),
"UPPERVALUE" VARCHAR2(4000 CHAR) 始终生成为 ("TEST"."TESTPKG"."ISUPPERC"("特性","值")) 虚拟,
);
-- Package TESTPKG.ISUPPERC检查特性的valie,并对Value列执行上部字符串


-Maintable具有与TESTTABLE相同的结构
插入TESTTABLE (ID、特征、值)
从可维护中选择ID、特征、值
其中ID不在 (42,48,49,50) 中;

提交;

-- 检查Extended_Stats (通过创建表生成)
选择扩展名称,从DBA_STAT_EXTENSIONS扩展,其中TABLE_NAME = 'TESTTABLE';

-收集统计数据
EXEC DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => 测试,TABNAME => 'TESTTABLE',CASCADE => TRUE,estimate_procit => 1,METHOD_OPT => '对于所有列大小1',粒度 => '全部',度 => 16);

-插入
插入TESTTABLE (ID、特征、值)
从可维护中选择ID、特征、值
其中ID = 42;

提交;

-在另一列上生成extended_stats
从对偶中选择DBMS_STATS.CREATE_EXTENDED_STATS (NULL,'TESTTABLE','(UPPER(ID))');

-插入
插入TESTTABLE (ID、特征、值)
从可维护中选择ID、特征、值
其中ID = 48;

提交;

-在另一列上删除extended_stats
exec dbms_stats.drop_extended_stats('cramer','TESTTABLE','(UPPER(ID))'));

-插入
插入TESTTABLE (ID、特征、值)
从可维护中选择ID、特征、值
其中ID = 49;

提交;

-在上值上删除extended_stats
exec dbms_stats.drop_extended_stats('cramer','TESTTABLE','(TEST.TESTPKG.ISUPPERC (特性,值))');

-插入
插入TESTTABLE (ID、特征、值)
从可维护中选择ID、特征、值
其中ID = 50;

提交;

以上所有测试工作正常,但在原始环境中,仍然会ORA-31495: 同步更改表中的错误。

请指导。

谢谢

专家解答

是的,它可能没有记录得那么好:

“ORA-31495” 表示您已设置更改数据捕获 (CDC)。而从数据仓库指南来看,对CDC的限制之一是:

“此外,不支持虚拟列。”

扩展统计信息的实现方式是通过添加虚拟列 (尽管隐藏),例如,如果我跟踪扩展统计信息的创建:

SQL> select
  2    DBMS_STATS.CREATE_EXTENDED_STATS(
  3        user, 'VEHICLE','(MAKE,MODEL)') tag
  4  from dual;

TAG
----------------------------------
SYS_STU8QPK2S$PEWHARK2CP3#1F#G

--
-- in trace file
--

alter table "SH"."VEHICLE" add 
    (SYS_STU8QPK2S$PEWHARK2CP3#1F#G
       as (SYS_OP_COMBINED_HASH(MAKE,MODEL)) 
virtual BY USER for statistics);




也许更大的担忧是疾病预防控制中心正在被拒绝...所以你也许应该看看替代方案。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论