OCP内部表ob_hist_trans_stat创建分区失败

【 使用环境 】 测试环境
【 OB or 其他组件 】OCP /OB
【 使用版本 】OCP:4.2.1 OB:4.2.1.2
【问题描述】完成OCP升级后,出现告警,告警内容:ob_hist_trans_stat创建分区失败
【复现路径】
【附件及日志】


看一下这篇文章,

用obdiag 工具分析一下告警前后10分钟的日志
obdiag analyze log --from xxxx to xxxxx

手工执行时报错: [4109] [HY000]: Server state or role not the same as expected]
看报错和这个问题一样:(给表添加字段报SQL 错误 [4109] [HY000]: Server state or role not the same as expected),请问是4.2.1版本目前本身存在的问题么

手动执行报错4109,你是执行的什么语句? 建分区语句吗?按照上面的链接最后的排查路径查一下看,提供4109错误的具体的observer.log日志(4109的原因比较多,得确认一下具体情况)。

执行 obdiag analyze log --from xxx to xxxx,显示全部pass,根据observer.log搜索-4109关键字报错如下:


目前删除新增分区均会报该错误,observer日志后续附上。

看你上面贴的图是-5284的错误信息,这个报错是无法创建分区。可能有两种情况:

  1. ocp本身的分区管理失效,需要你发一下这张表的schema;
  2. 看是不是达到了单机分区上限(可能性不大);可以尝试手动在 monitordb上新建一个表来验证是否单机分区数达到上限。


alter table ob_hist_trans_stat add partition(partition P20240313 values less than(1710374400000000));
;2.
老师,在相同的schema下新建了一张分区表,手动可以正常加减分区,但是对于原来的表还是无法手动执行加减分区。


老师,这条SQL是我手动执行的,报错-4109;报错-5284的,看起来应该是OCP对表进行分区加减的报错。

系统租户设置 alter system set enable_rich_error_msg=true;

然后执行报错sql语句,会返回节点IP和trace_id信息

去对应节点IP 的rootservice.log 和 observer.log 过滤 trace_id 提供下相关日志。

rootservice.log中有一条关键日志:[2024-03-06 10:58:38.363643] WDIAG [SHARE.SCHEMA] check_table_history_matched_ (ob_table_sql_service.cpp:2008) [69331][DDLQueueTh0][T0][YB420AC54405-00061288059F8D6E-0-0] [lt=22][errcode=-4109] __all_table_history’s row not match with __all_table’s(ret=-4109, ret=“OB_STATE_NOT_MATCH”, tenant_id=1004, table_id=500120, schema_version=1709693918362408)

看起来是和这个问题一样的:给表添加字段报SQL 错误 [4109] [HY000]: Server state or role not the same as expected

参照这个链接中最后的解决方法,修正系统数据恢复。

你的环境里边Ob 4.2.1.2是近期升级上来才遇到的问题吗?

是的 是OCP的metadb,用OBD升上来的

好的,我按照这个试下

试了下 还是不行 还是报之前的错误

已解决,目前看是metadb的分区表都有这个问题,所以对__all_table全表刷新:
1、sys租户登陆
2、alter system change tenant tenant_id = 1002; # 切到业务租户
3、update __all_table set transition_point = NULL, b_transition_point = NULL, interval_range = NULL, b_interval_range = NULL ;

总结了一个SOP的文档:【SOP系列 23】—— OB 升级到 4.2.1 版本后遇到部分分区表执行ddl报错-4109问题排查及处理方法