查看数据库锁表和解锁

[size=large][b]查看锁表信息[/b][/size]
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,
l.os_user_name,s.machine, s.terminal,a.sql_text, a.action
FROM v$sqlarea a,v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;

[size=large][b]解除锁表 [/b][/size]
alter system kill session 'sid,serial#';
例:alter system kill session '135,16';

--以下几个为相关表
SELECT * FROM v$lock;
SELECT * FROM v$sqlarea;
SELECT * FROM v$session;
SELECT * FROM v$process ;
SELECT * FROM v$locked_object;
SELECT * FROM all_objects;
SELECT * FROM v$session_wait;

1.查出锁定object的session的信息以及被锁定的object名
SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username,
l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time
FROM v$locked_object l, all_objects o, v$session s
WHERE l.object_id = o.object_id
AND l.session_id = s.sid
ORDER BY sid, s.serial# ;

2.查出锁定表的session的sid, serial#,os_user_name, machine name, terminal和执行的语句
--比上面那段多出sql_text和action
SELECT l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, s.user#,
l.os_user_name,s.machine, s.terminal,a.sql_text, a.action
FROM v$sqlarea a,v$session s, v$locked_object l
WHERE l.session_id = s.sid
AND s.prev_sql_addr = a.address
ORDER BY sid, s.serial#;

3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,mode
SELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,
s.terminal, s.logon_time, l.type
FROM v$session s, v$lock l
WHERE s.sid = l.sid
AND s.username IS NOT NULL
ORDER BY sid;
在PostgreSQL数据库中,查询解锁的方法如下: ### 查询方法 1. **查询特定是否**: ```sql -- 查询的oid select oid from pg_class where relname='可能了的'; -- 根据oid查询的pid select pid from pg_locks where relation='上面查出的oid'; ``` 若查询到结果,则示该 [^1][^2]。 2. **查看情况**: ```sql SELECT relation ::regclass ,t.* FROM pg_locks t WHERE relation = 'tzq_log_t' ::regclass; ``` 此方法可查看 `tzq_log_t` 的加情况 [^3]。 3. **查询被的pid以及语句**: ```sql select pid, state, usename, query, query_start from pg_stat_activity where pid in ( select pid from pg_locks l join pg_class t on l.relation = t.oid and t.relkind = 'r' ); ``` 当 `state` 列显示成 `idle in transaction` 就示被了 [^4]。 4. **查询PG_STAT_ACTIVITY的信息**: ```sql select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT, T.QUERY_START from PG_STAT_ACTIVITY T where T.DATNAME = '数据库名'; ``` 此方法可查询指定数据库的相关信息 [^5]。 5. **查询PG_STAT_ACTIVITY中的死信息**: ```sql select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT, T.QUERY_START from PG_STAT_ACTIVITY T where T.DATNAME = '数据库名' and T.WAIT_EVENT_TYPE = 'Lock'; ``` 用于查询指定数据库中的死信息 [^5]。 6. **查看的详细信息**: ```sql SELECT 'select pg_terminate_backend(' || pid || ');' AS unlock_script, pid, state, usename, query, query_start, client_addr FROM pg_stat_activity WHERE pid IN ( SELECT pid FROM pg_locks l, pg_class t WHERE l.relation = t.oid AND t.relkind = 'r' AND t.relname = 'tzq_log_t' ); ``` 此方法可查看 `tzq_log_t` 的详细信息 [^3]。 ### 解锁方法 1. **释放定(只kill掉select)**: ```sql SELECT pg_cancel_backend(pid); ``` 拿着查询出的 `pid` 放入此语句中,可终止查询,但连接留在原地 [^1][^2][^3][^4][^5]。 2. **释放定(kill掉 select、update、insert、delete)**: ```sql SELECT pg_terminate_backend(pid); ``` 拿着查询出的 `pid` 放入此语句中,可终止查询,同时杀死连接 [^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值