2019
#1
【 使用环境 】测试环境
【 OB or 其他组件 】obdiag 工具
【 使用版本 】3.3.0
【问题描述】使用obdiag 工具 gather plan_monitor 报如下错误
bdcbf6f4-24e7-11feIroot@obocp -]# obdiag gather plan monitor --trace id “YB420A379BE5-00063264B6EDAE65-0-08202-60026f95026
obdiag version: 3.3.0
‘root/.opdrad/config.ymgather plan monitor start …
plan explain> explain extended select count(*) from tl,tlERROOperationalError(1046,‘No database selected’)INARNI[Errno 2] No such file or directory:’./obdiag tabledump result 20250429185134.txt(1054, “Unknown column 'ps STMT ID’in 'field list””)command failed.
please contact 0ceanBase community. e: (1054, “Unknown column 'ps STMT ID’ in 'field list”"Trace I0: e92dcs02-24e7-11f0 a792-6c92bf95026eIf you want to view detailed obdiag logs, please run: obdiag display-trace e92dc502-24e7-11f0-a792-6c92bf95026e[root@obocp #
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#4
根据文档库中的信息,obdiag gather plan_monitor
报 No database selected
错误的原因可能是以下几点之一:
-
未选择数据库:在执行 SQL 查询时,OceanBase 数据库需要明确当前操作的数据库。如果未选择数据库,则会报 No database selected
错误。
-
参数错误:obdiag gather plan_monitor
命令的参数可能设置不正确,导致无法正确解析或执行相关 SQL。
以下是具体的解决方法:
1. 确保已选择数据库
在执行 obdiag gather plan_monitor
命令前,确保已经选择了目标数据库。可以通过以下方式确认和选择数据库:
2. 检查 trace_id
参数格式
根据文档片段 6 的描述,obdiag gather plan_monitor
的命令格式如下:
obd obdiag gather plan_monitor <deploy name> --trace_id <trace_id>
请确保 --trace_id
参数的值是正确的,并且符合以下要求:
-
trace_id
是一个有效的追踪 ID。
-
<deploy name>
是通过 obd cluster list
查看到的部署名称。
示例命令:
obd obdiag gather plan_monitor my_deploy --trace_id "YB420A379BE5-00063264B6EDAE65-0-08202-60026f95026"
3. 验证 SQL 执行环境
从错误信息中可以看到,plan_monitor
内部尝试执行了以下 SQL:
explain extended select count(*) from tl,tl;
这条 SQL 可能存在问题,例如:
- 表名
tl
不存在。
- 当前未选择数据库,导致无法解析表名。
建议:
- 确认表
tl
是否存在。
- 在执行
plan_monitor
前,手动测试 SQL 是否可以正常运行。
4. 收集诊断信息
如果上述方法仍无法解决问题,可以使用 obdiag
工具收集更多诊断信息,以便进一步排查问题。参考文档片段 4 的内容,执行以下命令:
obdiag gather scene run --scene=observer.base
总结
根据文档信息,No database selected
错误通常是因为未选择数据库或 SQL 语句存在问题。请按照以下步骤逐一排查:
- 确保已选择目标数据库。
- 检查
trace_id
参数是否正确。
- 验证 SQL 执行环境是否正常。
- 使用
obdiag
收集更多诊断信息。
如果问题仍未解决,请提供更多上下文信息(如完整的命令、部署名称等),以便进一步分析。
具体信息可参考以下文档:
- 错误码
- 0001 ~ 3999
- 遇到问题如何向技术支持同学提问
- 诊断工具命令组
- ob_admin 简介
- 使用命令行进行运维
2019
#5
环境为OB 3.2.3 BP9 版本, 租户为Oracle模式,如何指定数据库名?请举个命令例子
2019
#6
在问一下,obdiag gather plan_monitor --trace_id YB420BA2D99B-0005EBBFC45D5A00-0-0 --env “{db_connect=’-hxx -Pxx -uxx -pxx -Dxx’}”
这个env 后面的参数,到底写的是sys租户的连接串,还是业务租户的连接串,如果是业务租户的连接串,业务租户是Oracle模式,如何指定-Dxxx参数?
论坛小助手
#7
根据文档库中的信息,以下是针对您的问题的详细解答:
问题 1:在 OB 3.2.3 BP9 版本中,租户为 Oracle 模式时如何指定数据库名?
背景
在 OceanBase 数据库中,Oracle 模式下没有 MySQL 模式的 DATABASE
概念。取而代之的是通过用户和模式(Schema)来管理对象。因此,在连接 Oracle 模式的租户时,不需要显式指定 -D
参数(即数据库名),而是通过用户名和密码直接访问对应的 Schema。
命令示例
假设您需要连接到一个名为 business_tenant
的 Oracle 模式租户,并使用用户 scott
登录:
obclient -h<host> -P<port> -u"scott@business_tenant#cluster_name" -p<password>
-
参数说明:
-
<host>
:OBServer 或 OBProxy 的 IP 地址。
-
<port>
:OBServer 或 OBProxy 的端口号(默认为 2881 或 2883)。
-
scott
:登录的用户名。
-
business_tenant
:租户名称。
-
cluster_name
:集群名称(如果通过 OBProxy 连接,则需要指定)。
-
<password>
:用户的密码。
注意
- 在 Oracle 模式下,
-D
参数通常不需要指定,因为所有对象都属于当前用户的 Schema。
- 如果需要切换到其他 Schema,请使用
ALTER SESSION SET CURRENT_SCHEMA=<schema_name>;
命令。
问题 2:obdiag gather plan_monitor
中 --env
参数的作用及写法
背景
--env
参数用于指定 obdiag
工具运行时的环境变量,其中 db_connect
是用来定义数据库连接串的。该连接串可以是系统租户(sys
)的连接串,也可以是业务租户的连接串,具体取决于诊断场景的需求。
问题拆解
-
--env
参数是否必须指定系统租户(sys
)的连接串?
- 不一定。
--env
参数可以指定系统租户或业务租户的连接串,具体取决于诊断需求。
- 如果需要分析系统级别的计划监控数据(如全局资源使用情况),则应指定系统租户的连接串。
- 如果需要分析特定业务租户的计划监控数据,则应指定业务租户的连接串。
-
业务租户为 Oracle 模式时,如何指定 -D
参数?
- 在 Oracle 模式下,
-D
参数通常不需要指定,因为所有对象都属于当前用户的 Schema。
- 如果确实需要指定
-D
参数(例如为了兼容某些工具或脚本),可以将其设置为业务租户的名称。
命令示例
以下是一个完整的 obdiag gather plan_monitor
命令示例,假设业务租户为 Oracle 模式:
obdiag gather plan_monitor --trace_id "YB420BA2D99B-0005EBBFC45D5A00-0-0" \
--env "{db_connect='-h<host> -P<port> -u\"scott@business_tenant#cluster_name\" -p<password>'}"
-
参数说明:
-
<host>
:OBServer 或 OBProxy 的 IP 地址。
-
<port>
:OBServer 或 OBProxy 的端口号。
-
scott
:业务租户的用户名。
-
business_tenant
:业务租户的名称。
-
cluster_name
:集群名称(如果通过 OBProxy 连接,则需要指定)。
-
<password>
:用户的密码。
注意
总结
- 在 Oracle 模式下,
-D
参数通常不需要指定,因为所有对象都属于当前用户的 Schema。
-
obdiag gather plan_monitor
的 --env
参数可以指定系统租户或业务租户的连接串,具体取决于诊断需求。
- 如果需要兼容某些工具或脚本,可以将
-D
参数设置为业务租户的名称。
如果您仍有疑问,请提供更多上下文信息(如具体的诊断需求、租户配置等),以便进一步分析。
更多信息请查看:
- obcdc 配置项说明
- oceanbase.DBA_OB_RSRC_IO_DIRECTIVES
- 创建租户
- 通过 OBClient 连接 OceanBase 租户
- oceanbase.DBA_RSRC_PLAN_DIRECTIVES
- 创建 C 示例应用程序
- 创建服务
- 通过 ODC 图形化开发工具进行 SQL 开发
- GORM 连接 OceanBase 数据库示例程序
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
靖顺
#8
oracle 租户的-D填用户名,不过 obdiag gather plan_monitor在oracle 这块的支持没系统的测试过,可能会有报错出来,如果有问题麻烦到https://github.com/oceanbase/obdiag/issues 提个需求,我们来跟进去处理
2019
#9
您的意思, obdiag gather plan_monitor 只能收集租户为Mysql模式?不能收集租户为Oracle模式?
2019
#11
指定–env参数,报上面的错误Oracle tenant for current client drrver is not supported’
辞霜
#12
靖顺老师意思是当前obdiag未对oracle租户进行过适配。
2019
#13
obdiag对Oracle租户大概什么能支持,我们生产都是Oracle租户