【问题标题】:Unlock An Oracle Table解锁 Oracle 表
【发布时间】:2015-04-24 10:11:35
【问题描述】:

解锁 oracle 表有哪些不同的技术?

我尝试了什么。

  1. 获取锁定表的对象ID:

    SELECT object_id FROM dba_objects WHERE object_name='YOUR TABLE NAME';

  2. 获取此 ID 的 SID 值:

    SELECT sid FROM v$lock WHERE id1=OBJECT ID FROM STEP1

  3. 获取这些 SID 的会话值:

    SELECT sid, serial# from v$session where sid in (COMMA SEPARATED LIST OF SIDs FROM STEP2.)

  4. 杀死导致锁定的会话:

    ALTER SYSTEM KILL SESSION (SID,SERIAL#)

对第 3 步中的值 例如ALTER SYSTEM KILL SESSION '231,23454'

但问题是我有很多被锁定的表是否有任何其他解锁表的技术。

我正在使用SQLDeveloper 有没有直接解锁的选项。

【问题讨论】:

  • 为什么要解锁表?行上的事务锁很好,它们可以保护您免受损坏。如果锁在表上,您可以更好地检查它们为什么在表上。锁可能是一个问题,但只有当它们被阻塞并且持续时间很长时。应用程序设计是在出现问题时首先检查的,
  • @ik_zelf,是的,你是对的,但我想解锁表,因为我无法执行任何操作,甚至无法检查这些表被锁定的原因。
  • 你所做的很危险,仅供参考。您正在为数据损坏做好准备。如果您的应用程序锁定行以进行更新而不是解锁它们,您需要关闭应用程序并找出原因,而不是解锁行并让人们重新开始工作。
  • @mmmmmpie,Thaks,但这不是实时环境,这只是一个测试环境,而且我无法找出锁定的原因,所以直到我解锁我也无法调试的表。跨度>

标签: mysql oracle session locking


【解决方案1】:

你也可以尝试只执行

COMMIT;

ROLLBACK;

在本次会议中。

【讨论】:

  • 提交工作,因为我是锁表的人,忘记提交
【解决方案2】:

选项 1:

嗯,其中一个选项是回滚锁定的 SQL 语句。例如,

lock table table1 in exclusive mode;  -- is what you should've used to lock the table.

解锁:回滚;

选项 2:

要查找用户名和 sid:

select * from v$locked_object;

使用 sid 查找序列号:

select * from v$session where sid= put the sid you found on v$locked_object;

终止会话:

alter system kill session 'sid, serial#'; -- Execute this command as sysdba as normal user won't have privilege. 

【讨论】:

  • oracle 会在一段时间后自动解锁对象吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2011-06-19
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多