跳到主要内容

SQL 任务

SQL 任务是对数据库发起 SQL 操作的任务,主要包括 DDL(数据库定义语言)、DML(数据库操纵语言)等 SQL 语句。本文介绍如何使用 SQL 任务。

功能介绍

为保障数据安全,对目标数据源没有写权限的用户无法对该数据源的内容发起变更,如果您无权限或某些操作被 SQL 开发规范管控,在有变更需求的情况下,可以通过提交 SQL 任务工单实现。NineData 提供的 SQL 任务功能具有全周期的安全管控,包括提交、审批、执行、回滚等步骤。

为了防止意外情况发生或者操作失误导致数据错误,系统会在实际执行对应的 SQL 任务之前,自动备份对应变更内容的当前数据状态,当错误发生,您可以下载该备份数据手动进行数据回滚,保证数据的安全。

注意事项

  • 在商业化版本下(数据库 DevOps 专业版数据库 DevOps 企业版),请确保您的包年包月订阅未过期,否则将无法正常使用数据库 DevOps 服务。您可以在 NineData 控制台页面右上方快速查看剩余配额以及到期时间。check_quota

  • 系统自动备份的数据会保留 7 天时间,7 天后自动失效。

前提条件

  • 数据源类型必须为下列其中之一:MySQL、SQL Server、Oracle、OceanBase Oracle、OceanBase MySQL、Db2、PostgreSQL、Doris、SelectDB、Redis、MongoDB、达梦、金仓数据库、Klustron、DWS、openGauss、GaussDB、TiDB、GreatSQL、GBase、GaiaDB、GaiaDB-X、TDSQL MySQL 版、Lindorm

  • 如需使用自动备份功能,数据源类型必须为 MySQL、SQL Server、Oracle、PostgreSQL、Greenplum、KingbaseES。

提交 SQL 任务

前提条件

  • 已创建或加入组织。更多信息,请参见管理组织
  • NineData 控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织
  • 当前用户具有访问 SQL 任务模块的权限。更多信息,请参见预置角色权限列表

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,单击右上角的创建 SQL 任务

    提示
    如果您之前没有创建过 SQL 任务,则会显示空白页。此时,请单击页面中的创建 SQL 任务
  4. 创建 SQL 任务页面,根据下表配置工单。

    参数
    说明
    任务名称输入 SQL 任务的名称,该名称通常包含了 SQL 语句的执行目的,为减少沟通成本,请尽量使用有意义的名称。最多支持 64 个字符。
    数据源目标需变更数据库所在的数据源或库分组。
    |Schema需要执行 SQL 变更的数据库或 Schema。
    执行人当前 SQL 任务审批通过后的 SQL 语句执行人。
    说明执行人列表中的可选项取决于如下两种情况:
    • 当前数据源配置了开发规范:列表中的选项基于当前规范中配置的 SQL 任务执行人配置规则。该规则位于 SQL 任务与窗口页签,如何配置开发规范,请参见编辑规范
    • 当前数据源未配置开发规范:列表中的可选项为对当前数据源有SQL 任务 - 执行权限的用户。更多关于授权的说明,请参见配置用户权限
    预估影响行数输入此次变更预计会影响多少行数据。在 SQL 任务的规范预审阶段,系统会校验 SQL 实际的影响行数和输入的预估行数是否有出入,如果不一样则会进行提示。
    备注(可选)针对当前 SQL 任务未尽事项的说明,例如执行任务的原因,期望执行时间等。
    变更 SQL输入需要执行的 SQL 语句或上传包含 SQL 语句的文件。
    • SQL 文本:直接在文本框中输入需要执行的 SQL 语句。
    • SQL 文件:单击上传文件,选择并上传包含需执行 SQL 语句的文件。
      说明:上传完成后,把鼠标移动到文件名处,可在文件名右侧选择review(预览文件)或delete(删除文件)。
    回滚 SQL(可选)针对需要对变更提供回滚预案的企业,此处输入的回滚 SQL 会记录在当前 SQL 任务中,但在当前 SQL 任务的全生命周期中不会产生任何影响,仅用于合规操作。
  5. 单击保存并规范预审,进入规范预审页面。系统将基于当前数据源关联的 SQL 开发规范对 SQL 语句进行预审,会有如下几个结果:

    • 预审通过:根据审批流程的配置情况,任务状态会更改为待提交审批通过,如果是前者,请继续下一步,如果是后者,本流程结束。
    • 预审不通过:任务状态会更改为规范预审不通过,您可以单击页面右上角的重新检查再次预审,也可以撤回 SQL 任务重新编辑并提交。
    提示

    预审出来的问题,包含了必须改进建议改进语法问题权限四个类别:

    precheck_types

    • 必须改进:命中了 SQL 开发规范中必须改进规范问题。
    • 建议改进:命中了 SQL 开发规范中建议改进规范问题。
    • 语法问题:请重点关注,由系统自动检测出来的语法问题,虽然不阻断 SQL 任务流程,但是该 SQL 可能会执行失败,请检查库、表存在性及语法正确性。
    • 权限:命中了管理员在 SQL 开发规范中配置的如下两个规则,SQL 任务流程被阻断。
      • 开启 SQL 任务结构更新类型检查:用于允许或禁用结构变更类型的 SQL 语法。
      • 开启 SQL 任务数据更新类型检查:用于允许或禁用数据变更类型的 SQL 语法。
  6. 在页面右上角单击提交审批,在弹出的窗口中选择流程审批人员,单击确定

    提示
    • 根据审批流程配置的不同,此处需要选择的审批人员数量不同,请根据实际情况选择。
    • 如果当前审批流程中开启了不指定审批人,则此处将显示提交后,所有审批人均可审批,请在审批进程查看结果,您无需手动指定审批人,所有具备审批当前工单的人员均会收到审批提醒并支持对该工单进行审批。

  7. 任务状态变更为审批中,在审批通过之前,您可以进行如下操作。

    • 撤回:撤回 SQL 任务。更多信息,请参见撤回 SQL 任务
    • 转交:更改该 SQL 任务的审批人。

撤回 SQL 任务

SQL 任务的状态处于规范预审中审批中审批通过待执行时,您可以撤回该 SQL 任务的申请,撤回后,任务不再执行,您可以重新编辑该任务单再次提交。

前提条件

  • SQL 任务的状态为规范预审中审批中审批通过待执行
  • 您是目标 SQL 任务的提交人系统管理员

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,找到目标 SQL 任务,单击任务 ID 或任务右侧操作列的详情。在任务详情页右上角单击撤回

    提示

    您也可以单击任务右侧操作列的more>撤回

  4. 在弹出的确认窗口中,单击撤回撤回并编辑

    • 撤回:任务状态变更为已撤回。如需重新编辑任务,可以在 SQL 任务列表找到该 SQL 任务,单击右侧操作列下的编辑,重新编辑任务单。
    • 撤回并编辑:任务状态变更为已撤回并自动跳转至 SQL 任务的编辑页面。

审批 SQL 任务

前提条件

  • SQL 任务的状态为审批中
  • 您是目标 SQL 任务的审批人系统管理员

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,找到目标 SQL 任务,单击任务 ID 或任务右侧操作列的详情

  4. 任务详情页面,审批规范预审SQL 详情页签中的内容,根据实际情况选择转交审批通过审批不通过

    操作
    说明
    转交将任务单转交给其他用户审批。
    审批通过批准申请,单击审批通过后,您可以按需输入通过原因,并单击确定
    审批不通过驳回申请,不执行该 SQL 任务。单击审批不通过后,您还需要输入驳回原因,并单击确定

执行 SQL 任务

SQL 任务的状态处于审批通过时,您可以执行 SQL 任务。

前提条件

  • SQL 任务的状态为审批通过
  • 您是目标 SQL 任务的执行人系统管理员

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,单击目标状态为审批通过的任务 ID。

  4. 任务详情页面,单击右上角的执行

  5. 在弹出的执行 SQL 任务窗口中,选择错误处理备份失败处理执行方式,单击确定

    操作
    说明
    错误处理
    • 执行出错后,终止任务:SQL 执行过程中如果出错,则立即终止执行。
    • 执行出错后,继续任务:SQL 执行过程中如果出错,则忽略该错误,继续往下执行。
    • 执行出错后,回滚任务(仅 MySQL):在 SQL 任务仅包含 DML 语句时可选。任务将以事务方式执行,在 DML 语句执行失败后自动回滚整个任务,确保执行原子性与一致性。
    备份失败处理SQL 任务默认会在执行之前针对需要变更的内容进行备份,以防止执行出错后对业务造成影响。支持如下两个选项:
    • 备份失败后,继续任务:无论备份成功与否,都继续执行当前 SQL 任务。
    • 备份失败后,停止任务:备份失败后,不执行当前 SQL 任务。
    执行方式
    • 立即执行:马上执行 SQL 语句。
    • 定时执行:选择一个时间执行 SQL 语句。
    • 手动执行:手动执行 SQL 任务单中的 SQL,并单击已执行,标记成功。您也可以单击前往 SQL 窗口执行手动执行该 SQL。
  6. 任务状态变更为备份中,如果您不需要系统帮您备份执行前数据,可以单击右上角的跳过备份并单击跳过并继续执行,等待任务状态变更为执行成功即可。

暂停 SQL 任务

SQL 任务的状态处于执行中时,您可以暂停该 SQL 任务。

前提条件

  • SQL 任务的状态为执行中
  • 您是系统管理员或目标 SQL 任务的执行人

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,找到目标 SQL 任务,单击任务 ID 或任务右侧操作列的详情。在任务详情页右上角单击暂停

终止 SQL 任务

SQL 任务的状态处于非终态状态(例如执行成功已终止)时,都可以终止该 SQL 任务。终止后所有执行中的操作都将停止,且将无法继续对该任务做任何操作。

前提条件

  • SQL 任务的状态处于非终态状态。
  • 您是系统管理员或目标 SQL 任务的执行人

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,找到目标 SQL 任务,单击任务 ID 或任务右侧操作列的详情。在任务详情页右上角单击暂停

重启 SQL 任务

SQL 任务的状态处于执行中执行失败时,您可以重启该 SQL 任务。

前提条件

  • SQL 任务的状态为执行中执行失败
  • 您是系统管理员或目标 SQL 任务的执行人

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,找到目标 SQL 任务,单击任务 ID 或任务右侧操作列的详情。在任务详情页右上角单击重启

  4. 在弹出重启任务窗口中,选择错误处理备份失败处理执行方式,单击确定

    操作
    说明
    错误处理
    • 执行出错后,终止任务:SQL 执行过程中如果出错,则立即终止执行。
    • 执行出错后,继续任务:SQL 执行过程中如果出错,则忽略该错误,继续往下执行。
    备份失败处理SQL 任务默认会在执行之前针对需要变更的内容进行备份,以防止执行出错后对业务造成影响。支持如下两个选项:
    • 备份失败后,继续任务:无论备份成功与否,都继续执行当前 SQL 任务。
    • 备份失败后,停止任务:备份失败后,不执行当前 SQL 任务。
    执行方式
    • 立即执行:马上执行 SQL 语句。
    • 定时执行:选择一个时间执行 SQL 语句。

下载备份数据

当 SQL 任务执行出错,需要将数据恢复到执行前的状态时,您可以下载目标 SQL 任务的备份数据,并手动回滚数据。

前提条件

  • SQL 任务的对象数据源类型为 MySQL、Oracle。
  • 目标 SQL 任务的数据备份状态为已完成
  • 您是系统管理员或目标 SQL 任务的执行人
  • 备份文件未超过 7 天。

操作步骤

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,单击目标 SQL 任务 ID。

  4. 单击页面上半部分的更多,并单击数据备份右侧的下载

  5. 下载后的备份文件是一个 .zip 压缩文件,里面包含了回滚用的 SQL 文件,您可以再次通过提交 SQL 任务上传该文件进行数据回滚操作。更多信息,请参见提交 SQL 任务

查看 SQL 任务列表

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击 数据库 DevOps>SQL 任务

    提示

    如果未找到 SQL 任务,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. SQL 任务页面,即可查看所有 SQL 任务。任务过多的情况下,您可以通过如下搜索方式进行任务过滤,快速定位到目标任务。

    • 根据任务的流程节点
    • 根据任务的状态
    • 根据数据源
    • 根据日期
    • 根据任务名称或 ID
    • 根据库名

NineData OnlineDDL

NineData 的 SQL 任务支持 NineData OnlineDDL 功能,该功能可以在不阻塞表正常读写的情况下,对该表执行结构变更。更多信息,请参见使用 NineData OnlineDDL 对表结构进行无锁变更

SQL 任务自动备份的语法范围

为确保在执行 SQL 任务前能够准确备份即将发生变更的数据,NineData 会根据不同数据库类型识别可产生数据或结构变更的 SQL 语句。当 SQL 任务被提交并进入执行流程时,系统会自动对受影响的表、视图或对象进行备份,以保证在出现误操作或异常时可以安全回滚。

不同数据库的备份语法范围如下。

PostgreSQL、类 PostgreSQL、Oracle

类别触发自动备份的语法
DMLUPDATE, DELETE
表(Table)ALTER TABLE, DROP TABLE, RENAME
视图(View)ALTER VIEW, DROP VIEW
函数(Function)ALTER FUNCTION, DROP FUNCTION
存储过程(Procedure)ALTER PROCEDURE, DROP PROCEDURE
触发器(Trigger)ALTER TRIGGER, DROP TRIGGER

MySQL

类别触发自动备份的语法
DMLUPDATE, DELETE
表(Table)ALTER TABLE, DROP TABLE, RENAME
视图(View)ALTER VIEW, DROP VIEW
函数(Function)ALTER FUNCTION, DROP FUNCTION
存储过程(Procedure)ALTER PROCEDURE, DROP PROCEDURE
触发器(Trigger)ALTER TRIGGER, DROP TRIGGER
事件(Event)ALTER EVENT, DROP EVENT

SQL Server

类别触发自动备份的语法
DMLUPDATE, DELETE
表(Table)ALTER TABLE, DROP TABLE, RENAME
视图(View)ALTER VIEW, DROP VIEW
函数(Function)ALTER FUNCTION, DROP FUNCTION
存储过程(Procedure)ALTER PROCEDURE, DROP PROCEDURE
触发器(Trigger)ALTER TRIGGER, DROP TRIGGER