在Oracle过程中进行分区交换后的Dbms_Stats.Gather_Table_Stats?

时间:2014-09-30 18:45:11

标签: oracle partitioning

我有一个oracle过程,插入来自" table1 Partition(P1)"的所有行。进入table2。我更新table2中的一个字段,然后将分区交换回table1:

Alter Table table1 Exchange Partition P1 WITH TABLE table2 Including Indexes Without Validation;

这很有效。

问题:我之后需要收集表格统计数据吗?代码:

EXECUTE  Dbms_Stats.Gather_Table_Stats (Ownname => 'MySchema', Tabname => 'Table1', Partname 
=> 'P1, Granularity =>  'ALL', Degree => 32);

需要很长时间才能运行,还有其他一些问题。

非常感谢,我用谷歌搜索,无法找到明确的答案

  • 史蒂夫

Oracle Database 11g企业版11.2.0.3.0版 - 64位生产

1 个答案:

答案 0 :(得分:3)

运行exchange partition时,表的统计信息将成为分区的统计信息,分区的统计信息将成为表的统计信息,即统计信息也会被交换。

这里我有一个包含三个分区的表,最初所有的统计数据都在那里:

0:admspm@spmdtz> printStats -p location -- (*)

Table_Name|object_Type   |subobject  |last_Analyzed|num_Rows|sample_Size|
-------------------------------------------------------------------------
LOCATION  |Table         |           |06.04. 15:23 |     817|        817|
LOCATION  |TablePartition|PARTITION_1|06.04. 15:23 |     272|        272|
LOCATION  |TablePartition|PARTITION_2|06.04. 15:23 |     272|        272|
LOCATION  |TablePartition|PARTITION_3|06.04. 15:23 |     273|        273|

现在换掉一个分区并将其交换回来:

0:admspm@spmdtz> create table xxx as select * from location where par_id=3;
Table Xxx created.
0:admspm@spmdtz> alter table location exchange partition partition_3 
                 with table xxx;
Table Location altered.

并且统计数据消失了:

0:admspm@spmdtz> printStats -p location

Table_Name|object_Type   |subobject  |last_Analyzed|num_Rows|sample_Size|
-------------------------------------------------------------------------
LOCATION  |Table         |           |06.04. 15:23 |     817|        817|
LOCATION  |TablePartition|PARTITION_1|06.04. 15:23 |     272|        272|
LOCATION  |TablePartition|PARTITION_2|06.04. 15:23 |     272|        272|
LOCATION  |TablePartition|PARTITION_3|             |        |           |

然而,当我分析交换表'XXX'

0:admspm@spmdtz> stats -gT xxx -- (*)

然后换回来,我再次得到正确的统计数据

0:admspm@spmdtz> alter table location exchange partition partition_3 
                 with table xxx;
Table Location altered.
0:admspm@spmdtz> printStats -p location

Table_Name|object_Type   |subobject  |last_Analyzed|num_Rows|sample_Size|
-------------------------------------------------------------------------
LOCATION  |Table         |           |06.04. 15:23 |     817|        817|
LOCATION  |TablePartition|PARTITION_1|06.04. 15:23 |     272|        272|
LOCATION  |TablePartition|PARTITION_2|06.04. 15:23 |     272|        272|
LOCATION  |TablePartition|PARTITION_3|02.10. 18:24 |     273|        273|

(*)这些命令由senora工具提供