欢迎投稿

今日深度:

表解锁,oracle表解锁

表解锁,oracle表解锁


1 查出被锁的表信息
 SELECT /*+ rule*/
 a.sid, b.owner, object_name, object_type
 FROM v$lock a, all_objects b
 WHERE TYPE = 'TM'
 and a.id1 = b.object_id;

 --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;

 2 查出serial
 SELECT sid,serial# FROM v$session WHERE sid = 662;
 
 3 杀掉session
 alter system kill session '662,44825';

 SELECT 'alter system kill session '''||sid||','||serial#||''';' FROM v$session WHERE username='DCDB';

 4 查出是否有长时间执行的SQL
 select a.sid, b.sql_text
  from v$session a, v$sqlarea b
  where a.sql_hash_value = b.hash_value
   and a.sid in
       (SELECT SID from GV$Session_longops where TIME_REMAINING > 0);


oracle 锁表、解锁的语句

一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。
1.下面的语句用来查询哪些对象被锁:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
2.下面的语句用来杀死一个进程:
alter system kill session '24,111'; (其中24,111分别是上面查询出的sid,serial#)
【注】以上两步,可以通过Oracle的管理控制台来执行。
3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=24 (24是上面的sid)
4.在OS上杀死这个进程(线程):
1)在unix上,用root身份执行命令:
#kill -9 12345(即第3步查询出的spid)
2)在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
thread:是要杀掉的线程号,即第3步查询出的spid。
例:c:>orakill orcl 12345
 

怎解锁注册表?

解锁:(开始--运行,粘贴下面命令确定)
cmd /k reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /t REG_DWORD /d 0 /f

锁定:(开始--运行,粘贴下面命令确定)
cmd /k reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v DisableRegistryTools /t REG_DWORD /d 1 /f

开始--运行,输入 REGEDIT 确定后能打开注册表编辑器,说明已解锁。反之就是没解锁,也就是解锁方法不正确。

第一种与第二种不一样,数值不同。
CMD的黑窗口是为了让你看清楚操作是否成功,关掉就可以了。
反之的意思就是当你运行REGEDIT后,注册表打不开。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4008.html NewsArticle 表解锁,oracle表解锁 1 查出被锁的表信息 SELECT /* rule*/ a.sid, b.owner, object_name, object_type FROM v$lock a, all_objects b WHERE TYPE = 'TM' and a.id1 = b.object_id; --1.查出锁定object的session的信息以及被锁定的...
评论暂时关闭