oracle 出现不能查询sql时候, 表被锁住解决方法

本文提供了解决Oracle查询时表被锁住的问题的方法,包括使用SQL查询对象名称、系统进程号等信息,并通过alter system命令杀死相关session。此解决方案有助于提高数据库性能和稳定性。
oracle 出现不能查询sql时候, 表被锁住解决方法
.select object_name as 对象名称,s.sid,s.serial#,p.spid as 系统进程号
from v$locked_object l , dba_objects o , v$session s , v$process p
where l.object_id=o.object_id and l.session_id=s.sid and s.paddr=p.addr;




alter system kill session 's.sid,s.serial#'
在不同的数据库系统中,查看是哪条 SQL 锁住方法有所不同: ### Oracle 可以通过 `v$session`、`v$locked_object` 和 `v$sql` 视图联合查询来获取相关信息。示例 SQL 如下: ```sql SELECT s.sid, s.serial#, q.sql_text FROM v$session s JOIN v$locked_object l ON s.sid = l.session_id JOIN v$sql q ON s.sql_address = q.address AND s.sql_hash_value = q.hash_value; ``` 上述 SQL 通过 `v$session` 获取会话信息,`v$locked_object` 获取被定的对象信息,`v$sql` 获取 SQL 文本信息,通过关联这三个视图,最终可以得到锁住的会话信息以及对应的 SQL 语句。 ### MySQL MySQL 可以借助 `information_schema.INNODB_LOCKS`、`information_schema.INNODB_LOCK_WAITS` 和 `information_schema.PROCESSLIST` 这几个系统来查看。示例 SQL 如下: ```sql SELECT pl.id, pl.user, pl.host, pl.db, pl.command, pl.time, pl.state, pl.info FROM information_schema.INNODB_LOCKS l JOIN information_schema.INNODB_LOCK_WAITS w ON l.lock_id = w.blocking_lock_id JOIN information_schema.PROCESSLIST pl ON w.blocking_trx_id = pl.trx_id; ``` 此 SQL 利用 `INNODB_LOCKS` 获取的信息,`INNODB_LOCK_WAITS` 获取等待的信息,`PROCESSLIST` 获取进程列信息,通过关联这些,能找出正在持有的进程及其执行的 SQL 语句。 ### SQL Server 在 SQL Server 中,可以通过 `sys.dm_tran_locks`、`sys.dm_exec_sessions` 和 `sys.dm_exec_requests` 动态管理视图来查询。示例 SQL 如下: ```sql SELECT s.session_id, r.status, r.command, t.text FROM sys.dm_tran_locks l JOIN sys.dm_exec_sessions s ON l.request_session_id = s.session_id JOIN sys.dm_exec_requests r ON s.session_id = r.session_id CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t WHERE l.resource_type = 'OBJECT'; ``` 该 SQL 利用 `sys.dm_tran_locks` 视图获取的信息,`sys.dm_exec_sessions` 视图获取会话信息,`sys.dm_exec_requests` 视图获取请求信息,通过 `sys.dm_exec_sql_text` 函数获取 SQL 文本,从而找出锁住的会话及其执行的 SQL 语句。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值