ob4.0疑似bug系列1: CTAS快速复制动态性能视图的数据到表 失败

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.0社区版
【问题描述】
说明:CTAS 是 create table as 的简称,在各种关系型数据库中都支持的最基本的建表命令。

oceanbase这个系统数据库继承了一些Oracle数据库比较经典的动态性能视图,比如:

v$session_wait, v$sessstat, v$sysstat等等,下面我们在test数据库尝试建个新表,将

v$session_wait的数据复制到新表。

要完成这个任务,最简单的实现方式就是使用CTAS命令:

create table test1 as select * from oceanbase.v$session_wait;

结果,出错了,错误信息如下:

ERROR 1048 (23000): Column ‘TIME_REMAINING_MICRO’ cannot be null

接下来,我们执行 describe oceanbase.v$session_wait 看看这个视图的结构:

再查下这个视图看看有什么数据吧 ?
select time_remaining_micro,time_since_last_wait_micro from oceanbase.v$session_wait;

结论: time_remaining_mircro 这个列的值有NULL。

看来CTAS 不好使了 ? 非也,还是使用CTAS, 只不过不插入数据,只创建表结构
use test;
create table test1 as select * from oceanbase.v$session_wait where 1=0;

接下来使用传统的insert into 命令插入数据:

insert into test1 select * from oceanbase.V$SESSION_WAIT;

又出错了,还是之前的错误 "column ‘TIME_REMAINING_MICRO’ cannot be null "
ERROR 1048 (23000): Column ‘TIME_REMAINING_MICRO’ cannot be null

看来 只能修改列的属性了:

alter table test1 modify TIME_REMAINING_MICRO bigint(20) default NULL;

然后再执行insert 操作,这次总算成功了
insert into test1 select * from oceabase.v$session_wait;

总结一下: 在oracle中我经常用这种方式来快速创建用于测试的临时表,
从来没遇到这个问题。难道ob会存在这种低级错误 ? :weary:

【复现路径】
按照上面的测试步骤, 100%复现。

【问题现象及影响】
影响倒不是很大,有workaround, 但是用户体验不太好。

【附件】

这个现象不符合预期,我们内部修复下,您方便在 GitHub 提个 issue 吗?https://github.com/oceanbase/oceanbase

github很难连上,经常网络超时。