锁表
Oracle 提供LOCK TABLE语句让用户根据需要锁定表。例如:
SQL> conn hr/hr@orclpdb
Connected.
SQL> lock table employees in exclusive mode;
Table(s) Locked.LOCK TABLE语法的锁定模式可以是以下级别之一。
- ROW SHARE
- ROW EXCLUSIVE
- SHARE UPDATE
- SHARE
- SHARE ROW EXCLUSIVE
- EXCLUSIVE
但是如何确保表被锁定?我们可以对V$LOCKED_OBJECT发出查询来确定它。
SQL> show user
USER is "SYSTEM"
SQL> column owner format a20;
SQL> column object_name format a20;
SQL> column object_type format a10;
SQL> select o.owner, o.object_name, o.object_type, l.locked_mode from all_objects o, v$locked_object l where o.object_id = l.object_id;
OWNER OBJECT_NAME OBJECT_TYPE LOCKED_MODE
---------- -------------------- -------------------- -----------
HR EMPLOYEES TABLE 6锁定 ID 6 表示独占锁定模式。
如果您有更永久的解决方案,您可以通过进入 READ ONLY 模式来冻结表格。
解锁表
没有明确的UNLOCK TABLE语句来释放锁。您应该使用以下技术之一来解锁表。
1. 提交和回滚
COMMIT和ROLLBACK是事务控制语句,都具有轻松破锁的能力。如果数据正确更改,您可以发出COMMIT来确认。否则使用ROLLBACK拒绝更改。例如:
SQL> rollback;
Rollback complete.请注意,虽然SAVEPOINT也是一个事务控制语句,但它不能终止事务,所以不会释放锁。
2.数据定义语言(DDL)
由于数据定义语言 (DDL)隐式提交所有更改,因此它打破了上述事务的所有锁定。例如:
SQL> alter table employees modify (employee_id number(10));
Table altered.请注意,TRUNCATE和GRANT语句也是 DDL,它肯定会移动LAST_DDL_TIME。
3. 用户退出
如果用户正常退出其会话,则隐式COMMIT随之而来。这将释放会话的所有锁。
4.杀死会话
如果您无法控制拥有锁的会话,您可以终止会话以强制它释放锁,然后是隐式ROLLBACK。
总之,要释放表锁,我们需要发出一个信号来终止事务,即COMMIT或ROLLBACK。
原文标题:How to Lock Table and Unlock Table
原文作者: Ed Chen
原文链接:https://logic.edchen.org/how-to-lock-and-unlock-table/
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




