宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述Oracle管理数据的并发相关的知识,希望能为你提供帮助。
通过Lock 管理一致性 和并发性
oracle Lock 在表上 是行级锁
Oracle SELECT 无锁
oracle DML DDL DCL 有锁
行锁 TX 事务锁
表锁 TM
锁级别 0 1 2 3 4 5 6
update employees set salary=10000 where employee_id=196;
当前hr用户 sid=36 持有如下锁 表employees TM 级别3
AAAR5VAAFAAAADPABg行 employee_id=196所在的行 TX 6
提供数据保护
在事务期间 保护表
保护行
事务完成 (commit
rollback) 锁释放
SQL>
select sid from v$session where username=HR;
SQL>
select type ,lmode from v$lock where sid=36;
select sid,type,lmode,request,block from v$lock where sid in (36,46) and type in(TM,TX)
performance-additional monitor links--instance lock
命令 lock table employees IN 级别 Mode
2 - row-S (SS) row share
3 - row-X (SX) row exclusive
4 - share (S) share
5 - S/Row-X (SSX) row share exclusive
6 - exclusive (X) exclusive
kill session 对于无法主动结束的事务 可以考虑结束此会话,但注意没提交的事务将会回退。
1.先查找阻断其它会话的会话ID(sid)和序列号(serial#)
select sid,serial# from v$session
where sid in (select blocking_session from v$session);
2.使用alter system 中断会话
alter system kill session 46,3545 immediate;
dead lock 死锁
发生死锁 一般不需要用户主动解决,由oracle server 解决 ,发现deadlock的session会抛出一个例外 并且主动回退一个语句
将死锁就转变为普通的DML锁
Oracle数据库在对数据块进行更改时 旧数据会被保留下来
用途:rollback
flashback
select employee_id ,salary from employees;
当需要访问旧数据 而旧数据又被清除
snapshot too old
保存到类型为 UNDO表空间
select tablespace_name,contents from dba_tablespaces;
create undo tablespace undotbs2 datafile +FRA size 100M;
ORACLE每一个实例仅可以使用一个UNDO表空间
undo_management=AUTO
-----undo自动管理功能
undo_retention=900
--单位 为秒 (事务提交之后旧数据在UNDO表空间保留多长时间)
undo_tablespace=UNDOTBS1
---指定UNDO表空间
select employee_id ,salary from employees as of timestamp(to_timestamp(2016-11-07 08:20:00,yyyy-mm-dd hh24:mi:ss));
(--查询一个过去的时间的数据
闪回查询)
(DML之后 旧数据已经保留在UNDO中 )
直到commit 事务结束时 开始计时 undo_retention=900
!!!! 当UNDO空间没有压力时 到时不会清除
!!!! 当UNDO空间有压力大时
未到时就会清除
!!!!确保保留时间 在UNDO表空间中设置开关guarantee
alter tablespace undotbs1 retention guarantee;
alter tablespace undotbs1 retention noguarantee;
保留确保保留时间 (在commit之后旧数据保留 undo_retention时间)
UNDO空间 指导 ---事先计算一个合适的大小
参考 事务的繁忙程度(例如 采样一周时间) 保留时间
【Oracle管理数据的并发】 Advisor Center--Automatic UNDO management
推荐阅读
- 网络相关命令
- Linux中木马如何处理
- PyHacker编写指南打造URL批量采集器
- linux下搭建Ipsec+L2TP VPN服务(线上)
- OSPF多域配置
- 深度学习实战之手写签名识别(100%准确率语音播报)
- 5个实用的PDF自动化办公操作~1行Python代码搞定(解密加水印PPT/Word/TxT转PDF)
- OSPF多区域间配置
- java WebSocket 即时通讯服务端代码