日期:2014-05-16  浏览次数:20534 次

第一章 开发成功的Oracle应用程序
                  第一章 开发成功的Oracle应用程序
1.3如何开发数据库应用程序
1.3.1理解Oracle的体系结构
1)不要在MTS下运行长事务
  MTS(Multi Threaded Server)体系结构,即一种为了支持多数据库连接需要配置Oracle的一种模式。
  不要在MTS上执行长时间的事务。但实现这种解决办法却不简单。有许多解决问题的办法,但是都需要改变基础体系结构。解决问题最合适的方法,也是需要最少改动的方法是使用高级队列(AQ,Advanced Queue)。
2)使用绑定变量
  select * from emp where empno = 123
  select * from emp where empno = :empno
  分析一个带有硬编码变量的预计将比重用一条已分析过的查询方案花费更长时间和消耗更多的资源。不明显的是前者将减少系统所能支持的用户数量的程度。很明显,部分原因是由于增加资源消耗量,但更主要的因素是由于对库高速缓存的锁存器机制。当硬分析一个查询时,数据库将花费更多的时间支持称为锁存器(latche)的某些低层串行化设备。这些锁存器保护了Oracle共享内存中的数据结构,可以避免被两个用户同时修改和避免当数据进行修改时被用户读取。锁存这些数据结构时间越长越频繁,获得锁存器的队列也就变得越长。这与在MTS下运行长事务独占稀缺资源的情况类似。一个不使用绑定变量的简单小程序将导致其他优化好的应用程序的相关SQL从共享池中抛出。
   如果使用绑定变量,提交引用相同对象的完全相同的查询的人将使用共享池中的编译方案。只需编译子例程一次,就可以重复使用。不仅使用较少的资源,而且可以减少锁存时间,降低锁存频率。
1.3.2理解并行控制
1)实现封锁
Oracle的封锁策略:
(1)只有当修改时,Oracle在行级上锁定数据,不要把锁定上升到块级或表级
(2)Oracle不会为读取而锁定数据
(3)数据的写入不会阻塞数据的读取
(4)只有当另一个数据写入已经锁定了某行数据后,才阻塞其他人对该行数据的写入。
2)多版本
Oracle提供如下的机制:
(1)一致读查询:在某一时刻查询产生一致结果
(2)非阻塞查询:数据写入从来不阻塞查询
1.3.3与数据库无关
生成自增主键:
create table t (pk number primary key,...);
create sequence t_seq;
create trigger t_trigger before insert on t for each row
begin select t_seq.nextval into :new.pk from dual;
end;

编写可移植的程序有两种方式。一种使用JDBC编程,直接使用SQL SELECT、INSERT、update和delete,可能会省去一层抽象。只要将使用的结构限定到要用的数据库所支持的结构,就可以在应用程序中直接使用SQL编码。另一个可移植和提供良好性能的方式,是使用存储过程返回结果集。