首批通过分布式安全可靠测评,为关键业务系统打造
到原生 Oracle 的 DBLink 使用了非指定版本的 OCI 库导致 OBServer 进程 core dump
更新时间:2025-06-09 03:41
问题现象
使用 OceanBase 数据库的 DBLink 功能访问原生 Oracle 数据库时没有按照官网配置 OCI 步骤和要求配置指定版本的 OCI 库的 so 文件,或者配置时混用了多个版本的 OCI 库的 so 文件,再使用 DBLink 访问 Oracle 数据库会导致 OBServer core dump。
关键诊断信息
触发条件
没有按照官网配置 OCI 步骤和要求配置指定版本的 OCI 库的 so 文件,或者配置时混用了多个版本的 OCI 库的 so 文件,在这种情况下用 OCI DBLink 访问了原生 Oracle 数据库。
事前巡检
配置 OCI 库需要确认是否按照官网要求配置正确版本的 OCI 库文件的 so 文件,如果配置好了就不会出现问题。
事后诊断
配置 OCI 库的 so 文件后,再使用 DBLink 立马出现某个节点 core dump 大概率就是这个问题。
问题原因
OBServer 代码 include 了指定版本的 OCI 的头文件,例如 x86 平台下,OceanBase 数据库 V4.2.1 及之后版本的 OBServer include 了原生 Oracle 数据库 12.2 版本的 OCI 库头文件,OceanBase 数据库 V4.2.1 之前版本(包括所有的 V3.X 版本)的 OBServer include 了原生 Oracle 数据库 11.2 版本的 OCI 库头文件;ARM 平台下,所有版本的 OBServer include 了原生 Oracle 数据库 19.1 版本的 OCI 库文件。因此,相应版本的 OBServer 只能使用对应的版本的 OCI 库的 so 文件,如果 OCI 库的头文件和 so 库文件不匹配可能会出现 OCI 库内存访问出错的问题,最终导致节点 core dump。
原生 Oracle 数据库 11.2 版本的 OCI 库具体名称为
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm,这是 11.2 版本的 OCI 下载链接,这是 11.2 版本的 OCI 官网配置指南链接。
原生 Oracle 数据库 12.2 版本的 OCI 库具体名称为
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm,这是 12.2 版本的 OCI 下载链接,这是 12.2 的 OCI 官网配置指南链接。
ARM 平台的原生 Oracle 数据库 19.1 版本 OCI 库具体名称为
oracle-instantclient19.10-basic-19.10.0.0.0-1.aarch64.rpm,这是 ARM 原生 Oracle 数据库 19.1 版本的 OCI 下载链接,具体配置方法参考配置 X86 平台的原生 Oracle 数据库 12.2 版本 OCI 的配置方法,将 ARM 原生 Oracle 数据库 19.1 版本 OCI 库的所有 so 文件按照 X86 原生 Oracle 数据库 12.2 版本 OCI 库的配置方法配置即可。
问题的风险及影响
如果不按照官网文档来配置正确版本的 OCI 库 so 文件,使用 DBLink 访问原生 Oracle 数据库就会导致 OBServer 的节点 core dump。
影响租户
影响 OceanBase 数据库中的 Oracle 租户,对于 SYS 租户和 MySQL 租户无影响。
影响版本
OceanBase 数据库企业版 V3.2.3 GA(oceanbase-3.2.3.0-20220419)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本、V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本。
解决方法
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V4.2.1 BP3(oceanbase-4.2.1.3-103000052023122809)。
规避方式
严格按照官网文档来配置就不会出现 core dump,官网已经更新了(2024/02/29 起)手把手配置的教程,可参见:安装配置 OCI-V4.2.0-OceanBase 数据库、安装配置 OCI-V4.3.5-OceanBase 数据库,如有疑问可联系 OceanBase 数据库技术支持。