问题现象
当在问题版本的用户租户 MySQL DB 内,手动创建了与系统租户 MySQL DB 内 help_topic、help_category、help_keyword、help_relation 同名(比较大小写不敏感)的多张表后(如在 MySQL DB 内创建两个名为 help_topic 的表),可能会导致 schema 刷新异常。
关键诊断信息
触发条件
在普通租户的系统 DB 内、多次创建与 SYS 租户 only 的内部表同名的表。由于普通租户的 oceanbase、information_schema 这两个 DB 限制了建表,SYS 下的都是 in_tenant_space=true,所以实际会触发问题的就只有 MySQL DB 内已有的四张 SYS 租户 only 的表 help_topic/help_category/help_keyword/help_relation。
事后诊断
关键日志含有 build table name hashmap failed 信息。
ERROR [SHARE.SCHEMA] rebuild_table_hashmap (ob_schema_mgr.cpp:4226) [95905][508][xxxxx-xxxxx] [lt=4] build table name hashmap failed(ret=0, hash_ret=-4200, table_id=1101710651087614, databse_id=1101710651031555, session_id=0, name_case_mode=1, table_name="help_xxxxx") BACKTRACE:0x7c1fdfa 0x7b6128a 0x43f24e 0x32e7b5e 0x32cc636 0x32cd1fc 0x10b1877 0x10b33fb 0x10c9ce1 0x3127307 0x312acd0 0x312b862 0x3a70348 0x39eb688 0x39edcda 0x3a69d91 0x1509d9c 0x298dfb5 0x7d34ed7 0x7d37319 0x7d39284 0x7d3b73a 0x4bcd0b1 0x1c4df5a 0xd8782c 0x7a4e327 0x7a4b5b0 0x7a48baf
问题原因
OceanBase 数据库 V2.2.0 版本 schema拆分引入的 BUG:在用户租户的 MySQL 库下多次创建名为 help_topic/help_category/help_keyword/help_relation 的表时,OceanBase 数据库误将这些用户表识别成了系统表,导致建表时通过了 SYS 租户的同名检测逻辑,而没有走到该租户的同名检测逻辑,从而没防住该租户下建同名。
问题的风险及影响
schema 刷新异常。
影响租户
影响 OceanBase 数据库中的 MySQL 租户,对于 SYS 租户和 Oracle 租户无影响。
影响版本
OceanBase 数据库企业版 V2.2.77 GA(oceanbase-2.2.77-20210508211731)及之后版本、V3.1.2 GA(oceanbase-3.1.2-20210618150922)及之后版本。
解决方法
事前: 升级 OceanBase 数据库至修复版本。
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP11(oceanbase-2.2.77-20220502140811)及之后版本、V3.1.2 BP8(oceanbase-3.1.2-20220329234820)及之后版本。
事中:
联系 OceanBase 技术支持通过修改内部表 + 重启集群恢复。
规避方式
问题版本中不要在任何租户的 oceanbase/information_schema/sys/mysql 库下创建和已有内部表(含系统租户)同名(比较大小写敏感)的用户表/视图/临时表等对象。