锁表导致系统挂了,谨慎DDL操作

作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、
高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理

文章目录

    • 1.故障现象
    • 2.排查过程
      • 2.1 阻塞的队列排查
      • 2.2 SQL对应的文本
    • 3.故障处理
      • 3.1 session定位
      • 3.2 服务器进程KILL
      • 3.3 Oracle删除列正确的方式
    • 4.负载均衡的解读
    • 4.总结

突发故障,业务系统挂了,只因为业务人员在高峰期做了DDL操作,导致锁,数据库夯住!

作为DBA,要为客户做好节前的最后保障,这不本来想提前可以回家的,突发故障,业务系统挂了,只因为业务人员在高峰期做了DDL操作,导致锁,数据库夯住!

1.故障现象

首先产线反馈应用出现卡顿,开发人员客户端无法连接,出现以下报错。


操作系统: OEL7.9
数据库:ODA 19.20.0.0.0(RAC)DB Error MSG=[ORA-01013]: 
user requested cancel of current operation
ORA-00060: 
deadlock detected while waiting for resource

2.排查过程

所有的故障都是变化(变更)引起的,那么问题发生的第一时刻就联系了IT部门,得知业务人员在下午业务高峰期间,对核心业务表做了相关的DDL操作!那么基本可以判断是锁的问题了。

2.1 阻塞的队列排查

select aa.snap_id,
aa.session_id,
aa.blocking_session,
aa.session_serial#, 
aa.blocking_session_status,
aa.event,aa.program,aa.sql_id
from DBA_HIST_ACTIVE_SESS_HISTORY aa
where 1=1
and SAMPLE_TIME >
TO_TIMESTAMP ('2024-09-14 14:00:00','yyyy-mm-dd hh24:mi:ss')
and SAMPLE_TIME 
<TO_TIMESTAMP ('2024-09-14 15:00:00','yyyy-mm-dd hh24:mi:ss')检查历史会话发现大量tx锁,
锁对象id是389517(id对应的表名是materialot),
阻塞的session为5993
定位被锁的对象
select * from dba_objects where object_id=389517

同时在AWR报告能详细的看到这些信息,列出的锁表时出现的等待事件以及GC等待事件跟故障现象匹配。

2.2 SQL对应的文本

select sql_text from 
gv$sqlarea where sql_id='dd6uizh6v0d20' 
ALTER TABLE materialot DROP COLUMN TWHOUNT;
很明显,开发人员做了列的删除,造成锁导致数据库夯住

有时候如果出现SQL文本找不出来的情况怎么办呢?一般是因为出现硬解析错误导致,就像曾经其他客户出现的一个故障,也是行锁,但是怎么都找不到对应的SQL,那么就只能通过日志挖掘找相关的事务了,以下分享一下日志挖掘的步骤

1.添加归档日志
execute dbms_logmnr.add_logfile(logfilename=>
'/mccdb/archivelog/1_269564_839952465.dbf',
options=>dbms_logmnr.addfile);2.启动日志挖掘
execute dbms_logmnr.start_logmnr(options=>
dbms_logmnr.dict_from_online_catalog);3.日志在内存中,转储在表中
create table prod.test as select * from v$logmnr_contents;4.结束日志挖掘
execute dbms_logmnr.end_logmnr;

3.故障处理

3.1 session定位

死锁标准处理方式如下:
SELECT SESS.SID,  
SESS.SERIAL#,  
LO.ORACLE_USERNAME,  
LO.OS_USER_NAME,  
AO.OBJECT_NAME 被锁对象名, 
LO.LOCKED_MODE 锁模式, 
sess.LOGON_TIME 登录数据库时间,
'ALTER SYSTEM KILL SESSION ''' 
|| SESS.SID || ','||SESS.SERIAL#||'''' FREESQL
FROM V$LOCKED_OBJECT LO,  DBA_OBJECTS AO,  V$SESSION SESS 
WHERE AO.OBJECT_ID = LO.OBJECT_ID 
AND LO.SESSION_ID = SESS.SID 
ORDER BY sid, sess.serial#;alter system kill session '2039,31796';

3.2 服务器进程KILL

复制完执行可能会报错:
ORA-00031: session marked for kill,
这表示ORACLE已经把它标记为一个杀死的进程,
但暂时无法将其彻底杀死,
这个时候需要我们执行下面的sql,
查出它在服务器上的进程id:# sid 为上面sql 查出来的 sid
select spid, osuser, s.programfrom v$session s,v$process pwhere s.paddr=p.addrand s.sid=''2039' 通过上方 sql 可以得到服务器上的进程 id,
登录数据库所在服务器,
利用 kill 命令将其杀死即可:kill -9 12009(查出来的spid)

3.3 Oracle删除列正确的方式


DDL这些操作可能改变表的结构,
Oracle会在这些操作进行时锁定表,以防止其他事务对表的访问我们需要把字段先设置为UNUSED,
然后再业务低的时候删掉
ALTER TABLE TEST SET UNUSED(COL1);
ALTER TABLE TEST DROP UNUSED  COLUMN;

4.负载均衡的解读

在这里要跟大家在解读一下最近群里讨论比较多的Oracle RAC关于负载均衡的配置方式,

从这套库来看,节点1的报告期内连接数为674, 节点2的报告期内连接数为593,两个节点会话分配较为均匀,这是因为应用配置了LOAD_BALANCE为yes.

生产上我们是建议这样配置的,通过2个VIP来做负载均衡,而不是用scanip,因为大多数是没有配置dns,所以scanip放到/etc/hosts里其实起不到作用负载均衡作用的,只有放到dns里才能轮巡。

jdbc:oracle:thin:@(DESCRIPTION =(
ADDRESS_LIST =(FAILOVER=on)
(LOAD_BALANCE=yes)
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.21)
(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.22)
(PORT = 1521)))
(CONNECT_DATA =(SERVER = DEDICATED)
(SERVICE_NAME = test)))
真正的负载均衡由两部分配置完成:
一个是服务 service
一个就是连接串

4.总结

请谨慎DDL操作,可能导致其他DML操作被长时间锁定,这可能会对繁忙的系统造成严重问题,并且相关的执行计划也会随之发生变化!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1534926.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Ubuntu】Ubuntu双网卡配置 实现内外网互不影响同时可用

【Ubuntu】Ubuntu双网卡配置 实现内外网互不影响同时可用 建议前提配置用到的命令参考文献&#xff1a; 建议 本文仅作个人记录&#xff0c;请勿完全照搬&#xff0c;建议直接看此视频&#xff0c;按作者的步骤进行配置 linux配置内外网&#xff08;ubuntu举例&#xff09;&am…

看Threejs好玩示例,学习创新与技术(二)

本文接上篇内容&#xff0c;继续挖掘应用ThreeJS的一些创新算法。 本文理解难度比较大&#xff0c;可以先看一些概念&#xff0c;在难的地方培养一些意识即可。 1、扭曲的自然 下面图本身是矩形的&#xff0c;为何它可以这么扭曲呢&#xff1f;它在随机处带有一定的规律&…

跨平台开发新视角:利用Android WebView实现Web内容的原生体验

在移动应用开发领域&#xff0c;跨平台解决方案一直是一个热门话题。开发者们不断寻求能够同时在iOS和Android平台上提供一致用户体验的方法。而Android的WebView组件&#xff0c;作为一个强大的工具&#xff0c;允许开发者在Android应用中嵌入Web内容&#xff0c;为用户提供接…

jmeter吞吐量控制器

一、吞吐量控制器作用&#xff1a;旨在混合场景中&#xff0c;控制样本数&#xff0c;通常在比例场景中使用 吞吐量控制器提供了两种控制模式&#xff1a; 百分比执行&#xff08;Percent Executions&#xff09;&#xff1a; 吞吐量控制器会根据配置的百分比来决定其下的作用…

模拟实现vector:vector构造、析构函数、size、capacity、push_back函数、迭代器、[]运算符重载等的介绍

文章目录 前言一、vecotr构造、析构函数、size、capacity、push_back函数、迭代器、[]运算符重载二、insert函数三、const修饰的迭代器总结 前言 模拟实现vector:vector构造、析构函数、size、capacity、push_back函数、迭代器、[]运算符重载等的介绍 一、vecotr构造、析构函数…

拥塞控制算法为何失效,网络为何难以测量?

紧接着上文 如何测量一个(传输网络)系统的容量 给出的方法&#xff0c;看一下如何测量网络容量&#xff0c;如果真的能测量网络容量&#xff0c;传输算法就好设计了。 先给出答案&#xff0c;很遗憾&#xff0c;根本无法测量&#xff0c;请阅读 why we don’t know how to sim…

react-intl——react国际化使用方案

国际化介绍 i18n&#xff1a;internationalization 国家化简称&#xff0c;首字母首尾字母间隔的字母个数尾字母&#xff0c;类似的还有 k8s(Kubernetes) <br /> React-intl是 React 中最受欢迎的库。 使用步骤 安装 # use npm npm install react-intl -D # use yarn项目…

MySOL数据库进阶篇——存储引擎

一.MySQL体系结构图&#xff1a; MySQL的结构体系主要包含以下几个方面的内容&#xff1a; 1. 服务器层&#xff08;Server Layer&#xff09;&#xff1a;提供了MySQL的核心服务&#xff0c;包括连接管理、查询解析、优化等功能。 2. 存储引擎&#xff08;Storage Engine&am…

每日OJ_牛客_点击消除(栈)

目录 牛客_点击消除&#xff08;栈&#xff09; 解析代码 牛客_点击消除&#xff08;栈&#xff09; 点击消除_牛客题霸_牛客网 描述&#xff1a; 牛牛拿到了一个字符串。 他每次“点击”&#xff0c;可以把字符串中相邻两个相同字母消除&#xff0c;例如&#xff0c;字符…

图表类型识别系统源码分享

图表类型识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Mysql的高级查询:SQL关联查询(内连接/外连接/自连接)/子查询

一.关联查询&#xff1a; 定义&#xff1a;关联查询又叫连接查询 常见&#xff1a;内连接/外连接/自连接 1.内连接(无存在主从表&#xff09; 语法&#xff1a;inner join ...on 定义&#xff1a;组合两个表的记录&#xff0c;返回关联字段相符的记录&#xff0c;也就是返…

Cryptography and Network Security: Principles and Practice(Lesson 2 notes)

Playfair Cipher Operation steps Construct a 55 letter matrix based onThe matrix is ​​constructed using a keyword (key)Then from left to right, from top to bottom; fill in the letters of the key in sequence (note: repeated letters in the key are not fil…

Open-Sora代码详细解读(2):时空3D VAE

Diffusion Models视频生成 前言&#xff1a;目前开源的DiT视频生成模型不是很多&#xff0c;Open-Sora是开发者生态最好的一个&#xff0c;涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发&#xff0c;深…

嵌入式软件黑盒测试技术与案例分析培训

黑盒测试&#xff0c;也称为基于需求的测试&#xff0c;是目前嵌入式软件领域普遍开展的一种测试过程。目前&#xff0c;随着人们对软件质量要求的不断提升&#xff0c;行业对软件测试和验证的要求也在不断提高&#xff0c;对测试的充分性和准确性要求越来越苛刻。当前行业内&a…

物联网平台架构图

在数字化时代&#xff0c;物联网&#xff08;IoT&#xff09;正逐渐成为连接物理世界与数字世界的桥梁。物联网架构&#xff0c;作为这一桥梁的核心&#xff0c;是一个多层次、分布式的网络系统&#xff0c;它通过将各种物理设备与传感器连接到互联网上&#xff0c;实现设备之间…

GLSL 棋盘shader

今日永杰开金 float size 100.;vec2 checkerboard mod(floor(gl_FragCoord.xy / size), 2.);float c mod(checkerboard.x checkerboard.y, 2.);gl_FragColor vec4(vec3(c), 1);或 vec2 uv floor(S * p.xy * vec2(iResolution.x / iResolution.y, 1) / iResolution.xy); …

华为SMU02B1管理模块WEB登录与账户密码信息

1、将电脑的IP地址与SMU02B1的IP地址配置在同一个网段中。例如&#xff0c;如果监控的IP地址为192.168.0.11&#xff0c;子网掩码为255.255.255.0&#xff0c;默认网关为192.168.0.1&#xff0c;则电脑的IP地址设置成192.168.0.12&#xff0c;子网掩码设置成255.255.255.0&…

Python+Pytest框架,“conftest.py文件编写如何获取token和获取日志“?

1、新增"conftest.py" import pytest import loggingfrom api_keyword.api_key import ApiKey from config import *# 获取token # 1. 正常的请求对应的接口并且提取数据 # 2. pytest.fixture()测试夹具&#xff08;测试前置、后置操作&#xff09;pytest.fixture(s…

ESP32开发 -- VSCODE+PlatformIO环境安装

参看官网安装&#xff1a;PlatformIO IDE for VSCode 一、安装PlatformIO IDE 参看&#xff1a;日常生活小技巧 – Visual Studio Code 简单使用 扩展中搜索platformIO IDE 当安装完提示重启之后。 打开一个要创建新工程的文件夹&#xff1a; 点击 Create New Project&…

【高等数学学习记录】函数

【高等数学&学习记录】函数 从事测绘工作多年&#xff0c;深刻感受到基础知识的重要及自身在这方面的短板。 为此&#xff0c;打算重温测绘工作所需基础知识。练好基本功&#xff0c;为测绘工作赋能。 1 知识点 1.1 函数 设数集 D ⊂ R D\subset R D⊂R&#xff0c;称映射…