本帖最后由 zl3450341 于 2011-08-29 14:09:36 编辑

解决方案 »

  1.   

    good 欢迎分享,欢迎散分。
      

  2.   

    好吧,好久没上CSDN了~东西还是很好的,哇哈哈哈哈~
      

  3.   

    上边些的, 只是见到一个sql或者一个查询语句时我能想到的,没保留此类优化脚本,我后期会整理下发上来。
      

  4.   

    恩 学习了,正要开始用oracle数据库,研究下,问:加群需要验证码么,验证码是多少!!!
      

  5.   


    啊??分页? 你搞笑吧,大兄去Google下BI。在来这回帖吧。
      

  6.   


    数据挖掘分什么页啊,又不是给web提供数据展示
      

  7.   

    truncate后commit,flashback query可以恢复么?疑惑……
      

  8.   

    谁说是数据挖掘了 在分页查询时 数据量超过300W后 oracle全表扫描计算rownum的效率都会下降
      

  9.   

    补充几点切身相关的
    1:绑定变量的重要性
    是否使用绑定变量看情况而定,大多数情况下,绑定变量会减少硬解析的数量,降低共享池大小,往往不适用绑定变量是系统系能的硬伤,但是在11g之前(在11g中有扩展的游标共享),如果在一个where从句中使用绑定变量,CBO会窥测绑定变量的值,有可能会引发选择一个低效率的执行计划。因此,如果一个sql处理大量的数据就尽量不要再where中使用绑定变量。
    还有即使使用绑定变量,有几种情况下,oracle也不会使用共享池中的共享游标
    1)父游标不同,即使sql语句是一样的,但是多了个空格,也是会产生新的父游标
    2)执行环境的改变,父游标相同的情况下如果执行环境不同,会生成不同的子游标,因此也不会使用共享游标2:打开的游标中大量commit,大量commit可以提高性能?
    此错误多见于批量更新,大家可以试一下,如果你的undo段不够大,批量update的时候大量commit,势必造成ora-01555
    如果你在一个打开的游标中大量commit,一定会遇到这个错误,而且这个错误不可逆。
    很多人都会觉得commit会释放很多资源,可以提高性能,但是实际上在commit之前,oracle已经完成了大部分的刷新输出的工作,commit的时候只是做一些收尾的工作,入块清理,释放锁之类的,多次commit反而开销更大,所以正确的变成习惯是一个事物中只提交一次
      

  10.   


    truncate 后无需 commit
    truncate 后可恢复
    下面这篇文章有比较详细的操作步骤。
    http://space.itpub.net/12778571/viewspace-341815
      

  11.   


    truncate不需要commit...
    闪回可以闪回到数据库之前的状态
    可以根据scn或者时间进行闪回
      

  12.   

    1:分页并不一定要计算rownum,可以使用分析函数row_number() over(partition by order by),(不知道两者效率的差别)
    2:数据量大也不一定会全表扫描,根据你要查数据量占整个表的百分比,CBO会选择走索引还是全表扫描
      

  13.   

    8.即使干掉了也别怕,Oracle 9i开始支持Flashback Query恢复误删除数据.(truncate的也可以回复,但是有前提的)除了 flashback database,还有什么方法能恢复truncate的数据,请指教。
      

  14.   

    1:用备份恢复
    2:立刻离线,用一些解析数据文件的工具提取数据
    3:logmnr解析归档日志,找到之前insert的redo信息,呵呵,比较扯淡