Archive

Archive for the ‘oracle 11g’ Category

Invisible index

September 3rd, 2007

11g的Invisible index和前面版本的virtual index是完全不同的。

Invisible index是有segment的,并且在做DML操作的时候是维护这个索引的,而virtual index并没有真实的被创建出来,没有分配segment空间,只是optimizer可见而已。

让我来说的话,virtual index是在QA环境上做测试的一个工具,用处不大,主要被oracle自己使用(Oracle Enterprise Manger Tuning Pack),
而invisible index是在production实施的一个过渡阶段,对于某些大型的复杂的application很有价值。

另外invisible index对于drop index也很有帮助,可以做为drop index的一个过渡阶段。
在drop前(建议先monitoring usage)先设置index invisible,观测一段时间,比如一个星期,如果有问题可以很快的rollback,如果没有问题再drop index。

在我06年初的那篇文章里提到virtual index的几个特性:

1. 需要设定隐藏参数 “_use_nosegment_indexes”=true, 因为涉及隐藏参数,所以不建议在prod环境使用,除非oracle建议
2. hint 对virtual index有效
3. 没有hint的情况下,RBO时虚拟索引对于optimizer不可见, CBO时oracle会考虑使用虚拟索引

这里对应的也列出Invisible的几个特点:
1. 可以在创建的时候指定,也可以用alter index xx invisible 修改,是oracle support的new feature.

  1. SQL> create index test_idx on test(object_id) invisible;
  2.  
  3. Index created.
  4.  
  5. SQL> select index_name,visibility from user_indexes where index_name='TEST_IDX';
  6.  
  7. INDEX_NAME                                                                                 VISIBILITY
  8. ------------------------------------------------------------------------------------------ ---------------------------
  9. TEST_IDX                                                                                   INVISIBLE
  10.  
  11. SQL> alter index test_idx visible;
  12.  
  13. Index altered.
  14.  
  15. SQL> select index_name,visibility from user_indexes where index_name='TEST_IDX';
  16.  
  17. INDEX_NAME                                                                                 VISIBILITY
  18. ------------------------------------------------------------------------------------------ ---------------------------
  19. TEST_IDX                                                                                   VISIBLE
  20.  
  21. SQL> alter index test_idx invisible;
  22.  
  23. Index altered.
  24.  
  25. SQL> select index_name,visibility from user_indexes where index_name='TEST_IDX';
  26.  
  27. INDEX_NAME                                                                                 VISIBILITY
  28. ------------------------------------------------------------------------------------------ ---------------------------
  29. TEST_IDX                                                                                   INVISIBLE

2. Invisible index对于optimizer是不可见的,除非session开始设置OPTIMIZER_USE_INVISIBLE_INDEXES=true。文档上说加hint也可以使用invisible index,不过我没有试出来,

Read more…

Eagle Fan oracle 11g

oracle 11g

September 1st, 2007

oracle 11g的linux binary出来也有段时间了,前段时间一直在忙,一直没时间也没有合适的linux系统来测试

最近终于有了太SUSE9 Linux的系统可以用来做一些测试

otn.oracle.com上download了binary

安装过程挺顺利的,一路next,中间有warning说支持SUSE10,不支持SUSE9,忽视,继续next

11g installation

装完binary后手工建库,一开始看alert就被忽悠了一把

  1. tail -500f alert_TEST.log
  2. Sat Sep  1 06:23:07 2007
  3. WARNING: The background_dump_dest init.ora parameter has been deprecated.
  4. WARNING: Please remove the background_dump_dest parameter from the init.ora file.
  5. WARNING: The diagnostic_dest init.ora parameter now determines the location of the diagnostic data
  6. WARNING: The new location for the background logs and traces is /home/oracle/diag/rdbms/test/TEST/trace
  7. Sat Sep  1 06:23:07 2007
  8. WARNING: The user_dump_dest init.ora parameter has been deprecated.
  9. WARNING: Please remove the user_dump_dest parameter from the init.ora file.
  10. WARNING: The diagnostic_dest init.ora parameter now determines the location of the diagnostic data
  11. WARNING: The new location for the user logs and traces is /home/oracle/diag/rdbms/test/TEST/trace

发现background_dump_dest已经不用了,引入一个新的参数DIAGNOSTIC_DEST

oracle 11g提供了两种方式来存放log, 一种是我们熟悉的txt方式,另外一种是XML方式

这些文件放于ADR(Automatic Diagnostic Repository)目录下,由DIAGNOSTIC_DEST参数指定

我们可以看一下这个目录下有哪些子目录

  1. SQL> l
  2.   1* select name,value from v$diag_info
  3. SQL> /
  4.  
  5. NAME                           VALUE
  6. ------------------------------ ----------------------------------------------
  7. Diag Enabled                   TRUE
  8. ADR Base                       /oracle/TEST/trace/bdump
  9. ADR Home                       /oracle/TEST/trace/bdump/diag/rdbms/test/TEST
  10. Diag Trace                     /oracle/TEST/trace/bdump/diag/rdbms/test/TEST/trace
  11. Diag Alert                     /oracle/TEST/trace/bdump/diag/rdbms/test/TEST/alert
  12. Diag Incident                  /oracle/TEST/trace/bdump/diag/rdbms/test/TEST/incident
  13. Diag Cdump                     /oracle/TEST/trace/cdump
  14. Health Monitor                 /oracle/TEST/trace/bdump/diag/rdbms/test/TEST/hm
  15. Default Trace File             /oracle/TEST/trace/bdump/diag/rdbms/test/TEST/trace/TEST_ora
  16.                                _10221.trc
  17.  
  18. Active Problem Count           0
  19. Active Incident Count          0
  20.  
  21. 11 rows selected.

这次在”create database”的时候,oracle 将运行的一些sql也写到了log中,如果对基表的列不清楚的可以查看相应的创建表的sql

  1. grep ^processing alert_TEST.log
  2. processing ?/rdbms/admin/dcore.bsq
  3. processing ?/rdbms/admin/dsqlddl.bsq
  4. processing ?/rdbms/admin/dmanage.bsq
  5. processing ?/rdbms/admin/dplsql.bsq
  6. processing ?/rdbms/admin/dtxnspc.bsq
  7. processing ?/rdbms/admin/dfmap.bsq
  8. processing ?/rdbms/admin/denv.bsq
  9. processing ?/rdbms/admin/drac.bsq
  10. processing ?/rdbms/admin/dsec.bsq
  11. processing ?/rdbms/admin/doptim.bsq
  12. processing ?/rdbms/admin/dobj.bsq
  13. processing ?/rdbms/admin/djava.bsq
  14. processing ?/rdbms/admin/dpart.bsq
  15. processing ?/rdbms/admin/drep.bsq
  16. processing ?/rdbms/admin/daw.bsq
  17. processing ?/rdbms/admin/dsummgt.bsq
  18. processing ?/rdbms/admin/dtools.bsq
  19. processing ?/rdbms/admin/dexttab.bsq
  20. processing ?/rdbms/admin/ddm.bsq
  21. processing ?/rdbms/admin/dlmnr.bsq

Eagle Fan oracle 11g