Oracle 阻塞(blocking blocked)介绍和实例演示

yizhihongxing

Oracle 阻塞(blocking)介绍和实例演示

什么是 Oracle 阻塞(blocking)?

Oracle 阻塞是指一个会话在等待另一个会话持有的资源,例如锁、资源。当一个会话在等待资源时,其他会话无法使用该资源,从而导致阻塞。如果不及时处理,阻塞经常会导致性能下降或系统崩溃。

Oracle 阻塞(blocking)的类型

Oracle 阻塞在技术上分为两种类型:

  • 死锁(deadlock):这是两个或多个会话正在等待对方持有的资源。这意味着没有会话可以继续执行。此时必须分析死锁,并且通过释放或请求所需资源的方式来解决死锁。

  • 非死锁阻塞(non-deadlock blocking):会话正在等待另一个会话持有的锁,但另一个会话并没有受到任何阻塞。当持有锁的会话释放资源时,等待的会话将获得该锁并继续执行。

Oracle 阻塞(blocking)的原因

由于各种原因,可能会导致 Oracle 阻塞。以下是一些常见原因:

  • 对同一事务数据进行并发修改
  • 对数据库中的同一记录进行并发更新
  • 如使用含义完全相同的 SQL 语句的情况下,同时访问同一表和字段
  • 使用较长时间的查询会话锁定表
  • 忘记提交或回滚事务导致最终出现大量等待

Oracle 阻塞(blocking)的解决方法

诊断 Oracle 阻塞(blocking)

通过以下命令可以查看哪些会话正在阻塞、正在被阻塞和使用的资源。

SELECT
  s1.username || '@' || s1.machine || ' ( SID=' || s1.sid || ' ) is blocking ' ||
    s2.username || ' ( SID=' || s2.sid || ' ) ' AS blocking_status,
  s1.sid,
  s1.serial#,
  s2.sid,
  s2.serial#,
  owner || '.' || OBJECT_NAME object,
  o.OBJECT_TYPE,
  s1.TYPE,
  s1.lmode,
  s2.request,
  DECODE (s1.blocking_others, 0, 'NO', 'YES') blocking_others,
  s1.event,
  s2.INST_ID
FROM
  gv$LOCKED_OBJECT l,
  gv$SESSION s1,
  gv$SESSION s2,
  dba_objects o
WHERE
  s1.sid = l.session_id
  AND o.object_id = l.object_id
  AND s2.sid = l.locked_by
  AND s1.sid != s2.sid
ORDER BY
  sid;

该查询将返回阻塞会话的详细信息,包括会话 ID、锁信息、阻塞类型等。

解决 Oracle 阻塞(blocking)

以下是解决 Oracle 阻塞的一些常见方法:

  • 终止会话:如果会话已经很长时间阻塞,可以考虑终止该会话。此时需要确定终止会话是否会导致数据丢失或事务失败。如果不确定,可以参考死锁处理方法。

  • 释放会话锁定的资源:如果一会话对另一个会话的资源产生阻塞,可以释放当前会话正在使用的资源。该方法可能会导致事务失败或数据丢失。

Oracle 阻塞(blocking)的实例演示

实例 1:

假设一个会话正在查询一个锁定了的表,导致其他会话等待该锁。该阻塞可以通过终止查询会话或释放锁的方式解决。

SELECT COUNT(*) FROM big_table WHERE very_long_running_query;

实例 2:

假设有两个会话同时更新同一个表中的同一个记录。如果查询对该记录的并发修改,可能会导致非死锁阻塞。该阻塞可以通过等待一个会话提交或回滚,并防止同时修改同一记录的方式解决。

-- 假设 Session 1 开启一个事务并执行以下命令:
UPDATE table SET column = 'new value' WHERE id = 1;

-- 假设 Session 2 也开启一个事务并执行以下命令:
UPDATE table SET column = 'newer value' WHERE id = 1;

以上是 Oracle 阻塞(blocking)的介绍和实例演示。为了保持系统的稳定性和完整性,阻塞是需要及时处理的。如果遇到类似问题,请参考上述的解决方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Oracle 阻塞(blocking blocked)介绍和实例演示 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • vscode内网访问服务器的方法

    下面是详细的“vscode内网访问服务器的方法”的攻略。 什么是vscode内网访问服务器? 通常情况下,我们的电脑和服务器一般都处于同一个局域网,如果我们直接在vscode上连接服务器,即使服务器开了对外映射的端口,也无法直接连接,这就是内网访问。 解决方法 要解决这个问题,我们可以通过在本地电脑与服务器之间建立一个SSH隧道,来实现内网访问。下面我们将具…

    database 2023年5月22日
    00
  • MySQL存储毫秒数据的方法

    MySQL存储毫秒数据的方法可以通过以下两个步骤来实现。 步骤一:定义表结构 在 MySQL 中定义表结构时,建议使用 datetime(3) 来定义时间类型,其中的 3 代表精度,表示支持毫秒级别的存储。同时,在定义表结构时,还需要为其中的时间列添加索引,以提高查询效率。以下是一个示例表结构的定义: CREATE TABLE `example_table`…

    database 2023年5月22日
    00
  • MySQL用户和数据权限管理详解

    MySQL用户和数据权限管理详解 在MySQL中,用户和数据权限是非常重要的管理内容,通过用户和数据权限的管理,能够限制用户的操作范围,提高数据的安全性和完整性。本文将详细介绍如何在MySQL中管理用户和数据权限。 1. 创建用户 在MySQL中创建用户需要使用 CREATE USER 命令,格式如下: CREATE USER ‘username’@’loc…

    database 2023年5月18日
    00
  • Linq to SQL Delete时遇到问题的解决方法

    Linq to SQL Delete时遇到问题的解决方法 在使用Linq to SQL进行删除操作时,我们可能会遇到一些问题。这篇攻略将介绍在Linq to SQL Delete时遇到问题的解决方法。 问题描述 当我们使用Linq to SQL进行删除操作时,可能会出现以下情况: 当我们在DataContext中直接使用DeleteOnSubmit方法进行删…

    database 2023年5月21日
    00
  • SQL insert into语句写法讲解

    当我们想要向一个数据库表格里插入新的数据时,可以使用SQL insert into语句。在这里,我将详细讲解如何使用SQL insert into语句来完成这项任务。 SQL insert into语句 SQL insert into语句用来将新的数据插入到一个数据库表格中,在此之前,需要先创建一个表格以存储数据。 以下是SQL insert into语句的…

    database 2023年5月21日
    00
  • Excel VBA连接并操作Oracle

    下面我会详细讲解“Excel VBA连接并操作Oracle”的完整攻略,包含如何连接Oracle数据库、如何执行SQL语句、如何读取结果集等细节,并提供两条示例说明。 准备工作 在连接Oracle之前,需要确保电脑上已经安装Oracle客户端或Oracle Instant Client。安装后,需要将Oracle client的目录添加到系统环境变量的PAT…

    database 2023年5月21日
    00
  • linux服务器安装SonarQube代码检测工具的详细步骤

    下面是Linux服务器安装SonarQube代码检测工具的详细步骤: 准备工作 首先需要确保你的Linux服务器上已经安装了JDK,SonarQube运行需要Java环境。如果没有安装可以使用下面的命令安装JDK: sudo apt-get update sudo apt-get install default-jdk 下载SonarQube的安装包,你可以…

    database 2023年5月22日
    00
  • docker安装Redis并设置密码 docker安装Redis并设置密码

    1.获取redis镜像 docker pull redis 指定版本号: docker pull redis:4.0.9     不加版本号默认获取最新版本,也可以使用 docker search redis 查看镜像来源     2.查看本地镜像  docker images   3.然后启动容器,做映射   ①创建配置文件目录存放redis.conf,文…

    Redis 2023年4月13日
    00
合作推广
合作推广
分享本页
返回顶部