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

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日

相关文章

  • Python连接MySQL并使用fetchall()方法过滤特殊字符

    连接 MySQL 数据库,是 Python 中经常用到的操作。这里我们将详细讲解 Python 连接 MySQL 数据库,并且使用 fetchall() 方法过滤特殊字符的具体操作步骤。 1.安装相关 python 库 在连接 MySQL 数据库之前,我们需要确保已经安装了相关的 Python 库。我们可以通过 pip 工具来安装,命令如下: pip ins…

    database 2023年5月22日
    00
  • Linux系统利用crontab定时备份Mysql数据库方法

    当我们运行一个 Mysql 数据库时,为了避免数据的丢失,在数据库中定时备份是非常必要的。在 Linux 系统中,可以使用 crontab 工具来实现定时备份 Mysql 数据库的功能。以下是具体步骤: 步骤一:安装 mysql-client 和 cron 工具 在 Linux 系统上安装 mysql-client 和 cron 工具,mysql-clien…

    database 2023年5月22日
    00
  • Mysql命令行导入sql数据

    当需要将SQL文件导入到MySQL数据库时,可以使用MySQL命令行工具来完成。 以下是MySQL命令行导入SQL数据的步骤: 打开终端/命令提示符,并登录MySQL服务器。命令格式如下,其中username为用户名,password为密码: $ mysql -u username -p password 创建新的数据库(如果要导入数据到新的数据库),并选中…

    database 2023年5月22日
    00
  • Javascript new Date().valueOf()的作用与时间戳由来详解

    JavaScript中的new Date().valueOf()用于获取当前时间的时间戳。时间戳指的是自1970年1月1日00:00:00 UTC(世界标准时间)起至当前时间的毫秒数。JavaScript使用时间戳来表示日期和时间,这个时间戳也称为Epoch时间。 JavaScript中的new Date().valueOf()返回的是一个数值,该数值表示1…

    database 2023年5月21日
    00
  • PL/SQL数据类型及操作符

    PL/SQL是一种基于Oracle数据库的过程式编程语言,是SQL语言的扩展,支持丰富的数据类型和操作符。以下是对PL/SQL数据类型及操作符的详细讲解: PL/SQL数据类型 PL/SQL支持多种数据类型,包括数值型、字符型、日期型等。具体如下: 数值型 PL/SQL提供了多种数值类型,包括整型和浮点型。常用的数值类型有: NUMBER(p, s),用于精…

    database 2023年5月21日
    00
  • Mybatis-Plus或PageHelper多表分页查询总条数不对问题的解决方法

    针对”Mybatis-Plus或PageHelper多表分页查询总条数不对问题的解决方法”,以下是完整攻略。 问题描述 在使用Mybatis-Plus或PageHelper进行多表分页查询时,有时会出现总条数不对的问题。具体表现为分页查询只返回了部分数据或者分页信息不正确。 解决方法 方法一:使用MyBatis-Plus提供的Wrapper进行多表关联查询 …

    database 2023年5月21日
    00
  • Redis集群的离线安装步骤及原理详析

    Redis集群的离线安装步骤及原理详析 离线安装步骤 Redis是一种流行的内存数据库,Redis集群可以提供高可用性和可伸缩性。本文将介绍如何在离线环境中安装和配置Redis集群。 首先,从Redis官网(https://redis.io/)下载最新的Redis源代码,并将其解压缩到目标目录中。使用“tar -zxvf redis-x.x.x.tar.gz…

    database 2023年5月22日
    00
  • MySQL中dd::columns表结构转table过程及应用详解

    MySQL中dd::columns表结构转table过程及应用详解 在MySQL中,我们经常需要获取某张表的结构信息,这时可以使用SHOW COLUMNS FROM table_name命令来实现。但是,在某些场景下,我们需要将多张表的结构信息保存在一个单独的表中进行统计分析,因此需要将SHOW COLUMNS命令的结果转为表格式,这时就可以使用dd::co…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部