本文介绍提交数据变更工单时常见的报错及解决方案。
根据安全规则设置,禁止直接执行命令类型:XXXX或不允许提交类型为XXXX的变更语句
报错示例:
SQL类型检查不通过,根据安全规则设置,禁止直接执行命令类型:XXXX,如果需要,请联系DBA或管理员调整!调整规则的入口路径:安全与容灾->安全规则->编辑->SQL变更->SQL执行规则,未匹配到该命令类型的任何规则,默认禁止执行
报错原因:安全协同模式的数据库绑定的安全规则不允许执行或提交该SQL命令,因此该命令会被拦截。
解决方案:禁止执行或不允许提交的SQL命令类型有非UNKNOW(DMS正常识别的SQL命令)和UNKNOW(DMS不能识别的SQL命令)两种,您可按需选择解决方案。
-
非UNKNOW
DMS可正常识别到非UNKNOW类型的命令,但当前的安全规则默认不允许该命令执行,请联系DBA或管理员,调整对应的安全规则。调整规则的具体操作如下。
-
查看安全规则集名称。
进入数据变更工单详情页,单击右上方的操作日志,查看规则集名称。在操作日志弹窗的动作详情列中,可查看关联的安全规则集名称,例如POC生产库规则。
-
调整安全规则。
-
登录数据管理DMS 5.0。
-
在顶部菜单栏中,选择。
-
在安全规则页签中,单击目标规则集操作列下的编辑。
-
在左侧导航栏中,单击SQL变更。
-
根据报错提示选择检测点。例如上述报错示例中检测点需选择SQL执行规则。
-
选择待调整的安全规则,并单击操作列下的编辑。
说明根据错误提示命令所属的SQL语言类型选择待调整的安全规则。例如,错误提示的命令类型为CREATE_INDEX,则需要选择DDL相关的安全规则。
-
将报错提示的SQL类型添加至对应安全规则的规则DSL中。
例:失败原因提示禁止执行命令类型:CREATE_INDEX,您需要将该类型命令加入DDL提交工单的相关规则中。
在编辑规则弹窗中,检测点选择SQL执行规则,找到规则名称为DDL必须提交工单执行的规则。在规则DSL的
@fac.sql_type判断列表中,确认已包含CREATE_INDEX等DDL类型,对应动作为@act.allow_submit(允许该SQL类型生成工单执行),单击提交。 -
单击提交。
-
-
调整完成后,您需要在工单详情页的预检查区域,单击重试,DMS将会重新进行类型检查。
-
-
UNKNOW
-
检查您提交的SQL语句是否有误。若有误,请在预检查区域单击修改SQL,确认修改后再单击重试,重新进行类型检查。
-
若您提交的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普通数据变更工单,在执行变更阶段,选择开启整体事务运行即可。具体操作,请参见普通数据变更。
在弹出的任务设置对话框中,打开开启整体事务开关,单击确定执行。