I have some code that attempts to gather table statistics for a given Oracle schema and table. The code should replicate the SQL statement that looks like this:
EXEC DBMS_STATS.GATHER_TABLE_STATS(ownname=>'SchemaName', tabname=>'TableName', estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE, method_opt=>'FOR ALL COLUMNS SIZE AUTO');
The C# code looks like this:
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();
}
The Oracle driver is not happy with DBMS_STATS.AUTO_SAMPLE_SIZE for obvious reasons, but I don’t know why it also disallows FOR ALL COLUMNS SIZE AUTO.
Any ideas on the best way to set the estimate_percent and method_opt parameters when calling this proc from .Net?
If you are using >10G, FOR ALL COLUMNS SIZE AUTO is already the default setting.
You should be able to omit the parameter completely.