从.Net呼叫GATHER_TABLE_STATS

问题描述:

我有一些代码尝试为给定的Oracle模式和表收集表统计信息。该代码应该复制看起来像这样的SQL语句:从.Net呼叫GATHER_TABLE_STATS

EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'SchemaName', tabname=>'TableName', estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>'FOR ALL COLUMNS SIZE AUTO'); 

的C#代码如下所示:

using (var connection = new OracleConnection(GetConnectionString())) 
{ 
    connection.Open(); 
    using (var command = connection.CreateCommand()) 
    { 
     command.CommandText = "DBMS_STATS.GATHER_TABLE_STATS"; 
     command.CommandType = CommandType.StoredProcedure; 
     command.Parameters.Add(new OracleParameter("ownname", "SchemaName")); 
     command.Parameters.Add(new OracleParameter("tabname", "TableName")); 
     //command.Parameters.Add(new OracleParameter("estimate_percent", "DBMS_STATS.AUTO_SAMPLE_SIZE")); 
     //command.Parameters.Add(new OracleParameter("method_opt", "FOR ALL COLUMNS SIZE AUTO")); 
     command.ExecuteNonQuery(); 
    } 
    connection.Close(); 
} 

Oracle驱动程序是不满意DBMS_STATS.AUTO_SAMPLE_SIZE出于显而易见的原因,但我不知道为什么它也不允许FOR ALL COLUMNS SIZE AUTO

在从.Net调用此proc时设置参数estimate_percentmethod_opt的最佳方法的任何想法?

如果使用> 10G,则对于所有列大小自动已经是默认设置。

您应该可以完全省略参数。