热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

DB2在单用户和多用户环境数据并发性的处理机制

本文旨在向您介绍数据一致性的概念,以及DB2在单用户和多用户数据库环境中用来维护数据一致性的各种机制。本教程还将帮助您为应对DB210.1基础认证考试(考试610)的第6部分而做准备。

本文旨在向您介绍数据一致性的概念,以及 DB2 在单用户和多用户数据库环境中用来维护数据一致性的各种机制。本教程还将帮助您为应对 DB2 10.1 基础认证考试(考试 610)的第 6 部分而做准备。

正在考虑获得 IBM Certified Database Associate(DB2 10.1 基础认证)?那您就来对了地方。这个 DB2 10.1 基础认证准备系列 旨在介绍参加 DB2 10.1 基础认证考试(考试 610)之前必须了解的所有主题。即使您不打算马上参加认证考试,本系列中提供的信息也可以帮助您了解 DB2 10 for z/OS® 和 DB2 10.1 for Linux®, UNIX®, and Windows® 中的新特性和功能。

您没有看到正在寻找的?您可以查看 DB2 9 基础认证 730 准备系列 中的 DB2 9 。

关于本教程

在 DB2 10.1 基础认证考试(考试 610)中,有 13% 的内容旨在测试您对一些机制(有关 DB2 用来允许多个用户和应用程序在不影响数据一致性的情况下与进行交互的机制)的了解。组成考试的这一部分的问题旨在评估:

  • 您能够识别在给定情况下应该使用的隔离级别。
  • 您能够识别 DB2 锁的特征。
  • 您能够列出可以为其获得锁的对象。
  • 您能够识别影响锁的因素。

本教程旨在介绍数据一致性的概念,以及 DB2 用于在单用户和多用户数据库环境中维护数据一致性的两个重要机制:隔离级别和锁。本教程是由 6 部分组成的系列教程中的第 6 部分,您可以使用本教程来准备 DB2 10.1 基础认证考试(考试 610)。

目标

在本教程中的材料涵盖了 DB2 10.1 基础认证考试(考试 610)的第 6 部分的目标。

在完成本教程之后,您应该能够:

  • 识别影响锁的因素。
  • 列出可以在其上获得锁的对象。
  • 适当地使用 LOCK TABLE 语句。
  • 识别 DB2 锁的特征(在所有平台上共享的常用锁)。
  • 识别在给定情况下应该使用的隔离级别。
  • 知道如何以及何时使用当前已提交 (CC) 的语义。

先决条件

要理解本教程所提供的一些内容,您应该熟悉下列术语:

  • 结构化查询语言 (Structured Query Language, SQL):一种用来在关系数据库中定义对象和操纵数据的标准化语言。
  • 对象:数据库中可以用 SQL 创建或操纵的任何东西(例如,表、视图、索引和包等)。
  • 表:一种逻辑结构,用来将数据表示为有固定列数的无序行的集合。每个列都包含一组值,列中所有的值都具有相同的数据类型。列的定义组成了表结构,而行包含实际的数据。
  • 记录:表中一行的存储表示。
  • 字段:表中一列的存储表示。
  • 值:具体的数据项,位于数据库表中行与列的每个交叉点上。
  • DB2 优化器:SQL 预编译器的一个组件,它通过对几个不同访问计划的执行成本进行建模并选择预计成本最低的计划,为数据操纵语言 (Data Manipulation Language, DML) SQL 语句选择一个访问计划。

系统需求

您不需要 DB2 的副本也可以顺利完成本教程,但是,如果您可以访问一个 DB2 数据库,您就能够测试本教程所展示的一些命令和概念。

您可以从 IBM DB2 Express-C 的一个免费版本。

数据一致性

理解数据一致性

为了理解 DB2 如何尝试在单用户和多用户数据库环境中维护数据一致性,您必须先了解数据一致性是什么。此外,您还必须能够识别让数据库进入不一致状态的事件类型。那么到底什么是数据一致性?回答这个问题的最佳方法是研究示例。

假定某公司拥有多家连锁饭店,公司用一个数据库来跟踪每家饭店中的库存等信息。数据库包含每家连锁饭店的库存表。每当一家饭店收到或用掉一部分货物时,就会更新相应的库存表。现在,假定将一箱咖啡从一家饭店(其咖啡库存量充足)调配到另一家饭店(其咖啡刚刚用完)。为了准确地反映这一次库存调配,在接收方饭店的库存表中所存储的咖啡瓶数的值需要有所增加,而调出方饭店的表中所存储的咖啡瓶数的值需要有所减少。如果用户增加了接收方饭店的库存表中的咖啡瓶数的值,但没有减少调出方饭店库存表中的咖啡瓶数的值,那么数据库中的数据就会不再一致。此时所有连锁店的咖啡的总瓶数不再准确,调出方饭店的咖啡瓶数也不再准确。

在单用户环境中,如果用户没有进行必要的更改(如前面的示例),或者如果在用户或应用程序进行更改的过程中系统崩溃了,又或者如果应用程序过早地终止,那么数据库中的数据都会变得不一致。在多用户环境中,当几个用户或应用程序尝试同时访问相同的数据时,也可能会发生不一致。例如,在刚刚介绍的场景中,如果一个用户查询数据库以获得接收方饭店的咖啡瓶数,同时另一个用户在更新两家饭店的库存表,以反映有一箱咖啡从一家饭店转移到另一家饭店,在更新被提交之前,查询将会错误地显示没有剩余的咖啡。

事务、隔离级别和锁

事务

DB2 用于保持数据一致性的主要机制是事务。事务(也称为工作单元)是一种将一个或多个 SQL 操作组合成一个单元的可恢复序列,通常位于应用程序中。事务的启动和终止定义了数据库内的一致性点;要么将一个事务中执行的所有操作的结果都应用于数据库,并使其成为永久性的(已提交),要么完全撤消(已回滚)它们,并且数据库回到事务启动之前的状态。在单用户环境中,事务是按顺序运行的,并且不必与其他并行运行的事务竞争。但在多用户环境中,事务通常是同时运行的。因此,每个事务都有可能干扰正在运行的任何其他事务;要控制所允许的总干扰数量,就需要使用另一个机制:隔离级别。

有可能彼此干扰的事务被称为是交错的(或并行的)事务,而彼此完全隔离的事务被称为是可序列化的 事务,这意味着,同时运行它们的结果与按顺序(一个接一个地)运行它们的结果将没有什么不同。在理想的情况下,每个事务都应该是可序列化的。为什么呢?假设一个销售人员和会计师在同一时间使用相同的数据库。现在,假设销售人员在录入 X 公司的订单(以生成报价),但没有提交其录入条目。同时,会计师将查询数据库,获得所有未支付订单的列表,检索 X 公司的新订单,并生成一个账单。现在,假设负责 X 公司的销售人员决定不下订单。因为订单还没有发出,所以该销售人员可以回滚事务,有关订单的信息会从数据库中删除。然而,一个星期后,X 公司收到的账单中包含这个从未发出的订单。如果销售人员的事务和会计师的事务彼此完全隔离(也就是说,事务是序列化的),这种情况就不会发生。无论是销售人员的事务在会计师的事务开始前完成,还是会计师的事务在销售人员的事务开始之前完成,在这两种情况下,X 公司都不会收到账单。

如果事务不是可序列化的,那么可能出现四种现象:

  • 丢失更新:当两个事务在同一时间读取相同的数据并且都试图更新该数据时,会出现这种情况,导致其中一个更新的损失。例如:事务 1 和事务 2 读取相同行的数据,并根据读出的原始值为该行计算新的值。如果事务 1 用其新值更新行,而事务 2 在之后更新同一行,那么事务 1 所执行的更新操作都将丢失。
  • 脏读 (Dirty Read):当一个事务读取尚未提交的数据时,会出现这种情况。例如:事务 1 修改了一行数据,而事务 2 在提交更改之前读取了已更改的行。如果事务 1 回滚该变更,那么事务 2 将会读取从未真正存在的数据。
  • 不可重复读取 (Nonrepeatable Read):当一个事务读取同一行数据两次,但每次都获得不同的结果时,就会出现这种情况。例如:事务 1 读取一行数据,然后事务 2 修改或删除该行并提交了变更。当事务 1 尝试重新读取该行,它会检索到不同的数据值(如果该行被更新)或发现该行已经不存在(如果该行被删除)。
  • 幻像:当一行数据与某些搜索条件相匹配,但该行在最初不可见时,就会出现这种情况。例如:事务 1 检索一组满足某些搜索条件的行,然后事务 2 插入一个新行,该行与事务 1 的查询的搜索条件相匹配。如果事务 1 再次执行生成原来那一组行的查询,被返回的将是另一组不同的行。(事务 2 所添加的新行现在将被包含在所生成的这组行中。)

推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • macOS10.12安装win10系统教程,实现双系统安装
    本文介绍了如何在macOS10.12系统上安装win10系统,实现双系统的安装。通过使用Boot Camp助理,选取win10系统镜像并分配系统容量,然后进行安装。安装完win10系统后,安装驱动并重启系统即可完成双系统的安装。 ... [详细]
author-avatar
mobiledu2502852643
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有