---
title: 租户命名空间下存在多个同名(包括为空串)的约束，导致 OBServer core-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于租户命名空间下存在多个同名(包括为空串)的约束，导致 OBServer core相关的常见问题和使用技巧，帮助您快速解决租户命名空间下存在多个同名(包括为空串)的约束，导致 OBServer core的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 租户命名空间下存在多个同名(包括为空串)的约束，导致 OBServer core

更新时间：2026-06-04 09:56

适用版本： V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

1. 使用 ODC V3.4.0 及 V3.4.0 BP 版本 ODC 的 "新建" 功能创建约束时，若不指定约束名，则会生成约束名为空串的 DDL 示例如下。

   ```shell
   CREATE TABLE "TEST"."T1" (
   "C1" INTEGER NULL,
   "C2" INTEGER NULL,
   CONSTRAINT "" PRIMARY KEY ("C1")
   );

   ```
 2. 在问题版本 OBServer 中, 当某租户命名空间内(Oracle 模式为 user 内， MySQL 模式下为 DB 内) 含多个同名 (包括为空串) 的约束时, 可能导致 schema 刷新异常 或 OBServer core。

## 问题原因

1. 在 ODC 3.4.0 及 3.4.0 BP 版本中，由于“新建”功能内部行为变化，导致创建约束时若不指定约束名，则在生成的 DDL 中该约束名为空串（即""）。
 2. 在问题版本 OBServer 中创建约束时，由于部分内核模块缺少对 空串名拦截 及 同名约束检查 的 bug，导致一个租户下的命名空间可内能创建出多个同名（包括为空串）的约束，进而又会触发 schema 刷新线程不清理上下文的 bug，从而导致 OBServer schema 刷新 hang 住，甚至 OBServer core 掉。

## 问题的风险及影响

当某租户的命名空间 (Oracle 模式为 user 内，MySQL 模式下为 DB 内) 内含有多个同名（包括为空串）的约束时，可能会导致 OBServer schema 刷新异常 或 OBServer core 掉。

## 影响的版本

- OceanBase 数据库 V2.2.77 BP15 (oceanbase-2.2.77-115000012023010607)、V3.1.2 BP11 (oceanbase-3.1.2-111000052023010412)、V3.1 OpenSource 未发版、V3.2.3 BP7 (oceanbase-3.2.3.3-107000092023011911)、V3.2.4 BP1 (oceanbase-3.2.4.1-101000052023010822)、V4.0.0.0 BP2 (oceanbase-4.0.0.0-102000022023011212) 之前版本。
 - ODC V3.4.0 和 V3.4.0 BP。

## 解决方法及规避方式

- 解决方法：

     - 问题发生前，请升级相关产品至问题已修复版本。目前已修复的版本包括：
           - OceanBase 数据库 V2.2.77 BP15 (oceanbase-2.2.77-115000012023010607)、V3.1.2 BP11 (oceanbase-3.1.2-111000052023010412)、V3.1 OpenSource 未发版、V3.2.3 BP7 (oceanbase-3.2.3.3-107000092023011911)、V3.2.4 BP1 (oceanbase-3.2.4.1-101000052023010822)、V4.0.0.0 BP2 (oceanbase-4.0.0.0-102000022023011212)、V4.1 (oceanbase-4.1.0.0-100001122023040322) 及后续版本。
           - ODC V3.4.0 BP 后续版本
     - 问题发生后，请尽快联系 OceanBase 技术支持进行处理。
 - 规避方式：

     - 不创建任何名字为空的对象。
     - 检查不同租户模式下的约束来判断集群是否有隐患，发现问题后请尽快联系 OceanBase 技术支持进行处理。
     - 针对 Oracle 租户，同一 user 内不能出现多个同名约束（包括为空串）。在 sys 租户下查询下表。

      ```shell
      SELECT *FROM OCEANBASE.__ALL_VIRTUAL_CONSTRAINT;

      ```
     - 针对 MySQL 租户，同一 DB 内不能出现多个同名约束（包括为空串）。在本租户下查询下表以检查。

      ```shell
       SELECT* FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

      ```

      #### 注意

      由于内核对空串名拦截实现的原因，OBServer 不能保证在其他模块创建对象时对空串名的有效拦截。因此，请在创建任何对象时指定非空的对象名。

Previous

[在大量写入的场景下对于虚拟表 __all_virtual_memstore_info 访问会 core](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000048147)

Next

[使用关键字 resource/public/connect 作为用户名进行密码设置 core 的问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000038419) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
