并行性问题

因为许多用户访问和更改关系数据库中的数据,所以数据库管理器必须允许用户进行这些更改并确保数据完整性。

并行性是指可以同时由多个交互式用户或应用程序共享资源。 数据库管理器通过控制此访问来防止出现意外的后果,例如:
  • 丢失更新。 两个应用程序 A 和 B 可能同时读取同一行并根据这些应用程序读取的数据来计算其中一列的新值。 如果 A 更新该行,而 B 随后也更新该行,那么 A 所作的更新将丢失。
  • 访问未落实的数据。 应用程序 A 可能更新某个值,而应用程序 B 可能在该值被落实前读取该值。 接着,如果 A 撤销该更新,那么 B 执行的计算可能基于无效的数据。
  • 不可重复的读。 应用程序 A 可能在处理其他请求前读取某一行。 与此同时,B 修改或删除该行并落实更改。 以后,如果 A 试图再次读取原始行,那么它将看到已修改的行或发现原始行已被删除。
  • 幻像读。 应用程序 A 可能执行一个查询,该查询根据某个搜索条件读取一组行。 应用程序 B 插入新数据或更新现有数据,以满足应用程序 A 的查询。 应用程序 A 在同一工作单元内再次执行其查询,并返回一些其他 (phantom) 值。

对于全局临时表而言,不会发生并行性问题,原因是这些表仅可供声明或创建它们的应用程序使用。

联合数据库系统中的并行控制

联合数据库系统支持应用程序和用户提交在单个语句中引用两个或更多个数据库管理系统(DBMS)的 SQL 语句。 为了引用此类数据源 (每个数据源都由 DBMS 和数据组成) , Db2® 服务器使用昵称。 昵称是其他 DBMS 中对象的别名。 在联合系统中,DB2 服务器依赖于主管所请求数据的数据库管理器的并行控制协议。

DB2 联合系统为数据库对象提供位置透明性。 例如,如果关于表和视图的信息已移动位置,那么可以更新通过昵称对该信息的引用,而无需更改请求获取此信息的应用程序。 当应用程序通过昵称来访问数据时,DB2 服务器依靠数据源的并行控制协议来确保强制实施隔离级别。 尽管 DB2 服务器尝试将数据源上请求的隔离级别与等同的逻辑级别匹配,但是,结果可能因数据源功能不同而有所变化。