一、下面三个参数属于SGA区的设置,主要看服务器内存是不是需要扩充。
1、数据缓冲区计算:(DB_BLOCK_BUFFERS)
SQL> select 1 - (phy.value /(blk.value+con.value))
 "   Hit Ratio"
 from v$sysstat phy, v$sysstat blk, v$sysstat con
 where phy.name = 'physical reads' and
   blk.name = 'db block gets' and
   con.name = 'consistent gets'
  
Hit Ratio最好是大于90%,需要在数据库在最繁忙的时候的命中率,否则需要增加内存。

2、日志缓冲区计算(log_buffer)
v$latch
sum(misses) 越接近于零越好。
3、共享池大小计算(shared_pool_size)
(1) v$librarycach:  PINS(命中),Reloads(失败)
Reloads/(pins + reloads) * 100 -> 失败率 -> 应小于1%,否则需要扩内存。
(2) v$rowcache: GETS(取到),  GETMISSES(失败)

二、排序区参数计算(SORT_AREA_SIZE):v$sysstat
sorts(disk) / sorts(memory)+sorts(disk)  失败率 < 10%
三、磁盘存储参数测算:
计算以下存储参数:
initial
next
minextents
maxextents
pctincrease
如果使用本地化管理,不需要计算以上参数。
四、数据库参数自动统计计算
1、修改参数文件:timed_statistics=true,重启数据库
2、在数据库最繁忙的时段运行下面两个SQL程序(在Oracle目录中搜索这两个文件)
SVRMGR>@d:\oracle\ora81\rdbms\admin\utlbstat.sql   
SVRMGR>@d:\oracle\ora81\rdbms\admin\utlestat.sql
3、查询d:\report.txt来看统计结果。
五、回退段优化设计
1、对于大事务,设计大回退段,提高数据操作速度。
步骤如下:
A、创建一个专用的回退段表空间。例如:rb100
B、在回退段表空间rbs100上创建大的回退段。
SQL> create rollback segment rbs100
 tablespace rbs100
 storage(initial 50m);
C、使回退段表空间online
SQL> Alter rollback segment rbs100 online;
D、指定用户使用专用的回退段表空间:
SQL> set transaction use rollback segment rbs100;  // 必须在事务开始前指定
E、事务结束后,删除回退段及表空间。

2、回退段I/O调整,具体步骤:
A、创建多个回退段表空间,对就不同物理磁盘,以平衡磁盘I/O
B、在多个表空间上分别创建回退段。例如:
rbs1:rbs01, rbs02, rbs03, rbs04, rbs05
rbs2: rbs06, rbs07, rbs08, rbs09, rbs10
C、修改参数文件,使回退段交叉排放。例如:
rollback_segments=(rbs01,rbs06,rbs02,rbs07,rbs03,rbs08,...)
 
访问表空间权限控制:
去掉用户对某个表空间的访问权限
ALTER USER ZYIBSS QUOTA 0 ON IBMS_DATA_DATA;
ALTER USER ZYIBSS QUOTA 0 ON IBMS_DATA_IDX;
增加用户对某个表空间的访问权限
ALTER USER ZYIBSS QUOTA UNLIMITED ON IBMS_DF_DATA;
移动表空间:
alter table tcm-user move tablespace  ibms-data-data

append是优化提示器,这个最好不用,你可以用并行提供来做
insert /*+parallel(emp,2) */ into emp nologging
2是用2个CPU来并发做事

关于Oracle中的时间计算问题!
--------------------------------------------------------------------------------
  to_date('2003-8-1 18:20', 'yyyy-mm-dd HH24:MI') - to_date('2003-7-3 18:35', 'yyyy-mm-dd HH24:MI')
   得到一个值,如何将得到的值转化为分钟?也就是说它们两个值之间相差的分钟?
--------------------------------------------------------------------------------
(to_date('2003-8-1 18:20', 'yyyy-mm-dd HH24:MI') - to_date('2003-7-3 18:35', 'yyyy-mm-dd HH24:MI'))*24*60
(dateA-dateB)*1440 = N 分
(dateA-dateB)*86400 = N 秒
  round()四舍五入
  ceil()大于n的最小整数

如果不小心把表给delete掉了并且commit了,不要紧,你可以用如下语句进行恢复
 select * from tfm_action_list as of timestamp (systimestamp -interval'4000'second)