MTS 多线程服务器 不要再MTS上执行长时间的事物
AQ 高级队列
使用绑定变量
并行控制
多版本数据(delete命令把数据复制到成为回滚段的数据空间 )
redo(重做)日志
undo(撤销)日志 回滚段
create table t(pk number primary key,...);
create sequence t_seq;
create trigger t_trigger before insert on t from each row
begin
select t_seq.nextval into :new.pk from dual;
end;
create profile one_session limit sessions-per_user l;
alter user scott profile one_session;
alter system set rescource_limit=true;
FGAC(Fine Grained Access Control) 精细存取控制
Oracle体系结构
文件-- 参数文件,数据文件,临时数据文件和重做日志文件
系统全局区域(system global area ,SGA)的内存机构----SGA,PGA和UGA之间的关系
无力进程与线程---服务器进程,后台进程和从属进程
实例与数据库
数据库---物理操作系统文件的集合
实例---一组Oracle进程和SGA
_trace_files_public=true
开发人员应该频繁使用sql_trace,timed_statistics 和tkprof实用程序
SGA system global area
PGA process global area 内存的进程段
UGA user Global area
不需要索引
不从父表中删除
不更新父表的唯一/主码值
不从父表连接到子表、
for update
创建两个锁定 一个锁定放在选择的行上(一个专有的锁,没有别人能在专有模式下锁定那个指定的行)。另一个锁是row share table锁
防止其他会话在表上放置专有锁,防止他们更改表结构。
v$transcation 包含每个活动事务的入口
v$session 向我们展示登陆的会话
v$lock 包含所有被持有的锁定的入口,也包含正在等待锁定的会话的入口
select username,v$lock.sid,
trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,
id2 seq,
lmode,
request
from v$lock,V$session
where v$lock.type='TX'
and v$lock.sid= v$session.sid
and v$session.username =USER;
update scott.dept set deptno=deptno+10;
select xidusn,xidslot,xidsqn from v$transaction
update scott.emp set ename= upper(ename);
update scott.dept set deptno=deptno-10;
DBMS_LOCK(同一时间只有一个用户可以写入文件) utl_file
不使用绑定变量和频繁地执行硬分析, 由于库高速缓存的竞争和CPU的过度使用,都会导致严重地降低并行特性。即使改成使用绑定变量
软分析太频繁也会导致性能下降。
一次性Commit
必须产生重做日志,他不是额外开销,也不是浪费,是数据库的工作方式。
一些SQL语句和操作支持使用NOLOGGING语句,并不意味完成此对象的所有操作而不产生重做日志,只是某些非常特定的操作能产生
明显少的重做。
ora-01555 : Snapshot too old;
对在系统上执行的工作,回滚段太小
程序产生交叉commit
快清除