• OceanBase数据库这次被人骂惨了
  • 发布于 2个月前
  • 147 热度
    0 评论
  • 阳光
  • 1 粉丝 29 篇博客
  •   
OceanBase是之前蚂蚁金服的一款国产分布式数据库产品,国内非常的有名。现在Oceanbase已经拆分出来,成为了独立的公司。最近我发现有人把OceanBase给骂惨了。文章里,作者讲了一件事情。有一个客户,在从Oracle迁移到OceanBase的过程中,在并轨生产运行的时候,上层的应用报了一个ORA-XXX的错误。

由于这个错误是一个挺严重的错误,DBA就开始花费了大量时间进行分析。然而这一分析不要紧,分析完了以后,Oracle DBA们开始想要爆粗口骂人了。原来,这个ORA-XXX的错误,不是Oracle报错,是OceanBase报错。但是OceanBase怎么就报出了和Oracle一模一样的错误编码的异常呢?不但错误编码一模一样,连错误的提示信息都一模一样哦。

李鬼高仿李逵,高仿到这种程度,真假难辨到让有经验的Oracle DBA都觉得肯定是Oracle出错了,你说这是不是一种本事?说起来,我也觉得是一种本事。但是这种本事吧,如果高仿到让人完全不知道是OceanBase的错误,大家就总是以为Oracle出错了,结果查了半天Oracle就是没有错,有错的是OceanBase,你说你要是Oracle 的DBA,你是想骂人还是想打人?

这篇文章表示,OceanBase作为一个数据库能不能够不要用Oracle的信息编码和错误提示?文章说,这样做至少有三个问题。

第一个问题,虽然说OceanBase报错了一个和Oracle某个错误信息一模一样的错误信息,但是其本质上来说,犯错误的原因并不相同。不同的原因用了同样的信息提示,很容易误导别人。这话说得没毛病,毕竟OceanBase和Oracle架构都不同,配置都不一样,估计犯错了也不可能完全一模一样,最多就是接近的错误,用相同的错误代码。

第二个问题,是如果OceanBase的报错信息和Oracle完全一样,无论从编码到文字都一模一样的高仿的话,那么在工作环境里面,如果OceanBase报错了,是个人都没办法知道到底是Oracle在报错,还是OceanBase在报错。这无疑是增加了DBA们的工作难度。

第三个问题,Oracle作为一个产品,也是会升级的,会更新换代的。所以Oracle的错误编码和错误信息也是会升级换代的。难道OceanBase要死死盯着Oracle,对方每次升级,自己都赶紧更新自己的高仿升级?这要付出多大的代价呢?

这篇文章就觉得OceanBase这种李鬼高仿李逵的做法,是有问题的,而且问题很严重。但是话说回来,从这篇文章可以看出来,OceanBase为了兼容Oracle,可以“兼容”到这种程度,确实令人发指。问题是,OceanBase为什么需要兼容Oracle到这种程度呢?也许,我猜,有些上层的应用是把Oracle的错误代码和错误信息硬编码进了自己的应用里。

那么,为了确保应用一行代码都不改,OceanBase可以直接平替掉Oracle这种奇葩需求,OceanBase的高仿,当然要连错误代码和错误信息都要一模一样了。这种情况下,李鬼和李逵,上层应用肯定要无法区分才行。不然的话,上层应用多半会挂掉。那么上面那篇文章说的那些东西是不是真的对呢?

我必须说,那篇文章说的是没问题的,但是怎么说都没有用。要明白,真正给钱的是谁?如果给钱的人要求OceanBase替换Oracle的时候,上层应用必须一行代码不改,都能够毫无错误的继续运行下去的话,那OceanBase为了赚到这笔钱,也只能在高仿的道路上一骑绝尘,别无选择了。而因此造成的Oracle DBA们的不开心,和Debug的困难,以及OceanBase面对Oracle的每次升级,都需要更新自己的错误信息,这些,和赚钱相比,都是小事了。

所以你要问我,到底应该怎么选择,当然应该一切向钱看。如果OceanBase的兼容性已经做到这种走火入魔的程度的话,那我真的好奇,号称兼容性最好的达梦数据库,对Oracle的兼容,到底要做到什么程度。OceanBase发了不少技术文章了,而且核心源代码也开源了。但是对Oracle的兼容这部分的代码,是完全没开源的。由此可见,技术什么的,不是OceanBase最核心的竞争力,对Oracle的兼容才是。

如果OceanBase能够写点论文,和大家讲讲自己是怎么样筚路蓝缕不辞辛苦的把Oracle的兼容性做到如此丧心病狂令人发指的程度的,我相信,大家一定都很有兴趣。

用户评论