oracle做应用程序,开发成功的oracle应用程序(2)

6.  多版本

oracle采用多版本、读一致的并发模型,利用该机制提供了一下特性:

1.  读一致查询:对于一个时间点(point in time),查询会产生一致的结果。

2. 非阻塞查询:查询不会被写入器阻塞,但在其他数据库中可能不是这样。

例:create table t as select * from all_users;

variable x refcursor

begin

open :x for select * from t;

end;

/

delete from t;

commit;

print x

注意:打开游标时,oracle不复制任何数据,游标会立即打开,它会边行进边回答查询。即:只是在你获取数据时它才从表中读数据。

即使从表t删除了所有数据,还是可以通过游标获取到数据。open命令返回的结果集再打开的那一刻(时间点)就已经确定,这并非是oracle将所有数据复制到另外某个位置,而是delete命令为我们把数据保留下来,把它放在undo段(undo segment)的数据区。

1) 多版本和闪回

1.  过去,oracle总是基于查询的某个时间点来做决定(从这个时间点开始查询是一致的)。

游标打开时的时间点:READ COMMITED隔离模式的默认行为,该模式是默认的事务模式。

查询所属事务开始的时间点: READ ONLY 和 SERIALIZABLE隔离级别的默认行为。

2.  从oracle9i开始,oracle提供了闪回查询的特性(flashback query)。

例:variable scn number

exec :scn := dbms_flashback.get_system_change_number

select count(*) from emp;       --结果是14

delete from emp;

select count(*) from emp;      --结果是0

select count(*) from emp AS OF SCN:scn;      --结果是14

3.   oracle 10g及以上版本,可用闪回(flashback)命令把对象返回到以前某个时间点的状态。

例: flashback table emp to SCN:scn;

select count(*) from emp;     --结果是14

注意:如果得到错误:“ORA-08189:cannot flashback the table because row movement is not enabled using the FLASHBACK command”。则必须先执行一个命令:ALTER TABLE EMP ENABLE ROW MOVEMENT.该命令的作用:允许oracle修改分配给行的rowid.在oracle中,插入一行就会为它分配一个rowid,且该行永远拥有这个rowid。闪回表处理会对EMP完成delete,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许oracle执行这个操作。

2) 读一致性和非阻塞读

1.  非阻塞读是这样实现的:oracle只看数据是否改变,它并不关心数据当前是否锁定(锁定意味着数据已经改变)。oracle只是从回滚段中取回原来的值,并继续处理下一个数据块。

2. 数据的读一致视图总是在SQL语句级执行。SQL语句的结果对于查询开始的时间点来说是一致的。

例:如下的INSERT也是可预知的:

insert into t select * from t;

7.  其它杂项

1) 怎么确保最终用户在数据库中只有一个会话?

解决方案:

create profile one_session limit sessions_per_user 1;

alter user scott profile one_session;

alter system set resource_limit=true;

conn scott/tiger             --connected

host sqlplus scott/tiger -- ERROROR02391:exceeded simultaneous SESSIONS_PER_USER limit

2) 80%以上(甚至经常是100%)的性能问题都出现在设计和实现级,而不是数据库级。在对数据库上运行的应用进行调优之前,先不要对数据库调优。

8.  小结

作为一个oracle开发人员,应该做到:

1) 需要理解oracle体系结构。不要求你精通到能自行重写服务器的程度,不过确实需要有足够的了解,知道使用某个特性的含义。

2) 需要理解锁定和并发控制特性,而且知道每个数据库都以不同的方式实现这些特性。

3) 不要把数据库当作黑盒,也就是说,不要以为无需了解数据库。

4) 用尽可能简单的方法解决问题,要尽量使用oracle提供的内置功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值