Obloader旁路导入失败后表无法进行增删改操作,数据库查询表没有行级锁

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.3.3.1
【问题描述】Obloader旁路导入error write into table failed失败后表无法进行增删改操作,数据库查询表没有行级锁,是否旁路导入会在底层生成临时数据文件,错误发生后这些文件可能未被清理,导致后续操作被阻塞或其他原因

1 个赞

@论坛小助手

根据文档库中的信息,旁路导入在 OceanBase 数据库中确实有一些特殊的限制和行为。以下是针对您问题的详细分析和解答:

1. 关于旁路导入失败后表无法进行增删改操作

  • 根据文档片段的信息,旁路导入过程中会对目标表加表锁(参考文档片段 7 和片段 9)。如果旁路导入任务失败,可能会导致表锁未正确释放,从而影响后续对该表的增删改操作。
  • 此外,文档片段 1 提到“目前旁路导入的写入请求并非幂等”,这意味着在极少数情况下,数据包重发可能会导致重复数据或异常状态,进而可能引发表的状态不一致。

2. 关于底层临时数据文件

  • 文档片段 2 和片段 6 提到,旁路导入是直接向 data 文件中写入数据,绕过 SQL 层接口。因此,在导入过程中,OceanBase 确实会在底层生成临时数据文件。
  • 如果旁路导入任务失败,这些临时文件可能未被清理,导致后续操作被阻塞。这种现象可能是由于任务中断时资源未正确释放所致。

3. 查询表没有行级锁

  • 您提到查询表时没有发现行级锁,这与旁路导入的行为一致。文档片段 8 明确指出,旁路导入会加表锁而非行级锁。因此,即使表无法进行增删改操作,查询时也不会看到行级锁的存在。

4. 解决建议

  • 检查表锁状态:可以通过以下 SQL 查询表是否仍存在锁:
    SELECT * FROM gv$lock WHERE obj_id = (SELECT object_id FROM all_objects WHERE object_name = '您的表名');
    
    如果发现表锁未释放,可以尝试手动解锁。
  • 清理临时文件:确认是否有未清理的临时数据文件。可以通过 OceanBase 的管理工具(如 OCP 或 obd)检查存储空间使用情况,并清理可能残留的临时文件。
  • 重新执行旁路导入:确保在重新执行旁路导入前,目标表的状态已恢复正常。
  • 升级版本:您当前使用的版本为 4.3.3.1,建议关注官方发布的更新日志,查看是否有针对旁路导入失败后资源未释放的问题修复。

5. 总结

根据文档信息,旁路导入失败后表无法进行增删改操作的原因可能是表锁未正确释放或底层临时数据文件未清理。建议按照上述步骤排查并解决问题。如果问题仍未解决,可联系 OceanBase 的技术支持团队获取进一步帮助。

如果您需要更详细的排查步骤或代码示例,请随时告知!

检索到的文档如下:

  1. 使用 OBLOADER 旁路导入数据
  2. 旁路导入概述
  3. 使用 SQL 命令进行数据迁移
  4. obcdc 支持增量旁路导入
  5. ETL 加速
  6. 增量旁路导入
  7. 全量旁路导入

在旁路导入过程中,OceanBase 会在底层生成临时数据文件,怎么查询临时文件生成的目录

@论坛小助手

根据文档库中的信息,OceanBase 数据库在旁路导入过程中确实会在底层生成临时数据文件。以下是查询这些临时文件生成目录的方法:

  1. 通过系统表查询临时文件信息

    根据文档片段 1 和片段 3 的内容,可以使用以下 SQL 查询临时文件的相关信息,包括生成的目录:

    SELECT * FROM oceanbase.DBA_OB_TEMP_FILES;
    

    或者:

    SELECT * FROM oceanbase.CDB_OB_TEMP_FILES;
    

    字段说明

    • DIR_ID:表示临时文件所在的目录 ID。
    • SVR_IPSVR_PORT:表示生成临时文件的 OBServer 节点的 IP 和端口。
    • BYTES:表示临时文件的大小。

    这些信息可以帮助定位临时文件所在的目录。

  2. 通过系统变量查看存储路径

    OceanBase 数据库的存储路径可以通过以下系统变量获取:

    SHOW PARAMETERS LIKE 'data_file_dirs';
    

    或者:

    SHOW PARAMETERS LIKE 'clog_dir';
    

    字段说明

    • data_file_dirs:表示数据文件的存储路径。
    • clog_dir:表示提交日志(CLOG)的存储路径。

    临时文件通常会生成在 data_file_dirs 指定的路径下。

  3. 通过 OCP 或 obd 工具查看存储配置

    如果您使用的是 OCP 或 obd 工具部署和管理 OceanBase 集群,可以通过以下方式查看存储路径:

    • 在 OCP 中,进入集群详情页面,查看节点的存储配置。
    • 使用 obd 命令行工具:
      obd cluster config <cluster_name> | grep data_dir
      
  4. 总结

    根据上述方法,您可以结合系统表、系统变量以及管理工具来查询临时文件生成的目录。如果需要进一步确认具体路径,可以结合 DIR_IDdata_file_dirs 的值进行分析。

    如果仍有疑问或需要更详细的排查步骤,请提供更多的环境信息(如集群配置、版本号等),我们将为您提供更具体的帮助!

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

  1. oceanbase.DBA_OB_TEMP_FILES
  2. oceanbase.CDB_OB_TEMP_FILES
  3. 旁路导入概述
  4. 使用 OBLOADER 旁路导入数据
  5. 使用 SQL 命令进行数据迁移
  6. 全量旁路导入
  7. 使用导数工具进行数据迁移
  8. 管理外部文件

根据文档库中的信息,OceanBase 在旁路导入过程中确实会在底层生成临时数据文件。以下是关于如何查询这些临时文件生成目录的详细解答:

  1. 查询临时文件相关信息

可以通过查询系统视图 oceanbase.DBA_OB_TEMP_FILESoceanbase.CDB_OB_TEMP_FILES 获取临时文件的相关信息。这两个视图中包含了临时文件的存储位置、大小、访问时间等详细信息。

具体查询语句如下(参考文档片段 1 和片段 4):

SELECT * FROM oceanbase.DBA_OB_TEMP_FILES;

或者:

SELECT * FROM oceanbase.CDB_OB_TEMP_FILES;
  1. 临时文件存储目录字段

在查询结果中,DIR_ID 字段标识了临时文件所在的目录 ID。虽然该字段本身并不直接显示路径,但结合 SVR_IPSVR_PORT 字段,可以定位到具体的 OBServer 节点,并进一步确认该节点上的临时文件存储路径。

  1. 查看 OBServer 配置

要获取具体的临时文件存储路径,可以查看 OBServer 的配置参数 data_file_dirclog_dir 等。这些参数定义了数据文件和日志文件的存储目录。通常,临时文件会存储在与数据文件相同的目录下。

可以通过以下 SQL 查询 OBServer 的配置参数:

SHOW PARAMETERS LIKE 'data_file_dir';
SHOW PARAMETERS LIKE 'clog_dir';
  1. 总结

要查询 OceanBase 在旁路导入过程中生成的临时文件目录,可以按照以下步骤操作:

  • 查询系统视图 oceanbase.DBA_OB_TEMP_FILESoceanbase.CDB_OB_TEMP_FILES,获取临时文件的 DIR_IDSVR_IPSVR_PORT 等信息。
  • 根据 SVR_IPSVR_PORT 定位到具体的 OBServer 节点。
  • 在该节点上,通过查询 OBServer 的配置参数 data_file_dirclog_dir,确认临时文件的具体存储路径。

如果需要更详细的排查步骤或代码示例,请随时告知!依据的文档名称及段落标题为:查询临时文件相关信息。

更多信息请查看:

  1. oceanbase.DBA_OB_TEMP_FILES
  2. 使用 OBLOADER 旁路导入数据
  3. oceanbase.CDB_OB_TEMP_FILES
  4. 使用 SQL 命令进行数据迁移
  5. 旁路导入概述
  6. 使用导数工具进行数据迁移
  7. 通过 OMS 进行数据迁移和同步
  8. obshell 备份命令组

建议:

  1. 贴一下完整的步骤、现象。便于其他人参与分析。