### 如何在Oracle中查看正在执行的SQL语句及锁信息 #### 一、查看当前锁定情况 在Oracle数据库管理中,了解当前存在的锁是非常重要的,可以帮助我们更好地诊断和解决问题。下面将详细介绍如何查看Oracle中的锁信息。 ##### 1.1 查看当前锁及其对应的SID ```sql SELECT /*+ RULE */ ls.osuser AS os_user_name, ls.username AS user_name, DECODE(ls.type, 'RW', 'Rowwait enqueuelock', 'TM', 'DML enqueuelock', 'TX', 'Transaction enqueuelock', 'UL', 'User supplied lock') AS lock_type, o.object_name AS object, DECODE(ls.lmode, 1, NULL, 2, 'Row Share', 3, 'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', NULL) AS lock_mode, o.owner, ls.sid, ls.serial# AS serial_num, ls.id1, ls.id2 FROM sys.dba_objects o, (SELECT s.osuser, s.username, l.type, l.lmode, s.sid, s.serial#, l.id1, l.id2 FROM v$session s, v$lock l WHERE s.sid = l.sid) ls WHERE o.object_id = ls.id1 AND o.owner <> 'SYS' ORDER BY o.owner, o.object_name; ``` **解释:** - 此查询结合了`v$session`和`v$lock`视图,以及`dba_objects`表来获取所有锁定对象的信息。 - `v$lock`视图包含了当前锁定的信息。 - `v$session`视图包含了会话的信息。 - `dba_objects`表提供了锁定对象的详细信息。 - `DECODE`函数用于将锁定类型转换为更易理解的文字描述。 - `ORDER BY`子句按照所有者和对象名称排序结果,便于查看。 ##### 1.2 查看被锁定的对象及会话信息 ```sql SELECT t2.username, t2.sid, t2.serial#, t2.logon_time FROM v$locked_object t1, v$session t2 WHERE t1.session_id = t2.sid ORDER BY t2.logon_time; ``` **解释:** - `v$locked_object`视图包含了当前锁定的对象信息。 - `v$session`视图包含了所有会话的信息。 - 此查询通过`session_id`关联两个视图,显示被锁定对象的会话信息,包括用户名、会话ID、序列号和登录时间。 #### 二、终止会话或杀死进程 有时我们需要强制终止某个会话或杀死特定进程。 ##### 2.1 终止会话 ```sql ALTER SYSTEM KILL SESSION 'sid,serial#'; ``` **解释:** - 使用`ALTER SYSTEM KILL SESSION`命令可以强制结束指定的会话。 - 需要提供会话的SID和序列号(serial#)。 ##### 2.2 杀死操作系统进程 ```sql SELECT a.username, c.spid AS os_process_id, c.pid AS oracle_process_id FROM v$session a, v$process c WHERE c.addr = a.paddr AND a.sid = '27' AND a.serial# = '944'; ``` **解释:** - `v$process`视图包含了Oracle进程的信息。 - `v$session`视图包含了所有会话的信息。 - 此查询结合这两个视图来获取特定会话的进程ID,以便在操作系统层面进行操作。 - `kill -9 os_process_id`是Linux命令,用来强制杀死进程。 #### 三、查看当前正在执行的SQL语句 ```sql SELECT a.session_id, b.SERIAL#, c.SQL_TEXT FROM v$locked_object a, v$session b, v$sqltext c WHERE a.session_id = b.sid AND b.sql_hash_value = c.HASH_VALUE; ``` **解释:** - `v$locked_object`视图包含了锁定对象的信息。 - `v$session`视图包含了所有会话的信息。 - `v$sqltext`视图包含了最近执行过的SQL语句的文本。 - 此查询通过`session_id`和`sql_hash_value`关联这些视图,获取锁定对象对应的SQL语句。 #### 四、其他常见查询 ##### 4.1 查看当前用户触发器定义 ```sql SELECT Description, Trigger_Body FROM User_Triggers WHERE Trigger_Name = UPPER('TRI_MOTOMD_CR'); ``` **解释:** - `User_Triggers`视图包含了当前用户所有的触发器定义。 - 此查询通过`Trigger_Name`参数筛选出特定触发器的信息。 ##### 4.2 查看指定表的所有触发器 ```sql SELECT * FROM all_triggers WHERE table_name = UPPER('T_DD_MINGXI'); ``` **解释:** - `all_triggers`视图包含了所有可访问的触发器信息。 - 此查询通过`table_name`参数筛选出指定表上的所有触发器。 ##### 4.3 查看当前用户的所有对象 ```sql SELECT * FROM dba_objects WHERE owner = 'YOUZHENG' AND object_type IN ('TRIGGER', 'PROCEDURE', 'PACKAGE', 'FUNCTION'); ``` **解释:** - `dba_objects`表包含了数据库中所有对象的信息。 - 此查询通过`owner`和`object_type`参数筛选出当前用户的所有触发器、过程、包和函数。 #### 总结 以上提供的SQL语句可以帮助Oracle管理员和开发人员更好地监控和管理数据库中的活动。通过这些查询,可以快速了解数据库的状态,并采取必要的措施来解决问题。






















oracle里如何查看目前有多少个锁以及每个锁对应的SID和SQL_TEXT:
select /*+ RULE */ ls.osuser os_user_name, ls.username user_name,
decode(ls.type, 'RW', 'Row wait enqueue lock', 'TM', 'DML enqueue lock', 'TX',
'Transaction enqueue lock', 'UL', 'User supplied lock') lock_type,
o.object_name object, decode(ls.lmode, 1, null, 2, 'Row Share', 3,
'Row Exclusive', 4, 'Share', 5, 'Share Row Exclusive', 6, 'Exclusive', null)
lock_mode, o.owner, ls.sid, ls.serial# serial_num, ls.id1, ls.id2
from sys.dba_objects o, ( select s.osuser, s.username, l.type,
l.lmode, s.sid, s.serial#, l.id1, l.id2 from v$session s,
v$lock l where s.sid = l.sid ) ls where o.object_id = ls.id1 and o.owner
<> 'SYS' order by o.owner, o.object_name;
另:
查询
select t2.username,t2.sid,t2.serial#,t2.logon_time
from v$locked_object t1,v$session t2
where t1.session_id=t2.sid order by t2.logon_time;
解锁
alter system kill session 'sid,serial#';
对于无法杀死的会话可以用os的命令处理kill
首先找到os进程
SELECT a.username,c.spid AS os_process_id,c.pid AS oracle_process_id FROM v$session a,v$process c
WHERE c.addr=a.paddr and a.sid='27' and a.serial#='944';
然后kill -9 os_process_id
查看造成锁表的sql语句
select a.session_id,b.SERIAL#,c.SQL_TEXT from v$locked_object a,v$session b,v$sqltext c
where a.session_id=b.sid and b.sql_hash_value=c.HASH_VALUE;
where a.session_id=b.sid and b.sql_hash_value=c.HASH_VALUE;
=============================================================
扩充表空间
ALTER TABLESPACE "MV_INDX"
ADD
DATAFILE '/oradata_2/oradata/jsdb150/mv_indx07.dbf' SIZE 3072M
=============================================================
当前正在执行的语句:
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address=b.address order by address, piece;
=============================================================
查看触发器的内容:
Select Description,Trigger_Body From User_Triggers Where Trigger_Name=upper('TRI_MOTOMD_CR');
查看基于某张表的触发器:
select * from all_triggers where table_name=upper('t_dd_mingxi');
查看当前用户有哪些触发器、存储过程、函数、包等
select * from dba_objects where owner='YOUZHENG' and object_type in ('TRIGGER','PROCEDURE','PACKAGE','FUNCTION');
=============================================================
查找前十条性能差的sql:
SELECT * FROM (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,
sql_text FROM v$sqlarea ORDER BY disk_reads DESC)
WHERE ROWNUM<11;
=============================================================
简单的Oracle存储过程的创建方法
SQL> create or replace procedure get_news
2 as
3 aa number;
4 begin
剩余16页未读,继续阅读


- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于单片机的天然气泄漏检测系统设计.doc
- 互联网加创业项目计划书.doc
- 基因工程-第六章-外源目的基因表达与调控.ppt
- 计算机系应届毕业生的暑假实习报告.docx
- 小程序商城源码-Java-C语言资源
- 可编程序控制器课件PPT课件.ppt
- 物联网职业生涯规划.doc
- 国家开放大学电大《网络营销与策划》机考3套真题题库及答案6.docx
- 公司网络营销活动策划方案.doc
- 项目管理(20211102052620)[最终版].pdf
- 基于Simulink强化学习工具箱的DDPG算法ACC自适应巡航控制器设计与实现 · DDPG算法 v1.2
- 制药工程项目建设与项目管理培训课件.pptx
- 最新国家开放大学电大《环境水利学》网络核心课形考网考作业及答案.pdf
- 基于Android平台的智能家居系统设计.doc
- C语言顺序结构测验.doc
- 计算机发展历程.ppt


