遇到表被锁时,按常规办法查不到哪个session所致,主要原因是v$session只能看到本机的信息。如果在集群上,通过gv$session.INST_ID 获取主机,然后登录那台主机,执行解锁sql即可。
研究了一上午的成果。网上的解锁方案都是相互抄的,按这个办法根本查不到锁定的表。
--根据INST_ID,1-3分别对应abc,进相应的主机kill
c6ogx17c_pdchn
c6ogx17b_pdchn
c6ogx17a_pdchn
--查询集群上锁定的的表,并提供释放表的sql
SELECT 'alter system kill session '''||sid||','||serial#||''';' 执行语句,s.inst_id,s.status,s.sid,s.username,a.SQL_TEXT FROM gv$session s, gv$sqlarea a WHERE a.SQL_ID = s.SQL_ID and upper(sql_text) like '%SUBSC%';
说明:
gv$开头视图是rac全局的,v$开头是本节点的
gv$session比v$session多一个字段 INST_ID