数据库事务
功能介绍
数据库事务是访问并可能操作各种数据的一个数据库操作序列。这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。数据库事务具有以下四个基本特性:
- 原子性:事务中的全部操作在数据库中是不可分割的,要么全部执行,要么全部不执行。
- 一致性:几个并行执行的事务,其执行结果必须与某一顺序串行执行的结果相一致。
- 隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。
- 持久性:对于任意已提交的事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。
基于数据库事务的四个特性,如从外部导入数据到GIS数据库时,事务可确保数据的完整导入,避免因中途失败(如突发断电、操作系统崩溃等)而导致数据损坏或不一致。
在SuperMap iDesktopX中,数据库事务的使用范围如下:
- 支持PostGIS数据库型数据源。
- 支持对数据源有使用和创建权限的用户开启事务,但对数据集的操作权限,受用户权限限制。
- 支持的数据集类型不包括:影像/栅格数据集、带金字塔的矢量数据集、镶嵌数据集、注册版本的数据集。
本文主要介绍怎么使用数据库事务,包括开启事务、对数据库进行操作、回退或提交数据以结束事务操作。
- 开启事务:开启后,即可对数据库进行事务操作。
- 提交事务:将开启事务之后的所有操作提交到数据库中,永久的保存对数据库的更新结果。
- 回退事务:将开启事务之后的所有操作删除,不保存对数据库的更改。
SuperMap iDesktopX 11i(2024) 版本开始,提供数据库事务功能。
操作说明
- 打开数据库型数据源并开启事务。开启事务有两种方式:
- 方式一:单击数据选项卡->数据库事务分组->开启事务按钮,在开启事务对话框中勾选需要进行事务管理的数据源。当前工作空间中存在未开启事务的数据源时,按钮可用。
- 方式二:在工作空间管理器中右键选择需要开启事务管理的数据库型数据源->数据库事务->开启事务按钮。
通过上述任一方式对数据源开启事务之后,数据源节点图标上将出现一个蓝色圆点,表明该数据源的状态处于事务中。若数据源与数据库断开连接,事务操作将失效,且自动恢复到未开启事务前的状态。
当多个用户同时开启事务时,可能会受到其他事务的影响。因此对数据集提供不同的事务锁,以确保数据库事务满足其四个基本特性。
- 有其他事务锁:其他用户正在对该数据集进行查询、编辑或分析操作。
- 当前事务锁:当前用户最先对数据集进行查询、编辑或分析操作,可能存在其他用户同时对此数据集进行操作。
- 无事务锁:无任何用户对数据集进行查询、编辑或分析操作。
可通过数据集右键菜单->管理->事务锁查看数据集的事务锁状态,不同事务锁状态对其他功能的影响如下:
功能点 有其他事务锁 当前事务锁 无事务锁 新建数据集 不受事务影响,直接提交到库 修改数据集名、修改字段别名 不受事务影响,直接提交到库 导入外部数据为新数据集 不受事务影响。
- 若导入失败,数据集属性表结构直接保存到库中,数据记录保存到事务内,提交事务后才保存到库中。
- 若在导入数据集时未勾选创建空间索引,则导入的记录将保存在当前事务中,需要通过提交/回退事务来保存或删除导入过程中以及导入前未提交的所有记录。数据集属性表结构直接保存到库中,不受事务影像。
- 若在导入数据集时勾选创建空间索引,则默认提交当前事务,导入数据集后自动开启事务。不可回退导入过程中以及导入前未提交的所有记录。
删除数据集 不支持 不支持 直接删除,并提交到库 对象编辑(包括空间、属性信息) - 可编辑非同一对象
- 编辑同一对象时,第一个用户会锁住该对象,其他用户无法编辑(编辑时会停留5秒,并回退操作,同时在输出窗口提示,如:“数据集[NewRegion]提交数据失败,失败原因:待修改记录可能被其他事务编辑。”)
- 可编辑非同一对象
- 编辑同一对象时,第一个用户会锁住该对象,其他用户无法编辑(编辑时会停留5秒,并回退操作,同时在输出窗口提示,如:“数据集[NewRegion]提交数据失败,失败原因:待修改记录可能被其他事务编辑。”)
可编辑所有对象 涉及属性表结构操作,包括导入数据(追加字段)等 不支持修改 默认提交当前事务,再对属性表结构进行编辑(包括创建字段、删除字段,修改字段类型、修改字段默认值、修改字段名)。编辑内容直接提交到库,并重新开启事务 直接提交入库,包括创建字段、删除字段,修改字段类型、修改字段默认值、修改字段名编辑操作。 分析 - 无新建/删除字段,分析结果保存到当前事务中
- 有新建/删除字段,分析失败
- 无新建/删除字段,分析结果保存到当前事务中
- 有新建/删除字段,默认提交当前事务,字段修改直接保存到库,并重新开启新事务。即将分析前的操作保存到库中,后续操作保存在新事务中
- 无新建/删除字段,分析结果保存到当前事务中
- 有新建/删除字段,新建/删除的字段直接保存到库中,分析结果保存在当前事务中
注册版本 不支持 支持注册版本,需先提交当前事务,注册后不受事务影响 支持注册版本,注册后不受事务影响 - 完成事务操作后,可通回退事务来撤销对数据库的所有更改,也可通过提交事务将对数据库的所有更改保存,从而结束事务。提供以下两种功能操作方式:
- 方式一:单击数据选项卡->数据库事务分组->回退事务/提交事务,在弹出的对话框中勾选需要结束事务的数据源。
- 方式二:在工作空间管理器中右键选择需要回退/提交事务的数据源->数据库事务->回退事务/提交事务按钮。
相关主题