数据变更

本文介绍提交数据变更工单时常见的报错及解决方案。

根据安全规则设置,禁止直接执行命令类型:XXXX或不允许提交类型为XXXX的变更语句

报错示例

SQL类型检查不通过,根据安全规则设置,禁止直接执行命令类型:XXXX,如果需要,请联系DBA或管理员调整!调整规则的入口路径:安全与规范->安全规则->编辑->SQL变更->SQL执行规则,未匹配到该命令类型的任何规则,默认禁止执行

报错原因:安全协同模式的数据库绑定的安全规则不允许执行或提交该SQL命令,因此该命令会被拦截。

解决方案:禁止执行或不允许提交的SQL命令类型有非UNKNOW(DMS正常识别的SQL命令)和UNKNOW(DMS不能识别的SQL命令)两种,您可按需选择解决方案。

  • 非UNKNOW

    DMS可正常识别到非UNKNOW类型的命令,但当前的安全规则默认不允许该命令执行,请联系DBA或管理员,调整对应的安全规则。调整规则的具体操作如下。

    1. 查看安全规则集名称。

      进入数据变更工单详情页,单击右上方的操作日志,查看规则集名称。caozuorizhi

    2. 调整安全规则。

      1. 登录数据管理DMS 5.0

      2. 在顶部菜单栏中,选择安全与规范(DBS) > 安全规则

      3. 安全规则页签中,单击目标规则集操作列下的编辑

      4. 在左侧导航栏中,单击SQL变更

      5. 根据报错提示选择检测点。例如上述报错示例中检测点需选择SQL执行规则

      6. 选择待调整的安全规则,并单击操作列下的编辑

        说明

        根据错误提示命令所属的SQL语言类型选择待调整的安全规则。例如,错误提示的命令类型为CREATE_INDEX,则需要选择DDL相关的安全规则。

      7. 将报错提示的SQL类型添加至对应安全规则的规则DSL中。

        例:失败原因提示禁止执行命令类型:CREATE_INDEX,您需要将该类型命令加入DDL提交工单的相关规则中,如下图所示。

        alterSQL

      8. 单击提交

    3. 调整完成后,您需要在工单详情页的预检查区域,单击重试,DMS将会重新进行类型检查。

  • UNKNOW

    1. 检查您提交的SQL语句是否有误。若有误,请在预检查区域单击修改SQL,确认修改后再单击重试,重新进行类型检查。

    2. 若您提交的SQL无误,请单击预检查区域的查看详情,筛选并查看被标识为UNKNOW的SQL语句,再联系管理员或DBA将被标识的SQL语句添加至安全规则中,并允许该语句在DMS执行,提交完成后,再单击重试。调整识别规则的操作步骤,请参见调整安全规则

检查影响行数失败,语法检查失败

报错示例

检查影响行数失败,语法检查失败,错误信息:ERROR. pos 37,line 1,column 31,token WHERE

报错原因:提交工单进行数据变更的预检查阶段,DMS会通过检查扫描行数再次检查SQL语句的语法是否有误。

解决方案:检查您提交的SQL语句的语法是否有误。

  • 若SQL语法有误,请在修改SQL后,单击预检查区域的重试,DMS将重新检查扫描行数。

  • 在确保SQL语法无误后,您可以单击预检查区域的检查扫描行数右侧的跳过,忽略该错误。

Hologres使用BEGIN和END语句提交数据变更在DMS显示成功,但实际变更失败,如何处理?

失败原因

由于DMS解析SQL的能力限制,无法将END语句解析为COMMIT命令,因此不支持使用BEGIN和END语句来开启并提交事务。

解决方案

  • 方案一:使用DMS支持的BEGIN和COMMIT命令提交事务。

  • 方案二:删除SQL中的BEGIN和END,然后提交DMS普通数据变更工单,在执行变更阶段,选择开启整体事务运行即可。具体操作,请参见普通数据变更

    image