1. 要想快速高效开发管理软件必须了解所用数据库的特性。
2. SQL server 一个很普遍的用法,就是会为每个sql语句建立一次连接。但是在oracle中,无论执行多少sql都希望只建立一个连接。
3. 在开发过程中,尽可能的使用绑定变量,对于同一个sql语句绑定变量后,oracle直接使用已解析的查询计划(软解析)。直接绑定变量的sql语句需要重新解析(硬解析),效率低。硬解析消耗资源比较多,有时会减少数据库系统能支持的用户数。(latching(x定机制))。
4. oracle锁定策略
✡oracle只在修改是才对数据加行级锁。
✡如果只是对数据,oracle绝不会对数据加锁。
✡写入器不会阻塞读取器。
✡操作同一行数据时,写入器才会被写入器阻塞。
5. oracle采用了一种多版本、读一致的并发模型。例如:在一个查询上创建一个游标。然后讲查询的表格中数据全部删除并提交,遍历游标查询的结果还在。
6. oracle中有闪回机制,可以指定系统修改号(System change number :scn)进行查询。
7. 多版本,读一致的例子:
begin
for x in (select * from t)
loop
insert into t values (x.username,x.user_id,x.created);
end loop;
end;
最终执行结果不会无限循环下去。
8. oracle中null和null既不相等,也不完全不相等。如果需要判断请使用null=null。如果想给一个可能为null值的字段加上B*树索引,请参照下面的例子:select * from t where nvl(x,-1)= nvl(l_some_variable,-1); create index t_idx on t(nvl(x,-1));
9. 静态sql和动态sql?
10. 可以动态的实现检索硬解析的次数:alter session set cursor_shring=force; 但是这样修正会有副作用,内置子函数的常量也会被替换。查询已经使用过的sql:select sql_text from v$sql where sql_text like ‘select /* tag */’ ;
11. 追加查询计划:sql_trace=true
12. 实例是一组后台进程和共享内存。数据库是磁盘上存储的数据集合。实例在其生存期内只能装在并打开一次数据库。数据库可以由一个或多个实例(使用RAC)装载和打开。
13. oracle有个一个很大的内存块,称为系统全局区(SGA),功能:(1)维护所有进程需要访问的多种内部数据结构;(2)缓存磁盘上的数据,另外重做数据写至磁盘之前现在这里缓存;(3)保存已解析的sql计划;