一、处理过程
1.通过查找出已被锁定的数据库表及相关的sid、serial#及spid:
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;
2.在数据库中灭掉相关session:
alter system kill session 'sid,serial#';
--sid及serial#为第一步查出来的数据
3.从系统中灭掉与该session对应的进程:
kill -9 spid;
--spid为第一步中查出来的系统进程号
经过以上操作之后重新对之前锁定的对象进行操作应该就可以了。
二、使用了相关表的基本介绍
- V$LOCKED_OBJECT中的列说明:
XIDUSN:回滚段号
XIDSLOT:槽号
XIDSQN:序列号
OBJECT_ID:被锁对象ID
SESSION_ID:持有锁的sessionID
ORACLE_USERNAME:持有锁的Oracle 用户名
OS_USER_NAME:持有锁的操作系统 用户名
PROCESS:操作系统进程号
LOCKED_MODE:锁模式
- dba_objects的列说明(网上找的,懒得翻译了^_^)
OWNER
Username of the owner of the object
OBJECT_NAME
Name of the object
SUBOBJECT_NAME
Name of the sub-object (for example,partititon)
OBJECT_ID
Object number of the object
DATA_OBJECT_ID
Object number of the segment which contains the object
OBJECT_TYPE
Type of the object
CREATED
Timestamp for the creation of the object
LAST_DDL_TIME
Timestamp for the last DDL change (including GRANT and REVOKE) to the object
TIMESTAMP
Timestamp for the specification of the object
STATUS
Status of the object
TEMPORARY
Can the current session only see data that it place in this object itself?
GENERATED
Was the name of this object system generated?
SECONDARY
Is this a secondary object created as part of icreate for domain indexes?
- v$session的说明
V$SESSION是基础信息视图,用于找寻用户SID或SADDR
常用列:
SID:SESSION标识
SERIAL#:如果某个SID又被其它的session使用的话则此数值自增加(当一个SESSION结束,另一个SESSION开始并使用了同一个SID)。
AUDSID:审查session ID唯一性,确认它通常也用于当寻找并行查询模式
USERNAME:当前session在oracle中的用户名。
STATUS:这列用来判断session状态是:
Achtive:正执行SQL语句(waiting for/using a resource)
Inactive:等待操作(即等待需要执行的SQL语句)
Killed:被标注为删除
- v$process视图
v$process视图包含当前系统Oracle运行的所有进程信息。常被用于将Oracle或服务进程的操作系统进程ID与数据库session之间建立联系。
常用列:
ADDR:进程对象地址
PID:oracle进程ID
SPID:操作系统进程ID
详解:
一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。但是shutdown immediate又怕可能进程杀不掉会一直停留在shutdown immediate,直接shutdown abort又怕损坏数据库。
现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。
一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库。但是shutdown immediate又怕可能进程杀不掉会一直停留在shutdown immediate,直接shutdown abort又怕损坏数据库。
现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀。
1.下面的语句用来查询哪些对象被锁:
SELECT S.USERNAME,S.OSUSER,S.SID,S.SERIAL#,P.SPID FROM V$SESSION S,V$PROCESS
P WHERE S.PADDR=P.ADDR AND S.USERNAME IS NOT NULL;
2.下面的语句用来杀死一个进程:
alter system kill session 'sid,serial#';
【注】以上两步,可以通过Oracle的管理控制台来执行。
如果出现题目的错误,可以
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' ;
3.如果利用上面的命令杀死一个进程后,进程状态被置为"killed",但是锁定的资源很长时间没有被释放,那么可以在os一级再杀死相应的进程(线程),首先执行下面的语句获得进程(线程)号:
select spid, osuser, s.program from v$session s,v$process p where
s.paddr=p.addr and s.sid=33 (33就是上面的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
Ps:这里要注意的是kill OS进程是在服务端操作,而不是你程序所在客户机。
相关推荐
Oracle 查询用户锁表 Oracle 查询用户锁表是指在 Oracle 数据库中查询当前用户锁定的表,以便诊断和解决锁表问题。本文档将详细介绍如何查询用户锁表,并提供相关的代码。 一、查询用户锁表的必要性 在 Oracle ...
### 清除Oracle中长时间持锁的Session #### 背景介绍 在Oracle数据库管理过程中,有时会遇到一些长时间占用资源的进程,这些进程可能会导致数据库性能下降甚至某些操作无法执行。通常情况下,如果一个session的状态...
3. **重启数据库实例**:在所有其他方法都无效时,作为最后手段,可以考虑重启数据库实例来强制清除所有的锁定情况。 需要注意的是,在进行任何操作之前,都应该仔细评估潜在的风险,并备份好所有重要的数据,...
当你采用的是直接连接数据库的方式,也不要用OS系统命令$kill process_num或者$kill -9 process_num来终止用户连接,因为一个用户进程可能产生一个以上的锁,杀OS进程并不能彻底清除锁的问题。 oracle死锁表后处理...
在Oracle数据库管理过程中,有时需要重启Oracle服务或清除所有的会话(session),以解决某些特定问题或进行必要的维护工作。本文将详细介绍如何通过一系列命令来实现这一目标,并确保整个过程顺利无误。 #### 二、...
以下是对"Oracle中去除锁表命令"的详细说明: 1. **检测表锁** 在Oracle中,你可以通过查询`v$locked_object`视图来查看当前被锁定的对象。结合`dba_objects`视图,可以找出被锁定的表及其锁定模式和持有锁的会话...
总结来说,安全快速地批量删除Oracle数据库外部会话涉及到对`ALTER SYSTEM KILL SESSION`、`ALTER SYSTEM DISCONNECT SESSION`命令的熟练运用,以及可能的与操作系统交互。在执行这些操作时,务必小心谨慎,避免对...
4. **查看锁表及解锁**: - 使用`V$SESSION`和`V$LOCK`视图可以检查当前会话或所有会话的锁信息。例如,找出死锁情况: ```sql SELECT ... FROM sys.dba_objects, (SELECT ... FROM v$session s, v$lock l ...) ...
首先,自动清除Oracle当前链接,这通常涉及到`DBMS_SESSION`包中的`KILL_SESSION`过程。此过程用于终止指定会话,当有长时间未活动的会话或者需要紧急清理资源时非常有用。在Bash脚本中,我们可能通过SQL*Plus或oci8...
### Oracle清除死锁知识点 #### 一、Oracle死锁概念 在Oracle数据库中,当两个或多个事务在等待对方释放锁定资源时会发生死锁。这种情况下,所有事务都将被阻塞,无法继续执行,直到其中一个事务回滚或者系统采取...
### 处理Oracle中难以清除的锁定状况 在Oracle数据库管理与维护过程中,经常会遇到一些棘手的问题,比如某些锁定无法通过常规手段解除。本文将详细介绍如何处理Oracle中那些难以解决的锁定问题,并提供一系列实用的...
当我们获得了锁定会话的相关信息后,就可以使用`ALTER SYSTEM KILL SESSION`命令来终止该会话了。需要注意的是,在执行此命令之前,请务必再次确认目标会话是否就是需要被杀死的进程。 ```sql ALTER SYSTEM KILL ...
`命令,这将强制Oracle执行一次检查点,有助于释放被锁住的资源。 2. **切换日志文件**:通过`ALTER SYSTEM SWITCH LOGFILE;`命令切换重做日志文件,有助于解决某些类型的锁定问题。 3. **立即关闭数据库**:在某些...
标题与描述概述的知识点主要涉及Oracle数据库中临时表空间(TEMP表空间)的管理与优化,特别是当TEMP表空间占用过多硬盘空间时的处理方法。本文将深入解析这一过程,帮助读者理解并掌握释放TEMP表空间所占用硬盘空间...
清除锁表是解决并发控制中的死锁问题,通过DBA_LOCKED_OBJECTS视图可以查看锁定对象,然后使用ALTER SYSTEM KILL SESSION来解除锁。 二、数据库备份与恢复 数据库备份是保障数据安全的重要环节,Oracle提供完整备份...
- 通过`ALTER SYSTEM KILL SESSION 'sid,serial#';`命令可以强制杀死持有锁的会话。 #### 控制文件备份步骤 1. **关闭数据库**: - 使用`SHUTDOWN IMMEDIATE;`命令立即关闭数据库。 2. **复制控制文件**: - ...
查看有哪些表被锁住 - **功能**: 列出所有被锁定的对象和会话信息。 - **SQL语句**: ```sql SELECT b.owner, b.object_name, a.session_id, a.locked_mode FROM v$locked_object a, dba_objects b WHERE b....
在Oracle 10g及以上版本中,`DROP TABLE xx PURGE`命令会彻底删除一个表,不会放入回收站。若要恢复被删除的表,可以查询`USER_RECYCLEBIN`,然后使用`FLASHBACK TABLE ...
总结:本文详尽地介绍了Oracle数据库的一些关键命令,涵盖了用户管理、权限设置、数据库连接、表空间操作以及查询优化等多个方面。熟练掌握这些命令,将极大地提高你在Oracle数据库管理中的效率。希望这些内容对你在...