`
awaitdeng
  • 浏览: 216305 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle 解锁表删除去session 和kill

 
阅读更多
一、处理过程

      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 数据库解锁session方式

    Oracle 数据库解锁session方式

    Oracle的锁表与解锁

    锁可以分为行级锁(Row Level Lock)和表级锁(Table Level Lock),以及更细粒度的锁类型。本文将深入探讨Oracle中的锁机制,特别是如何锁表与解锁,以及相关的SQL查询语句,帮助数据库管理员和开发人员更好地理解...

    oracle解锁,死锁

    在深入讨论Oracle解锁和死锁之前,我们首先需要了解Oracle数据库中的锁机制。 1. **共享锁(S)**:允许多个用户读取行,但不允许修改。 2. **排他锁(X)**:允许单个用户修改行,其他用户只能等待。 3. **共享更新锁...

    oracle存储过程解锁

    通过查询`dba_ddl_locks`和`v$session`视图,再结合`ALTER SYSTEM KILL SESSION`命令,可以有效地解除存储过程的锁定状态,恢复数据库的正常运行。 总结来说,解锁Oracle存储过程的过程涉及到识别锁定会话、查询...

    ORACLE 如何查询被锁定表及如何解锁释放session

    ### ORACLE 如何查询被锁定表及如何解锁释放session 在Oracle数据库管理中,了解如何查询被锁定的表以及如何解锁这些锁定对于确保数据库高效运行至关重要。本文将详细介绍如何使用Oracle SQL查询锁定的表,并提供一...

    oracle锁表及解锁

    ### Oracle锁表与解锁详解 在Oracle数据库管理中,锁是一种关键机制,用于控制多个用户对数据资源的并发访问,防止数据冲突和不一致。本文将深入探讨Oracle中检查锁表的方法以及如何对表进行解锁。 #### Oracle锁...

    oracle锁表后,如何解锁

    Oracle锁表后如何解锁 Oracle锁表是指在Oracle数据库中某个表被锁定,无法进行操作的情况。这种情况经常发生在多用户同时访问同一个表时,某个用户锁定了该表,导致其他用户无法访问该表。那么,在不知道谁锁的情况...

    oracle锁表解决

    因此,了解如何有效地解锁表是每个Oracle数据库管理员必备的技能之一。 #### 1. 识别锁定的表 在解决锁定问题之前,首先需要确定哪些表被锁定了以及锁定的原因。可以通过查询`v$locked_object`视图来获取当前被...

    oracle数据表解锁

    SELECT A.OWNER 方案名, A.OBJECT_NAME 表名, B.XIDUSN 回滚段号, B.XIDSLOT 槽号, B.XIDSQN 序列号, B.SESSION_ID 锁表SESSION_ID, ...alter system kill session '855, 25352' --139 : sid --182 : sertal#

    ORACLE解锁方法的一点资料

    本文将详细介绍Oracle解锁方法的相关知识点,包括如何识别锁定的会话(session)、如何查看锁定的SQL语句以及如何解除锁定。 #### 二、识别锁定的会话 在Oracle数据库中,当一个会话被另一个会话锁定时,通常会遇到...

    Oracle表死锁与解锁

    Oracle数据库在运行过程中,可能会遇到一种情况,那就是“表死锁”,这会...通过理解Oracle表死锁的原理、使用上述检测和解决方法,以及遵循最佳实践,可以有效地管理和防止数据库死锁,保证系统的稳定性和高效运行。

    oracle 解锁 语句

    ### Oracle解锁语句详解 #### 一、Oracle解锁语句概述 在Oracle数据库管理中,锁定与解锁是常见的操作之一,特别是在处理并发控制时尤为重要。当一个会话长时间占用资源导致其他会话无法正常工作时,可能需要进行...

    oracle解锁及查已执行SQL语句

    在Oracle数据库管理中,解锁资源和查询已执行的SQL语句是常见的操作需求,尤其是在处理数据库性能问题或恢复被锁定的用户时。根据给定的文件信息,我们可以深入探讨几个关键的知识点,包括如何解锁Oracle中的资源、...

    oracle用户解锁

    综上所述,Oracle用户解锁涉及多个步骤,包括登录数据库、使用SQL命令解锁用户、设置新密码以及查询锁定对象和强制终止会话。掌握这些操作对于Oracle数据库管理员来说至关重要,有助于确保数据库的正常运行和数据的...

    查看数据库锁和解锁方法

    3. **页级锁**:作用于数据库页上(介于行级和表级之间)。 4. **模式对象锁**:作用于数据库中的其他对象,如索引等。 #### 二、查看数据库锁状态 了解了基本概念之后,我们来看看如何查看数据库中的锁状态。以...

    oracle表解锁

    本文将详细介绍如何解锁Oracle表,并提供相关的SQL命令和步骤。 首先,了解Oracle表锁定的原因是必要的。锁定主要是为了实现多用户并发访问数据库时的数据一致性。在Oracle中,锁定机制用于控制对数据的访问,防止...

    Oracle恢复误删除数据,解除锁定的等SQL语句

    总的来说,Oracle提供了一系列工具和命令来处理误删除数据和解锁问题,确保数据库的稳定运行。在进行任何操作前,务必先备份重要数据,以防万一。同时,了解并熟练掌握这些恢复和管理技巧对数据库管理员来说至关重要...

Global site tag (gtag.js) - Google Analytics