当前位置: 首页 > 游戏攻略> 正文

金融项目数据库迁移和分区表适配方案

来源:网络 作者:趣玩小编 发布时间:2024-05-28 15:59:48

最近遇到一个核心的金融项目,规模很大,客户主要使用oracle数据库。现在需要进行适配ob数据库,原先在oracle中使用的是分区表,迁移到ob后需要进行改造。

在oracle中,默认使用的是堆表(ht),而ob使用的是索引组织表(iot),由于表的原理不同,因此分区表会有一些区别。


1、表无主键,创建范围分区表

在没有主键的情况下创建分区表,只需提前确认好分区列、分区列的类型和分区规则即可。

由于历史原因,以前很多使用堆表的业务都没有使用主键。如果这类没有主键的表迁移到ob数据库,ob会建议创建必要的主键索引。

如果业务无法找到合适的列创建主键索引,上述SQL也可以兼容oracle,在ob_oracle租户可以直接创建成功。


2、表有主键,创建范围分区表

但是表有主键的情况下,情况会稍微复杂一些。在oracle中,由于是堆表,可以按以下方式创建分区表,主键和分区键之间可以没有关联。

但是在ob中,如果需要创建带有主键的分区表,分区列必须是主键列的一部分。

参考官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000820771

如果ob_oracle创建分区表使用单独的列会报错:ORA-00600: internal error code, arguments: -5261,A PRIMARY KEY must include all columns in the table's partitioning function。

ob_oracle正确创建分区表的方式:

但是这样会有一个问题,就是原先在oracle上order_id是主键,而在ob之后是order_id和order_date成为组合索引。

如果业务代码层面没有进行数据校验的逻辑,会在order_id上产生重复数据,这与原有的业务逻辑不符。

其实很简单,只需要对order_id加一个唯一索引即可实现在oracle上相同的逻辑。

这样一来,order_id就不会出现重复数据,而且ob分区表的逻辑也能和oracle对得上。

相关攻略 更多 +
玩家最喜欢 更多 +
热门攻略 更多 +
热搜
查看完整榜单