ODC删除数据源异常

【 使用环境 】生产环境
【 OB or 其他组件 】:ODC
【 使用版本 】:4.3.0
【问题描述】删除数据源时出现异常
image

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

1 个赞

根据文档库中的信息,ODC(OceanBase Developer Center)在生产环境中删除数据源时遇到异常,可以从以下几个方面进行排查和解决:

  1. 检查连接状态

    • 确认 ODC 与目标数据源之间的网络连接是否正常。可以通过尝试重新连接或使用其他工具(如命令行客户端)连接到该数据源来验证。
    • 如果是 OceanBase 数据库,请确保 OBServer 节点运行正常,并且没有因为维护或其他原因导致服务不可用。
  2. 查看日志信息

    • 根据您提供的图片中的错误信息 DataAccessResourceFailureExceptionJDBCConnectionException,这通常意味着 ODC 在尝试访问数据库时遇到了连接问题。
    • 使用 OceanBase敏捷诊断工具obdiag 收集详细的诊断信息,特别是 ODC 的日志文件,以获取更具体的错误详情。
  3. 确认权限配置

    • 检查用于连接数据源的账号是否有足够的权限执行删除操作。某些情况下,权限不足也会导致类似的问题。
    • 参考文档片段 2 中提到的内容,确保数据库地址和账号密码信息由 DBA 正确录入并授权给开发者访问,避免账号密码泄漏。
  4. 处理资源占用情况

    • 如果数据源正在被其他会话或进程使用,可能会阻止删除操作。请确认是否有未关闭的连接或正在进行的任务。
    • 对于 OceanBase 数据库,可以参考文档片段 8 中关于资源隔离的操作,通过调用 DBMS_RESOURCE_MANAGER 系统包来进行资源控制,确保没有不必要的资源占用。
  5. 更新 ODC 版本

    • 您当前使用的 ODC 版本为 4.3.0,建议检查是否有更高版本发布,新版本可能修复了已知的问题或增强了稳定性。
    • 如果有可用的新版本,考虑升级 ODC 至最新稳定版本,以获得更好的兼容性和性能表现。
  6. 联系技术支持

    • 如果经过上述步骤仍然无法解决问题,建议联系 OceanBase 的官方技术支持团队寻求进一步的帮助。他们可以根据您的具体情况提供更加专业的指导和支持。

综上所述,针对 ODC 删除数据源时出现的异常,首先需要从连接状态、日志分析、权限设置等方面入手进行排查。同时,保持软件版本的及时更新也是预防此类问题的有效措施之一。希望以上建议能够帮助您快速定位并解决这个问题。

具体信息可参考以下文档:

  1. OceanBase 开发者中心(ODC)
  2. obcdc 开发说明
  3. 使用 MySQL 租户做常见数据库开发
  4. 使用 JMeter 运行业务场景测试
  5. 通过 ODC 图形化开发工具进行 SQL 开发
  6. sys_cpu_limit_trigger
  7. MySQL 兼容应用错误处理规范

确认下该数据源是否正在被使用

这个oracle的数据源,查看数据库监控,ODC里一直在执行这个SQL,执行时间也很久,怎么让他停止查询
SELECT
OWNER,
TABLE_NAME,
COLUMN_NAME
FROM
SYS.ALL_TAB_COLS
WHERE
OWNER = :1
ORDER BY
TABLE_NAME ASC,
COLUMN_ID ASC

在ODC没有其他工单在使用这个数据源,就无法删除数据源

根据您提供的信息,ODC(OceanBase Developer Center)在尝试删除 Oracle 数据源时,由于长时间执行的 SQL 查询导致无法删除数据源。为了停止这个长时间运行的查询并解决数据源删除问题,您可以按照以下步骤操作:

1. 停止长时间运行的查询

方法一:通过 ODC 界面

  • 检查活动会话

    • 在 ODC 中,导航到“监控”或“性能诊断”模块,查看当前正在运行的 SQL 语句。
    • 找到执行时间较长的查询,并记录下对应的 SESSION_IDSQL_ID
  • 终止会话

    • 使用 ODC 提供的功能直接终止该会话。通常会有类似“终止会话”或“杀死会话”的选项。

方法二:通过命令行工具(如 obclient)

  • 连接到数据库

    obclient -h <hostname> -P <port> -u <username> -p<password>
    
  • 查找并终止会话

    • 查找正在执行的长时间查询会话:
      SELECT sid, serial#, sql_id, status, last_call_et
      FROM v$session
      WHERE sql_id = (SELECT sql_id FROM v$sql WHERE sql_text LIKE 'SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM SYS.ALL_TAB_COLS%');
      
    • 终止特定会话:
      ALTER SYSTEM KILL SESSION 'sid,serial#';
      

2. 确认没有其他活动会话

确保没有其他会话正在使用该数据源。可以通过以下查询确认:

SELECT sid, serial#, username, machine, program
FROM v$session
WHERE username = '<your_username>';

3. 删除数据源

一旦确认所有相关会话已终止且没有其他活动会话,您可以再次尝试删除数据源。

4. 预防措施

为了避免类似问题再次发生,建议:

  • 优化查询:如果可能,优化那些频繁执行且耗时较长的查询语句。
  • 设置超时:配置合理的查询超时时间,防止长时间运行的查询占用资源。
  • 定期维护:定期检查和清理不再需要的数据源和会话,保持系统的高效运行。

5. 联系技术支持

如果上述方法仍然无法解决问题,或者遇到其他复杂情况,建议联系 OceanBase 的官方技术支持团队寻求进一步的帮助。他们可以根据具体情况提供更加专业的指导和支持。

希望以上步骤能够帮助您成功停止长时间运行的查询并顺利删除数据源。如果有任何疑问或需要进一步的帮助,请随时告知。

更多信息请查看:

  1. DELETE_INDEX_STATS
  2. DISABLE_OPT_TRACE
  3. oceanbase.DBA_OBJECTS
  4. 清理旧集群
  5. CANCEL BACKUP
  6. DELETE_COLUMN_STATS
  7. DBA_OB_CLONE_HISTORY
  8. 全链路追踪方法
  9. 删除序列

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

1 个赞

使用小助手提供的杀会话方法试一下