oracle写会阻塞读吗,oracle读不阻塞写带来的问题

  • Post author:
  • Post category:其他


1.oracle 读是不会阻塞写的;写也不会阻塞读;只有修改同一行数据的时候,两个写操作才会发生阻塞,这种情况下,只有写1提交了,写2才能操作。

2.读写互相不阻塞,这会带来一个问题。

如果想确保某些时刻,资源只能被一个用户访问,你需要多做些事情。打个比方,你上厕所的时候,不需要有人打扰吧,这时候你应该怎么办?把门锁上。oracle也这样。下面用一个例子说明。

create table resources(name varchar2(20) primary key);

create table schedules(resource_name varchar2(20),start_date date not null,end_date date not null,check(start_date < end_date),primary key(resource_name,start_date));

insert into resources values(‘厕所’);

过程:

procedure schedule_resource(i_resource_name in varchar2,

i_start_date    in date,

I_end_date      in date) as

v_count         number;

v_resource_name resources.name%type;

begin

select name

into v_resource_name

from resources re

where re.name = i_resource_name

for update;

select count(1)

into v_count

from schedules sc

where sc.resource_name = v_resource_name

and sc.start_date <= I_end_date

and sc.end_date >= i_start_date;

if v_count <> 0 then

raise_application_error(-20000, ‘Rome is busy!’);

end if;

insert into schedules

(resource_name, start_date, end_date)

values

(i_resource_name, i_start_date, i_end_date);

end schedule_resource;