为了帮助同学们更高效地报名、参与比赛,我们将定期将同学们遇到的常见问题及解决方式同步到这里,如果同学们遇到问题,可优先从这里查找解决方案,如未找到解决方案,可以在大赛钉钉官方交流群进行提问,群号: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 ( 2023、2024)或在钉钉群内提问。
二、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 Code 的 C/C++ 扩展(由 Microsoft 提供)使用的是自己的 IntelliSense 引擎(基于 clang),需要单独配置 C++ 标准。
按下 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P (macOS),输入并选择:
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)
