Oracle11gR1 for linux x86 64位版本可以下载了

http://www.oracle.com/technology/software/products/database/index.html
如何识别最耗资源的SQL
一般来说,调优的第一手资料,很可能就是典型业务期的一个statspack报告,那么如何根据statspack报告来判断是哪些SQL消耗了最多的系统资源?哪些SQL是最需要调整的呢?这里给出了一个大致的优化思路。当然,思路是死的,人是活的,优化也需要随需应变。
一般来说,需要关注下面四种Top SQL
- 消耗最多CPU的(逻辑IO过多)
- 导致过多物理I/O的
- 执行次数较频繁的
- 执行时间较长的
我们知道,一个语句的响应时间有个很著名的公式:
响应时间=服务时间+等待时间
其中服务时间就是CPU为执行该语句花费的时间。
服务时间=分析时间+递归时间+执行时间
分析时间是CPU用于分析语句的时间,递归时间是CPU用于语句的递归SQL的时间,剩下的则就是CPU用于执行语句的真正时间了。
关于non-existent objects与negative dependency
在logzgh的blog上看到《在obj$基表中大量的non-existent类型对象是咋回事?》。这里简单解释下non-existent object和negative dependency。
对于Non-existent object,有两种来源,一种是drop或者rename object留下的,一种则是因为negative dendency机制。在我的试验中,这两种情况实际上都和synonym有关。
第一种情况,对于table,view等对象的drop/rename,我没有试验到non-existent的存在,但是在删除synonym时,可以看到Obj$实际上没有删除该synonym的记录,只是将其type#从5修改成10,也就是变成了non-existent
表已创建。
NING@ ning>grant select on test_synonym to test;
授权成功。
TEST@ ning>create synonym test_synonym for ning.test_synonym;
同义词已创建。
SYS@ ning>select obj#,name,type# from obj$ where name='TEST_SYNONYM';
OBJ# NAME TYPE#
---------- ------------------------------ ----------
44651 TEST_SYNONYM 2
44652 TEST_SYNONYM 5
其中type#=2的是table,type#=5的是synonym
通过standby instance实现远程归档
我们知道data guard是通过将归档或者redo传递到远程机器,然后远程机器上的备库通过应用归档来保持备库和主库的一致。也就是说,data guard其实主要执行两个动作:传递归档到备库以及在备库上应用归档。
有时候我们需要将归档日志归档到远程路径,这在unix/linux上可以通过NFS实现,据说windows上通过映射网络驱动器也可以实现,但当时我测试的时候oracle一直无法辨认映射盘,折腾了很久也没有结果。
实际上,利用standby的归档日志传递功能,可以很简单的实现归档到远程的目的。只需要在远程机器上创建一个standby instance,将instance启动到mount状态,然后在主库设置归档路径到该standby instance即可。
创建专用户归档的standby instance和我们通常创建物理备库的步骤完全一样,手工创建一个instance,创建standby的pfile,复制一份主库的Passwordfile,创建standby controfile,只是不需要从主库的备份恢复出数据文件而已。由于只是用来接收归档,standby instance的sga可以设置的非常小,也就不需要占用standby主机太多的资源。