首页 > 数据库 >Oracle的会话进程解锁及问题解决方法

Oracle的会话进程解锁及问题解决方法

时间:2022-11-27 17:13:13浏览次数:43  
标签:解锁 object 进程 session sid Oracle 锁定 id select

首先用dba权限的用户登陆数据库

1、select * from v$locked_object 查出被锁定的对象,其中object_id是对象的ID,session_id是被锁定对象有session ID;

2、select object_name, object_type from dba_objects where object_id = 刚才查出来的object_id;(根据v$locked_object里的object_id提出来的)
这样来查被锁定这个对象的名字,如果能确定是哪个TABLE被锁并且要解锁,则再执行
3、select sid, serial#, machine, program from v$session where sid =第1步中查出来的session_id;(是根据v$locked_object对应锁定记录的session_id找出来的) 然后
4、alter system kill session 'sid,serial#';用来杀死这个会话;
以上几个步骤即能解决对象被锁定问题。


另外附上锁定一个表的语句:
LOCK TABLE tablename IN EXCLUSIVE MODE;将锁定整个表

注意:

若执行到第4步骤报:ORA-00031:标记要终止的会话

解决方法:

1.可以通过下列语句查询:
select a.spid,b.sid,b.serial#,b.username from v$process a,v$session b where a.addr=b.paddr and b.status='KILLED';

2.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在OS级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select b.spid,a.osuser,b.program from v$session a,v$process b where a.paddr=b.addr and a.sid=8 --8就是上面的sid


3.在OS上杀死这个进程(线程)

注:该步骤在cmd命令行对话框中操作
1)、在unix上,用root身份执行命令:#kill -9 12345(即第2步查询出的spid)
2)、在windows(unix也适用)用orakill杀死线程,orakill是oracle提供的一个可执行命令,语法为:orakill sid thread

其中:
sid:表示要杀死的进程属于的实例名 。可以用select name from v$database;查询
thread:是要杀掉的线程号,即第2步查询出的spid。

例:c:>orakill system 12345

注意:这里要注意的是kill OS进程是在服务端操作,而不是你程序所在客户机。
————————————————

标签:解锁,object,进程,session,sid,Oracle,锁定,id,select
From: https://www.cnblogs.com/fhuafeng/p/16930094.html

相关文章

  • Oracle锁表及解锁方法
    1.首先查看数据库中哪些表被锁了,找到sessionID:使用sql:selectb.owner,b.object_name,a.session_id,a.locked_modefromv$locked_objecta,dba_objectsbwhereb.object......
  • Windows netstat 查看端口、进程占用
    目标:在Windows环境下,用netstat命令查看某个端口号是否占用,为哪个进程所占用.操作:操作分为两步:(1)查看该端口被那个PID所占用;方法一:有针对性的查看端口,使用命令Netstat–......
  • 用JStack和Top分析Java进程CPU占用率
    在知道哪个Java进程CPU占用率过高以后:1.使用命令jstackPID命令打印出CPU占用过高进程的线程栈,例如jstack12012>12012.txt2.使用top-H-pPID命令查看对应进程是哪......
  • Oracle 触发器
    --创建触发器--FOREACHROW代表行级触发器--:NEW代表操作完成后列的值--:OLD代表操作前列的值--INTO用于赋值给变量--BEFORE|AFTER触发器的触发时间是前触发还......
  • 进程间的信号处理
    进程状态Linux系统下进程通常存在6种不同的状态,分为:就绪态、运行态、僵尸态、可中断睡眠状态(浅度睡眠)、不可中断睡眠状态(深度睡眠)以及暂停态。就绪态(Ready):指该进程满足被......
  • Android init进程打印不全的问题
    在抓Android内核的log时,init进程的log往往打印不全,这是因为内核限制了log的输出,在内核代码中找到下面的文件,并按照下面的提示把代码注释掉,然后重新编译内核,再刷到设备中,ini......
  • 联想小新Air14使用傲梅分区助手进行硬盘克隆出现的问题,克隆完显示RAW格式解决方案,win1
    联想小新Air14使用傲梅分区助手进行硬盘克隆出现的问题,克隆完显示RAW格式解决方案买电脑时没考虑到512会不够用,也没注意到小新Air14是单插槽的,所以有了今天的故事。本文......
  • Linux 基础-查看进程命令 ps 和 top
    Linux基础-查看进程命令ps和top1,使用ps命令找出CPU占用高的进程ps是进程状态(processstatus)的缩写,它能显示系统中活跃的/运行中的进程的信息。它提供了当......
  • [Linux高并发服务器]进程间通信简介
    [Linux高并发服务器]进程间通信简介摘自​​牛客项目课Linux高并发服务器​​概念进程间通信IPC:InterProcessesCommunication为什么需要进程间通信进程是一个独立的资......
  • [Linux 高并发服务器] 进程创建以及GDB多进程调试
    [Linux高并发服务器]进程创建进程创建系统允许一个进程创建新进程,新进程就是子进程,子进程还可以创建子进程,形成树结构模型我们可以使用​​fork​​函数创建子进程/*#......