参赛必读 | 2025 OceanBase 数据库大赛

为了帮助同学们更高效地报名、参与比赛,我们将定期将同学们遇到的常见问题及解决方式同步到这里,如果同学们遇到问题,可优先从这里查找解决方案,如未找到解决方案,可以在大赛钉钉官方交流群进行提问,群号:35326455。

一、大赛基本信息

1、【赛程安排】
报名时间:7月31日-10月24日 20:00
初赛:10月20日10:00-11月12日 18:00
决赛:11月19日10:00-12月22日 18:00
现场答辩:2026年1月

2、大赛报名:OceanBase 社区

3、初赛赛题将于2025年10月20日10:00正式公布,请及时关注大赛群通知。

4、大赛培训教程:OceanBase 社区

5、训练营使用说明:训练营使用说明

6、创建Github 私有仓库说明: https://oceanbase.github.io/miniob/game/github-introduction/801

7、本次大赛答疑均在钉钉群进行,微信群仅作为重要通知提醒。请各位参赛同学尽快加入大赛钉钉答疑群(群号:35326455)

8、如果仍然有其他问题,也可参考往年 FAQ ( 20232024)或在钉钉群内提问。

二、FAQ

1、【关于报名】报名中指导老师必填么?指导老师的工作证指什么?代码仓库如何填写……

答:关于报名信息的填写,其中标红色*的信息为必填项,未标注的信息为选填信息,即有的话就填上,没有的话就无需填写。

学生证: 有的大一、研一的同学还没有下发学生证,那么上传能证明你是学生身份的证件均可,如录取通知书、校园卡等;

指导老师信息填写 :如果有指导老师就填写上,如果没有可不填写;指导老师的工作证,上传指导老师身份信息的资料即可,如职工卡亦可;

创建团队: 只有队长身份需要创建团队,队员加入队长所创建队伍即可;

组队 :队伍由1-3名成员组成,可以个人参赛,支持跨校、跨省进行组队;如需要找队友可以在大赛钉钉群、微信群中寻找,或联系OB社区小助手帮忙组队;

赛题仓库地址 :可以参考这个文档创建自己的 miniob 代码仓库,然后将自己代码仓库的URL填入 miniob 代码仓库即可: https://oceanbase.github.io/miniob/game/github-introduction/801

对于oceanbase代码仓库的创建,文档中链接给出来的是miniob代码仓库的说明,创建自己oceanbase代码仓库的方法是类似的,将文档中的 miniob (oceanbase/miniob)换成 oceanbase (GitHub - oceanbase/oceanbase: OceanBase is an enterprise distributed relational database with high availability, high performance, horizontal scalability, and compatibility with SQL standards.124) ,按照相同的方法创建,然后拿到自己oceanbase代码仓库的地址填入报名页。

2、【关于初赛】初赛的参赛形式是怎样的?初赛赛题什么时候公布?应该如何参赛?用什么软件参赛?

参赛形式 :初赛为线上参赛,通过相应赛题提测后会在英雄榜实时更新队伍得分,待初赛开始后,同学们可以在官网的英雄榜页面实时查看自己队伍的得分及排名;

初赛时间 :10月20日10:00-11月12日18:00。

搭建开发环境 :可参考文档:https://oceanbase.github.io/miniob/dev-env/introduction/#1439

3、使用 Memtracer,启动 MiniOB 出现如下信息:

-=323199-=ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.

说明 MiniOB 编译时启用了 ASAN,而 Memtracer 暂不支持与 ASAN 同时使用
需要重新进行编译

bash build.sh clean
bash build.sh -DENABLE_ASAN=OFF -DWITH_MEMTRACER=ON

补充说明:
使用 memtracer::allocated_memory() 输出内存大小:

memtracer::allocated_memory();
static JiebaTokenizer instance;
memtracer::allocated_memory();

发现两次数值没有发生变化。
同样说明 MiniOB 编译时启用了 ASAN,这时 ASAN 会提前进行注入,Memtracer 无效。

4、编译 Memtracer,最后链接阶段出现如下报错:

/usr/bin/ld: ../../lib/libmemtracer.so: undefined reference to dIsym"
collect: error: ld returned 1 exit status

请在 src/memtracer/CMakeLists.txt 里最后一行将

target_link_libraries(memtracer pthread)

改为

target_link_libraries(memtracer pthread dl)

5、编译 MiniOB,出现如下报错:

/root/miniob/src/observer/storage/tokenizer/jieba_tokenizer.h:12:10: fatal error: cppjieba/Jieba.hpp: No such fille or directory

请先更新依赖后重新进行编译

bash build.sh init

如果仍未找到 cppjieba ,请删除 build 目录防止缓存的干扰

# 删除对应的构架目录,如 build/,build_debug/,build_release/
rm -rf build 
# 重新编译
bash build.sh 

6、与 competition-2025 分支合并后冲突较多
可以只合并 MiniOB-2025 这次提交
也可以使用已有的代码进行开发,但推荐合并该比赛分支,其中包含新的框架和依赖。

7、init 发生如下报错:

bash build.sh init
To add an exception for this directory, call:
git config -global --add safe.directory /root/miniob/deps/3rd/cppjieba
Could not find a package configuration file provided by "limonp" with any of the following names:

当在一个不属于当前用户(或权限不明确)的 Git 工作目录中操作时,Git 会拒绝执行某些操作以防止潜在的安全风险。
特别是当主项目使用了子模块(submodule),而该子模块的目录所有权或路径被 Git 认为“不安全”时,就会出现这个提示。
可以按提示运行:

# 替换为对应依赖所在的路径
git config -global --add safe.directory /root/miniob/deps/3rd/cppjieba
bash build.sh init

8、编译报错没有权限

./build.sh
mkdir: cannot create directory /root/miniob/miniob/build_debug: Permission denied

请使用 sudo 进行编译

sudo ./build.sh

9、docker + vscode 配置
可以参考:miniob环境配置速通教程(Oceanbase数据库大赛/SDU数据库实验)超级手把手版
使用 Docker 和 VSCode 远程开发 Miniob

10、训练营输出说明

UPDATE t5 SET t_name_false='M4QBOUWT9U' WHERE id=65;
- FAILURE
+ SUCCESS

-表示少了,选手输出少了 FAILURE 这行,也说明正确答案应该是 FAILURE
+表示多了,选手输出多了 SUCCESS 这行

11、date 测试说明
25 年 date 测试用例相对于 24 年有所增强,可能会出现 24 年能通过,但 25 年不能通过的情况。
选手自测可以参考 为什么照教程做的date实现在24年就能通过在25年就不通过,题目没变啊

12、date 官方视频教程示例代码
可以参考 DATE类型的添加题目

13、MiniOB 编译太慢:
可以使用 -j 参数指定编译并行数

# 开 8 个任务同时编译 debug
bash build.sh debug --make -j8

14、init 报错:

/root/miniob/deps/3rd/cppjieba/include/cppjieba/MPSegment.hpp:7:10: 
fatal error: limonp/Logging.hpp: No such file or directory

请在 deps/3rd/cppjieba/ 下执行

git submodule update --init
# 之后重新 init
bash build.sh init

15、unique 赛题报错:

SELECT * FROM unique_table4;
+ 1 | aaaa
  2 | Yuan
  4 | Linn

可以检查是否是因为插入或更新失败时回滚不完全。

16、关于提交次数
目前是 MiniOB-2025,primary-2025-oceanbase,rag-benchmark-2025 三个赛题每日各 10 次,提测间隔时间不能小于 10 分钟。
返回提测状态为提测失败时不计入提测次数

17、update-mvcc 测试报错

update t_update_mvcc_2 set id = 13 where name = 'wanghong';
- FAILURE
+ SUCCESS

更详细的返回是

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

注意: 由于 name 没有索引,MySQL 必须逐行检查 name = 'wanghong',这种情况下几乎相当于对整个表加锁,导致锁等待超时。

18、OceanBase 依赖下载缓慢

# 该命令下载依赖很慢
bash build.sh debug --init

可以修改镜像源,将 https://mirrors.aliyun.com/oceanbase/ 替换为 https://mirrors.oceanbase.com/

# 在 deps/init/dep_create.sh 中添加 echo oceanbase.${OS_TAG}.deps
# 修改对应的 deps/init/oceanbase.${OS_TAG}.deps 文件
# 例如 oceanbase.al8.aarch64.deps:
[target-default]
repo=https://mirrors.aliyun.com/oceanbase/development-kit/al/8/aarch64/

[target-community]
repo=http://mirrors.aliyun.com/oceanbase/community/stable/al/8/aarch64/
# 改成
[target-default]
repo=https://mirrors.oceanbase.com/development-kit/al/8/aarch64/

[target-community]
repo=https://mirrors.oceanbase.com/community/stable/al/8/aarch64/

也可以更新 https://github.com/oceanbase/oceanbase/pull/2323 中的最新 commit Replace dependent image sources
补充说明:
无论是 https://mirrors.aliyun.com/oceanbase/ 还是 https://mirrors.oceanbase.com/ 都连接不上

--2025-10-28 21:57:41--  https://mirrors.oceanbase.com/development-kit/
el/7/x86_64//devdeps-oblogmsg-1.1-52024052811.el7.x86_64.rpm
Resolving mirrors.oceanbase.com (mirrors.oceanbase.com) ... 222.192.187.110, 
118.228.23.25, 118.228.23.24, ...
Connecting to mirrors.oceanbase.com (mirrors.oceanbase.com)|222.192.187.110|:443... 
failed: Connection timed out.

可以修改 /ect/hosts 文件,在最后添加

# sudo vim /ect/hosts
# 可以查询对应网站链接的 ip 地址,找个网速快的 ip
36.163.116.17   mirrors.oceanbase.com

之后重启网络(不同操作系统方式不同,比如centos7后无需重启)

19、评测中仓库 clone 失败

failed to clone repo. error=rc=1, 
msg=invalid url:  https://github.com/miniob/miniob. 
unknown url prefix,clone repo failed

failed to clone repo. error=rc=102, msg=failed to reset commit id. 
command=git reset --hard 'a310dh1cda ',  
unknown revision or path not in the working tree.
clone repo failed

第一种情况是在仓库地址前多加了空格,第二种则是 commit id 后多了空格
注意提测时填写对应的仓库地址,分支名或 commit id 时不要多加空格。

20、gdb 调试 MiniOB
vscode 中 开发 MiniOB 已经安装过 c++ 插件
可以直接启动命令行的 gdb 调试(在 Run and Debug中),客户端/服务器调试可以参照以下配置:

// 在 .vscode/launch.json 中添加
{
      "type": "cppdbg",
      "request": "launch",
      "name": "server",
      "program": "${workspaceFolder}/${defaultBuildTask}/bin/observer",
      "args": ["-f", "${workspaceFolder}/etc/observer.ini", "-p", "6789"],
      "cwd": "${workspaceFolder}/${defaultBuildTask}/",
      "internalConsoleOptions": "openOnSessionStart",
      "osx": {
            "MIMode": "lldb",
            "externalConsole":true
      }
}

21、MiniOB 能正常编译,但 vscode 显示 span报错
需要确保 IntelliSense 正确识别 C++20 标准。虽然编译器(如 g++/clang++ )可能已经支持 C++20 并能成功编译,但 VS CodeC/C++ 扩展(由 Microsoft 提供)使用的是自己的 IntelliSense 引擎(基于 clang),需要单独配置 C++ 标准。
按下 Ctrl+Shift+PWindows/Linux)或 Cmd+Shift+PmacOS),输入并选择:

C/C++: Edit Configurations (UI)

C++ standard 改成 c++20 即可

22、训练营提测报错

+ failed to receive response from observer. reason=Failed to receive from server. 
poll return POLLHUP=16 or POLLERR=str(event & select.POLLERR)

只返回服务器没有响应,但是没有返回崩溃前的调用栈(类似以下的输出)

#5  0x00007f2dbc5f881b in __assert_fail_base (fmt=0x7f2dbc7a01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x55610e68d12e "false", file=file@entry=0x55610e68d0d8 "/home/miniob/miniob_test/players/miniob/src/observer/sql/expr/expression_iterator.cpp", line=line@entry=75, function=function@entry=0x55610e68d068 "static RC ExpressionIterator::iterate_child_expr(Expression&, std::function<RC(std::unique_ptr<Expression>&)>)") at ./assert/assert.c:96
#6  0x00007f2dbc60b517 in __assert_fail (assertion=0x55610e68d12e "false", file=0x55610e68d0d8 "/home/miniob/miniob_test/players/miniob/src/observer/sql/expr/expression_iterator.cpp", line=75, function=0x55610e68d068 "static RC ExpressionIterator::iterate_child_expr(Expression&, std::function<RC(std::unique_ptr<Expression>&)>)") at ./assert/assert.c:105
#7  0x000055610e563fbd in ExpressionIterator::iterate_child_expr(Expression&, std::function<RC (std::unique_ptr<Expression, std::default_delete<Expression> >&)>) (expr=..., callback=...) at /home/miniob/miniob_test/players/miniob/src/observer/sql/expr/expression_iterator.cpp:75

多半是服务端主动断开了与客户端的连接,比如返回了 RC::INTERNAL 等。
排查时请用服务器/客户端模式启动 MiniOB,而不是使用命令行模式。

22、训练营提测发生崩溃,但本地无法复现
评测返回结果中有调用栈,但是本地该语句在命令行和服务器/客户端模式下都无法复现。
遇到这种情况时请在编译时关闭ASAN,指定 -DENABLE_ASAN=OFF 后进行复现,也可以查看 ASAN 错误报告帮助排查问题。
ASAN 通过改变程序内存布局会影响到程序的行为。

大赛微信交流群

2025大赛钉钉及交流群(群号:35326455)

欢迎参加 OceanBase 数据库大赛

1 个赞