Oracle管理数据的并发

Posted 书上有路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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空间 指导 ---事先计算一个合适的大小

参考 事务的繁忙程度(例如 采样一周时间) 保留时间

Advisor Center--Automatic UNDO management

以上是关于Oracle管理数据的并发的主要内容,如果未能解决你的问题,请参考以下文章

Mysql和Oracle数据库自动备份与恢复

技术干货 | DBA之Oracle数据库的备份恢复

oracle 并发与多版本

Oracle RAC 并发与架构

Oracle RAC 并发与架构

数据库连接池技术