OceanBase DBA 应该掌握的 100 条命令(建议收藏)
OceanBase 的日常运维和传统单机数据库有明显区别。它不仅需要管理数据库对象和 SQL还需要同时关注集群、Zone、OBServer、租户、资源单元、资源池、日志流、合并任务以及备份恢复。对于刚接触 OceanBase 的 DBA 来说最容易出现的问题不是某条 SQL 不会写而是没有建立起完整的运维视角在 OceanBase 中集群是基础设施层租户是数据库服务层资源池和 Unit 是资源隔离层。很多看似普通的连接失败、SQL 变慢或磁盘空间异常最终都可能与租户资源分配、OBServer 状态或者集群合并任务有关。本文整理了 OceanBase DBA 日常工作中比较实用的 100 条命令覆盖以下场景OBD 集群管理OBServer 与 Zone 状态检查租户与资源管理数据库对象和空间查询会话、事务和锁排查SQL 性能分析执行计划与 Trace参数与合并管理备份、归档和恢复用户及权限管理OceanBase 社区版主要提供 MySQL 兼容模式系统租户通常使用rootsys登录租户级运维则应连接到具体业务租户。OceanBase 的系统视图大部分位于oceanbase数据库下。本文以 OceanBase 4.x 为基础。不同的小版本可能存在视图字段或语法差异执行前建议先在测试环境验证。命令中的集群名、租户名、IP、端口、目录和密码均为示例需要根据实际环境替换。标记为“高危”的命令可能停止服务、删除租户或者改变集群状态生产环境必须谨慎执行。一、OBD 集群管理命令OceanBase Database Proxy、OBServer 和集群配置通常可以通过 OBD 统一管理。对于使用 OBD 部署的社区版环境下面这些命令是最基础的运维入口。OBD 官方提供了集群部署、启动、停止、扩容、升级和租户查看等完整命令。1. 查看 OBD 版本obd --version用于确认当前服务器安装的 OBD 版本。2. 查看 OBD 管理的所有集群obd cluster list可以查看集群名称、部署状态以及对应组件版本。3. 查看指定集群详细信息obd cluster display obcluster用于查看集群内 OBServer、OBProxy、Prometheus 等组件的节点地址和运行状态。4. 启动 OceanBase 集群obd cluster start obcluster启动指定集群中的 OceanBase 相关组件。5. 停止 OceanBase 集群obd cluster stop obcluster高危命令。该命令会停止整个集群生产环境执行前必须确认业务已经停止访问。6. 重启 OceanBase 集群obd cluster restart obcluster重启集群内所有受 OBD 管理的组件。生产环境不建议在未分析故障原因的情况下直接执行集群重启。7. 编辑集群配置obd cluster edit-config obcluster进入集群配置编辑界面。修改完成后通常需要执行配置重载或者重启对应组件。8. 根据 YAML 文件部署集群obd cluster deploy obcluster -c deploy.yaml高危命令。根据 YAML 配置文件创建新的 OceanBase 集群。9. 为集群增加 OBServer 节点obd cluster scale_out obcluster -c scale_out.yaml根据扩容配置文件向现有集群增加 OBServer 或其他组件节点。扩容前需要检查新节点的磁盘、端口、用户、目录、时钟同步和网络连通性。10. 升级 OceanBase 组件obd cluster upgrade obcluster \ -c oceanbase-ce \ -V 目标版本高危命令。升级前必须核对版本兼容矩阵、备份状态、集群健康状态以及升级路径。二、连接、进程和日志检查OceanBase 默认常见端口包括OBServer SQL 端口2881OBServer RPC 端口2882OBProxy 服务端口2883具体端口仍应以实际部署配置为准。11. 查看集群中的租户信息obd cluster tenant show obcluster用于查看 OBD 管理集群中的租户列表和连接信息。12. 直接连接系统租户obclient \ -h 192.168.10.11 \ -P 2881 \ -u rootsys \ -p直接连接指定 OBServer 的系统租户。系统租户主要用于集群、资源、租户和备份管理不建议承载业务数据。13. 通过 OBProxy 连接系统租户obclient \ -h 192.168.10.20 \ -P 2883 \ -u rootsys#obcluster \ -p通过 OBProxy 连接时用户名一般采用用户名租户名#集群名14. 通过 OBProxy 连接业务租户obclient \ -h 192.168.10.20 \ -P 2883 \ -u app_userapp_tenant#obcluster \ -p业务应用通常也应通过 OBProxy 访问 OceanBase以避免直接依赖某个 OBServer 节点。15. 执行 SQL 脚本obclient \ -h 192.168.10.20 \ -P 2883 \ -u rootsys#obcluster \ -p \ init.sql适合执行初始化脚本、巡检脚本或者批量 SQL。16. 查看 OceanBase 数据库版本SELECT VERSION();用于确认当前连接节点对应的 OceanBase 数据库版本。17. 查看 OceanBase 相关进程ps -ef | grep -E observer|obproxy | grep -v grep检查 OBServer 和 OBProxy 进程是否存在。18. 检查 OceanBase 端口监听ss -lntp | grep -E 2881|2882|2883可以快速检查 SQL、RPC 和 OBProxy 端口是否正常监听。19. 实时查看 OBServer 日志tail -f /home/admin/oceanbase/log/observer.logobserver.log是排查 OBServer 启动失败、参数问题、内部错误和性能异常的重要日志。20. 检索 RootService 错误日志grep -E ERROR|WDIAG|WARN \ /home/admin/oceanbase/log/rootservice.log \ | tail -100RootService 负责租户管理、资源调度、合并、负载均衡等核心管理工作其日志对集群级故障排查非常重要。三、OBServer、Zone 和磁盘状态检查GV$OB_SERVERS可以查看集群中所有 OBServer 的 CPU、内存、日志盘和数据盘使用情况是 OceanBase 集群巡检中最重要的视图之一。21. 查看所有 OBServer 状态SELECT * FROM oceanbase.GV$OB_SERVERS\G用于查看每个 OBServer 的地址、Zone、资源容量和磁盘状态。22. 查看所有 ZoneSELECT * FROM oceanbase.DBA_OB_ZONES;重点关注 Zone 的状态、类型和区域分布。23. 查看 OBServer CPU 和内存分配SELECT SVR_IP, SVR_PORT, ZONE, CPU_CAPACITY, CPU_ASSIGNED, CPU_CAPACITY - CPU_ASSIGNED AS CPU_FREE, ROUND(MEM_CAPACITY / 1024 / 1024 / 1024, 2) AS MEM_CAPACITY_GB, ROUND(MEM_ASSIGNED / 1024 / 1024 / 1024, 2) AS MEM_ASSIGNED_GB FROM oceanbase.GV$OB_SERVERS ORDER BY ZONE, SVR_IP;如果CPU_ASSIGNED或MEM_ASSIGNED已接近总容量后续创建租户、扩容 Unit 或资源迁移可能失败。24. 查看数据盘使用率SELECT SVR_IP, SVR_PORT, ROUND(DATA_DISK_CAPACITY / 1024 / 1024 / 1024, 2) AS DATA_CAPACITY_GB, ROUND(DATA_DISK_IN_USE / 1024 / 1024 / 1024, 2) AS DATA_USED_GB, ROUND( DATA_DISK_IN_USE / NULLIF(DATA_DISK_CAPACITY, 0) * 100, 2 ) AS DATA_USED_PCT FROM oceanbase.GV$OB_SERVERS ORDER BY DATA_USED_PCT DESC;OceanBase 数据盘空间不足可能影响转储、合并、数据迁移和正常写入。25. 查看 clog 日志盘使用率SELECT SVR_IP, SVR_PORT, ROUND(LOG_DISK_CAPACITY / 1024 / 1024 / 1024, 2) AS LOG_CAPACITY_GB, ROUND(LOG_DISK_IN_USE / 1024 / 1024 / 1024, 2) AS LOG_USED_GB, ROUND( LOG_DISK_IN_USE / NULLIF(LOG_DISK_CAPACITY, 0) * 100, 2 ) AS LOG_USED_PCT FROM oceanbase.GV$OB_SERVERS ORDER BY LOG_USED_PCT DESC;日志盘空间与 OceanBase 的事务日志、日志流和副本同步直接相关需要单独监控。26. 检查数据盘健康状态SELECT SVR_IP, SVR_PORT, ZONE, DATA_DISK_HEALTH_STATUS FROM oceanbase.GV$OB_SERVERS WHERE DATA_DISK_HEALTH_STATUS NORMAL;正常情况下该查询不应返回异常节点。27. 查看 observer 进程 CPU 和线程状态pidstat -p $(pidof observer) 1适合观察 observer 进程 CPU、上下文切换和运行状态。28. 查看磁盘 I/O 延迟iostat -x 1重点关注%utilawaitr_awaitw_awaitaqu-szOceanBase 对磁盘延迟较为敏感尤其是日志盘和数据盘发生持续高延迟时。29. 查看文件系统空间df -hT除了数据盘还要检查OceanBase 安装目录日志目录clog 目录备份目录临时目录30. 查看最近的 RootService 事件SELECT * FROM oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY LIMIT 100;可以用于排查租户创建、资源调度、Unit 迁移、节点上下线以及合并相关事件。四、租户、Unit 和资源池查询OceanBase 的租户资源通常由三层对象组成Resource Unit Config ↓ Resource Pool ↓ Tenant创建租户时一般先创建 Unit 配置再创建资源池最后将资源池分配给租户。31. 查看所有租户SELECT * FROM oceanbase.DBA_OB_TENANTS;在系统租户执行可以查看当前集群中的用户租户、系统租户和 Meta 租户。32. 查看租户核心信息SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, COMPATIBILITY_MODE, STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM oceanbase.DBA_OB_TENANTS ORDER BY TENANT_ID;重点关注租户状态、兼容模式、主 Zone 和副本分布。33. 查看 Unit 配置SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;Unit 配置定义单个资源单元可使用的 CPU、内存、IOPS 和日志盘资源。34. 查看资源池SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;资源池是 Unit 的集合并最终分配给租户。35. 查看 Unit 分布SELECT * FROM oceanbase.DBA_OB_UNITS;可以查看每个 Unit 当前分配到哪个租户、资源池、Zone 和 OBServer。36. 联合查看资源池和 Unit 配置SELECT P.RESOURCE_POOL_ID, P.NAME AS RESOURCE_POOL_NAME, P.TENANT_ID, P.UNIT_COUNT, C.UNIT_CONFIG_ID, C.NAME AS UNIT_CONFIG_NAME, C.MAX_CPU, ROUND(C.MEMORY_SIZE / 1024 / 1024 / 1024, 2) AS MEMORY_GB FROM oceanbase.DBA_OB_RESOURCE_POOLS P JOIN oceanbase.DBA_OB_UNIT_CONFIGS C ON P.UNIT_CONFIG_ID C.UNIT_CONFIG_ID ORDER BY P.RESOURCE_POOL_ID;不同版本的字段名称可能略有差异执行前可先使用DESC查看视图结构。37. 创建 Unit 配置CREATE RESOURCE UNIT app_unit MAX_CPU 4, MEMORY_SIZE 8G, MAX_IOPS 10000, MIN_IOPS 5000, IOPS_WEIGHT 1, LOG_DISK_SIZE 20G;Unit 配置决定租户单个 Unit 可使用的资源上限。38. 修改 Unit 配置ALTER RESOURCE UNIT app_unit MAX_CPU 8, MEMORY_SIZE 16G;调整 Unit 资源前需要确认集群 OBServer 是否仍有足够的可分配资源。39. 创建资源池CREATE RESOURCE POOL app_pool UNIT app_unit, UNIT_NUM 1, ZONE_LIST (zone1, zone2, zone3);资源池中的 Unit 会按照 Zone 分布。40. 修改资源池 Unit 数量ALTER RESOURCE POOL app_pool UNIT_NUM 2;增加UNIT_NUM可以扩展租户在每个 Zone 中的资源单元数量。五、租户创建、修改和删除租户是 OceanBase 对外提供数据库服务的基本单位。租户拥有独立的用户、数据库对象、系统变量、资源配额和事务环境。41. 创建 MySQL 模式租户CREATE TENANT IF NOT EXISTS app_tenant CHARSET utf8mb4, PRIMARY_ZONE zone1;zone2;zone3, RESOURCE_POOL_LIST (app_pool) SET ob_tcp_invited_nodes %;创建完成后可以通过下面的用户名登录rootapp_tenant42. 修改租户 Primary ZoneALTER TENANT app_tenant PRIMARY_ZONE zone2;zone1;zone3;Primary Zone 会影响租户领导副本的优先分布。43. 修改租户 LocalityALTER TENANT app_tenant LOCALITY Fzone1,Fzone2,Fzone3;高危配置变更。Locality 决定租户副本类型和副本分布。修改前必须确认目标 Zone 和资源池能够满足新的副本要求。44. 锁定租户ALTER TENANT app_tenant LOCK;锁定后该租户的普通用户通常不能正常登录。45. 解锁租户ALTER TENANT app_tenant UNLOCK;用于恢复被锁定租户的登录能力。46. 修改租户系统变量ALTER TENANT app_tenant SET VARIABLES ob_tcp_invited_nodes 10.0.0.0/8;用于限制允许访问该租户的客户端网段。修改访问白名单前应确认 DBA 管理地址不会被误排除。47. 查看租户创建语句SHOW CREATE TENANT app_tenant\G适合核对租户的资源池、Locality、Primary Zone 和系统变量配置。48. 删除租户DROP TENANT app_tenant;高危命令。删除租户前应确认业务已停止访问备份有效数据不再需要租户名称无误没有恢复或备份任务正在运行49. 强制彻底删除租户DROP TENANT app_tenant PURGE;极高危命令。PURGE会跳过回收站保留逻辑执行后通常无法通过租户回收站恢复。50. 删除资源池和 Unit 配置DROP RESOURCE POOL app_pool; DROP RESOURCE UNIT app_unit;必须先确保资源池已经不再分配给任何租户。删除顺序通常为删除租户 ↓ 删除资源池 ↓ 删除 Unit 配置六、数据库对象和空间查询下面这些命令应在具体业务租户中执行而不是在sys租户执行。51. 查看指定数据库中的表SHOW TABLES FROM appdb;用于快速查看数据库对象。52. 查看表结构和建表语句SHOW CREATE TABLE appdb.orders\G可以检查分区、索引、字符集、压缩方式和表属性。53. 查看表索引SHOW INDEX FROM appdb.orders;重点关注索引名称是否唯一索引列顺序基数估算索引类型54. 查看租户内表空间使用情况SELECT * FROM oceanbase.DBA_OB_TABLE_SPACE_USAGE WHERE DATABASE_NAME appdb;DBA_OB_TABLE_SPACE_USAGE可以查看当前租户中表和索引的空间使用情况。55. 查看占用空间最大的表SELECT DATABASE_NAME, TABLE_NAME, SIZE FROM oceanbase.DBA_OB_TABLE_SPACE_USAGE ORDER BY SIZE DESC LIMIT 20;适合快速定位大表。不同版本中SIZE的单位和视图字段可能存在差异应结合当前版本文档确认。56. 通过 information_schema 查看表信息SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ENGINE, TABLE_ROWS, CREATE_TIME, UPDATE_TIME FROM information_schema.TABLES WHERE TABLE_SCHEMA appdb ORDER BY TABLE_NAME;TABLE_ROWS通常属于统计估算值不应直接作为精确行数使用。57. 查看分区表信息SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_METHOD, PARTITION_EXPRESSION, PARTITION_DESCRIPTION, TABLE_ROWS FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA appdb AND TABLE_NAME orders ORDER BY PARTITION_ORDINAL_POSITION;适合检查分区数量、分区表达式和分区边界。58. 查看表分区和副本位置SELECT * FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE DATABASE_NAME appdb AND TABLE_NAME orders;可以查看表对应 Tablet、日志流以及副本所在 OBServer。59. 收集表统计信息ANALYZE TABLE appdb.orders;当表数据发生大幅变化、执行计划明显异常或者索引选择不合理时可以考虑重新收集统计信息。60. 创建普通索引ALTER TABLE appdb.orders ADD INDEX idx_orders_status(status);在大表上创建索引前需要评估索引创建时间对 CPU 和 IO 的影响磁盘空间业务写入压力是否存在重复索引七、会话和事务排查GV$OB_PROCESSLIST可以从集群维度查看租户会话GV$OB_TRANSACTION_PARTICIPANTS可以查看事务参与者及事务上下文。61. 查看当前节点会话SHOW FULL PROCESSLIST;适合快速查看当前连接节点上的用户会话和正在执行的 SQL。62. 查看租户全部节点会话SELECT * FROM oceanbase.GV$OB_PROCESSLIST;与SHOW PROCESSLIST相比GV$OB_PROCESSLIST更适合集群级会话排查。63. 查看正在执行的非空闲会话SELECT * FROM oceanbase.GV$OB_PROCESSLIST WHERE COMMAND Sleep ORDER BY TIME DESC;可以快速筛选正在执行 SQL 的会话。64. 查看执行超过 60 秒的会话SELECT SVR_IP, SVR_PORT, ID, USER, HOST, DB, COMMAND, TIME, STATE, INFO FROM oceanbase.GV$OB_PROCESSLIST WHERE TIME 60 ORDER BY TIME DESC;对于长时间运行 SQL还需要结合 SQL Audit、执行计划和等待情况进一步判断。65. 终止当前查询但保留连接KILL QUERY SESSION_ID;适合中止异常查询但保留客户端连接。66. 终止整个客户端连接KILL CONNECTION SESSION_ID;执行后客户端连接会断开未提交事务通常会回滚。67. 使用 OceanBase 命令终止会话ALTER SYSTEM KILL SESSION SESSION_ID;部分版本还支持立即终止模式ALTER SYSTEM KILL SESSION SESSION_ID IMMEDIATE;OceanBase 官方提供了ALTER SYSTEM KILL SESSION语法用于终止会话。68. 查看当前事务参与者SELECT * FROM oceanbase.GV$OB_TRANSACTION_PARTICIPANTS;可以查看事务 ID、会话 ID、事务上下文创建时间以及待写入日志大小等信息。69. 查看长时间未结束的事务SELECT SVR_IP, SVR_PORT, TENANT_ID, SESSION_ID, TX_ID, CTX_CREATE_TIME, TIMESTAMPDIFF( SECOND, CTX_CREATE_TIME, NOW() ) AS TX_SECONDS, PENDING_LOG_SIZE FROM oceanbase.GV$OB_TRANSACTION_PARTICIPANTS ORDER BY TX_SECONDS DESC;对于长事务要进一步确认是否长时间未提交是否产生大量 Undo 或事务日志是否阻塞其他事务是否由批处理程序引起是否存在网络中断或连接池异常70. 查看事务超时参数SHOW VARIABLES LIKE ob_trx_timeout;ob_trx_timeout通常以微秒为单位修改前必须确认单位。例如设置事务超时为 120 秒SET SESSION ob_trx_timeout 120000000;八、锁、死锁和 SQL Audit 排查OceanBase 的 SQL Audit 是性能排查的重要入口它记录 SQL 的执行耗时、CPU 时间、逻辑读、物理读、返回码、Trace ID 和执行文本等信息。相关时间字段通常以微秒为单位。71. 查看锁等待信息SELECT * FROM oceanbase.GV$OB_LOCK_WAIT_STAT;该视图在部分 OceanBase 版本中可用于查看锁等待关系。如果当前版本不存在该视图可以先检查SHOW TABLES FROM oceanbase LIKE %LOCK%;72. 查看死锁历史SELECT * FROM oceanbase.DBA_OB_DEADLOCK_EVENT_HISTORY;该视图可以用于查询 OceanBase 记录的死锁事件。73. 查看耗时超过 1 秒的 SQLSELECT SVR_IP, SVR_PORT, SQL_ID, TRACE_ID, ELAPSED_TIME, EXECUTE_TIME, CPU_TIME, RETURN_CODE, QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE ELAPSED_TIME 1000000 ORDER BY ELAPSED_TIME DESC LIMIT 20;1000000微秒等于 1 秒。74. 按 SQL_ID 统计累计耗时SELECT SQL_ID, COUNT(*) AS EXECUTIONS, ROUND(SUM(ELAPSED_TIME) / 1000000, 2) AS TOTAL_SECONDS, ROUND(AVG(ELAPSED_TIME) / 1000, 2) AS AVG_MS, MIN(QUERY_SQL) AS QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE IS_INNER_SQL 0 GROUP BY SQL_ID ORDER BY SUM(ELAPSED_TIME) DESC LIMIT 20;这类 SQL 比单纯按单次耗时排序更有价值因为高频、小耗时 SQL 也可能消耗大量集群资源。75. 查看 CPU 消耗最高的 SQLSELECT SVR_IP, SQL_ID, TRACE_ID, ROUND(CPU_TIME / 1000, 2) AS CPU_MS, ROUND(ELAPSED_TIME / 1000, 2) AS ELAPSED_MS, QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE IS_INNER_SQL 0 ORDER BY CPU_TIME DESC LIMIT 20;如果 CPU 时间接近总耗时通常说明 SQL 主要消耗在计算过程而不是等待磁盘或网络。76. 查看逻辑读最高的 SQLSELECT SQL_ID, TRACE_ID, LOGICAL_READS, ELAPSED_TIME, QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE IS_INNER_SQL 0 ORDER BY LOGICAL_READS DESC LIMIT 20;逻辑读高通常意味着扫描的数据块较多需要重点检查是否缺少索引是否索引选择性较差是否存在大范围扫描分区裁剪是否生效SQL 条件是否发生隐式转换77. 查看物理读最高的 SQLSELECT SQL_ID, TRACE_ID, PHYSICAL_READS, ELAPSED_TIME, QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE IS_INNER_SQL 0 ORDER BY PHYSICAL_READS DESC LIMIT 20;物理读高可能说明缓存命中率较低或者 SQL 访问了大量冷数据。78. 查看执行失败的 SQLSELECT REQUEST_TIME, SVR_IP, SQL_ID, TRACE_ID, RETURN_CODE, QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE RETURN_CODE 0 ORDER BY REQUEST_TIME DESC LIMIT 50;RETURN_CODE是内部返回码排查时还需要结合客户端错误、observer 日志和 Trace ID。79. 根据 Trace ID 查询完整执行记录SELECT * FROM oceanbase.GV$OB_SQL_AUDIT WHERE TRACE_ID TRACE_ID\GTrace ID 是串联客户端请求、SQL Audit 和 OBServer 日志的重要标识。80. 根据 SQL_ID 查询执行历史SELECT REQUEST_TIME, SVR_IP, SVR_PORT, TRACE_ID, ELAPSED_TIME, CPU_TIME, LOGICAL_READS, PHYSICAL_READS, RETURN_CODE, QUERY_SQL FROM oceanbase.GV$OB_SQL_AUDIT WHERE SQL_ID SQL_ID ORDER BY REQUEST_TIME DESC LIMIT 100;适合分析同一条 SQL 在不同时间、不同 OBServer 上的性能波动。九、执行计划、Trace、参数和合并管理81. 查看 Plan Cache 整体状态SELECT * FROM oceanbase.GV$OB_PLAN_CACHE_STAT;用于查看各 OBServer 上租户 Plan Cache 的内存使用和缓存状态。82. 根据 SQL_ID 查看缓存执行计划SELECT * FROM oceanbase.GV$OB_PLAN_CACHE_PLAN_STAT WHERE SQL_ID SQL_ID\G可以获取PLAN_IDSQL_ID执行次数平均耗时计划生成时间计划缓存状态所在 OBServer83. 查看 Plan Cache 中的详细执行计划SELECT DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE( SVR_IP, SVR_PORT, TENANT_ID, PLAN_ID );不同 OceanBase 小版本的执行计划查看函数和参数可能存在差异应以当前版本的DBMS_XPLAN文档为准。较新的版本通常需要同时提供服务器、租户和计划 ID。84. 查看 SQL 静态执行计划EXPLAIN SELECT * FROM appdb.orders WHERE status 1;重点关注TABLE SCAN 还是 INDEX SCAN扫描行数过滤条件分区裁剪JOIN 顺序JOIN 算法是否存在排序和临时结果集85. 开启会话级 Show TraceSET ob_enable_show_trace ON;该设置仅对当前会话生效。86. 查看最近一条 SQL 的执行 TraceSELECT COUNT(*) FROM appdb.orders WHERE status 1; SHOW TRACE;SHOW TRACE可以查看 SQL 在 OceanBase 内部的执行阶段和耗时分布是分析响应时间的重要工具。87. 查看 OceanBase 参数SHOW PARAMETERS LIKE syslog_level;也可以直接查询参数视图SELECT * FROM oceanbase.GV$OB_PARAMETERS WHERE NAME syslog_level;88. 临时调整日志级别ALTER SYSTEM SET syslog_level WDIAG;开启更详细日志可能明显增加日志量只应在问题排查期间使用。排查结束后应及时恢复ALTER SYSTEM SET syslog_level INFO;89. 手动触发 Major FreezeALTER SYSTEM MAJOR FREEZE;高危运维命令。Major Freeze 会推动集群进入下一轮大版本冻结和合并流程不建议在集群负载较高、磁盘空间紧张或者正在执行其他重大任务时随意触发。90. 查看大合并状态SELECT * FROM oceanbase.DBA_OB_MAJOR_COMPACTION;还可以查看冻结历史SELECT * FROM oceanbase.DBA_OB_FREEZE_INFO;巡检时应重点关注合并是否长时间未完成各 Zone 合并进度是否一致是否存在合并错误SCN 是否持续推进数据盘空间是否足够十、归档、备份、恢复和权限管理OceanBase 物理备份以租户为单位。执行备份前通常需要先配置日志归档目的端和数据备份目的端并启动归档。91. 配置租户日志归档目录ALTER SYSTEM SET LOG_ARCHIVE_DEST LOCATIONfile:///data/obbackup/archive BINDINGOptional PIECE_SWITCH_INTERVAL1d TENANT app_tenant;实际环境也可以使用对象存储作为归档介质具体格式取决于 OceanBase 版本和存储类型。92. 启动租户日志归档ALTER SYSTEM ARCHIVELOG TENANT app_tenant;停止日志归档ALTER SYSTEM NOARCHIVELOG TENANT app_tenant;启动后必须检查归档状态不能仅以命令执行成功作为判断依据。93. 配置数据备份目录ALTER SYSTEM SET DATA_BACKUP_DEST file:///data/obbackup/data TENANT app_tenant;备份目录需要满足所有相关节点可访问OceanBase 运行用户具有读写权限空间充足网络和存储稳定不与生产数据目录混用94. 执行租户全量备份ALTER SYSTEM BACKUP TENANT app_tenant;备份并包含归档日志ALTER SYSTEM BACKUP TENANT app_tenant PLUS ARCHIVELOG;OceanBase 官方支持针对指定租户执行全量或增量备份。95. 查看日志归档状态SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG;启动备份前应确认归档状态正常推进而不是处于停止、异常或卡住状态。96. 查看当前备份任务SELECT * FROM oceanbase.DBA_OB_BACKUP_JOBS;在系统租户中也可以查看集群范围的备份任务视图SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS;97. 查看备份任务明细和历史SELECT * FROM oceanbase.DBA_OB_BACKUP_TASKS;查看已结束的备份任务SELECT * FROM oceanbase.DBA_OB_BACKUP_JOB_HISTORY;OceanBase 提供当前任务、任务明细和历史任务等多类备份视图。98. 按时间点恢复租户ALTER SYSTEM RESTORE restore_tenant FROM file:///data/obbackup/data, file:///data/obbackup/archive UNTIL TIME 2026-07-20 10:00:00 WITH pool_listrestore_pool localityFzone1,Fzone2,Fzone3 primary_zonezone1;极高危命令。恢复前必须确认备份目录正确归档日志完整目标恢复时间有效恢复资源池已创建资源池容量足够新租户名称不存在冲突Locality 与集群 Zone 匹配OceanBase 的租户恢复需要指定备份路径、恢复终点以及用于承载恢复租户的资源池。99. 创建业务用户CREATE USER app_user% IDENTIFIED BY StrongPassword_2026!;生产环境不建议允许所有来源地址访问可以限制具体网段CREATE USER app_user10.% IDENTIFIED BY StrongPassword_2026!;100. 授权并查看用户权限GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO app_user%;查看用户权限SHOW GRANTS FOR app_user%;回收权限REVOKE DELETE ON appdb.* FROM app_user%;生产环境应遵循最小权限原则避免直接向业务账号授予GRANT ALL PRIVILEGES ON *.*OceanBase DBA 日常排查建议掌握命令只是第一步。真正遇到 OceanBase 故障时建议按照从集群到租户、从资源到 SQL 的顺序进行排查。1. 先确认故障范围首先判断是单条 SQL 异常单个租户异常单台 OBServer 异常单个 Zone 异常整个集群异常OBProxy 或连接层异常故障范围判断错误后续排查很容易走偏。2. 再检查集群基础状态优先检查OBServer 是否全部在线 Zone 状态是否正常 CPU 和内存资源是否耗尽 数据盘和日志盘是否接近满载 大合并是否长时间未完成 是否存在资源迁移或副本异常3. 然后进入租户和 SQL 层租户异常时重点检查Unit 资源是否充足 资源池分布是否合理 是否存在长事务 是否存在锁等待或死锁 SQL Audit 中是否出现高耗时 SQL Plan Cache 是否异常 执行计划是否发生变化4. 最后再考虑参数调整和重启OceanBase 参数数量较多但生产问题通常不能仅靠修改参数解决。尤其不建议在没有明确证据的情况下直接执行重启集群 重启 OBServer 修改租户资源 修改 Locality 手动触发 Major Freeze 提高日志级别后长期不恢复 强制终止大量会话这些操作可能暂时缓解现象但也可能掩盖真正的问题甚至扩大故障影响。总结OceanBase DBA 与传统 MySQL DBA 最大的区别是不能只盯着数据库实例和 SQL。OceanBase 是一个原生分布式数据库日常运维必须同时理解集群 OBServer Zone 租户 资源池 Unit 副本 日志流 合并 SQL Audit 备份与归档对于刚接触 OceanBase 的 DBA建议优先掌握以下几个核心入口oceanbase.GV$OB_SERVERS oceanbase.DBA_OB_ZONES oceanbase.DBA_OB_TENANTS oceanbase.DBA_OB_UNITS oceanbase.DBA_OB_RESOURCE_POOLS oceanbase.GV$OB_PROCESSLIST oceanbase.GV$OB_TRANSACTION_PARTICIPANTS oceanbase.GV$OB_SQL_AUDIT oceanbase.GV$OB_PLAN_CACHE_PLAN_STAT oceanbase.DBA_OB_MAJOR_COMPACTION如果这些视图能够熟练使用绝大多数 OceanBase 日常巡检、租户资源检查、SQL 性能分析和故障定位工作都能够找到较明确的排查方向。更多 Oracle、MySQL、PostgreSQL、OceanBase DBA 实战内容可以访问ora100.com。