使用HammerDB测试Oracle 12c TPM时偶发‘extra characters after close-brace’错误求助
我使用HammerDB测试Oracle 12c数据库的TPM值时,偶尔会触发如下错误:
extra characters after close-brace
测试配置为3000个仓库、100个虚拟用户,该错误并非每次运行都会出现。我的基础环境信息如下:
- Red Hat Enterprise Linux Server release 7.4 (Maipo)
- Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
- HammerDB-2.23
错误截图:
这个偶发的extra characters after close-brace错误在HammerDB对接Oracle的高并发测试场景里挺常见的,尤其是你这种大仓库+多虚拟用户的配置,大概率是老版本的脚本解析bug或者并发会话冲突导致的。给你几个亲测有效的解决方向:
1. 优先升级HammerDB版本
HammerDB 2.23是2020年的老版本了,后续的3.x系列修复了大量Oracle相关的脚本解析和并发场景下的偶发问题。很多用户升级到最新稳定版后,这个错误直接就消失了,这是最省心的解决方案。
2. 给虚拟用户加启动延迟
100个虚拟用户同时发起请求,容易导致Oracle会话瞬间过载,间接引发HammerDB的脚本解析异常。你可以在HammerDB的TPC-C测试配置里,找到Virtual User Delay选项,设置100-500毫秒的延迟,让虚拟用户分批启动,缓解瞬间的会话压力,能有效降低这类偶发错误的概率。
3. 核对Oracle字符集配置
系统环境变量的NLS_LANG如果和Oracle数据库的字符集不匹配,可能会导致脚本里的字符解析异常,触发这类语法错误。你可以先查一下数据库的字符集:
SELECT value FROM nls_database_parameters WHERE parameter='NLS_CHARACTERSET';
然后把系统的NLS_LANG设置成对应的格式(比如AMERICAN_AMERICA.AL32UTF8),重启HammerDB再测试。
4. 手动修正HammerDB的测试脚本
如果暂时不想升级版本,可以手动修改HammerDB的Oracle TPC-C脚本:
- 找到HammerDB安装目录下的
oracle/tpcc/oltp.tcl文件 - 搜索和动态SQL拼接相关的代码块,检查是否存在括号不匹配或者多余空格/特殊字符的情况,比如某些
}后面不小心多了空格或者换行,调整后保存再测试。
5. 调整Oracle的进程数上限
100个虚拟用户加上数据库本身的进程,可能接近Oracle的processes参数上限,导致会话创建失败间接引发脚本错误。你可以先查看当前设置:
SHOW PARAMETER processes;
如果值小于300,建议调整到300以上:
ALTER SYSTEM SET processes=300 SCOPE=SPFILE;
修改后重启数据库生效。
一般来说,前两个方法就能解决大部分问题,优先试试升级版本或者加启动延迟,效率最高。
内容的提问来源于stack exchange,提问作者han liu

