MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

Oracle数据库扩展语言PL/SQL之锁

2024-11-26 17:20 huorong 数据库 5 ℃ 0 评论

【本文详细介绍了Oracle数据库扩展语言PL/SQL中锁的基本概念和使用方法,欢迎读者朋友们阅读、转发和收藏!】

锁是防止访问相同资源(例如表或数据行等用户对象,或内存中的共享数据结构及数据字典等对用户不可见的系统对象)的事务产生破坏性交互的机制。数据库是一个多用户使用的共享资源,当多个用户并发地存取数据时,如果对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

Oracle 中锁的三个类别

DDL 锁:被 Oracle 自动的发布和释放

DML 锁:在事务处理的开始时被施加,而且在事务处理完成时被释放(使用 Commit 和 Rollback 时被释放)

内部锁:由 Oracle 自己管理以保护内部数据库结构(如 sga 内存结构)

Oracle 中锁的三个粒度

TX 锁:行级锁(事务锁),会阻止这行上其他 DML 操作,直到 Commit 或 Rollback 时被释放,它只有 X 排他锁

TM 锁:表级锁,包括: S,X,SR,SX,SRX 五种

数据库级锁:锁定数据库为限制模式 alter system enable restricted session

锁的模式

Row-S 行共享( RS ):共享行锁

SQL 操作: select for update 、 lock for update 、 lock row share

Row-X 行专用( RX ):用于行的修改

SQL 操作: insert 、 update 、 delete 、 lock row share

Share 共享锁( S ):阻止其他 DML 操作

SQL 操作: create index 、 lock share

S/Row-X 共享行专用( SRX ):阻止其他事务操作

SQL 操作: lock share row exclusive

Exclusive 专用( X ):独立访问使用

SQL 操作: alter table 、 drop able 、 drop index 、 truncate table 、 lock exclusive

Oracle 解锁

Step1 SQL>select sid,serial#,username from v$session where sid in (select blocking_session from v$session);
--- 查出被锁的表
Step2 SQL>alter system kill session ‘144,8982’immediate;
--- 解锁

Mysql 锁表和解锁

mysql> LOCK TABLES real_table WRITE, insert_table WRITE;
--- 将 real_table 和 insert_table 锁定,防止其他人操作
mysql> INSERT INTO real_table SELECT * FROM insert_table;
mysql> TRUNCATE TABLE insert_table;
mysql> UNLOCK TABLES;
--- 对表的操作解锁后,进行解锁

Tags:oracle insert into

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言