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日

相关文章

  • oracle保留两位小数解决方案

    如果你需要在Oracle数据库中保留两位小数,下面是一些可用的解决方案。 方案一:使用TO_CHAR函数 使用TO_CHAR函数可以将数字类型转换为字符类型,并指定小数点后的位数。例如,如果要将数字字段salary保留两位小数并转换为字符类型,可以使用以下SQL语句: SELECT TO_CHAR(salary, ‘FM999999999.99’) FROM…

    database 2023年5月22日
    00
  • 详解PHP中的PDO类

    详解PHP中的PDO类 简介 PDO(PHP Data Object)是PHP中的一个数据库抽象层,提供了面向对象的操作数据库的方式,可以支持多种数据库。PDO类是PHP对数据库进行操作的一个核心类。 PDO类的初始化 使用PDO时需要先初始化,初始化后可以操作数据库。PDO的初始化需要指定数据库类型、主机(或IP地址)、数据库名、用户名、密码。下面是一个示…

    database 2023年5月21日
    00
  • 30分钟学会用PHP写带数据库的简单通讯录第2/3页

    为了学习如何使用PHP编写带有数据库的简单通讯录,您需要遵循以下步骤: 确定需求和设计数据库结构 在编写任何代码前,您需要明确所需的功能和数据库结构。例如,您可能需要一个联系人列表,并搜集以下信息:姓名、电话号码、电子邮件地址等。一旦确定了这些需求,您可以设计一个数据库结构来存储这些信息,例如创建一个名为contacts的表,每个联系人有一个id、name、…

    database 2023年5月21日
    00
  • MySQL基础快速入门知识总结(附思维导图)

    首先我们先来介绍一下MySQL的基础知识。 1. 安装MySQL 首先,我们需要去官网下载MySQL的安装包,并进行安装。安装完成后,我们需要启动MySQL服务,并且创建一个MySQL的账号。 2. 创建数据库 创建数据库的命令是CREATE DATABASE,如下所示: CREATE DATABASE dbname; 其中,dbname是你要创建的数据库名…

    database 2023年5月18日
    00
  • Android SharePreferences与数据库SQLite存储实现方法介绍

    下面我将为您介绍”Android SharePreferences与数据库SQLite存储实现方法介绍”的完整攻略。 一、背景介绍 在Android应用程序中,我们需要保存一些应用程序的配置、用户信息等数据。Android提供了两种数据持久化的方案:SharePreferences和SQLite数据库。 SharePreferences用于存储键值对,比如保…

    database 2023年5月19日
    00
  • Oracle配置dblink访问PostgreSQL的操作方法

    下面是详细的“Oracle配置dblink访问PostgreSQL的操作方法”攻略: 准备工作 确认Oracle数据库已安装,并且有使用DBLINK的权限; 安装PostgreSQL数据库; 开启PostgreSQL数据库中的远程访问权限。 配置PostgreSQL 修改postgres.conf文件中的listen_addreses参数,将其改为“*”,表…

    database 2023年5月22日
    00
  • mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )

    MySQL中的INSERT语句用于将数据插入到表中。在插入过程中,我们还可以使用一些额外的参数,来控制INSERT的行为。其中包括:DELAYED、IGNORE和ON DUPLICATE KEY UPDATE。 接下来,我们分别来详细讲解一下这三种参数的使用方法,以及给出示例说明。 DELAYED DELAYED关键字可以被用于INSERT语句中,表示该插入…

    database 2023年5月22日
    00
  • MySQL中触发器的基础学习教程

    MySQL中的触发器是一种特殊的数据库对象,可以在指定的表上创建并执行相关操作。在本文中,我们将介绍如何学习触发器的基础知识,并提供两个简单的示例说明。 什么是触发器? 触发器是一种在特定事件发生后自动执行的特殊程序。当满足特定条件时,触发器会自动运行并执行相应的操作来对数据库中的数据进行操作。在MySQL中,触发器可用于在插入、更新、删除数据时自动执行某些…

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