本文档风哥主要介绍Oracle LM(Lock Manager)转储分析相关知识,包括LM转储的概念、LM转储组成、LM转储使用、LM转储配置、LM转储监控、LM转储故障处理等内容,由风哥教程参考Oracle官方文档Troubleshooting内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 LM转储的概念
Oracle LM(Lock Manager)转储是Oracle数据库提供的一种锁管理诊断工具,用于捕获锁管理器的状态信息。LM转储包含锁资源、锁请求、锁持有者等详细信息,是诊断锁争用、死锁、RAC全局锁问题的重要手段。更多视频教程www.fgedu.net.cn
- 锁信息:捕获锁管理器的状态信息
- 诊断工具:诊断锁争用问题的重要手段
- 详细信息:包含锁资源、锁请求等信息
- 问题定位:帮助定位锁争用问题
- RAC支持:支持RAC全局锁诊断
1.2 LM转储组成
Oracle LM转储组成:
- 锁资源:锁资源ID、类型、状态
- 锁请求:锁请求队列、请求模式
- 锁持有者:锁持有者会话、持有模式
- 锁等待者:锁等待者会话、等待模式
- 锁统计:锁统计信息、等待时间
1. 锁资源
– 锁资源ID
– 锁类型(TX、TM、UL等)
– 锁资源状态
– 锁资源名称
– 锁资源属性
2. 锁请求
– 请求队列
– 请求模式(X、S、NULL等)
– 请求会话
– 请求时间
– 请求状态
3. 锁持有者
– 持有者会话
– 持有模式
– 持有时间
– 持有者进程
– 持有者状态
4. 锁等待者
– 等待者会话
– 等待模式
– 等待时间
– 等待者进程
– 等待者状态
5. 锁统计
– 锁获取次数
– 锁等待次数
– 锁等待时间
– 锁超时次数
– 锁死锁次数
1.3 LM转储使用
Oracle LM转储使用:
- 锁争用诊断:诊断锁争用问题
- 死锁分析:分析死锁问题
- RAC锁分析:分析RAC全局锁问题
- 锁等待分析:分析锁等待问题
- Oracle Support:向Oracle Support提供诊断数据
Part02-生产环境规划与建议
2.1 LM转储规划
Oracle LM转储规划要点:
– 转储时机:确定何时进行LM转储
– 转储级别:选择合适的转储级别
– 转储位置:确定转储文件存储位置
– 结果分析:确定如何分析转储结果
# 转储时机规划
– 锁争用时:立即进行LM转储
– 死锁时:分析死锁时进行LM转储
– RAC问题时:分析RAC全局锁问题
– 定期检查:定期检查锁状态
# 转储级别规划
– Level 1: 基本锁信息
– Level 2: 详细锁信息
– Level 3: 包含锁资源
– Level 4: 包含锁队列
– Level 5: 包含所有详细信息
# 转储位置规划
– ADR目录:默认存储在ADR目录
– 自定义目录:可以指定自定义目录
– 空间管理:确保有足够的磁盘空间
– 权限设置:确保正确的文件权限
# 结果分析规划
– 问题分类:按原因分类问题
– 问题修复:及时修复问题
– 问题跟踪:跟踪问题修复进度
– 预防措施:制定预防措施
2.2 LM转储场景
Oracle LM转储场景:
- 锁争用:锁争用问题诊断
- 死锁:死锁问题分析
- RAC全局锁:RAC全局锁问题分析
- 锁等待:锁等待问题分析
- Oracle Support:向Oracle Support提供数据
1. 锁争用
– 锁争用问题诊断
– 分析锁持有者
– 分析锁等待者
– 优化锁使用
2. 死锁
– 死锁问题分析
– 分析死锁图
– 识别死锁原因
– 预防死锁
3. RAC全局锁
– RAC全局锁问题分析
– 分析GCS/GES锁
– 分析锁传输
– 优化RAC锁
4. 锁等待
– 锁等待问题分析
– 分析等待链
– 识别阻塞会话
– 优化锁等待
5. Oracle Support
– 创建SR时收集数据
– 按Oracle Support要求收集
– 上传诊断数据
– 跟踪问题处理
2.3 LM转储最佳实践
Oracle LM转储最佳实践:
- 及时转储:锁争用发生时及时转储
- 合适级别:选择合适的转储级别
- 保存文件:保存转储文件
- 分析结果:分析转储结果
- 预防措施:制定预防措施
Part03-生产环境项目实施方案
3.1 LM转储配置
3.1.1 生成LM转储
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dump locks 3
Statement processed.
# 2. 查看转储文件位置
SQL> oradebug tracefile_name
/oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
# 3. 查看LM转储输出
$ head -200 /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
*** 2026-03-31 10:00:00.123
*** SESSION ID:(150.1234) 2026-03-31 10:00:00.123
LOCK DUMP:
Lock Resource: TX-00010001-00001234
Lock Type: Transaction Lock
Lock Mode: X (Exclusive)
Lock State: HELD
Lock Holder:
Session: 150.1234
Process: 12345
Mode: X
State: HELD
Lock Waiter:
Session: 160.5678
Process: 12346
Mode: X
State: WAITING
# 4. 使用ALTER SESSION生成LM转储
SQL> alter session set events ‘immediate trace name locks level 3’;
Session altered.
# 5. 生成不同级别的LM转储
SQL> alter session set events ‘immediate trace name locks level 1’;
SQL> alter session set events ‘immediate trace name locks level 2’;
SQL> alter session set events ‘immediate trace name locks level 3’;
SQL> alter session set events ‘immediate trace name locks level 4’;
SQL> alter session set events ‘immediate trace name locks level 5’;
# 6. 在RAC环境中生成LM转储
SQL> alter session set events ‘immediate trace name locks level 3’;
# 7. 使用LM转储级别说明
# Level 1: 基本锁信息
# Level 2: 详细锁信息
# Level 3: 包含锁资源(推荐)
# Level 4: 包含锁队列
# Level 5: 包含所有详细信息
# 8. 创建LM转储脚本
$ vi /home/oracle/scripts/run_lmdump.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# LM转储脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/lmdump”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$LOG_DIR/lmdump_$DATE.log”
echo “$(date): Running LM dump…” > $LOG_FILE
sqlplus -s / as sysdba <
alter session set events ‘immediate trace name locks level 3’;
select value from v\$diag_info where name = ‘Default Trace File’;
EOF
echo “$(date): LM dump completed.” >> $LOG_FILE
cat $LOG_FILE
# 9. 执行脚本
$ chmod +x /home/oracle/scripts/run_lmdump.sh
$ /home/oracle/scripts/run_lmdump.sh
3.1.2 分析LM转储
$ grep -A 20 “Lock Resource” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
Lock Resource: TX-00010001-00001234
Lock Type: Transaction Lock
Lock Mode: X (Exclusive)
Lock State: HELD
Lock Holder:
Session: 150.1234
Process: 12345
Mode: X
State: HELD
# 2. 分析锁持有者
$ grep -A 10 “Lock Holder” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
Lock Holder:
Session: 150.1234
Process: 12345
Mode: X
State: HELD
# 3. 分析锁等待者
$ grep -A 10 “Lock Waiter” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
Lock Waiter:
Session: 160.5678
Process: 12346
Mode: X
State: WAITING
# 4. 使用SQL查询锁信息
SQL> select s.sid, s.serial#, s.username, l.type, l.lmode, l.request,
l.id1, l.id2, l.ctime
from v$session s, v$lock l
where s.sid = l.sid
order by l.ctime desc;
SID SERIAL# USERNAME TY LMODE REQUEST ID1 ID2 CTIME
———- ———- —————————— — ———- ———- ———- ———- ———-
150 1234 SCOTT TX 6 0 655361 12345 3600
160 5678 SCOTT TX 0 6 655361 12345 1800
# 5. 查看阻塞会话
SQL> select s1.sid as blocking_sid, s2.sid as blocked_sid,
s1.username as blocking_user, s2.username as blocked_user,
s1.program as blocking_program, s2.program as blocked_program
from v$lock l1, v$session s1, v$lock l2, v$session s2
where l1.sid = s1.sid and l2.sid = s2.sid
and l1.id1 = l2.id1 and l1.id2 = l2.id2
and l1.lmode > 0 and l2.request > 0;
BLOCKING_SID BLOCKED_SID BLOCKING_USER BLOCKED_USER BLOCKING_PROGRAM BLOCKED_PROGRAM
———— ———– —————– —————– ——————– ——————–
150 160 SCOTT SCOTT sqlplus sqlplus
# 6. 使用脚本分析LM转储
$ vi /home/oracle/scripts/analyze_lmdump.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 分析LM转储脚本
TRACE_FILE=$1
if [ -z “$TRACE_FILE” ]; then
echo “Usage: $0
exit 1
fi
echo “========================================”
echo “LM Dump Analysis”
echo “File: $TRACE_FILE”
echo “========================================”
echo “”
echo “=== Lock Resources ===”
grep -A 10 “Lock Resource” $TRACE_FILE | head -50
echo “”
echo “=== Lock Holders ===”
grep -A 5 “Lock Holder” $TRACE_FILE | head -50
echo “”
echo “=== Lock Waiters ===”
grep -A 5 “Lock Waiter” $TRACE_FILE | head -50
# 7. 执行分析脚本
$ chmod +x /home/oracle/scripts/analyze_lmdump.sh
$ /home/oracle/scripts/analyze_lmdump.sh /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
3.2 LM转储监控
3.2.1 配置LM转储监控脚本
$ vi /home/oracle/scripts/monitor_lmdump.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# LM转储监控脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/lmdump_monitor”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d)
LOG_FILE=”$LOG_DIR/lmdump_monitor_$DATE.log”
echo “$(date): Starting LM dump monitor…” > $LOG_FILE
# 检查锁状态
sqlplus -s / as sysdba <
set linesize 200
set pagesize 100
— 检查锁等待
select s.sid, s.serial#, s.username, l.type, l.lmode, l.request, l.ctime
from v\$session s, v\$lock l
where s.sid = l.sid and l.request > 0
order by l.ctime desc;
— 检查阻塞会话
select s1.sid as blocking_sid, s2.sid as blocked_sid,
s1.username as blocking_user, s2.username as blocked_user
from v\$lock l1, v\$session s1, v\$lock l2, v\$session s2
where l1.sid = s1.sid and l2.sid = s2.sid
and l1.id1 = l2.id1 and l1.id2 = l2.id2
and l1.lmode > 0 and l2.request > 0;
— 检查锁统计
select type, count(*) as lock_count
from v\$lock
group by type
order by lock_count desc;
exit
EOF
echo “$(date): LM dump monitor completed.” >> $LOG_FILE
# 发送报告
mail -s “LM Dump Monitor Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/monitor_lmdump.sh
# 3. 测试脚本
$ /home/oracle/scripts/monitor_lmdump.sh
# 4. 设置定期监控
$ crontab -e
# 每10分钟监控锁状态
*/10 * * * * /home/oracle/scripts/monitor_lmdump.sh >> /home/oracle/lmdump_monitor/cron.log 2>&1
3.2.2 配置自动LM转储
$ vi /home/oracle/scripts/auto_lmdump.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# 自动LM转储脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/lmdump”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$LOG_DIR/lmdump_$DATE.log”
echo “========================================” > $LOG_FILE
echo “LM Dump Report” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “========================================” >> $LOG_FILE
# 检查是否有锁争用
LOCK_WAIT_COUNT=$(sqlplus -s / as sysdba <
exit
EOF
)
if [ $LOCK_WAIT_COUNT -gt 5 ]; then
echo “Found $LOCK_WAIT_COUNT lock waits” >> $LOG_FILE
echo “Running LM dump…” >> $LOG_FILE
sqlplus -s / as sysdba <
alter session set events ‘immediate trace name locks level 3’;
select value from v\$diag_info where name = ‘Default Trace File’;
exit
EOF
# 发送告警
mail -s “LM Dump Alert: $LOCK_WAIT_COUNT lock waits” admin@fgedu.net.cn < $LOG_FILE
else
echo "No significant lock issue detected ($LOCK_WAIT_COUNT lock waits)" >> $LOG_FILE
fi
echo “” >> $LOG_FILE
echo “Dump completed at $(date)” >> $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/auto_lmdump.sh
# 3. 测试脚本
$ /home/oracle/scripts/auto_lmdump.sh
# 4. 设置定期转储
$ crontab -e
# 每5分钟检查锁状态
*/5 * * * * /home/oracle/scripts/auto_lmdump.sh >> /home/oracle/lmdump/cron.log 2>&1
3.3 LM转储故障处理
3.3.1 LM转储常见问题
# 错误信息
$ ls -lh /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
-rw-r– 1 oracle oinstall 200M Mar 31 10:00 FGEDUDB_ora_12345.trc
# 解决方案
# 1. 使用较低的转储级别
SQL> alter session set events ‘immediate trace name locks level 1’;
# 2. 压缩转储文件
$ gzip /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc
# 3. 清理旧的转储文件
$ find /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace -name “*.trc” -mtime +7 -delete
# 问题2:LM转储生成缓慢
# 错误信息
— LM转储生成时间过长
# 解决方案
# 1. 检查系统负载
$ top
$ iostat
# 2. 检查锁数量
SQL> select count(*) from v$lock;
# 3. 使用较低的转储级别
SQL> alter session set events ‘immediate trace name locks level 1’;
# 问题3:LM转储无法生成
# 错误信息
SQL> alter session set events ‘immediate trace name locks level 3’;
ERROR: Cannot generate lock dump
# 解决方案
# 1. 检查权限
$ ls -la $ORACLE_HOME/bin/oracle
# 2. 检查ADR目录
$ ls -la $ORACLE_BASE/diag
# 3. 检查磁盘空间
$ df -h $ORACLE_BASE/diag
# 4. 使用oradebug
SQL> oradebug setmypid
SQL> oradebug dump locks 3
3.3.2 LM转储问题修复
# 查看锁资源
$ grep -A 10 “Lock Resource” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_*.trc
# 查看锁持有者
$ grep -A 5 “Lock Holder” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_*.trc
# 查看锁等待者
$ grep -A 5 “Lock Waiter” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_*.trc
# 2. 根据分析结果采取行动
# 如果是锁争用问题
# 识别阻塞会话
SQL> select sid, serial#, username, program
from v$session
where sid =
# 终止阻塞会话
SQL> alter system kill session ‘
# 如果是死锁问题
# 查看死锁图
$ grep -A 20 “Deadlock graph” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_*.trc
# 优化应用避免死锁
# 如果是RAC全局锁问题
# 查看GCS/GES锁
SQL> select * from v$gcspfmaster_info;
SQL> select * from v$ges_enqueue;
# 优化RAC锁配置
# 3. 验证修复
# 重新生成LM转储
SQL> alter session set events ‘immediate trace name locks level 3’;
# 分析新的转储文件
$ grep -A 10 “Lock Waiter” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_*.trc
Part04-生产案例与实战讲解
4.1 LM转储案例
在生产环境中使用LM转储的完整案例:
4.1.1 场景描述
某企业生产数据库出现大量锁争用,需要使用LM转储进行诊断。
4.1.2 分析步骤
$ vi /home/oracle/scripts/analyze_lmdump_full.sh
#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# LM转储自动化脚本
export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH
LOG_DIR=”/home/oracle/lmdump_analysis”
mkdir -p $LOG_DIR
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE=”$LOG_DIR/lmdump_analysis_$DATE.log”
echo “========================================” > $LOG_FILE
echo “LM Dump Analysis Report” >> $LOG_FILE
echo “Date: $(date)” >> $LOG_FILE
echo “========================================” >> $LOG_FILE
# 检查锁状态
echo “” >> $LOG_FILE
echo “Checking lock status…” >> $LOG_FILE
sqlplus -s / as sysdba <
set linesize 200
set pagesize 100
select s.sid, s.serial#, s.username, l.type, l.lmode, l.request, l.ctime
from v\$session s, v\$lock l
where s.sid = l.sid and l.request > 0
order by l.ctime desc;
EOF
# 生成LM转储
echo “” >> $LOG_FILE
echo “Generating LM dump…” >> $LOG_FILE
sqlplus -s / as sysdba <
alter session set events ‘immediate trace name locks level 3’;
select value from v\$diag_info where name = ‘Default Trace File’;
exit
EOF
# 分析转储文件
echo “” >> $LOG_FILE
echo “Analyzing dump file…” >> $LOG_FILE
TRACE_FILE=$(sqlplus -s / as sysdba <
EOF
)
echo “Lock resources:” >> $LOG_FILE
grep -A 10 “Lock Resource” $TRACE_FILE >> $LOG_FILE
echo “” >> $LOG_FILE
echo “Analysis completed at $(date)” >> $LOG_FILE
# 发送报告
mail -s “LM Dump Analysis Report – $DATE” admin@fgedu.net.cn < $LOG_FILE
# 2. 设置脚本权限
$ chmod +x /home/oracle/scripts/analyze_lmdump_full.sh
# 3. 测试脚本
$ /home/oracle/scripts/analyze_lmdump_full.sh
4.2 LM转储故障处理
在LM转储故障处理过程中的方法和技巧:
4.2.1 故障处理流程
# 1. 识别问题
# – 检查锁等待
# – 检查阻塞会话
# – 检查锁类型
# 2. 收集信息
# – 生成LM转储
# – 查询锁视图
# – 收集其他诊断数据
# 3. 分析原因
# – 分析锁持有者
# – 分析锁等待者
# – 分析锁争用原因
# 4. 制定方案
# – 终止阻塞会话
# – 优化SQL
# – 调整锁参数
# 5. 执行修复
# – 执行修复操作
# – 验证修复结果
# – 记录修复过程
# 示例:处理锁争用问题
# 1. 识别问题
SQL> select count(*) from v$lock where request > 0;
# 2. 收集信息
SQL> alter session set events ‘immediate trace name locks level 3’;
# 3. 分析原因
$ grep -A 10 “Lock Waiter” /oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_*.trc
# 4. 制定方案
# – 识别阻塞会话
# – 决定是否终止
# 5. 执行修复
SQL> alter system kill session ‘150,1234’;
4.3 LM转储优化
优化LM转储配置的最佳实践:
4.3.1 优化LM转储管理
SQL> create or replace procedure manage_lmdump_results(
p_analysis_date in date,
p_total_lock_waits in number,
p_total_blocking_sessions in number
) as
begin
dbms_output.put_line(‘— LM Dump Results Management —‘);
dbms_output.put_line(‘Analysis Date: ‘ || to_char(p_analysis_date, ‘YYYY-MM-DD HH24:MI:SS’));
dbms_output.put_line(‘Total Lock Waits: ‘ || p_total_lock_waits);
dbms_output.put_line(‘Total Blocking Sessions: ‘ || p_total_blocking_sessions);
— 可以扩展为记录到表中
end manage_lmdump_results;
/
Procedure created.
# 2. 执行管理存储过程
SQL> set serveroutput on
SQL> exec manage_lmdump_results(sysdate, 5, 2);
— LM Dump Results Management —
Analysis Date: 2026-03-31 10:00:00
Total Lock Waits: 5
Total Blocking Sessions: 2
PL/SQL procedure successfully completed.
# 3. 创建LM转储历史表
SQL> create table lmdump_history (
id number primary key,
analysis_date date,
total_lock_waits number,
total_blocking_sessions number,
trace_file varchar2(4000),
notes varchar2(4000)
);
Table created.
SQL> create sequence lmdump_history_seq;
Sequence created.
# 4. 记录分析历史
SQL> insert into lmdump_history values (
lmdump_history_seq.nextval,
sysdate,
5,
2,
‘/oracle/app/oracle/diag/rdbms/fgedudb/FGEDUDB/trace/FGEDUDB_ora_12345.trc’,
‘Lock contention issue’
);
1 row created.
SQL> commit;
Commit complete.
# 5. 查看分析历史趋势
SQL> column analysis_date format a20
SQL> select analysis_date, total_lock_waits, total_blocking_sessions
from lmdump_history
order by analysis_date desc
fetch first 12 rows only;
ANALYSIS_DATE TOTAL_LOCK_WAITS TOTAL_BLOCKING_SESSIONS
——————– —————- ———————–
2026-03-31 10:00:00 5 2
2026-03-30 10:00:00 8 3
2026-03-29 10:00:00 10 4
Part05-风哥经验总结与分享
5.1 LM转储总结
Oracle LM转储是诊断锁争用问题的重要手段,具有以下特点:
- 锁信息:捕获锁管理器的状态信息
- 诊断工具:诊断锁争用问题的重要手段
- 详细信息:包含锁资源、锁请求等信息
- 问题定位:帮助定位锁争用问题
- RAC支持:支持RAC全局锁诊断
5.2 LM转储检查清单
Oracle LM转储检查清单:
- 及时转储:锁争用发生时及时转储
- 合适级别:选择合适的转储级别
- 保存文件:保存转储文件
- 分析结果:分析转储结果
- 预防措施:制定预防措施
- 定期检查:定期检查锁状态
5.3 LM转储工具推荐
Oracle LM转储工具推荐:
- LM转储:oradebug dump locks
- 锁视图:V$LOCK、V$SESSION
- ADRCI:诊断命令行工具
- ASH:活动会话历史
- Shell脚本:自动化分析过程
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
