首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库 V3.2.4.x 无法创建临时表,报错 MySQL compatible temporary table not supported 的原因及解决方法
更新时间:2026-05-21 01:56
问题现象
OceanBase 数据库 V3.2.4 BP6(oceanbase-3.2.4.6-106000062023110109)版本 MySQL 租户,创建临时表报错,无法创建临时表。
CREATE TEMPORARY TABLE IF NOT EXISTS temp_2 (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(512),
PRIMARY KEY (`id`)
) AUTO_INCREMENT = 1;
ERROR 1235 (0A000): MySQL compatible temporary table not supported
关键信息
前台报错 MySQL compatible temporary table not supported。
日志报错信息如下。
WDIAG ob_create_table_resolver.cpp:500 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=9] [dc=0][errcode=-4007] MySQL compatible temporary table not supported
WDIAG [SQL.RESV] ob_resolver.cpp:180 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=7] [dc=0][errcode=-4007] execute stmt_resolver failed(ret=-4007, parse_tree.type_=3097)
WDIAG [SQL] ob_sql.cpp:2274 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=39] [dc=0][errcode=-4007] failed to resolve(ret=-4007)
WDIAG [SQL] ob_sql.cpp:2387 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0][errcode=-4007] Failed to generate stmt(ret=-4007, result.get_exec_context().need_disconnect()=false)
WDIAG [SQL] ob_sql.cpp:4493 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=3] [dc=0][errcode=-4007] Failed to generate plan(ret=-4007, result.get_exec_context().need_disconnect()=false)
WDIAG [SQL] ob_sql.cpp:1985 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0][errcode=-4007] fail to handle physical plan(ret=-4007)
WDIAG [SQL] ob_sql.cpp:211 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=3] [dc=0][errcode=-4007] fail to handle text query(stmt=CREATE TEMPORARY TABLE IF NOT EXISTS temp_2 (
WDIAG [SERVER] ob_query_retry_ctrl.cpp:165 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0][errcode=0] ddl, and errno is not OB_EAGAIN or OB_SNAPSHOT_DISCARDED or OB_ERR_PARALLEL_DDL_CONFLICT, do not need retry(client_ret=-4007, err=-4007, retry_type_=0)
INFO [SERVER] ob_query_retry_ctrl.cpp:595 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0] check if need retry(client_ret=-4007, err=-4007, retry_type_=0, retry_times=1, multi_stmt_item={is_part_of_multi_stmt:true, seq_num:0, sql:"CREATE TEMPORARY TABLE IF NOT EXISTS temp_2 (
WDIAG [SERVER] obmp_query.cpp:707 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0][errcode=-4007] run stmt_query failed, check if need retry(ret=-4007, cli_ret=-4007, retry_ctrl_.need_retry()=0, THIS_WORKER.need_retry()=false, sql=CREATE TEMPORARY TABLE IF NOT EXISTS temp_2 (
WDIAG [SERVER] obmp_query.cpp:832 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0][errcode=-4007] query failed(ret=-4007, retry_ctrl_.need_retry()=0)
INFO [SERVER] obmp_packet_sender.cpp:302 [10854][0][Yxxxxx-xxxxx-xxxxx-xxxxx] [lt=5] [dc=0] sending error packet(ob_error=-4007, client error=1235, extra_err_info=0xffb47458d2c0, lbt()="0x1019b2f4 0xb73d640 0xb702e78 0xb99781c 0xb994604 0xb992ab8 0xbde87b4 0xb992264 0xbde5d84 0xb98d6b4 0xbde6338 0xfba3b0c 0xfba3940 0x109e5c5c")
问题原因
由于 MySQL 租户下临时表会带来性能问题,从 OceanBase 数据库 V3.2.4 BP5(oceanbase-3.2.4.5-105000012023081513)开始,MySQL 租户下默认禁止创建临时表,低版本升级上来的不受影响。
问题的风险及影响
MySQL 租户下创建临时表失败。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 MySQL 租户,对于 Oracle 租户无影响。
适用版本
OceanBase 数据库 V3.2.4 BP5(oceanbase-3.2.4.5-105000012023081513)及之后版本。
解决方法
生产环境不建议使用临时表,可使用普通表代替。