数据库事务

功能介绍

数据库事务是访问并可能操作各种数据的一个数据库操作序列。这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。数据库事务具有以下四个基本特性:

  • 原子性:事务中的全部操作在数据库中是不可分割的,要么全部执行,要么全部不执行。
  • 一致性:几个并行执行的事务,其执行结果必须与某一顺序串行执行的结果相一致。
  • 隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
  • 持久性:对于任意已提交的事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

基于数据库事务的四个特性,如从外部导入数据到GIS数据库时,事务可确保数据的完整导入,避免因中途失败(如突发断电、操作系统崩溃等)而导致数据损坏或不一致。

在SuperMap iDesktopX中,数据库事务的使用范围如下:

  • 支持PostGIS数据库型数据源。
  • 支持对数据源有使用和创建权限的用户开启事务,但对数据集的操作权限,受用户权限限制。
  • 支持的数据集类型不包括:影像/栅格数据集、带金字塔的矢量数据集、镶嵌数据集、注册版本的数据集。

本文主要介绍怎么使用数据库事务,包括开启事务、对数据库进行操作、回退或提交数据以结束事务操作。

  • 开启事务:开启后,即可对数据库进行事务操作。
  • 提交事务:将开启事务之后的所有操作提交到数据库中,永久的保存对数据库的更新结果。
  • 回退事务:将开启事务之后的所有操作删除,不保存对数据库的更改。

SuperMap iDesktopX 11i(2024) 版本开始,提供数据库事务功能。

操作说明

  1. 打开数据库型数据源并开启事务。开启事务有两种方式:
    • 方式一:单击数据选项卡->数据库事务分组->开启事务按钮,在开启事务对话框中勾选需要进行事务管理的数据源。当前工作空间中存在未开启事务的数据源时,按钮可用。
    • 方式二:在工作空间管理器中右键选择需要开启事务管理的数据库型数据源->数据库事务->开启事务按钮

    通过上述任一方式对数据源开启事务之后,数据源节点图标上将出现一个蓝色圆点,表明该数据源的状态处于事务中。若数据源与数据库断开连接,事务操作将失效,且自动恢复到未开启事务前的状态。

    当多个用户同时开启事务时,可能会受到其他事务的影响。因此对数据集提供不同的事务锁,以确保数据库事务满足其四个基本特性。

    • 有其他事务锁:其他用户正在对该数据集进行查询、编辑或分析操作。
    • 当前事务锁:当前用户最先对数据集进行查询、编辑或分析操作,可能存在其他用户同时对此数据集进行操作。
    • 无事务锁:无任何用户对数据集进行查询、编辑或分析操作。

    可通过数据集右键菜单->管理->事务锁查看数据集的事务锁状态,不同事务锁状态对其他功能的影响如下:

    功能点 有其他事务锁 当前事务锁 无事务锁
    新建数据集     不受事务影响,直接提交到库
    修改数据集名、修改字段别名 不受事务影响,直接提交到库
    导入外部数据为新数据集

    不受事务影响。

    • 若导入失败,数据集属性表结构直接保存到库中,数据记录保存到事务内,提交事务后才保存到库中。
    • 若在导入数据集时未勾选创建空间索引,则导入的记录将保存在当前事务中,需要通过提交/回退事务来保存或删除导入过程中以及导入前未提交的所有记录。数据集属性表结构直接保存到库中,不受事务影像。
    • 若在导入数据集时勾选创建空间索引,则默认提交当前事务,导入数据集后自动开启事务。不可回退导入过程中以及导入前未提交的所有记录。
    删除数据集 不支持 不支持 直接删除,并提交到库
    对象编辑(包括空间、属性信息)
    • 可编辑非同一对象
    • 编辑同一对象时,第一个用户会锁住该对象,其他用户无法编辑(编辑时会停留5秒,并回退操作,同时在输出窗口提示,如:“数据集[NewRegion]提交数据失败,失败原因:待修改记录可能被其他事务编辑。”)
    • 可编辑非同一对象
    • 编辑同一对象时,第一个用户会锁住该对象,其他用户无法编辑(编辑时会停留5秒,并回退操作,同时在输出窗口提示,如:“数据集[NewRegion]提交数据失败,失败原因:待修改记录可能被其他事务编辑。”)
    可编辑所有对象
    涉及属性表结构操作,包括导入数据(追加字段)等 不支持修改 默认提交当前事务,再对属性表结构进行编辑(包括创建字段、删除字段,修改字段类型、修改字段默认值、修改字段名)。编辑内容直接提交到库,并重新开启事务 直接提交入库,包括创建字段、删除字段,修改字段类型、修改字段默认值、修改字段名编辑操作。
    分析
    • 无新建/删除字段,分析结果保存到当前事务中
    • 有新建/删除字段,分析失败
    • 无新建/删除字段,分析结果保存到当前事务中
    • 有新建/删除字段,默认提交当前事务,字段修改直接保存到库,并重新开启新事务。即将分析前的操作保存到库中,后续操作保存在新事务中
    • 无新建/删除字段,分析结果保存到当前事务中
    • 有新建/删除字段,新建/删除的字段直接保存到库中,分析结果保存在当前事务中
    注册版本 不支持 支持注册版本,需先提交当前事务,注册后不受事务影响 支持注册版本,注册后不受事务影响
  2. 完成事务操作后,可通回退事务来撤销对数据库的所有更改,也可通过提交事务将对数据库的所有更改保存,从而结束事务。提供以下两种功能操作方式:
    • 方式一:单击数据选项卡->数据库事务分组->回退事务/提交事务,在弹出的对话框中勾选需要结束事务的数据源。
    • 方式二:在工作空间管理器中右键选择需要回退/提交事务的数据源->数据库事务->回退事务/提交事务按钮。

相关主题

数据库用户管理概述

创建数据库用户

版本管理概述