没有什么特别的地方,记录一下,方便查找。
第一个用户Piner:
创建一个测试表
- SQL> create table test as select * from dba_objects;
创建一个测试索引
- SQL> create index ind_test on test(object_id);
如果是Oracle 10g以上,索引创建完成,就自带统计信息了。
创建一个表,存放export出来的统计信息
- SQL> exec dbms_stats.create_stat_table(ownname => 'Piner', stattab => 'STAT_AT', tblspace => 'SYSTEM');
刚创建完成,记录数为0
- SQL> select count(*) from STAT_AT;
- COUNT(*)
- ----------
- 0
收集表的统计信息
- SQL>exec dbms_stats.gather_table_stats(ownname=>'PINER',tabname=>'TEST',estimate_percent => 100,method_opt=> 'FOR ALL INDEXED COLUMNS');
如果是oracle 10g以下,如9i,以上的分析是没有分析到索引的,可以在上面的分析中增加cacade=>true,或者是单独分析索引。
- SQL>exec dbms_stats.gather_index_stats(ownname=>'PINER',indname=>'IND_TEST',estimate_percent=>100);
我们导出统计信息
- SQL>exec dbms_stats.export_table_stats(ownname=>'PINER', tabname=>'TEST', stattab=> 'STAT_AT');
- SQL> select count(*) from STAT_AT;
- COUNT(*)
- ----------
- 78
切换到另外一个用户test
- SQL> create table test as select * from dba_objects;
- Table created.
- SQL> create index ind_test on test(object_id);
- Index created.
- SQL> create table STAT as select * from piner.STAT_AT;
- Table created.
如果直接执行当前的用户与表名,可以执行成功,但是,没有统计数据导入,需要把原来的导出用户更新成导入用户。
- SQL>exec dbms_stats.import_table_stats(ownname=>'TEST', tabname=>'TEST', stattab => 'STAT');
- SQL>update stat set c5='TEST' where c5='PINER'
- SQL>commit;
- SQL>exec dbms_stats.import_table_stats(ownname=>'TEST', tabname=>'TEST', stattab => 'STAT');
然后再导入成功,导入信息包括表统计,索引统计信息,列的分析信息
上一篇: « 也说一下Oracle CPU Time
下一篇: 这世界,疯了 »
- 发表评论


