159 DBMS_STATS
With the DBMS_STATS
package you can view and modify optimizer statistics gathered for database objects.
Users can also collect statistics on Global Temporary Tables (GTTs) using the DBMS_STATS package. However, DBMS_STATS
cannot collect statistics on Private Temporary Tables (PTTs).
This chapter contains the following topics:
159.1 DBMS_STATS Overview
To improve performance, the database enables you to collect statistics of many different types. This package is concerned with optimizer statistics only. By default, the database collects statistics automatically, so this package is intended only for specialized cases.
Optimizer statistics can reside in the data dictionary or in a table created in the user's schema. You can also collect and manage user-defined statistics for tables and domain indexes using this package. For example, if you invoke the DELETE_COLUMN_STATS
procedure on a column for which an association is defined, the database deletes both user-defined and standard statistics for this column.
Only statistics stored in the dictionary have an effect on the cost-based optimizer. You can also use DBMS_STATS
to gather statistics in parallel.
Starting in Oracle Database 12c Release 2 (12.2), Optimizer Statistics Advisor inspects the statistics gathering process, automatically diagnoses problems in the existing practices for gathering statistics, and then generates a report of findings and recommendations. The advisor task runs automatically in the maintenance window, but you can also run it on demand.
See Also:
Oracle Database SQL Tuning Guide to learn how to manage optimizer statistics
159.2 DBMS_STATS Deprecated Subprograms
Oracle recommends that you do not use deprecated subprograms. Support for deprecated features is for backward compatibility only.
Starting with Oracle Database 11g Release 2 (11.2), the following subprograms are obsolete:
-
Instead, use GET_PREFS Function
-
Instead, use SET_GLOBAL_PREFS Procedure
-
RESET_PARAM_DEFAULTS Procedure
Instead use RESET_GLOBAL_PREF_DEFAULTS Procedure
The following subprogram is deprecated with Oracle Database 12c and later:
-
GENERATE_STATS
This procedure is replaced by the
GATHER_INDEX_STAT
procedure.See Also:
159.3 DBMS_STATS Types
The following are DBMS_STATS types for histograms, stale tables, statistics difference reports, and optimizer statistics advisor.
Histograms
Types for the minimum and maximum values and histogram endpoints include the following:
TYPE numarray IS VARRAY(2050) OF NUMBER; TYPE datearray IS VARRAY(2050) OF DATE; TYPE chararray IS VARRAY(2050) OF VARCHAR2(4000); TYPE rawarray IS VARRAY(2050) OF RAW(2000); TYPE fltarray IS VARRAY(2050) OF BINARY_FLOAT; TYPE dblarray IS VARRAY(2050) OF BINARY_DOUBLE;
Stale Tables
Types for listing stale tables include the following:
TYPE ObjectElem IS RECORD ( ownname VARCHAR2(30), -- owner objtype VARCHAR2(6), -- 'TABLE' or 'INDEX' objname VARCHAR2(30), -- table/index partname VARCHAR2(30), -- partition subpartname VARCHAR2(30)); -- subpartition TYPE ObjectTab IS TABLE OF ObjectElem;
Statistics Difference Reports
Use the following type to displays a statistics difference report:
TYPE DiffRepElem IS RECORD ( report CLOB, -- stats difference report maxdiffpct NUMBER); -- max stats difference (percentage) TYPE DiffRepTab IS TABLE OF DiffRepElem;
Optimizer Statistics Advisor
The following type represents database objects for which you can gather statistics:
TYPE ObjectElem IS RECORD (
ownname dbms_quoted_id, -- owner
objtype VARCHAR2(6), -- 'TABLE' or 'INDEX'
objname dbms_quoted_id, -- table/index
partname dbms_quoted_id, -- partition
subpartname dbms_quoted_id -- subpartition
);
TYPE ObjectTab IS TABLE OF ObjectElem;
Note:
Make sure to maintain satisfy_obj_filter
when the ObjectElem
type is changed
The following type represents an operation:
TYPE StatsAdvOpr IS RECORD (
name VARCHAR2(64), -- name of the operation
param VARCHAR2(4000)
); -- XML containing parameters and their values
TYPE StatsAdvOprTab IS TABLE OF StatsAdvOpr;
The following type represents a filter list:
TYPE StatsAdvFilter IS RECORD (
rulename VARCHAR2(64), -- rule name
objlist ObjectTab, -- object filter list
oprlist StatsAdvOprTab, -- operation filter list
include BOOLEAN); -- include/exclude elements in the list
TYPE StatsAdvFilterTab IS TABLE OF StatsAdvFilter;
159.4 DBMS_STATS Constants
The DBMS_STATS
package defines several constants to use specifying parameter values.
Table 159-1 DBMS_STATS Constants
Name | Type | Description |
---|---|---|
|
|
Copies global preferences |
|
|
Lets Oracle decide whether to collect statistics for indexes or not |
|
|
Lets Oracle select the degree of parallelism based on size of the object, number of CPUs and initialization parameters |
|
|
Lets Oracle decide when to invalidate dependent cursors |
|
|
Indicates that auto-sample size algorithms should be used |
|
|
A flag that can be passed to the PURGE_STATS Procedure and unconditionally deletes all the history statistics. The deletion uses |
|
|
A constant used for reclaiming synopsis table space. |
159.5 DBMS_STATS Operational Notes
Observe these operational notes when using the DBMS_STATS
package.
The DBMS_STATS
subprograms perform the following general operations:
Most of the DBMS_STATS
procedures include the three parameters statown
, stattab
, and statid
. These parameters enable you to store statistics in your own tables (outside of the dictionary), which does not affect the optimizer. Therefore, you can maintain and experiment with sets of statistics.
The stattab
parameter specifies the name of a table in which to hold statistics, and it is assumed that it resides in the same schema as the object for which statistics are collected (unless the statown
parameter is specified). You can create multiple tables with different stattab
identifiers to hold separate sets of statistics.
Additionally, you can maintain different sets of statistics within a single stattab
by using the statid
parameter, which avoids cluttering the user's schema.
For the SET
and GET
procedures, if stattab
is not provided (that is, NULL
), then the operation works directly on the dictionary statistics; therefore, you do not need to create these statistics tables if they only plan to modify the dictionary directly. However, if stattab
is not NULL
, then the SET
or GET
operation works on the specified user statistics table, and not the dictionary.
You can change the default values of some of the parameters of DBMS_STATS
procedures using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure.
Most procedures in this package commit the current transaction, perform the operation, and then commit again.
Most of the procedures have a force
parameter that enables you to override a lock on statistics. Whenever statistics in dictionary are modified, old versions of statistics are saved automatically for future restoring.
Gathering Optimizer Statistics
Use the following subprograms to gather certain classes of optimizer statistics, with possible performance improvements over the ANALYZE
command:
- GATHER_DATABASE_STATS Procedures
- GATHER_DICTIONARY_STATS Procedure
- GATHER_FIXED_OBJECTS_STATS Procedure
- GATHER_INDEX_STATS Procedure
- GATHER_SCHEMA_STATS Procedures
- GATHER_SYSTEM_STATS Procedure
- GATHER_TABLE_STATS Procedure
The GATHER_*
procedures also collect user-defined statistics for columns and domain indexes.
The statown
, stattab
, and statid
parameters instruct the package to back up current statistics in the specified table before gathering new statistics.
Oracle also provides the following procedure for generating statistics for derived objects when you have sufficient statistics on related objects:
Setting or Getting Statistics
Use the following subprograms to store and retrieve individual column-related, index-related, and table-related statistics:
- PREPARE_COLUMN_VALUES Procedures
- PREPARE_COLUMN_VALUES_NVARCHAR Procedure
- PREPARE_COLUMN_VALUES_ROWID Procedure
- SEED_COL_USAGE Procedure
- SET_INDEX_STATS Procedures
- SET_SYSTEM_STATS Procedure
- SET_TABLE_STATS Procedure
- GET_COLUMN_STATS Procedures
- GET_INDEX_STATS Procedures
- GET_SYSTEM_STATS Procedure
- GET_TABLE_STATS Procedure
In the special versions of the SET_*_STATS
procedures for setting user-defined statistics, the following, if provided, are stored in the dictionary or user statistics table:
-
User-defined statistics
-
Owner of statistics type
-
Name of statistics type
The user-defined statistics and the corresponding statistics type are inserted into the USTATS$
dictionary table. You can specify user-defined statistics without specifying the statistics type name.
The special versions of the GET_*_STATS
procedures return user-defined statistics and the statistics type owner and name as OUT
arguments corresponding to the schema object specified. If user-defined statistics are not collected, NULL
values are returned.
Deleting Statistics
The DELETE_*
procedures delete both user-defined statistics and the standard statistics for the given schema object.
- DELETE_COLUMN_STATS Procedure
- DELETE_DATABASE_STATS Procedure
- DELETE_DICTIONARY_STATS Procedure
- DELETE_FIXED_OBJECTS_STATS Procedure
- DELETE_INDEX_STATS Procedure
- DELETE_SCHEMA_STATS Procedure
- DELETE_SYSTEM_STATS Procedure
- DELETE_TABLE_STATS Procedure
- Note that
DELETE_TABLE_STATS
,DELETE_DICTIONARY_STATS
,DELETE_DATABASE_STATS
andDELETE_SCHEMA_STATS
have a parameterstat_category
which specifies which statistics to delete. The parameter accepts multiple values separated by comma. The supported values are'OBJECT_STATS'
(table statistics, column statistics and index statistics) and'SYNOPSES'
(auxiliary statistics created when statistics are incrementally maintained). The default is'OBJECT_STATS, SYNOPSES'
.
Transferring Statistics
Use the following procedures for creating and dropping the user statistics table.
Use the following procedures to transfer statistics
-
from the dictionary to a user statistics table (
EXPORT_
*) -
from a user statistics table to the dictionary (
IMPORT_
*)
Note:
Oracle does not support export or import of statistics across databases of different character sets.
Locking or Unlocking Statistics
Use the following procedures to lock and unlock statistics on objects.
The LOCK_*
procedures either freeze the current set of the statistics or to keep the statistics untouched.When statistics on a table are locked, all the statistics depending on the table, including table statistics, column statistics, histograms and statistics on all dependent indexes, are considered to be locked.
Restoring and Purging Statistics History
Use the following procedures to restore statistics as of a specified timestamp. This is useful in case newly collected statistics leads to some sub-optimal execution plans and the administrator wants to revert to the previous set of statistics.
- RESET_GLOBAL_PREF_DEFAULTS Procedure
- RESTORE_DATABASE_STATS Procedure
- RESTORE_DICTIONARY_STATS Procedure
- RESTORE_FIXED_OBJECTS_STATS Procedure
- RESTORE_SCHEMA_STATS Procedure
- RESTORE_SYSTEM_STATS Procedure
- RESTORE_TABLE_STATS Procedure
Whenever statistics in dictionary are modified, old versions of statistics are saved automatically for future restoring. The old statistics are purged automatically at regular intervals based on the statistics history retention setting and the time of recent statistics gathering performed in the system. Retention is configurable using the ALTER_STATS_HISTORY_RETENTION Procedure.
The other DBMS_STATS
procedures related to restoring statistics are:
-
PURGE_STATS Procedure: This procedure lets you manually purge old versions beyond a time stamp.
-
GET_STATS_HISTORY_RETENTION Function: This function gets the current statistics history retention value.
-
GET_STATS_HISTORY_AVAILABILITY Function: This function gets the oldest time stamp where statistics history is available. Users cannot restore statistics to a time stamp older than the oldest time stamp.
RESTORE_*
operations are not supported for user defined statistics.
User-Defined Statistics
The DBMS_STATS
package supports operations on user-defined statistics. When a domain index or column is associated with a statistics type (using the associate
statement), operations on the index or column manipulate user-defined statistics. For example, gathering statistics for a domain index (for which an association with a statistics type exists) using the GET_INDEX_STATS Procedures invokes the user-defined statistics collection method of the associated statistics type. Similarly, delete, transfer, import, and export operations manipulate user-defined statistics.
SET_*
and GET_*
operations for user-defined statistics are also supported using a special version of the SET
and GET
interfaces for columns and indexes.
EXPORT_*
, IMPORT_*
and RESTORE_*
operations are not supported for user defined statistics.
Pending Statistics
The package gathers statistics and stores it in the dictionary by default. User's can store these statistics in the system's private area instead of the dictionary by turning the PUBLISH
option to FALSE
using the SET*PREFS
procedures. The default value for PUBLISH
is TRUE
.The statistics stored in private area are not used by Cost Based Optimizer unless parameter optimizer_use_pending_statistics
is set to TRUE
. The default value of this parameter is FALSE
and this boolean parameter can be set at the session/system level. Users can verify the impact of the new statistics on query plans by using the pending statistics on a session.
Pending statistics provide a mechanism to verify the impact of the new statistics on query plans before making them available for general use. There are two scenarios to verify the query plans:
-
Export the pending statistics (use the EXPORT_PENDING_STATS Procedure) to a test system, then run the query workload and check the performance or plans.
-
Set
optimizer_use_pending_statistics
toTRUE
in a session on the system where pending statistics have been gathered, run the workload, and check the performance or plans.
After the performance or query plans have been verified, you can publish the pending statistics using the PUBLISH_PENDING_STATS Procedure if the performance is acceptable, or delete the pending statistics using DELETE_PENDING_STATS Procedure if it is not.
Pending statistics can be published, exported, or deleted. The following procedures are provided to manage pending statistics:
Comparing Statistics
You can use the DIFF_TABLE_STATS_
* statistics to compare statistics for a table from two different sources. The statistics can be from:
-
Two different user statistics tables
-
A single user statistics table containing two sets of statistics that can be identified using
statids
-
A user statistics table and dictionary history
-
Pending statistics
The functions also compare the statistics of the dependent objects (indexes, columns, partitions). They display statistics of the objects from both sources if the difference between those statistics exceeds a certain threshold. The threshold can be specified as an argument to the function, with a default of 10%. The database uses the statistics corresponding to the first source (stattab1
or time1
) as a basis for computing the differential percentage.
Extended Statistics
This package enables you to collect statistics for column groups and expressions. The statistics collected for column groups and expressions are called "extended statistics".
Statistics on column groups are used by optimizer for accounting correlation between columns. For example, if a query has predicates c1=1 and c2=1 and if there are statistics on column group (c1, c2), the optimizer uses these statistics for estimating the combined cardinality of the predicates. The optimizer uses the expression statistics to estimate cardinality of predicates on those expressions. The extended statistics are similar to column statistics. The procedures that take columns names accept extended statistics names in place of column names.
Related subprograms:
Optimizer Statistics Advisor
Optimizer Statistics Advisor is built-in diagnostic software that helps use to use best practices to manage optimizer statistics. The advisor analyzes how you are currently gathering statistics (using manual scripts, explicitly setting parameters, and so on), the effectiveness of existing statistics gathering jobs, and the quality of the gathered statistics. The advisor generates findings for any issues it finds. Based on these findings, the advisor provides recommendations, which it stores in DBA_ADVISOR_RECOMMENDATIONS
.
The advisor organizes rules into the following classes:
-
System
This class checks the preferences for statistics collection, status of the automated statistics gathering job, use of SQL plan directives, and so on. Rules in this class have the value
SYSTEM
inV$STATS_ADVISOR_RULES.RULE_TYPE
. -
Operation
This class checks whether statistics collection uses the defaults, test statistics are created using the
SET_*_STATS
procedures, and so on. Rules in this class have the valueOPERATION
inV$STATS_ADVISOR_RULES.RULE_TYPE
. -
Object
This class checks for the quality of the statistics, staleness of statistics, unnecessary collection of statistics, and so on. Rules in this class have the value
OBJECT
inV$STATS_ADVISOR_RULES.RULE_TYPE
.
All Optimizer Statistics Advisor subprograms require the ADVISOR
privilege. All procedures and functions execute using the invoker's privilege for the operation instead of the task owner's privilege. For example, if a user without the ANALYZE ANY DICTIONARY
privilege creates a task t1
, and if a DBA then executes this task, then the task execution checks for SYS
objects. Another example is a task that is executed by user1
, interrupted, and then resumed by user2
. In this case, the checks of the resumed execution are based on the privilege of user2
rather than user1
.
You can use the following subprograms to manage Optimizer Statistics Advisor:
See Also:
Oracle Database SQL Tuning Guideto learn how to analyze statistics using Optimizer Statistics Advisor
159.6 DBMS_STATS Data Structures
The DBMS_STATS
package defines a RECORD
type.
RECORD Types
159.6.1 DBMS_STATS STAT_REC Record Type
This record type is provided for users in case they want to set column statistics manually. Its fields allow specifying column min/max values, as well as a histogram for a column.
Syntax
TYPE STATREC IS RECORD ( epc NUMBER, minval RAW(2000), maxval RAW(2000), bkvals NUMARRAY, novals NUMARRAY, chvals CHARARRAY, eavals RAWARRAY, rpcnts NUMARRAY, eavs NUMBER);
Fields of the Record type COMPARISON_TYPE (STAT_REC Attributes)
Table 159-2 STAT_REC Attributes
Field | Description |
---|---|
|
Number of buckets in histogram |
|
Minimum value |
|
Maximum value |
|
Array of bucket numbers |
|
Array of normalized end point values |
|
Array of dumped end point values |
|
Array of end point actual values |
|
Array of end point value frequencies |
|
A number indicating whether actual end point values are needed in the histogram. If using the PREPARE_COLUMN_VALUES Procedures, this field will be automatically filled. |
159.7 Summary of DBMS_STATS Subprograms
This table lists the DBMS_STATS
subprograms and briefly describes them.
Table 159-3 DBMS_STATS Package Subprograms
Subprogram | Description |
---|---|
Changes the statistics history retention value |
|
Cancels an Optimizer Statistics Advisor execution |
|
Configures the filter list for an Optimizer Statistics Advisor task |
|
Configures an object filter for an Optimizer Statistics Advisor task |
|
Configures an operation filter for an Optimizer Statistics Advisor task |
|
Configures a rule filter for an Optimizer Statistics Advisor task |
|
Creates an advisor task for the Optimizer Statistics Advisor |
|
Converts the internal representation of a minimum value, maximum value, or histogram endpoint actual value into a datatype-specific value |
|
Converts the internal representation of a minimum value, maximum value, or histogram endpoint actual value into a datatype-specific value |
|
Converts the internal representation of a minimum value, maximum value, or histogram endpoint actual value into a datatype-specific value |
|
Copies the statistics of the source [sub] partition to the destination [sub] partition after scaling |
|
Creates a virtual column for a user specified column group or an expression in a table |
|
Creates a table with name |
|
Deletes column-related statistics |
|
Deletes the statistics preferences of all the tables |
|
Deletes statistics for the entire database |
|
Deletes statistics for all dictionary schemas (' |
|
Deletes statistics of all fixed tables |
|
Deletes index-related statistics |
|
Deletes the private statistics that have been collected but have not been published |
|
Deletes the processing rate of a given statistics source. If the source is not specified, it deletes the statistics of all the sources |
|
Deletes the statistics preferences of all the tables owned by the specified owner name |
|
Deletes schema-related statistics |
|
Deletes system statistics |
|
Deletes statistics preferences of the specified table in the specified schema |
|
Deletes table-related statistics |
|
Compares statistics for a table from two timestamps in past and compare the statistics as of that timestamps |
|
Compares pending statistics and statistics as of a timestamp or statistics from dictionary |
|
Compares statistics for a table from two different sources |
|
Drops the specified Optimizer Statistics Advisor task |
|
Drops the statistics entry that is created for the user specified extension |
|
Drops a user statistics table created by |
|
Executes a previously created Optimizer Statistics Advisor task |
|
Retrieves statistics for a particular column and stores them in the user statistics table identified by |
|
Exports the statistics preferences of all the tables |
|
Retrieves statistics for all objects in the database and stores them in the user statistics table identified by |
|
Retrieves statistics for all dictionary schemas (' |
|
Retrieves statistics for fixed tables and stores them in the user statistics table identified by |
|
Retrieves statistics for a particular index and stores them in the user statistics table identified by |
|
Exports the statistics gathered and stored as pending |
|
Exports the statistics preferences of all the tables owned by the specified owner name |
|
Retrieves statistics for all objects in the schema identified by |
|
Retrieves system statistics and stores them in the user statistics table |
|
Exports statistics preferences of the specified table in the specified schema into the specified statistics table |
|
Retrieves statistics for a particular table and stores them in the user statistics table |
|
Flushes in-memory monitoring information for all the tables to the dictionary |
|
Gathers statistics for all objects in the database |
|
Gathers statistics for dictionary schemas ' |
|
Gathers statistics of fixed objects |
|
Gathers index statistics |
|
Starts the job of gathering the processing rates which end after |
|
Gathers statistics for all objects in a schema |
|
Gathers system statistics |
|
Gathers table and column (and index) statistics |
|
Generates object statistics from previously collected statistics of related objects |
|
Creates an operation filter for an Optimizer Statistics Advisor operation |
|
Generates a recommendation report for the specified item |
|
Gets all column-related information |
|
Gets all index-related information |
|
Gets the default value of parameters of |
|
Gets the default value of the specified preference |
|
Gets the oldest timestamp where statistics history is available |
|
Returns the current statistics history retention value |
|
Gets system statistics from |
|
Gets all table-related information |
|
Implements the recommendations made by Optimizer Statistics Advisor |
|
Retrieves statistics for a particular column from the user statistics table identified by |
|
Imports the statistics preferences of all the tables |
|
Retrieves statistics for all objects in the database from the user statistics table and stores them in the dictionary |
|
Retrieves statistics for all dictionary schemas (' |
|
Retrieves statistics for fixed tables from the user statistics table identified by |
|
Retrieves statistics for a particular index from the user statistics table identified by |
|
Imports the statistics preferences of all the tables owned by the specified owner name |
|
Retrieves statistics for all objects in the schema identified by |
|
Retrieves system statistics from the user statistics table and stores them in the dictionary |
|
Sets the statistics preferences of the specified table in the specified schema |
|
Retrieves statistics for a particular table from the user statistics table identified by |
|
Interrupts a currently executing Optimizer Statistics Advisor task. |
|
Locks statistics for a partition |
|
Locks the statistics of all tables of a schema |
|
Locks the statistics on the table |
|
Merges column usage information from a source database, by means of a |
|
Converts user-specified minimum, maximum, and histogram endpoint datatype-specific values into Oracle's internal representation for future storage using the SEED_COL_USAGE Procedure |
|
Converts user-specified minimum, maximum, and histogram endpoint datatype-specific values into Oracle's internal representation for future storage using the SEED_COL_USAGE Procedure |
|
Converts user-specified minimum, maximum, and histogram endpoint datatype-specific values into Oracle's internal representation for future storage using the SEED_COL_USAGE Procedure |
|
Publishes the statistics gathered and stored as pending |
|
Purges old versions of statistics saved in the dictionary |
|
Remaps the names of objects in the user statistics table |
|
Reports the results of an Optimizer Advisor Task. |
|
Reports the recorded column (group) usage information |
|
Runs the auto statistics gathering job in reporting mode |
|
Runs the GATHER_DATABASE_STATS Procedures in reporting mode. |
|
Runs the GATHER_DICTIONARY_STATS Procedure in reporting mode |
|
Runs the GATHER_FIXED_OBJECTS_STATS Procedure in reporting mode |
|
Runs the GATHER_SCHEMA_STATS Procedures in reporting mode |
|
Runs the GATHER_TABLE_STATS Procedure in reporting mode |
|
Generates a report of all statistics operations that take place between two timestamps which may or may not have been provided |
|
Resets an Optimizer Statistics Advisor task execution to its initial state. Only reset a task that is not currently executing |
|
Resets the recorded column (group) usage information |
|
Resets the default values of all parameters to Oracle recommended values |
|
Resets global preferences to default values (see DBMS_STATS Deprecated Subprograms) |
|
Restores statistics of all dictionary tables (tables of ' |
|
Restores statistics of all fixed tables as of a specified timestamp |
|
Restores statistics of all tables of a schema as of a specified timestamp |
|
Restores statistics of all tables of a schema as of a specified timestamp |
|
Restores statistics of a table as of a specified timestamp ( |
|
Resumes an interrupted task. It only resumes the execution that was most recently interrupted |
|
Retrieves the script that implements the recommended actions for the problems found by Optimizer Statistics Advisor |
|
Iterates over the SQL statements in the specified SQL tuning set, compiles them and seeds column usage information for the columns that appear in these statements |
|
Updates the value of an Optimizer Statistics Advisor task parameter |
|
Sets column-related information |
|
Sets the statistics preferences of all the tables |
|
Sets the global statistics preferences |
|
Sets index-related information |
|
Sets default values for parameters of |
|
Sets the value of rate of processing for a given operation |
|
Sets the statistics preferences of all the tables owned by the specified owner name |
|
Sets system statistics |
|
Sets the statistics preferences of the specified table in the specified schema |
|
Sets table-related information |
|
Returns the name of the virtual column that is created for the user-specified extension |
|
Transfers statistics for specified table(s) from a remote database specified by |
|
Unlocks the statistics for a partition |
|
Unlocks the statistics on all the tables in schema |
|
Unlocks the statistics on the table |
|
Upgrades user statistics on an older table |
159.7.1 ALTER_STATS_HISTORY_RETENTION Procedure
This procedure changes the statistics history retention value.
Statistics history retention is used by both the automatic purge and PURGE_STATS Procedure.
Syntax
DBMS_STATS.ALTER_STATS_HISTORY_RETENTION ( retention IN NUMBER);
Parameters
Table 159-4 ALTER_STATS_HISTORY_RETENTION Procedure Parameters
Parameter | Description |
---|---|
|
The retention time in days. The statistics history will be retained for at least these many number of days.The valid range is [1,365000]. Also you can use the following values for special purposes:
|
Usage Notes
To run this procedure, you must have the SYSDBA
or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privilege.
Exceptions
ORA-20000
: Insufficient privileges
159.7.2 CANCEL_ADVISOR_TASK Procedure
This procedure cancels an Optimizer Statistics Advisor execution. The advisor removes all intermediate results of the current execution from the task.
Syntax
DBMS_STATS.CANCEL_ADVISOR_TASK (
task_name IN VARCHAR2);
Parameters
Table 159-5 CANCEL_ADVISOR_TASK Procedure Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Consider a case in which a task is executed by one user, interrupted, and then resumed by a different user. In this case, Optimizer Statistics Advisor bases its checks of the resumed execution on the privilege of the user who resumed the task.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Usage Notes
To be canceled or interrupted, the specified task must be currently executing.
Example 159-1 Canceling an Optimizer Statistics Advisor
In this example, you start a SQL*Plus session, and then create and execute an advisor task named my_task
:
DECLARE
v_tname VARCHAR2(128) := 'my_task';
v_ename VARCHAR2(128) := NULL;
BEGIN
-- create a task
v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
-- execute the task
v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
/
In a separate terminal, you start a second SQL*Plus session, and then execute the following program:
EXEC DBMS_STATS.CANCEL_ADVISOR_TASK('my_task');
The first session returns an ORA-13632
to indicate the cancelation of the task:
ORA-13632: The user cancelled the current operation.
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.3 CONFIGURE_ADVISOR_FILTER Function
This function configures the filter list for an Optimizer Statistics Advisor task. Filters are useful for excluding irrelevant findings from a report.
Syntax
DBMS_STATS.CONFIGURE_ADVISOR_FILTER ( task_name IN VARCHAR2, stats_adv_opr_type IN VARCHAR2, configuration_type IN VARCHAR2, filter IN StatsAdvFilterTab := NULL) RETURN CLOB;
Parameters
Table 159-6 CONFIGURE_ADVISOR_FILTER Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
The type of operation to configure. Possible values are |
|
The type of configuration. Possible values are as follows:
|
|
The list of filter items for the script. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Return Values
This function returns a CLOB that contains the configuration of the provided filter in XML format.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Usage Notes
To provide fine-grained control and a unified interface across all procedures, DBMS_STATS
provides the StatsAdvFilter
type. You can use this data type to instantiate and construct a table of filters. You can then pass a parameter of type StatsAdvFilter
to CONFIGURE_ADVISOR_FILTER
along with a Boolean variable that specifies either of the following:
-
Inclusion list
Only include these objects in the check.
-
Exclusion list
Do not include these objects in the check.
You can also pass in a parameter specifying whether to replace the existing list. This list only filters object-level and operation-level items. The advisor always checks system-level rules.
You can create the following types of filters:
-
Rule filter
This filter takes a rule name as input. Obtain rule names from the
V$STATS_ADVISOR_RULES
view. -
Operation filter
This filter is an exact match filter that takes in the name of the operation and an XML string representation of all the parameter values in the call. To obtain the XML, see the notes section of the
DBA_OPTSTAT_OPERATIONS
view. To obtain the filter for an operation, useDBMS_STATS.GET_ADVISOR_OPR_FILTER
. -
Object filter
This filter accept an owner name and an object name. Wildcards (
%
) are supported in the owner name and object name. When an object name is null or%
, it means a filter for all the objects in the specified schema. If the owner name is also null or%
, it means a default filter for all objects in the system.
If none of the filters is specified, then the function recognizes the filter as setting the global default value of filtering (include or exclude). During the check, if no filter has been specified for a rule, operation, or object, then the function uses the default value to determine whether to include or exclude it.
Example 159-2 Enabling and Disabling Rules
You may want to turn off checks for all rules except for a specific rule. In this example, you want to check whether SQL plan directives have been disabled.
DECLARE
v_task_name VARCHAR2(128) := 'my_task';
v_ret VARCHAR2(128);
filter DBMS_STATS.StatsAdvFilter := null;
filterTab DBMS_STATS.StatsAdvFilterTab := null;
v_counter NUMBER := 0;
v_filterReport CLOB;
BEGIN
-- Create the advisor task
v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_task_name);
-- Initialize the filter table
filterTab := DBMS_STATS.StatsAdvFilterTab();
-- First filter: set filters to be FALSE by default
filter.include := FALSE;
-- Add this filter to the filter table
v_counter := v_counter + 1;
filterTab.extend;
filterTab(v_counter) := filter;
-- Second filter: turn on filter for one rule
filter.include := TRUE;
filter.rulename := 'TurnOnSQLPlanDirective';
-- Add the SQL plan directive filter to the filter table
v_counter := v_counter + 1;
filterTab.extend;
filterTab(v_counter) := filter;
v_filterReport := DBMS_STATS.CONFIGURE_ADVISOR_FILTER(
task_name => v_task_name,
stats_adv_opr_type => NULL,
configuration_type => 'SET',
filter => filterTab);
-- Drop the task
DBMS_STATS.DROP_ADVISOR_TASK(v_task_name);
END;
Example 159-3 Configuring an Operations Filter
In this example, your shop uses customized scripts to gather statistics for a table. If you do not want to see a specific statistics operation in the report, then you can specify an operations filter.
DECLARE
v_task_name VARCHAR2(128) := 'my_task';
v_ret VARCHAR2(128);
filter DBMS_STATS.StatsAdvFilter := null;
filterTab DBMS_STATS.StatsAdvFilterTab := null;
opr DBMS_STATS.StatsAdvOpr;
oprTab DBMS_STATS.StatsAdvOprTab;
v_oprCnt NUMBER := 0;
TYPE numTab IS TABLE OF NUMBER;
opr_tab numTab;
v_filterReport CLOB;
BEGIN
-- Create the advisor task
v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_task_name);
-- Initialize filter table
filterTab := DBMS_STATS.StatsAdvFilterTab();
-- Initialize operations filter
oprTab := DBMS_STATS.StatsAdvOprTab();
SELECT ID
BULK COLLECT INTO opr_tab
FROM WRI$_OPTSTAT_OPR
WHERE OPERATION = 'set_table_stats'
AND TARGET = 'HR.EMPLOYEES';
-- Populate the operations table
FOR i IN 1..opr_tab.count LOOP
-- Use the procedure GET_ADVISOR_OPR_FILTER to construct
-- an operation filter
DBMS_STATS.GET_ADVISOR_OPR_FILTER(opr_tab(i), opr);
v_oprCnt := v_oprCnt + 1;
oprTab.extend;
oprTab(v_oprCnt) := opr;
END LOOP;
filter.include := FALSE;
filter.oprlist := oprTab;
-- Add to filter table
filterTab.extend;
filterTab(1) := filter;
v_filterReport := DBMS_STATS.CONFIGURE_ADVISOR_FILTER(
task_name => v_task_name,
stats_adv_opr_type => NULL,
configuration_type => 'SET',
filter => filterTab);
-- Drop the task
DBMS_STATS.DROP_ADVISOR_TASK(v_task_name);
END;
Example 159-4 Reporting on a Specific Schema
In this example, you want to generate a report only for the sh
schema. Also, you want to skip the sh.products
table. You create an object filter as follows:
DECLARE
v_task_name VARCHAR2(128) := 'my_task';
v_ret VARCHAR2(128);
filter DBMS_STATS.StatsAdvFilter := null;
filterTab DBMS_STATS.StatsAdvFilterTab := null;
v_filterReport CLOB;
v_counter NUMBER := 0;
obj DBMS_STATS.ObjectElem;
objTab DBMS_STATS.ObjectTab;
v_objCnt NUMBER := 0;
BEGIN
-- Create the advisor task
v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_task_name);
-- Initialize filter table
filterTab := DBMS_STATS.StatsAdvFilterTab();
-- Set object filter to be off by default
filter.include := FALSE;
objTab := DBMS_STATS.ObjectTab();
obj.ownname := NULL;
obj.objname := NULL;
-- Add to the object table
v_objCnt := v_objCnt + 1;
objTab.extend;
objTab(v_objCnt) := obj;
filter.objlist := objTab;
-- Add the object filter to the filter table
v_counter := v_counter + 1;
filterTab.extend;
filterTab(v_counter) := filter;
-- In filter 1, turn on the check only for schema SH
filter.include := TRUE;
objTab := DBMS_STATS.ObjectTab();
v_objCnt := 0;
obj.ownname := 'SH';
obj.objname := NULL;
-- add to the object table
v_objCnt := v_objCnt + 1;
objTab.extend;
objTab(v_objCnt) := obj;
filter.objlist := objTab;
-- Add the object filter to the filter table
v_counter := v_counter + 1;
filterTab.extend;
filterTab(v_counter) := filter;
-- In filter 2, exclude the check for object sh.products
filter.include := FALSE;
objTab := dbms_stats.ObjectTab();
v_objCnt := 0;
-- Specify another object filter for sh.products
obj.ownname := 'SH';
obj.objname := 'PRODUCTS';
-- Add to the object table
v_objCnt := v_objCnt + 1;
objTab.extend;
objTab(v_objCnt) := obj;
filter.objlist := objTab;
-- Add the object filter to the filter table
v_counter := v_counter + 1;
filterTab.extend;
filterTab(v_counter) := filter;
v_filterReport :=
DBMS_STATS.CONFIGURE_ADVISOR_FILTER(
task_name => v_task_name,
stats_adv_opr_type => NULL,
configuration_type => 'SET',
filter => filterTab);
-- Drop the task
DBMS_STATS.DROP_ADVISOR_TASK(v_task_name);
END;
Note:
Oracle Database SQL Tuning Guide to learn how to configure Optimizer Statistics Advisor
159.7.4 CONFIGURE_ADVISOR_OBJ_FILTER Function
This function configures an object filter for an Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.CONFIGURE_ADVISOR_OBJ_FILTER (
task_name IN VARCHAR2,
stats_adv_opr_type IN VARCHAR2,
rule_name IN VARCHAR2,
ownname IN VARCHAR2,
tabname IN VARCHAR2,
action IN VARCHAR2)
RETURN CLOB;
Parameters
Table 159-7 CONFIGURE_ADVISOR_OBJ_FILTER Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
The type of operation to configure. Possible values are |
|
The name of the rule to configure. If null, the function applies the filter to all operation-level rules. |
|
The owner name of the operation target. If null, the function applies the filter to all owner names. |
|
The table name of the operation target. |
|
The configuration action to take for the specified rule. See"CONFIGURE_ADVISOR_RULE_FILTER Function". |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Return Values
This function returns an XML CLOB that contains the updated values of the filter.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.5 CONFIGURE_ADVISOR_OPR_FILTER Functions
This overloaded function configures an operation filter for an Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER (
task_name IN VARCHAR2,
stats_adv_opr_type IN VARCHAR2,
rule_name IN VARCHAR2,
operation_name IN VARCHAR2,
action IN VARCHAR2)
RETURN CLOB;
DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER (
task_name IN VARCHAR2,
stats_adv_opr_type IN VARCHAR2,
rule_name IN VARCHAR2,
operation_name IN VARCHAR2,
ownname IN VARCHAR2,
tabname IN VARCHAR2,
action IN VARCHAR2)
RETURN CLOB;
DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER (
task_name IN VARCHAR2,
stats_adv_opr_type IN VARCHAR2,
rule_name IN VARCHAR2,
operation_id IN NUMBER,
action IN VARCHAR2)
RETURN CLOB;
Parameters
Table 159-8 CONFIGURE_ADVISOR_OPR_FILTER Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
The type of operation to configure. Possible values are |
|
The name of the rule to configure. If null, the function applies the filter to all operation-level rules. |
|
The name of the operation. For example, an operation name could be |
|
The ID of the operation to configure. The filter applies to any operation with the same signature as the specified operation ID. If two operations have the same signature, then they have the same value for every parameter. View the operation ID in |
|
The owner name of the operation target. This value cannot be null. |
|
The table name of the operation target. |
|
The configuration action to take for the specified rule. See"CONFIGURE_ADVISOR_RULE_FILTER Function". |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Return Values
This function returns an XML CLOB that contains the updated values of the filter.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-5 Excluding Operations for Gathering Table Statistics
In this example, your goal is to exclude operations that gather table statistics in the hr
schema. User account stats
has been granted the DBA
role, ADVISOR
privilege, and SELECT ON DBA_OPTSTAT_OPERATIONS
privilege. You perform the following steps:
-
Log in to the database as
stats
. -
Drop any existing task named
opt_adv_task1
.DECLARE v_tname VARCHAR2(32767); BEGIN v_tname := 'opt_adv_task1'; DBMS_STATS.DROP_ADVISOR_TASK(v_tname); END; /
-
Create a procedure named
opr_filter
that configures a task to advise on all operations except those that gather statistics for tables in thehr
schema.CREATE OR REPLACE PROCEDURE opr_filter(p_tname IN VARCHAR2) IS v_retc CLOB; BEGIN -- For all rules, prevent the advisor from operating -- on the operations selected in the following query FOR rec IN (SELECT ID FROM DBA_OPTSTAT_OPERATIONS WHERE OPERATION = 'gather_table_stats' AND TARGET LIKE 'HR.%') LOOP v_retc := DBMS_STATS.CONFIGURE_ADVISOR_OPR_FILTER( task_name => p_tname , stats_adv_opr_type => NULL , rule_name => NULL , operation_id => rec.id , action => 'DISABLE'); END LOOP; END; / SHOW ERRORS
-
Create a task named
opt_adv_task1
, and then execute theopr_filter
procedure for this task.DECLARE v_tname VARCHAR2(32767); v_ret VARCHAR2(32767); BEGIN v_tname := 'opt_adv_task1'; v_ret := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname); opr_filter(v_tname); END; /
-
Execute the task
opt_adv_task1
.DECLARE v_tname VARCHAR2(32767); v_ret VARCHAR2(32767); begin v_tname := 'opt_adv_task1'; v_ret := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname); END; /
-
Print the report.
SPOOL /tmp/rep.txt SET LONG 1000000 COLUMN report FORMAT A200 SET LINESIZE 250 SET PAGESIZE 1000 SELECT DBMS_STATS.REPORT_ADVISOR_TASK( task_name => 'opt_adv_task1' , execution_name => NULL , type => 'TEXT' , section => 'ALL' ) AS report FROM DUAL; SPOOL OFF
See Also:
-
Oracle Database Reference to learn more about
DBA_OPTSTAT_OPERATIONS
-
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.6 CONFIGURE_ADVISOR_RULE_FILTER Function
This function configures a rule filter for an Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.CONFIGURE_ADVISOR_RULE_FILTER ( task_name IN VARCHAR2, stats_adv_opr_Type IN VARCHAR2, rule_name IN VARCHAR2, action IN VARCHAR2) RETURN CLOB;
Parameters
Table 159-9 SCRIPT_ADVISOR_TASK Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
The type of operation to configure. Possible values are |
|
The name of the rule to configure. If null, the function applies the filter to all rules. |
|
The configuration action to take for the specified rule. Possible values are:
|
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Return Values
This function returns an XML CLOB that contains the updated values of the filter.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.7 CONVERT_RAW_VALUE Procedures
This procedure converts the internal representation of a minimum value, maximum value, or histogram endpoint actual value into a datatype-specific value.
The minval
, maxval
, and eavals
fields of the StatRec
structure as filled in by GET_COLUMN_STATS
or PREPARE_COLUMN_VALUES
are appropriate values for input.
Syntax
DBMS_STATS.CONVERT_RAW_VALUE ( rawval RAW, resval OUT BINARY_FLOAT); DBMS_STATS.CONVERT_RAW_VALUE ( rawval RAW, resval OUT BINARY_DOUBLE); DBMS_STATS.CONVERT_RAW_VALUE ( rawval RAW, resval OUT DATE); DBMS_STATS.CONVERT_RAW_VALUE ( rawval RAW, resval OUT NUMBER); DBMS_STATS.CONVERT_RAW_VALUE ( rawval RAW, resval OUT VARCHAR2);
Parameters
Table 159-10 CONVERT_RAW_VALUE Procedure Parameters
Parameter | Description |
---|---|
|
Raw representation of a column minimum, maximum, histogram end point actual value |
|
Converted, type-specific value |
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.8 CONVERT_RAW_VALUE_NVARCHAR Procedure
This procedure converts the internal representation of a a minimum value, maximum value, or histogram end point actual value.
The minval
, maxval
and eavals
fields of the StatRec
structure as filled in by GET_COLUMN_STATS
or PREPARE_COLUMN_VALUES
are appropriate values for input.
Syntax
DBMS_STATS.CONVERT_RAW_VALUE_NVARCHAR ( rawval RAW, resval OUT NVARCHAR2);
Parameters
Table 159-11 CONVERT_RAW_VALUE_NVARCHAR Procedure Parameters
Parameter | Description |
---|---|
|
The raw representation of a column minimum or maximum datatype-specific output parameters |
|
The converted, type-specific value |
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.9 CONVERT_RAW_VALUE_ROWID Procedure
This procedure converts the internal representation of a a minimum value, maximum value, or histogram end point actual value.
The minval
, maxval
and eavals
fields of the StatRec
structure as filled in by GET_COLUMN_STATS
or PREPARE_COLUMN_VALUES
are appropriate values for input.
Syntax
DBMS_STATS.CONVERT_RAW_VALUE_ROWID ( rawval RAW, resval OUT ROWID);
Pragmas
pragma restrict_references(convert_raw_value_rowid, WNDS, RNDS, WNPS, RNPS);
Parameters
Table 159-12 CONVERT_RAW_VALUE_ROWID Procedure Parameters
Parameter | Description |
---|---|
|
The raw representation of a column minimum or maximum datatype-specific output parameters |
|
The converted, type-specific value |
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.10 COPY_TABLE_STATS Procedure
This procedure copies statistics of all dependent object such as columns and local indexes. If the statistics for source are not available then nothing is copied. It can optionally scale the statistics (such as the number of blks
, or number of rows) based on the given scale_factor
.
Syntax
DBMS_STATS.COPY_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
srcpartname VARCHAR2,
dstpartname VARCHAR2,
scale_factor VARCHAR2 DEFAULT 1,
flags NUMBER DEFAULT NULL,
force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-13 COPY_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Schema of the table of source and destination [sub] partitions |
|
Table name of source and destination [sub] partitions |
|
Source [sub] partition |
|
Destination [sub] partition |
|
Scale factor to scale |
|
For internal Oracle use (should be left as |
|
When value of this argument is |
Security Model
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Exceptions
ORA-20000
: Invalid [sub]partition name
ORA-20001
: Bad input value
Usage Notes
This procedure updates the minimum and maximum values of destination partition for the first partitioning column as follows:
-
If the partitioning type is
HASH
, then the minimum and maximum values of the destination partition are same as that of the source partition. -
If the partitioning type is
LIST
, then the behavior depends on the setting of the destination partition:-
If the destination partition is a
NOT DEFAULT
partition, then the following statements are true:-
The minimum value of the destination partition is set to the minimum value of the value list that describes the destination partition.
-
The maximum value of the destination partition is set to the maximum value of the value list that describes the destination partition.
-
-
Alternatively, if the destination partition is a
DEFAULT
partition, then the following statements are true:-
The minimum value of the destination partition is set to the minimum value of the source partition.
-
The maximum value of the destination partition is set to the maximum value of the source partition.
-
-
-
If the partitioning type is
RANGE
, then the following statements are true:-
The minimum value of the destination partition is set to the high bound of previous partition unless the destination partition is the first partition. For the first partition, the minimum value is set to the high bound of the destination partition.
-
The maximum value of the destination partition is set to the high bound of the destination partition unless the high bound of the destination partition is
MAXVALUE
, in which case the maximum value of the destination partition is set to the high bound of the previous partition. -
If the source partition column's minimum value is equal to its maximum value, and if both are equal to the source partition's lower bound, and if it has a single distinct value, then the destination partition column's minimum and maximum values are both set to the destination partition's lower bound. This is done for all partitioning columns.
If the above condition does not apply, second and subsequent partitioning columns are updated as follows. The destination partition column's maximum value is set to the greater of the destination partition upper bound and the source partition column's maximum value, with one exception. If the destination partition is
D
and its preceding partition isD-1
and the key column to be adjusted isCn
, the maximum value forCn
is set to the upper bound ofD
(ignoring the maximum value of the source partition column) provided that the upper bounds of the previous key columnCn-1
are the same in partitionsD
andD-1
.
-
-
If the minimum and maximum values are different for a column after modifications, and if the number of distinct values is less than 1, then the number of distinct values is updated as 2.
-
If the source or destination is a partition of a composite partitioned table, then this procedure does not copy statistics of the underlying subpartitions.
159.7.11 CREATE_ADVISOR_TASK Function
This function creates an advisor task for the Optimizer Statistics Advisor.
Syntax
DBMS_STATS.CREATE_ADVISOR_TASK (
task_name IN VARCHAR2 := NULL)
RETURN VARCHAR2;
Parameters
Table 159-14 CREATE_ADVISOR_TASK Function Parameters
Parameter | Description |
---|---|
|
Name of the task. If the task name is already specified, then the function uses the specified task name. Otherwise, the function generates a new task name automatically. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
This subprogram executes using invoker's rights.
Return Values
This function returns the unique name of the Optimizer Statistics Advisor task.
Exceptions
ORA-20000
: Insufficient privileges / creating extension is not supported
ORA-20001
: Error when processing extension
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-6 Creating and Executing a Task
This example creates an Optimizer Statistics Advisor task named my_task
, and then executes it.
DECLARE
v_tname VARCHAR2(128) := 'my_task';
BEGIN
-- create a task
v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
-- execute the task
v_tname := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
Note:
Oracle Database SQL Tuning Guide to learn how manage Optimizer Statistics Advisor159.7.12 CREATE_EXTENDED_STATS Function
This function creates a column statistics entry in the system for a user-specified column group or an expression in a table.
This second form of this function creates statistics extensions based on the column group usage recorded by the SEED_COL_USAGE Procedure. This function returns a report of extensions created.
Syntax
DBMS_STATS.CREATE_EXTENDED_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
extension VARCHAR2)
RETURN VARCHAR2;
DBMS_STATS.CREATE_EXTENDED_STATS (
ownname VARCHAR2,
tabname VARCHAR2)
RETURN CLOB;
Parameters
Table 159-15 CREATE_EXTENDED_STATS Function Parameters
Parameter | Description |
---|---|
|
Owner name of a table |
|
Name of the table |
|
Can be either a column group or an expression. Suppose the specified table has columns |
Return Values
This function returns the name of this newly created entry for the extension.
Exceptions
ORA-20000
: Insufficient privileges / creating extension is not supported
ORA-20001
: Error when processing extension
ORA-20007
: Extension already exists
ORA-20008
: Reached the upper limit on number of extensions
Usage Notes
To invoke this procedure you must be owner of the table, or have the ANALYZE ANY
privilege. For objects owned by SYS
, you must be either the owner of the table, or have either the ANALYZE ANY DICTIONARY
or SYSDBA
privilege.
The extension has the following restrictions:
-
The extension cannot contain a virtual column.
-
Extensions cannot be created on tables owned by
SYS.
-
Extensions cannot be created on cluster tables, index organized tables, temporary tables, or external tables.
-
The total number of extensions in a table cannot be greater than a maximum of (20, 10% of number of non-virtual columns in the table).
-
The number of columns in a column group must be in the range [2, 32].
-
A column cannot appear more than once in a column group.
-
The extension can contain an expression only if a corresponding virtual column has been created.
-
An expression must contain at least one column.
-
An expression cannot contain a subquery.
-
The
COMPATIBLE
parameter must be 11.0.0.0.0 or greater.
159.7.13 CREATE_STAT_TABLE Procedure
This procedure creates a table with name stattab
in ownname
's schema which is capable of holding statistics. The columns and types that compose this table are not relevant as it should be accessed solely through the procedures in this package.
Syntax
DBMS_STATS.CREATE_STAT_TABLE (
ownname VARCHAR2,
stattab VARCHAR2,
tblspace VARCHAR2 DEFAULT NULL,
global_temporary BOOLEAN DEFAULT FALSE);
Parameters
Table 159-16 CREATE_STAT_TABLE Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table to create. This value should be passed as the |
|
Tablespace in which to create the statistics tables. If none is specified, then they are created in the user's default tablespace. |
|
Whether or not the table should be created as a global temporary table |
Security Model
To invoke this procedure you need whichever privileges are required for creating a table in the specified schema.
Exceptions
ORA-20000
: Table already exists or insufficient privileges
ORA-20001
: Tablespace does not exist
159.7.14 DELETE_COLUMN_STATS Procedure
This procedure deletes column-related statistics.
Syntax
DBMS_STATS.DELETE_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, cascade_parts BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, col_stat_type VARCHAR2 DEFAULT 'ALL');
Parameters
Table 159-17 DELETE_COLUMN_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table to which this column belongs |
|
Name of the column or extension |
|
Name of the table partition for which to delete the statistics. If the table is partitioned and if |
|
User statistics table identifier describing from where to delete the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
If the table is partitioned and if |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
When value of this argument is |
|
Type of column statistics to be deleted.This argument takes the following values:
|
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20005
: Object statistics are locked
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.15 DELETE_DATABASE_PREFS Procedure
This procedure deletes the statistics preferences set for all non-system tables. You can include system tables by passing TRUE
for the add_sys
parameter.
Syntax
DBMS_STATS.DELETE_DATABASE_PREFS ( pname IN VARCHAR2, add_sys IN BOOLEAN DEFAULT FALSE);
Parameters
Table 159-18 DELETE_DATABASE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Preference name. The existing value for following preferences can be deleted and default preference values will be used:
|
|
Determines whether |
Table 159-19 Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. Consider a synopsis as an internal management structure that samples distinct values. You can delete the following preferences:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Determines whether index statistics are collected as part of gathering table statistics. |
|
Determines degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to estimate. |
|
Controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. |
|
Determines the granularity of statistics to collect. This value is only relevant for partitioned tables. |
|
Determines whether the global statistics of a partitioned table will be maintained without doing a full table scan. |
|
Controls which synopses to collect when |
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
Controls column statistics collection and histogram creation. When setting preference on global, schema, database or dictionary level, only |
|
Controls the invalidation of dependent cursors of the tables for which statistics are being gathered. |
|
Determines the |
|
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether the database publishes newly gathered statistics after the gathering job completes. You can gather statistics without publishing them immediately. This technique enables you to test new statistics before publishing them. |
|
Determines the percentage of rows in a table that have to change before the statistics on that table are deemed stale and should be regathered. |
|
Specifies which statistics to import or export, accepting multiple values separated by a comma. Values supported:
The value |
|
Specifies the average number of blocks assumed to be cached in the buffer cache when calculating the index clustering factor. |
Security Model
To run this procedure, you must have the SYSDBA
role or both ANALYZE ANY DICTIONARY
and ANALYZE ANY
system privileges.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Invalid or Illegal input values
Usage Notes
All pname
arguments are of type VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Example 159-7 Examples
DBMS_STATS.DELETE_DATABASE_PREFS('CASCADE', FALSE);
DBMS_STATS.DELETE_DATABASE_PREFS('ESTIMATE_PERCENT', TRUE);
See Also:
Oracle Database SQL Tuning Guide to learn how to manage optimizer statistics preferences
159.7.16 DELETE_DATABASE_STATS Procedure
This procedure deletes statistics for all the tables in a database.
Syntax
DBMS_STATS.DELETE_DATABASE_STATS ( stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, stat_category VARCHAR2 DEFAULT DEFAULT_DEL_STAT_CATEGORY);
Parameters
Table 159-20 DELETE_DATABASE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing from where to delete the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
When the value of this argument is |
|
Statistics to delete. It accepts multiple values separated by comma:
The default is |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
To run this procedure, you need to have the SYSDBA
role or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privileges.
159.7.17 DELETE_DICTIONARY_STATS Procedure
This procedure deletes statistics for all dictionary schemas ('SYS
', 'SYSTEM
' and RDBMS component schemas).
Syntax
DBMS_STATS.DELETE_DICTIONARY_STATS ( stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), stattype VARCHAR2 DEFAULT 'ALL', force BOOLEAN DEFAULT FALSE, stat_category VARCHAR2 DEFAULT DEFAULT_DEL_STAT_CATEGORY);
Parameters
Table 159-21 DELETE_DICTIONARY_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing from where to delete the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Statistics type |
|
When the value of this argument is |
|
Statistics to delete. It accepts multiple values separated by comma:
The default is |
Usage Notes
You must have the SYSDBA
or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privilege to execute this procedure.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.18 DELETE_FIXED_OBJECTS_STATS Procedure
This procedure deletes statistics of all fixed tables.
Syntax
DBMS_STATS.DELETE_FIXED_OBJECTS_STATS ( stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-22 DELETE_FIXED_OBJECTS_STATS Procedure Parameters
Parameter | Description |
---|---|
|
The user statistics table identifier describing from where to delete the current statistics. If |
|
The (optional) identifier to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Ignores the statistics lock on objects and deletes the statistics if set to |
Usage Notes
You must have the SYSDBA
or ANALYZE
ANY
DICTIONARY
system privilege to execute this procedure.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.19 DELETE_INDEX_STATS Procedure
This procedure deletes index-related statistics.
Syntax
DBMS_STATS.DELETE_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, cascade_parts BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), stattype VARCHAR2 DEFAULT 'ALL', force BOOLEAN DEFAULT FALSE); stat_category VARCHAR2 DEFAULT DEFAULT_DEL_STAT_CATEGORY);
Parameters
Table 159-23 DELETE_INDEX_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the index |
|
Name of the index partition for which to delete the statistics. If the index is partitioned and if |
|
User statistics table identifier describing from where to delete the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
If the index is partitioned and if |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Statistics type |
|
When value of this argument is |
|
Statistics to delete. It accepts multiple values separated by comma:
The default is |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20005
: Object statistics are locked
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.20 DELETE_PENDING_STATS Procedure
This procedure is used to delete the pending statistics that have been collected but have not been published.
Syntax
DBMS_STATS.DELETE_PENDING_STATS (
ownname IN VARCHAR2 DEFAULT USER,
tabname IN VARCHAR2);
Parameters
Table 159-24 DELETE_PENDING_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
Security Model
To run this procedure, you need to have the same privilege for gathering statistics on the tables that will be affected by this procedure. The default owner is the user who runs the procedure.
Exceptions
ORA-20000
: Insufficient privileges
Usage Notes
If the parameter tabname
is NULL
delete applies to all tables of the specified schema.
Examples
DBMS_STATS.DELETE_PENDING_STATS('SH', 'SALES');
159.7.21 DELETE_PROCESSING_RATE Procedure
This procedure deletes the processing rate of a given statistics source. If the source is not specified, it deletes the statistics of all the sources.
Syntax
DBMS_STATS.DELETE_PROCESSING_RATE ( stat_source IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-25 DELETE_PROCESSING_RATE Procedure Parameters
Parameter | Description |
---|---|
|
Source of processing rates:
|
Usage Notes
You require the OPTIMIZER_PROCESSING_RATE
role to run this procedure since AUTO
DOP
uses processing rates to determine the optimal degree of parallelism for a SQL statement.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or illegal input value
159.7.22 DELETE_SCHEMA_PREFS Procedure
This procedure is used to delete the statistics preferences of all the tables owned by the specified owner name.
Syntax
DBMS_STATS.DELETE_SCHEMA_PREFS (
ownname IN VARCHAR2,
pname IN VARCHAR2);
Parameters
Table 159-26 DELETE_SCHEMA_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Preference name. The existing value for following preferences can be deleted and default preference values will be used:
|
Table 159-27 Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. You can consider a synopsis as an internal management structure that samples distinct values. You can set the following values:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Determines whether index statistics are collected as part of gathering table statistics. |
|
Determines the degree of parallelism used for gathering statistics. |
|
The value determines the percentage of rows to estimate. |
|
Controls column statistics collection and histogram creation. When setting preferences at the global, schema, database, or dictionary level, only |
|
The value controls the invalidation of dependent cursors of the tables for which statistics are being gathered. |
|
The value determines granularity of statistics to collect (only pertinent if the table is partitioned) |
|
This value determines whether or not newly gathered statistics will be published once the gather job has completed. |
|
This value determines whether or not the global statistics of a partitioned table will be maintained without doing a full table scan. |
|
This value controls what synopses to collect when |
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
This value determines the percentage of rows in a table that have to change before the statistics on that table are deemed stale and should be regathered. |
|
This controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. |
|
The average number of blocks cached in the buffer cache for any table we can assume when gathering the index clustering factor. |
|
Determines the |
Security Model
To run this procedure, you must be the object owner, or have the SYSDBA
privilege, or have the ANALYZE
ANY
system privilege.
Exceptions
ORA-20000
: Insufficient privileges / Schema "<schema>" does not exist
ORA-20001
: Invalid or Illegal input values
Usage Notes
All arguments are of type VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Examples
DBMS_STATS.DELETE_SCHEMA_PREFS('SH', 'CASCADE');
DBMS_STATS.DELETE_SCHEMA_PREFS('SH', 'ESTIMATE_PERCENT');
DBMS_STATS.DELETE_SCHEMA_PREFS('SH', 'DEGREE');
See Also:
Oracle Database SQL Tuning Guide to learn how to manage optimizer statistics preferences
159.7.23 DELETE_SCHEMA_STATS Procedure
This procedure deletes statistics for an entire schema.
Syntax
DBMS_STATS.DELETE_SCHEMA_STATS ( ownname VARCHAR2, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-28 DELETE_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
User statistics table identifier describing from where to delete the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
When value of this argument is |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.24 DELETE_SYSTEM_STATS Procedure
This procedure deletes workload statistics (collected using the 'INTERVAL
' or 'START
' and 'STOP
' options) and resets the default to noworkload
statistics (collected using 'NOWORKLOAD
' option), if stattab
is not specified. If stattab
is specified, the subprogram deletes all system statistics with the associated statid
from the stattab
.
Syntax
DBMS_STATS.DELETE_SYSTEM_STATS ( stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-29 DELETE_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Identifier of the user statistics table where the statistics will be saved |
|
Optional identifier associated with the statistics saved in the |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table; may need to be upgraded
Usage Notes
To run this procedure, you need the GATHER_SYSTEM_STATISTICS
role.
159.7.25 DELETE_TABLE_PREFS Procedure
This procedure deletes the optimizer statistics preferences of the specified table in the specified schema.
Syntax
DBMS_STATS.DELETE_TABLE_PREFS (
ownname IN VARCHAR2,
tabname IN VARCHAR2,
pname IN VARCHAR2);
Parameters
Table 159-30 DELETE_TABLE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
|
Preference name. The existing value for following preferences can be deleted and default preference values will be used:
|
Table 159-31 Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. Consider a synopsis as an internal management structure that samples distinct values. You can delete the following preferences:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Determines whether index statistics are collected as part of gathering table statistics. |
|
Determines the degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to estimate. |
|
Determines granularity of statistics to collect. This value is only relevant for partitioned tables. |
|
Controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. |
|
This value determines whether or not the global statistics of a partitioned table will be maintained without doing a full table scan. |
|
This value controls what synopses to collect when |
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
Controls column statistics collection and histogram creation. When setting preference at the global, schema, database, or dictionary level, only |
|
The value controls the invalidation of dependent cursors of the tables for which statistics are being gathered. |
|
Determines the |
PREFERENCE_OVERRIDES_PARAMETER |
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether newly gathered statistics will be published after the statistics gathering job has completed. |
|
Determines the percentage of rows in a table that have to change before the statistics on that table are deemed stale and should be regathered. |
|
Specifies which statistics to import or export, accepting multiple values separated by a comma. Values supported:
The value |
|
Specifies the average number of blocks assumed to be in the buffer cache when calculating the index clustering factor. |
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Invalid or Illegal input values
Usage Notes
-
To run this procedure, you need to connect as owner of the table, be granted
ANALYZE
privilege on the table, orANALYZE
ANY
system privilege. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Examples
DBMS_STATS.DELETE_TABLE_PREFS('SH', 'SALES', 'CASCADE'); DBMS_STATS.DELETE_TABLE_PREFS('SH', 'SALES', 'DEGREE');
See Also:
Oracle Database SQL Tuning Guide to learn how to manage optimizer statistics preferences
159.7.26 DELETE_TABLE_STATS Procedure
This procedure deletes table-related statistics.
Syntax
DBMS_STATS.DELETE_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, cascade_parts BOOLEAN DEFAULT TRUE, cascade_columns BOOLEAN DEFAULT TRUE, cascade_indexes BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-32 DELETE_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table to which this column belongs |
|
Name of the table [sub]partition from which to get the statistics. If the table is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
If the table is partitioned and if |
|
Indicates that |
|
Indicates that |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
When value of this argument is |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table, may need to upgrade it
ORA
-20005
: Object statistics are locked
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.27 DIFF_TABLE_STATS_IN_HISTORY Function
This function can be used to compare statistics for a table from two timestamps in past and compare the statistics as of that timestamps.
Syntax
DBMS_STATS.DIFF_TABLE_STATS_IN_HISTORY(
ownname IN VARCHAR2,
tabname IN VARCHAR2,
time1 IN TIMESTAMP WITH TIME ZONE,
time2 IN TIMESTAMP WITH TIME ZONE DEFAULT NULL,
pctthreshold IN NUMBER DEFAULT 10)
RETURN DiffRepTab pipelined;
Parameters
Table 159-33 DIFF_TABLE_STATS_IN_HISTORY Function Parameters
Parameter | Description |
---|---|
|
Owner of the table. Specify |
|
Table for which statistics are to be compared |
|
First timestamp 1 |
|
Second timestamp 2 |
|
The function reports difference in statistics only if it exceeds this limit. The default value is 10. |
Security Model
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Usage Notes
If the second timestamp is NULL
, then the function compares the current statistics in dictionary with the statistics as of the other timestamp.
159.7.28 DIFF_TABLE_STATS_IN_PENDING Function
This function compares pending statistics to either the current statistics in the data dictionary, or user-specified historical statistics.
Syntax
DBMS_STATS.DIFF_TABLE_STATS_IN_PENDING(
ownname IN VARCHAR2,
tabname IN VARCHAR2,
timestamp IN TIMESTAMP WITH TIME ZONE,
pctthreshold IN NUMBER DEFAULT 10)
RETURN DiffRepTab pipelined;
Parameters
Table 159-34 DIFF_TABLE_STATS_IN_PENDING Function Parameters
Parameter | Description |
---|---|
|
Owner of the table. Specify |
|
Table for which statistics are to be compared. |
|
Timestamp in the statistics history that corresponds to the desired statistics. If the timestamp is |
|
Limit for reporting. The function reports difference in statistics only if it exceeds the specified limit. The default value is |
Security Model
To invoke this procedure you must be owner of the table, or you must have the ANALYZE ANY
privilege. For objects owned by SYS
, you must be either the owner of the table, or you must have either the ANALYZE ANY DICTIONARY
privilege or the SYSDBA
privilege.
159.7.29 DIFF_TABLE_STATS_IN_STATTAB Function
This function can be used to compare statistics for a table from two different sources.
The statistics can be drawn from
-
two different user statistics tables
-
a single user statistics table containing 2 sets of statistics that can be identified using
statids
-
a user statistics table and dictionary
The function also compares the statistics of the dependent objects (indexes, columns, partitions) as well. It displays statistics of the object(s) from both sources if the difference between those statistics exceeds a certain threshold (%). The threshold can be specified as an argument to the function. The statistics corresponding to the first source (stattab1
or time1
) will be used as basis for computing the difference percentage.
Syntax
DBMS_STATS.DIFF_TABLE_STATS_IN_STATTAB( ownname IN VARCHAR2, tabname IN VARCHAR2, stattab1 IN VARCHAR2, stattab2 IN VARCHAR2 DEFAULT NULL, pctthreshold IN NUMBER DEFAULT 10, statid1 IN VARCHAR2 DEFAULT NULL, statid2 IN VARCHAR2 DEFAULT NULL, stattab1own IN VARCHAR2 DEFAULT NULL, stattab2own IN VARCHAR2 DEFAULT NULL) RETURN DiffRepTab pipelined;
Parameters
Table 159-35 DIFF_TABLE_STATS_IN_STATTAB Function Parameters
Parameter | Description |
---|---|
|
Owner of the table. Specify |
|
Table for which statistics are to be compared |
|
User statistics table 1 |
|
User statistics table 2. If |
|
The function reports difference in statistics only if it exceeds this limit. The default value is 10. |
|
(optional) Identifies statistics set within |
|
(optional) Identifies statistics set within |
|
Schema containing |
|
Schema containing |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.30 DROP_ADVISOR_TASK Procedure
This procedure drops the specified Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.DROP_ADVISOR_TASK (
task_name IN VARCHAR2);
Parameters
Table 159-36 DROP_ADVISOR_TASK Procedure Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-8 Dropping an Optimizer Statistics Advisor Task
This example drops the Optimizer Statistics Advisor task named my_task
:
EXEC DBMS_STATS.DROP_ADVISOR_TASK('my_task');
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.31 DROP_EXTENDED_STATS Procedure
This function drops the statistics entry that is created for the user specified extension.
This cancels the effects of the CREATE_EXTENDED_STATS Function.
Syntax
DBMS_STATS.DROP_EXTENDED_STATS ( ownname VARCHAR2, tabname VARCHAR2, extension VARCHAR2);
Parameters
Table 159-37 DROP_EXTENDED_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name of a table |
|
Name of the table |
|
Can be either a column group or an expression. Suppose the specified table has two column |
Exceptions
-
ORA-20000
: Insufficient privileges or extension does not exist -
ORA-20001
: Error when processing extension
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
If no extended statistics set is created for the extension, this function throws an error.
159.7.32 DROP_STAT_TABLE Procedure
This procedure drops a user statistics table.
Syntax
DBMS_STATS.DROP_STAT_TABLE ( ownname VARCHAR2, stattab VARCHAR2);
Parameters
Table 159-38 DROP_STAT_TABLE Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
User statistics table identifier |
Exceptions
ORA-20000
: Table does not exists or insufficient privileges.
Usage Notes
To invoke this procedure you need the privileges for dropping the specified table.
159.7.33 EXECUTE_ADVISOR_TASK Function
This function executes a previously created Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.EXECUTE_ADVISOR_TASK (
task_name IN VARCHAR2,
execution_name IN VARCHAR2 := NULL)
RETURN VARCHAR2;
Parameters
Table 159-39 EXECUTE_ADVISOR_TASK Parameters
Parameter | Description |
---|---|
task_name |
Name of the Optimizer Statistics Advisor task. |
execution_name |
A name that qualifies and identifies an advisor execution. If not specified, then the advisor automatically generates it. If the specified execution conflicts with the name of an existing execution, then the function returns an error. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
You can execute this subprogram for
AUTO_STATS_ADVISOR_TASK
, which is predefined. -
This subprogram executes using invoker's rights.
The results of performing this task depend on the privileges of the executing user:
-
SYSTEM
levelOnly users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task on system-level rules. -
Operation level
The results depend on the following privileges:
-
Users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task for all statistics operations. -
Users with the
ANALYZE ANY
privilege but not theANALYZE ANY DICTIONARY
privilege can perform this task for statistics operations related to any schema exceptSYS
. -
Users with the
ANALYZE ANY DICTIONARY
privilege but not theANALYZE ANY
privilege can perform this task for statistics operations related to their own schema and theSYS
schema. -
Users with neither the
ANALYZE ANY
nor theANALYZE ANY DICTIONARY
privilege can only perform this operation for statistics operations relating to their own schema.
-
-
Object level
Users can perform this task for any object for which they have statistics collection privileges.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Returns
This function returns the name of the new execution.
Usage Notes
The results of the execution depend on user privileges and the type of rules:
-
System
To perform the operation on system-level rules, you must have both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges. -
Operation
If you have the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges, then you can execute this function for all operations. If you have only theANALYZE ANY
privilege, then you can execute this function for operations related to any schemas exceptSYS
. If you have only theANALYZE ANY DICTIONARY
privilege, then you can execute this function for operations related to any schemas, includingSYS
. If you have neither theANALYZE ANY
nor theANALYZE ANY DICTIONARY
privilege, then you can execute this function only for operations in your own schema. -
Object
If you have the privilege to collect statistics for an object, then you can execute this function for the object.
Example 159-9 Creating and Executing a Task
This example creates an Optimizer Statistics Advisor task named my_task
, and then executes it.
DECLARE
v_tname VARCHAR2(128) := 'my_task';
BEGIN
-- create a task
v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
-- execute the task
v_tname := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.34 EXPORT_COLUMN_STATS Procedure
This procedure retrieves statistics for a particular column and stores them in the user statistics table identified by stattab
.
Syntax
DBMS_STATS.EXPORT_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-40 EXPORT_COLUMN_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table to which this column belongs |
|
Name of the column or extension |
|
Name of the table partition. If the table is partitioned and if |
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.35 EXPORT_DATABASE_PREFS Procedure
This procedure is used to export the statistics preferences of all the tables, excluding the tables owned by Oracle. These tables can by included by passing TRUE
for the add_sys
parameter.
Syntax
DBMS_STATS.EXPORT_DATABASE_PREFS ( stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL add_sys IN BOOLEAN DEFAULT FALSE);
Parameters
Table 159-41 EXPORT_DATABASE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Statistics table name to where statistics should be exported |
|
(Optional) Identifier to associate with these statistics within |
|
Schema containing |
|
Value |
Exceptions
ORA-20000
: Insufficient privileges
Usage Notes
-
To run this procedure, you need to have the
SYSDBA
role, or bothANALYZE
ANY
DICTIONARY
andANALYZE
ANY
system privileges. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.EXPORT_DATABASE_PREFS('STATTAB', statown=>'SH');
159.7.36 EXPORT_DATABASE_STATS Procedure
This procedure retrieves statistics for all objects in the database and stores them in the user statistics tables identified by statown
.stattab
.
Syntax
DBMS_STATS.EXPORT_DATABASE_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-42 EXPORT_DATABASE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
If |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.37 EXPORT_DICTIONARY_STATS Procedure
This procedure retrieves statistics for all dictionary schemas ('SYS
', 'SYSTEM
' and RDBMS component schemas) and stores them in the user statistics table identified by stattab
.
Syntax
DBMS_STATS.EXPORT_DICTIONARY_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-43 EXPORT_DICTIONARY_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
If |
Usage Notes
-
You must have the
SYSDBA
orANALYZE
ANY
DICTIONARY
andANALYZE
ANY
system privilege to execute this procedure. -
Oracle does not support export or import of statistics across databases of different character sets.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.38 EXPORT_FIXED_OBJECTS_STATS Procedure
This procedure retrieves statistics for fixed tables and stores them in the user statistics table identified by stattab
.
Syntax
DBMS_STATS.EXPORT_FIXED_OBJECTS_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-44 EXPORT_FIXED_OBJECTS_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table, may need to upgrade it
Usage Notes
-
To invoke this subprogram you need to be connected as
SYS
or have theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.39 EXPORT_INDEX_STATS Procedure
This procedure retrieves statistics for a particular index and stores them in the user statistics table identified by stattab
.
Syntax
DBMS_STATS.EXPORT_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-45 EXPORT_INDEX_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the index |
|
Name of the index partition. If the index is partitioned and if |
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.40 EXPORT_PENDING_STATS Procedure
This procedure is used to export the statistics gathered and stored as pending.
Syntax
DBMS_STATS.EXPORT_PENDING_STATS ( ownname IN VARCHAR2 DEFAULT USER, tabname IN VARCHAR2, stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT USER);
Parameters
Table 159-46 EXPORT_PENDING_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
|
Statistics table name to where to export the statistics |
|
(Optional) Identifier to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
If the parameter
tabname
isNULL
then export applies to all tables of the specified schema. -
The default owner/schema is the user who runs the procedure.
-
To run this procedure, you need to have the same privilege for gathering statistics on the tables that will be touched by this procedure.
-
All arguments are of type
VARCHAR2
and values are enclosed in quotes. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.EXPORT_PENDING_STATS(NULL, NULL, 'MY_STAT_TABLE');
159.7.41 EXPORT_SCHEMA_PREFS Procedure
This procedure is used to export the statistics preferences of all the tables owned by the specified owner name.
Syntax
DBMS_STATS.EXPORT_SCHEMA_PREFS ( ownname IN VARCHAR2, stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-47 EXPORT_SCHEMA_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Statistics table name to where to export the statistics |
|
(Optional) Identifier to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To run this procedure, you need to connect as owner, or have the
SYSDBA
privilege, or have theANALYZE
ANY
system privilege. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.EXPORT_SCHEMA_PREFS('SH', 'STAT');
159.7.42 EXPORT_SCHEMA_STATS Procedure
This procedure retrieves statistics for all objects in the schema identified by ownname
and stores them in the user statistics tables identified by stattab
.
Syntax
DBMS_STATS.EXPORT_SCHEMA_STATS ( ownname VARCHAR2, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-48 EXPORT_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
If |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.43 EXPORT_SYSTEM_STATS Procedure
This procedure retrieves system statistics and stores them in the user statistics table, identified by stattab
.
Syntax
DBMS_STATS.EXPORT_SYSTEM_STATS (
stattab VARCHAR2,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-49 EXPORT_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Identifier of the user statistics table that describes where the statistics will be stored |
|
Optional identifier associated with the statistics stored from the |
|
Schema containing |
Security Model
To run this procedure, you must have the GATHER_SYSTEM_STATISTICS
role.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table; may need to be upgraded
ORA-20003
: Unable to export system statistics
Usage Notes
Oracle Database does not support the export or import of statistics across databases of different character sets.
159.7.44 EXPORT_TABLE_PREFS Procedure
This procedure is used to export the statistics preferences of the specified table in the specified schema into the specified statistics table.
Syntax
DBMS_STATS.EXPORT_TABLE_PREFS ( ownname IN VARCHAR2, tabname IN VARCHAR2, stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-50 EXPORT_TABLE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
|
Statistics table name where to export the statistics |
|
Optional identifier to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To run this procedure, you need to connect as owner of the table, or have the
ANALYZE
ANY
system privilege. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.EXPORT_TABLE_PREFS('SH', 'SALES', 'STAT');
159.7.45 EXPORT_TABLE_STATS Procedure
This procedure retrieves statistics for a particular table and stores them in the user statistics table. Cascade results in all index statistics associated with the specified table being exported as well.
Syntax
DBMS_STATS.EXPORT_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, cascade BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-51 EXPORT_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table |
|
Name of the table partition. If the table is partitioned and if |
|
User statistics table identifier describing where to store the statistics |
|
Identifier (optional) to associate with these statistics within |
|
If true, then column and index statistics for this table are also exported |
|
Schema containing |
|
Specifies which statistics to import or export, accepting multiple values separated by a comma. Values supported:
The value |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.46 FLUSH_DATABASE_MONITORING_INFO Procedure
This procedure saves monitoring information for all tables in the dictionary. The database immediately updates corresponding entries in the *_TAB_MODIFICATIONS
, *_TAB_STATISTICS
and *_IND_STATISTICS
views.
Syntax
DBMS_STATS.FLUSH_DATABASE_MONITORING_INFO;
Security Model
The ANALYZE_ANY
system privilege is required to run this procedure.
Exceptions
ORA-20000
: Insufficient privileges
Usage Notes
Starting in Oracle Database 12c Release 2 (12.2), you do not need to call FLUSH_DATABASE_MONITORING_
to view the latest information in INFO
*_TAB_STATISTICS
and *_IND_STATISTICS
because these views show statistics cached in the SGA and stored on disk. Because the GATHER_*_STATS
procedures internally save monitoring information to disk, it is not necessary to run this procedure before gathering statistics.
See Also:
Oracle Database SQL Tuning Guide to learn how to set optimizer statistics preferences
159.7.47 GATHER_DATABASE_STATS Procedures
This procedure gathers statistics for all objects in the database.
Syntax
DBMS_STATS.GATHER_DATABASE_STATS ( estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER', objlist OUT ObjectTab, statown VARCHAR2 DEFAULT NULL, gather_sys BOOLEAN DEFAULT TRUE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), obj_filter_list ObjectTab DEFAULT NULL); DBMS_STATS.GATHER_DATABASE_STATS ( estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER', statown VARCHAR2 DEFAULT NULL, gather_sys BOOLEAN DEFAULT TRUE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), obj_filter_list ObjectTab DEFAULT NULL);
Parameters
Table 159-52 GATHER_DATABASE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Determines the percentage of rows to sample. The valid range is between 0.000001 and 100. Use the constant You can change the default value using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure. |
|
Determines whether the database uses random block sampling ( Random block sampling is more efficient, but if the data is not randomly distributed on disk, then sample values may be somewhat correlated. This parameter is only relevant when estimating statistics. |
|
When setting preference on global, schema, database or dictionary level, only
The default is |
|
Determines the degree of parallelism used for gathering statistics. The default for Use the constant |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Determines whether to collect index statistics as part of gathering table statistics. Specifying this option is equivalent to running the |
|
User statistics table identifier describing where to save the current statistics. The statistics table is assumed to reside in the same schema as the object being analyzed, so there must be one such table in each schema to use this option. |
|
Identifier (optional) to associate with these statistics within |
|
Specifies which objects require statistics to be gathered. Valid values are as follows:
|
|
List of objects found to be stale or empty |
|
Schema containing |
|
Gathers statistics on the objects owned by the |
|
Controls the invalidation of dependent cursors of the tables for which statistics are being gathered. The default is If set to |
|
A list of object filters. When provided, |
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Bad input value
Usage Notes
To run this procedure, you need to have the SYSDBA
role or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privileges.
If the GATHER AUTO
option is used then frequency histograms will be created using a sample rather than a full scan. The following scenario shows where GATHER AUTO
is used:
-
A table is created like this:
CREATE TABLE NEWTAB as SELECT * FROM ....
.This will create statistics on
NEWTAB
but no histograms. -
Next, the DBA creates the histograms using
GATHER AUTO
ongather_table_stats
. -
The
FREQUENCY
histograms onNEWTAB
will be created using a sample rather than a full table scan.
159.7.48 GATHER_DICTIONARY_STATS Procedure
This procedure gathers statistics for dictionary schemas SYS
, SYSTEM
and schemas of RDBMS components.
Syntax
DBMS_STATS.GATHER_DICTIONARY_STATS ( comp_id VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER AUTO', objlist OUT ObjectTab, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), obj_filter_list ObjectTab DEFAULT NULL); DBMS_STATS.GATHER_DICTIONARY_STATS ( comp_id VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type(GET_PARAM('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT GET_PARAM('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(GET_PARAM('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(GET_PARAM('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER AUTO', statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(get_param('NO_INVALIDATE')), obj_filter_list ObjectTab DEFAULT NULL);
Parameters
Table 159-53 GATHER_DICTIONARY_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Component id of the schema to analyze. |
|
Percentage of rows to estimate ( |
|
Determines whether or not to use random block sampling instead of random row sampling. Random block sampling is more efficient, but if the data is not randomly distributed on disk then the sample values may be somewhat correlated. Only pertinent when performing estimate statistics. |
|
The method options. This parameter accepts the following values:
The default is |
|
Degree of parallelism. The default for |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Gathers statistics on indexes also. Index statistics gathering will not be parallelized. Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the indexes in the schema in addition to gathering table and column statistics. Use the constant |
|
User statistics table identifier describing where to save the current statistics |
|
The (optional) identifier to associate with these statistics within |
|
Specifies which objects require statistics to be gathered. Valid values are as follows:
|
|
The list of objects found to be stale or empty. |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
A list of object filters. When provided, this will gather statistics only on objects which satisfy at least one object filter in the list as needed. In a single object filter, we can specify the constraints on the object attributes. The attribute values specified in the object filter are case- insensitive unless double-quoted. Wildcard is allowed in the attribute values. Suppose non- |
Usage Notes
You must have the SYSDBA
or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privilege to execute this procedure.
If the GATHER AUTO
option is used then frequency histograms will be created using a sample rather than a full scan. The following scenario shows where GATHER AUTO
is used:
-
A table is created like this:
CREATE TABLE NEWTAB as SELECT * FROM ....
.This will create statistics on
NEWTAB
but no histograms. -
Next, the DBA creates the histograms using
GATHER AUTO
ongather_table_stats
. -
The
FREQUENCY
histograms onNEWTAB
will be created using a sample rather than a full table scan.
Exceptions
ORA-20000
: Index does not exist or insufficient privileges
ORA-20001
: Bad input value
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.49 GATHER_FIXED_OBJECTS_STATS Procedure
This procedure gathers statistics for all fixed objects (dynamic performance tables).
Syntax
DBMS_STATS.GATHER_FIXED_OBJECTS_STATS ( stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')));
Parameters
Table 159-54 GATHER_FIXED_OBJECTS_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing where to save the current statistics |
|
Identifier to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
Usage Notes
You must have the SYSDBA
or ANALYZE
ANY
DICTIONARY
system privilege to execute this procedure.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Bad input value
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.50 GATHER_INDEX_STATS Procedure
This procedure gathers index statistics. It attempts to parallelize as much of the work as possible.
Restrictions are described in the individual parameters. This operation will not parallelize with certain types of indexes, including cluster indexes, domain indexes, and bitmap join indexes. The granularity
and no_invalidate
arguments are not relevant to these types of indexes.
Syntax
DBMS_STATS.GATHER_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (GET_PARAM('ESTIMATE_PERCENT')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-55 GATHER_INDEX_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Schema of index to analyze |
|
Name of index |
|
Name of partition |
|
Percentage of rows to estimate ( |
|
User statistics table identifier describing where to save the current statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Degree of parallelism. The default for |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Does not invalidate the dependent cursors if set to |
|
Gather statistics on object even if it is locked |
Exceptions
ORA-20000
: Index does not exist or insufficient privileges
ORA-20001
: Bad input value
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.51 GATHER_PROCESSING_RATE Procedure
This procedure starts the job of gathering the processing rates which end after an interval
defined in minutes.
Syntax
DBMS_STATS.GATHER_PROCESSING_RATE ( gathering_mode IN VARCHAR2 DEFAULT 'START', interval IN NUMBER DEFAULT NULL);
Parameters
Table 159-56 GATHER_PROCESSING_RATE Procedure Parameters
Parameter | Description |
---|---|
|
Mode: |
|
Time interval (number of minutes) for which the processing must be gathered |
Usage Notes
-
You require the
OPTIMIZER_PROCESSING_RATE
role to run this procedure. -
AUTO
DOP
uses processing rates to determine the optimal degree of parallelism for a SQL statement.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or illegal input value
159.7.52 GATHER_SCHEMA_STATS Procedures
This procedure gathers statistics for all objects in a schema.
Syntax
DBMS_STATS.GATHER_SCHEMA_STATS ( ownname VARCHAR2, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER', objlist OUT ObjectTab, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, obj_filter_list ObjectTab DEFAULT NULL); DBMS_STATS.GATHER_SCHEMA_STATS ( ownname VARCHAR2, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, options VARCHAR2 DEFAULT 'GATHER', statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE'), force BOOLEAN DEFAULT FALSE, obj_filter_list ObjectTab DEFAULT NULL);
Parameters
Table 159-57 GATHER_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Schema to analyze ( |
|
Determines the percentage of rows to sample. The valid range is between 0.000001 and 100. Use the constant You can change the default value using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure. |
|
Whether or not to use random block sampling instead of random row sampling. Random block sampling is more efficient, but if the data is not randomly distributed on disk, then the sample values may be somewhat correlated. Only pertinent when doing an estimate statistics. |
|
Accepts:
The default is |
|
Degree of parallelism. The default for |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Gather statistics on the indexes as well. Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the indexes in the schema in addition to gathering table and column statistics. Use the constant |
|
User statistics table identifier describing where to save the current statistics |
|
Identifier (optional) to associate with these statistics within |
|
Specifies which objects require statistics to be gathered. Valid values are as follows:
|
|
List of objects found to be stale or empty |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Gather statistics on objects even if they are locked |
|
A list of object filters. When provided, |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE ANY
privilege. For objects owned by SYS
, you must be either the owner of the table, or you need the ANALYZE ANY DICTIONARY
privilege or the SYSDBA
privilege.
If the GATHER AUTO
option is used then frequency histograms will be created using a sample rather than a full scan. The following scenario shows where GATHER AUTO
is used:
-
A table is created like this:
CREATE TABLE NEWTAB as SELECT * FROM ....
.This will create statistics on
NEWTAB
but no histograms. -
Next, the DBA creates the histograms using
GATHER AUTO
ongather_table_stats
. -
The
FREQUENCY
histograms onNEWTAB
will be created using a sample rather than a full table scan.
Exceptions
ORA-20000
: Schema does not exist or insufficient privileges
ORA-20001
: Bad input value
Examples
Applying an Object Filter List
The following example specifies that the tables SH.SALES
and SH.COSTS
, if stale, will have statistics gathered upon them.
DECLARE filter_lst DBMS_STATS.OBJECTTAB := DBMS_STATS.OBJECTTAB(); BEGIN filter_lst.extend(2); filter_lst(1).ownname := 'SH'; filter_lst(1).objname := 'SALES'; filter_lst(2).ownname := 'SH'; filter_lst(2).objname := 'COSTS'; DBMS_STATS.GATHER_SCHEMA_STATS(ownname=>'SH',obj_filter_list=>filter_lst); END;
159.7.53 GATHER_SYSTEM_STATS Procedure
This procedure gathers system statistics.
Syntax
DBMS_STATS.GATHER_SYSTEM_STATS (
gathering_mode VARCHAR2 DEFAULT 'NOWORKLOAD',
interval INTEGER DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-58 GATHER_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Specifies the mode in which the database gathers system statistics. Possible values are:
|
|
Specifies the number of minutes in which to gather system statistics. This parameter applies only when |
|
Specifies the table in which the database stores the statistics. |
|
Specifies an optional identifier associated with the statistics saved in |
|
Specifies the schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid input value
ORA-20002
: Bad user statistics table; may need to be upgraded
ORA-20003
: Unable to gather system statistics
ORA-20004
: Error in the INTERVAL
mode: system parameter job_queue_processes
must be >0
Usage Notes
To run this procedure, you must have the GATHER_SYSTEM_STATISTICS
role.
Examples
Assume that you want to perform database application processing OLTP transactions during the day and run reports at night.
To collect daytime system statistics, gather statistics for 720 minutes. Store the statistics in the MYSTATS
table.
BEGIN
DBMS_STATS.GATHER_SYSTEM_STATS (
interval => 720,
stattab => 'mystats',
statid => 'OLTP');
END;
To collect nighttime system statistics, gather statistics for 720 minutes. Store the statistics in the MYSTATS
table.
BEGIN
DBMS_STATS.GATHER_SYSTEM_STATS (
interval => 720,
stattab => 'mystats',
statid => 'OLAP');
END;
Update the dictionary with the gathered statistics.
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT (:jobno, 'DBMS_STATS.IMPORT_SYSTEM_STATS
(''mystats'',''OLTP'');'
sysdate, 'sysdate + 1');
COMMIT;
END;
BEGIN
DBMS_JOB.SUBMIT (:jobno, 'DBMS_STATS.IMPORT_SYSTEM_STATS
(''mystats'',''OLAP'');'
sysdate + 0.5, 'sysdate + 1');
COMMIT;
END;
159.7.54 GATHER_TABLE_STATS Procedure
This procedure gathers table, column, and index statistics. It attempts to parallelize as much work as possible, but there are some restrictions, which are described in the individual parameters.
Syntax
DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), stattype VARCHAR2 DEFAULT 'DATA', force BOOLEAN DEFAULT FALSE, context DBMS_STATS.CCONTEXT DEFAULT NULL, -- non operative options VARCHAR2 DEFAULT get_param('OPTIONS'));
Parameters
Table 159-59 GATHER_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Schema containing the table. |
|
Name of the table. |
|
Name of the partition. |
|
Determines the percentage of rows to sample. The valid range is between 0.000001 and 100. Use the constant You can change the default value using the SET_DATABASE_PREFS Procedure, SET_GLOBAL_PREFS Procedure, SET_SCHEMA_PREFS Procedure and SET_TABLE_PREFS Procedure. |
|
Determines whether the database uses random block sampling ( Random block sampling is more efficient, but if the data is not randomly distributed on disk, then sample values may be somewhat correlated. This parameter is only relevant when estimating statistics. |
|
The default is |
|
Determines the degree of parallelism used for gathering statistics. The default for Use the constant |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Determines whether to collect index statistics as part of gathering table statistics. Specifying this option is equivalent to running the |
|
User statistics table identifier describing where to save the current statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Controls the invalidation of dependent cursors of the tables for which statistics are being gathered. The default is If set to |
|
Statistics type. The only value allowed is |
|
Gather statistics of table even if it is locked |
|
Not used. |
|
Determines the
|
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Index statistics collection can be parellelized except for cluster, domain and join indexes.
If the GATHER AUTO
option is used then frequency histograms will be created using a sample rather than a full scan. The following scenario shows where GATHER AUTO
is used:
-
A table is created like this:
CREATE TABLE NEWTAB as SELECT * FROM ....
.This will create statistics on
NEWTAB
but no histograms. -
Next, the DBA creates the histograms using
GATHER AUTO
ongather_table_stats
. -
The
FREQUENCY
histograms onNEWTAB
will be created using a sample rather than a full table scan.
Exceptions
ORA-20000
: Table does not exist or insufficient privileges
ORA-20001
: Bad input value
Examples
An extension can be either a column group (see Example 1) or an expression (see Example 2).
Example 1
DBMS_STATS.GATHER_TABLE_STATS( 'SH', 'SALES', method_opt => 'FOR COLUMNS (empno, deptno)');
Example 2
DBMS_STATS.GATHER_TABLE_STATS( 'SH', 'SALES', method_opt => 'FOR COLUMNS (sal+comm)');
159.7.55 GENERATE_STATS Procedure
This deprecated procedure generates object statistics from previously collected statistics of related objects. The currently supported objects are b-tree and bitmap indexes.
Note:
This subprogram has been deprecated and replaced by improved technology. It is maintained only for purposes of backward compatibility. As an alternative, use the GATHER_INDEX_STAT
procedure. See "GATHER_INDEX_STATS Procedure".
Syntax
DBMS_STATS.GENERATE_STATS ( ownname VARCHAR2, objname VARCHAR2, organized NUMBER DEFAULT 7, force BOOLEAN default FALSE);
Parameters
Table 159-60 GENERATE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Schema of object |
|
Name of object |
|
Amount of ordering associated between the index and its underlying table. A heavily organized index would have consecutive index keys referring to consecutive rows on disk for the table (the same block). A heavily disorganized index would have consecutive keys referencing different table blocks on disk. This parameter is only used for b-tree indexes. The number can be in the range of 0-10, with 0 representing a completely organized index and 10 a completely disorganized one. |
|
If |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA privilege.
For fully populated schemas, the gather procedures should be used instead when more accurate statistics are desired.
Exceptions
ORA-20000
: Unsupported object type of object does not exist
ORA-20001
: Invalid option or invalid statistics
159.7.56 GET_ADVISOR_OPR_FILTER Procedure
This procedure creates an operation filter for an Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.GET_ADVISOR_OPR_FILTER (
opr_id IN NUMBER,
opr_filter IN OUT NOCOPY StatsAdvOpr);
Parameters
Table 159-61 GET_ADVISOR_OPR_FILTER Procedure Parameters
Parameter | Description |
---|---|
|
The ID of the statistics operation stored in the |
|
The Optimizer Statistics Advisor filter that is generated based on the specified statistics operation. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Usage Notes
You can specify the filter using either the operation ID or the filter ID, but not both at the same time.
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.57 GET_ADVISOR_RECS Function
This function generates a recommendation report for the specified item.
Syntax
DBMS_STATS.GET_ADVISOR_RECS(
ownname IN VARCHAR2,
tabname IN VARCHAR2,
rec IN VARCHAR2,
type IN VARCHAR2 := 'TEXT')
RETURN CLOB;
Parameters
Table 159-62 GET_ADVISOR_RECS Function Parameters
Parameter | Description |
---|---|
|
The owner of the table. |
|
The name of the table. |
|
The Optimizer Statistics Advisor recommendation.
|
|
Type of the report: |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must have the privileges to gather statistics for the objects for which recommendations are generated.
-
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Usage Notes
The advisor does not make recommendations for manual statistics gathering. The database only make recommendations for automatic statistics gathering jobs, with the main goal of finishing the job within the maintenance window. As long as the automatic job finishes, the database does not make further recommendations.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.58 GET_COLUMN_STATS Procedures
These procedures gets all column-related information. In the form of this procedure that deals with user-defined statistics, the statistics type returned is the type stored, in addition to the user-defined statistics.
Syntax
DBMS_STATS.GET_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, distcnt OUT NUMBER, density OUT NUMBER, nullcnt OUT NUMBER, srec OUT StatRec, avgclen OUT NUMBER, statown VARCHAR2 DEFAULT NULL);
Use the following for user-defined statistics:
DBMS_STATS.GET_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, ext_stats OUT RAW, stattypown OUT VARCHAR2 DEFAULT NULL, stattypname OUT VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-63 GET_COLUMN_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table to which this column belongs |
|
Name of the column or extension |
|
Name of the table partition from which to get the statistics. If the table is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
The user-defined statistics |
|
Schema of the statistics type |
|
Name of the statistics type |
|
Number of distinct values |
|
Column density |
|
Number of |
|
Structure holding internal representation of column minimum, maximum, and histogram values |
|
Average length of the column (in bytes) |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges or no statistics have been stored for requested object
Usage Notes
Before invoking this procedure, ensure that the table exists.
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.59 GET_INDEX_STATS Procedures
This overloaded procedure gets all index-related statistics. In the form of this procedure that deals with user-defined statistics, the statistics type returned is the type stored, in addition to the user-defined statistics.
Syntax
DBMS_STATS.GET_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows OUT NUMBER,
numlblks OUT NUMBER,
numdist OUT NUMBER,
avglblk OUT NUMBER,
avgdblk OUT NUMBER,
clstfct OUT NUMBER,
indlevel OUT NUMBER,
statown VARCHAR2 DEFAULT NULL);
DBMS_STATS.GET_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows OUT NUMBER,
numlblks OUT NUMBER,
numdist OUT NUMBER,
avglblk OUT NUMBER,
avgdblk OUT NUMBER,
clstfct OUT NUMBER,
indlevel OUT NUMBER,
statown VARCHAR2 DEFAULT NULL,
guessq OUT NUMBER);
Use the following form of the procedure for user-defined statistics:
DBMS_STATS.GET_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
ext_stats OUT RAW,
stattypown OUT VARCHAR2 DEFAULT NULL,
stattypname OUT VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-64 GET_INDEX_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the index |
|
Name of the index partition for which to get the statistics. If the index is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
User-defined statistics |
|
Schema of the statistics type |
|
Name of the statistics type |
|
Number of rows in the index (partition) |
|
Number of leaf blocks in the index (partition) |
|
Number of distinct keys in the index (partition) |
|
Average integral number of leaf blocks in which each distinct key appears for this index (partition) |
|
Average integral number of data blocks in the table pointed to by a distinct key for this index (partition) |
|
Clustering factor for the index (partition) |
|
Height of the index (partition) |
|
Schema containing |
|
Guess quality for the index (partition) |
Security Model
Before invoking this procedure, ensure that the table exists. To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges or no statistics have been stored for requested object
Usage Notes
-
The optimizer uses the cached data to estimate number of cached blocks for index or statistics table access. The database calculates the total cost of the operation by combining the I/O cost of reading not cached blocks from disk, the CPU cost of getting cached blocks from the buffer cache, and the CPU cost of processing the data.
-
The database maintains
cachedblk
andcachehit
at all times. However, the database uses the corresponding caching statistics for optimization as part of the table and index statistics only when the user calls theDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATS
procedure for automatic mode orDBMS_STATS.GATHER_SYSTEM_STATS
for manual mode. To prevent the user from utilizing inaccurate and unreliable data, the optimizer computes a “confidence factor” for eachcachehit
and acachedblk
for each object. If the confidence factor for the value meets confidence criteria, then the database uses this value; otherwise, the database uses defaults. -
The automatic maintenance algorithm for object caching statistics assumes that only one major database workload exists. The algorithm adjusts statistics to this workload, ignoring other "minor" workloads. If this assumption is false, then you must use manual mode for maintaining object caching statistics.
-
The object caching statistics maintenance algorithm for automatic mode prevents you from using statistics in the following situations:
-
When not enough data has been analyzed, such as when an object has been recently created
-
When the system does not have one major workload resulting in averages not corresponding to real values
-
See Also:
Oracle Database SQL Tuning Guide to learn how to manage optimizer statistics
159.7.60 GET_PARAM Function
This function returns the default value of parameters of DBMS_STATS
procedures.
Note:
This subprogram has been replaced by improved technology and is maintained only for purposes of backward compatibility. In this case, use the GET_PREFS Function.
See also DBMS_STATS Deprecated Subprograms.
Syntax
DBMS_STATS.GET_PARAM ( pname IN VARCHAR2) RETURN VARCHAR2;
Parameters
Table 159-65 GET_PARAM Function Parameters
Parameter | Description |
---|---|
|
Parameter name |
Exceptions
ORA-20001
: Invalid input values
159.7.61 GET_PREFS Function
This function returns the default value of the specified preference.
Syntax
DBMS_STATS.GET_PREFS ( pname IN VARCHAR2, ownname IN VARCHAR2 DEFAULT NULL, tabname IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;
Parameters
Table 159-66 GET_PREFS Function Parameters
Parameter | Description |
---|---|
|
Preference name. The possible values are:
|
|
Owner name |
|
Table name |
Table 159-67 Preference Descriptions
Preference Name | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. Consider a synopsis as an internal management structure that samples distinct values. You can delete the following preferences:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Determines whether index statistics are collected as part of gathering table statistics. |
|
Determines whether statistics are gathered concurrently on multiple objects, or serially, one object at a time. Valid values are:
|
|
Determines degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to sample. The valid range is between 0.000001 and 100. Use the constant |
|
Controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. This preference takes two values:
|
|
Determines the granularity of statistics to collect. This preference is only relevant for partitioned tables. The following values are valid:
|
|
Determines whether the global statistics for a partitioned table are maintained without performing a full table scan. When a table is partitioned, an application typically loads data into a new partition. As new partitions are added and data is loaded, global table statistics must be kept up to date. If the following conditions are met, then the database updates the global table statistics by scanning only the changed partitions instead of the entire table:
If the |
|
Controls which synopses to collect when
|
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
Controls column statistics collection and histogram creation. When setting preferences at the global, schema, database, or dictionary level, only
The
The default is |
|
Controls the invalidation of dependent cursors of the tables for which statistics are being gathered. The default is If set to |
|
Determines the
|
|
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether the database publishes newly gathered statistics after the gathering job completes. You can gather statistics without publishing them immediately. This technique enables you to test new statistics before publishing them. |
|
Determines the percentage of rows in a table that must change before the statistics on that table are stale and need to be regathered. The valid domain for |
|
Specifies which statistics to import or export, accepting multiple values separated by a comma. Values supported:
The value |
|
Specifies the average number of blocks assumed to be cached in the buffer cache when calculating the index clustering factor. |
|
Specifies the number of minutes before timing out for locks and pins required for updating statistics. It accepts values in the range |
Security Model
No special privilege or role is needed to invoke this procedure. To gather statistics concurrently, however, you must either have the DBA role, or have the following privileges in addition to privileges that are required for gathering statistics: CREATE
JOB
, MANAGE SCHEDULER
, and MANAGE ANY QUEUE
.
Exceptions
-
ORA-20000
: Unable to gather statistics concurrently: Resource Manager is not enabled. -
ORA-20001
: Invalid input values
Usage Notes
Note the following guidelines:
-
The
CONCURRENT
preference determines whether statistics are gathered concurrently when the user issuesGATHER_*_STATS
procedures.DBMS_STATS
can collect statistics for a single object in parallel based on the value of theDEGREE
parameter. However, parallelism is limited to one object. TheCONCURRENT
preference extends the scope of parallelism to multiple database objects. This approach is primarily intended for multi-CPU systems, and may not be suitable for small databases on single-CPU computers.To gather statistics concurrently, Resource Manager must be enabled, and the setting for the
JOB_QUEUE_PROCESSES
initialization parameter must be at least4
. -
If the
ownname
andtabname
are provided, and if a preference has been entered for the table, then the function returns the preference as specified for the table. In all other cases, it returns the global preference if it has been specified, otherwise it returns the default value.
See Also:
Oracle Database SQL Tuning Guide to learn how to get optimizer statistics preferences
159.7.62 GET_STATS_HISTORY_AVAILABILITY Function
This function returns oldest timestamp where statistics history is available. Users cannot restore statistics to a timestamp older than this one.
Syntax
DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY RETURN TIMESTAMP WITH TIMEZONE;
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.63 GET_STATS_HISTORY_RETENTION Function
This function returns the current statistics history retention value.
Syntax
DBMS_STATS.GET_STATS_HISTORY_RETENTION RETURN NUMBER;
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.64 GET_SYSTEM_STATS Procedure
This procedure gets system statistics from stattab
, or from the dictionary if stattab
is NULL
.
Syntax
DBMS_STATS.GET_SYSTEM_STATS ( status OUT VARCHAR2, dstart OUT DATE, dstop OUT DATE, pname IN VARCHAR2, pvalue OUT NUMBER, stattab IN VARCHAR2 DEFAULT NULL, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-68 GET_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Output is one of the following:
|
|
Date when statistics gathering started. If |
|
Date when statistics gathering stopped.
|
|
The parameter name to get, which can have one of the following values:
|
|
Parameter value to get |
|
Identifier of the user statistics table where the statistics will be obtained. If |
|
Optional identifier associated with the statistics saved in the |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20002
: Bad user statistics table; may need to be upgraded
ORA-20003
: Unable to gather system statistics
ORA-20004
: Parameter does not exist
Usage Notes
To run this procedure, you need the GATHER_SYSTEM_STATISTICS
role.
159.7.65 GET_TABLE_STATS Procedure
This overloaded procedure gets all table-related statistics.
Syntax
DBMS_STATS.GET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows OUT NUMBER,
numblks OUT NUMBER,
avgrlen OUT NUMBER,
statown VARCHAR2 DEFAULT NULL);
DBMS_STATS.GET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows OUT NUMBER,
numblks OUT NUMBER,
avgrlen OUT NUMBER,
statown VARCHAR2 DEFAULT NULL,
im_imcu_count OUT NUMBER,
im_block_count OUT NUMBER,
scanrate OUT NUMBER);
DBMS_STATS.GET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows OUT NUMBER,
numblks OUT NUMBER,
avgrlen OUT NUMBER,
cachedblk OUT NUMBER,
cachehit OUT NUMBER);
Parameters
Table 159-69 GET_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema. |
|
Name of the table to which this column belongs. |
|
Name of the table partition from which to get the statistics. If the table is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
Number of rows in the table or partition. |
|
Number of blocks in the table or partition. |
|
Average row length for the table or partition. |
|
Schema containing |
|
The number of In-Memory Compression Units (IMCUs) in the table or partition. |
|
The number of In-Memory blocks in the table or partition. An In-Memory block corresponds to a specific data block on disk. If the table is fully populated in the IM column store, then the number of In-Memory blocks equals the number of data blocks. |
|
The rate, in MB/s, at which the database scans external tables. This parameter is relevant only for external tables. |
|
For internal use only. |
|
For internal use only. |
Security Model
Before invoking this procedure, ensure that the table exists. To invoke this procedure you must be owner of the table, or you need the ANALYZE ANY
privilege. For objects owned by SYS
, you must be either the owner of the table, or have the ANALYZE ANY DICTIONARY
or SYSDBA
privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges or no statistics have been stored for requested object
ORA-20002
: Bad user statistics table; may need to upgrade it
Usage Notes
-
The optimizer uses the cached data to estimate number of cached blocks for index or statistics table access. The database calculates the total cost of the operation by combining the I/O cost of reading not cached blocks from disk, the CPU cost of getting cached blocks from the buffer cache, and the CPU cost of processing the data.
-
The database maintains
cachedblk
andcachehit
at all times. However, the database uses the corresponding caching statistics for optimization as part of the table and index statistics only when the user calls theDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATS
procedure for automatic mode orDBMS_STATS.GATHER_SYSTEM_STATS
for manual mode. To prevent the user from utilizing inaccurate and unreliable data, the optimizer computes a “confidence factor” for eachcachehit
and acachedblk
for each object. If the confidence factor for the value meets confidence criteria, then the database uses this value; otherwise, the database uses defaults. -
The automatic maintenance algorithm for object caching statistics assumes that only one major database workload exists. The algorithm adjusts statistics to this workload, ignoring other "minor" workloads. If this assumption is false, then you must use manual mode for maintaining object caching statistics.
-
The object caching statistics maintenance algorithm for automatic mode prevents you from using statistics in the following situations
-
When not enough data has been analyzed, such as when an object has been recently created
-
When the system does not have one major workload resulting in averages not corresponding to real values
-
-
The database does not support export or import of statistics across databases of different character sets.
See Also:
Oracle Database SQL Tuning Guide to learn how to manage optimizer statistics preferences
159.7.66 IMPLEMENT_ADVISOR_TASK Function
This function implements the recommendations made by Optimizer Statistics Advisor.
Syntax
DBMS_STATS.IMPLEMENT_ADVISOR_TASK (
task_name IN VARCHAR2,
execution_name IN VARCHAR2 := NULL,
level IN VARCHAR2 := 'TYPICAL')
RETURN CLOB;
Parameters
Table 159-70 IMPLEMENT_ADVISOR_TASK Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
A name that qualifies and identifies an advisor execution. If not specified, then the advisor automatically generates it. If the specified execution conflicts with the name of an existing execution, then the function returns an error. |
|
The level of the implementation. Possible values are
|
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
You can execute this subprogram for
AUTO_STATS_ADVISOR_TASK
, which is predefined. -
This subprogram executes using invoker's rights.
The results of performing this task depend on the privileges of the executing user:
-
SYSTEM
levelOnly users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task on system-level rules. -
Operation level
The results depend on the following privileges:
-
Users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task for all statistics operations. -
Users with the
ANALYZE ANY
privilege but not theANALYZE ANY DICTIONARY
privilege can perform this task for statistics operations related to any schema exceptSYS
. -
Users with the
ANALYZE ANY DICTIONARY
privilege but not theANALYZE ANY
privilege can perform this task for statistics operations related to their own schema and theSYS
schema. -
Users with neither the
ANALYZE ANY
nor theANALYZE ANY DICTIONARY
privilege can only perform this operation for statistics operations relating to their own schema.
-
-
Object level
Users can perform this task for any object for which they have statistics collection privileges.
Return Values
This function returns an XML CLOB that indicates which recommendations were successfully implemented.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-10 Implementing Optimizer Statistics Advisor Recommendations
This script illustrates a basic Optimizer Statistics Advisor session. It creates a task, executes it, generates a report, and then implements the recommendations.
DECLARE
v_tname VARCHAR2(128) := 'my_task';
v_ename VARCHAR2(128) := NULL;
v_report CLOB := null;
v_script CLOB := null;
v_imp_result CLOB;
BEGIN
-- create a task
v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
-- execute the task
v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
-- view the task report
v_report := DBMS_STATS.REPORT_ADVISOR_TASK(v_tname);
DBMS_OUTPUT.PUT_LINE(v_report);
-- implement all recommendations
v_imp_result := DBMS_STATS.IMPLEMENT_ADVISOR_TASK(v_tname);
END;
Note:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.67 IMPORT_COLUMN_STATS Procedure
This procedure retrieves statistics for a particular column from the user statistics table identified by stattab
and stores them in the dictionary.
Syntax
DBMS_STATS.IMPORT_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-71 IMPORT_COLUMN_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table to which this column belongs |
|
Name of the column or extension |
|
Name of the table partition. If the table is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics |
|
Identifier to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
If set to |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
ORA-20005
: Object statistics are locked
Usage Notes
Oracle does not support export or import of statistics across databases of different character sets.
159.7.68 IMPORT_DATABASE_PREFS Procedure
This procedure is used to import the statistics preferences of all the tables, excluding the tables owned by Oracle. These tables can by included by passing TRUE
for the add_sys
parameter.
Syntax
DBMS_STATS.IMPORT_DATABASE_PREFS ( stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL add_sys IN BOOLEAN DEFAULT FALSE);
Parameters
Table 159-72 IMPORT_DATABASE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Statistics table name where to import the statistics |
|
Optional identifier to associate with these statistics within |
|
Schema containing |
|
Value |
Exceptions
ORA-20000
: Insufficient privileges.
Usage Notes
-
To run this procedure, you need to have the SYSDBA role, or both
ANALYZE
ANY
DICTIONARY
andANALYZE
ANY
system privileges. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.IMPORT_DATABASE_PREFS('STATTAB', statown=>'SH');
159.7.69 IMPORT_DATABASE_STATS Procedure
This procedure retrieves statistics for all objects in the database from the user statistics table(s) and stores them in the dictionary.
Syntax
DBMS_STATS.IMPORT_DATABASE_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-73 IMPORT_DATABASE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing from where to retrieve the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Overrides statistics locked at the object (table) level:
|
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
|
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
Usage Notes
-
To run this procedure, you need to have the
SYSDBA
role or bothANALYZE
ANY
DICTIONARY
andANALYZE
ANY
system privileges. -
Oracle does not support export or import of statistics across databases of different character sets.
159.7.70 IMPORT_DICTIONARY_STATS Procedure
This procedure retrieves statistics for all dictionary schemas ('SYS
', 'SYSTEM
' and RDBMS component schemas) from the user statistics table and stores them in the dictionary.
Syntax
DBMS_STATS.IMPORT_DICTIONARY_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-74 IMPORT_DICTIONARY_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing from where to retrieve the statistics |
|
The (optional) identifier to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Overrides statistics lock at the object (table) level:
|
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
|
Usage Notes
-
You must have the
SYSDBA
or bothANALYZE
ANY
DICTIONARY
andANALYZE
ANY
system privilege to execute this procedure. -
Oracle does not support export or import of statistics across databases of different character sets.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.71 IMPORT_FIXED_OBJECTS_STATS Procedure
This procedure retrieves statistics for fixed tables from the user statistics table(s) and stores them in the dictionary.
Syntax
DBMS_STATS.IMPORT_FIXED_OBJECTS_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-75 IMPORT_FIXED_OBJECTS_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing from where to retrieve the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Overrides statistics lock:
|
Usage Notes
-
You must have the
SYSDBA
orANALYZE
ANY
DICTIONARY
system privilege to execute this procedure. -
Oracle does not support export or import of statistics across databases of different character sets.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.72 IMPORT_INDEX_STATS Procedure
This procedure retrieves statistics for a particular index from the user statistics table identified by stattab
and stores them in the dictionary.
Syntax
DBMS_STATS.IMPORT_INDEX_STATS ( ownname VARCHAR2, indname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-76 IMPORT_INDEX_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the index |
|
Name of the index partition. If the index is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Imports statistics even if index statistics are locked |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
ORA-20005
: Object statistics are locked
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Oracle does not support export or import of statistics across databases of different character sets.
159.7.73 IMPORT_SCHEMA_PREFS Procedure
This procedure is used to import the statistics preferences of all the tables owned by the specified owner name.
Syntax
DBMS_STATS.IMPORT_SCHEMA_PREFS ( ownname IN VARCHAR2, stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-77 IMPORT_SCHEMA_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Statistics table name from where to import the statistics |
|
(Optional) Identifier to associate with these statistics within |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To run this procedure, you need to connect as owner, or have the
SYSDBA
privilege, or have theANALYZE
ANY
system privilege. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.IMPORT_SCHEMA_PREFS('SH', 'STAT');
159.7.74 IMPORT_SCHEMA_STATS Procedure
This procedure retrieves statistics for all objects in the schema identified by ownname
from the user statistics table and stores them in the dictionary.
Syntax
DBMS_STATS.IMPORT_SCHEMA_STATS ( ownname VARCHAR2, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULTto_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-78 IMPORT_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
User statistics table identifier describing from where to retrieve the statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Overrides statistics locked at the object (table) level:
|
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
|
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Oracle does not support export or import of statistics across databases of different character sets.
159.7.75 IMPORT_SYSTEM_STATS Procedure
This procedure retrieves system statistics from the user statistics table, identified by stattab
, and stores the statistics in the dictionary.
Syntax
DBMS_STATS.IMPORT_SYSTEM_STATS ( stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL);
Parameters
Table 159-79 IMPORT_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Identifier of the user statistics table where the statistics will be retrieved |
|
Optional identifier associated with the statistics retrieved from the |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
ORA-20002
: Bad user statistics table; may need to be upgraded
ORA-20003
: Unable to import system statistics
Usage Notes
To run this procedure, you need the GATHER_SYSTEM_STATISTICS
role.
Oracle does not support export or import of statistics across databases of different character sets.
159.7.76 IMPORT_TABLE_PREFS Procedure
This procedure is used to set the statistics preferences of the specified table in the specified schema.
Syntax
DBMS_STATS.IMPORT_TABLE_PREFS ( ownname IN VARCHAR2, tabname IN VARCHAR2, stattab IN VARCHAR2, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-80 IMPORT_TABLE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
|
Statistics table name from where to import the statistics |
|
(Optional) Identifier to associate with these statistics within stattab |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
Usage Notes
-
To run this procedure, you need to connect as owner of the table, or have the
ANALYZE
ANY
system privilege. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes. -
Oracle does not support export or import of statistics across databases of different character sets.
Examples
DBMS_STATS.IMPORT_TABLE_PREFS('SH', 'SALES', 'STAT');
159.7.77 IMPORT_TABLE_STATS Procedure
This procedure retrieves statistics for a particular table from the user statistics table identified by stattab
and stores them in the dictionary.
Cascade results in all index statistics associated with the specified table being imported as well.
Syntax
DBMS_STATS.IMPORT_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2, statid VARCHAR2 DEFAULT NULL, cascade BOOLEAN DEFAULT TRUE, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE, stat_category VARCHAR2 DEFAULT DEFAULT_STAT_CATEGORY);
Parameters
Table 159-81 IMPORT_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table |
|
Name of the table partition. If the table is partitioned and if |
|
User statistics table identifier describing from where to retrieve the statistics |
|
Identifier (optional) to associate with these statistics within |
|
If true, column and index statistics for this table are also imported |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Imports statistics even if table statistics are locked |
|
Specifies what statistics to import, accepting multiple values separated by a comma. Values supported:
|
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values in the user statistics table
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Oracle does not support export or import of statistics across databases of different character sets.
159.7.78 INTERRUPT_ADVISOR_TASK Procedure
This procedure interrupts a currently executing Optimizer Statistics Advisor task.
The task ends its operations as it does when at a normal exit, at which point you can access intermediate results. You can also resume the task using the "RESUME_ADVISOR_TASK Procedure".
Syntax
DBMS_STATS.INTERRUPT_ADVISOR_TASK (
task_name IN VARCHAR2);
Parameters
Table 159-82 INTERRUPT_ADVISOR_TASK Procedure Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Consider a case in which a task is executed by one user, interrupted, and then resumed by a different user. In this case, Optimizer Statistics Advisor bases its checks of the resumed execution on the privilege of the user who resumed the task.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-11 Interrupting an Optimizer Statistics Advisor Task
In this example, you start a SQL*Plus session, and then create and execute an advisor task named my_task
:
DECLARE
v_tname VARCHAR2(128) := 'my_task';
v_ename VARCHAR2(128) := NULL;
BEGIN
-- create a task
v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
-- execute the task
v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
/
In a separate terminal, you start a second SQL*Plus session, and then execute the following program:
XEC DBMS_STATS.INTERRUPT_ADVISOR_TASK('my_task');
The first session returns an ORA-13632
to indicate the cancelation of the task:
ORA-13638: The user interrupted the current operation.
159.7.79 LOCK_PARTITION_STATS Procedure
This procedure enables the user to lock statistics for a partition.
Syntax
DBMS_STATS.LOCK_PARTITION_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2);
Parameters
Table 159-83 LOCK_PARTITION_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema to lock |
|
Name of the table |
|
[Sub]Partition name |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.80 LOCK_SCHEMA_STATS Procedure
This procedure locks the statistics of all tables of a schema.
Syntax
DBMS_STATS.LOCK_SCHEMA_STATS ( ownname VARCHAR2);
Parameters
Table 159-84 LOCK_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema to lock |
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
When statistics on a table are locked, all the statistics depending on the table, including table statistics, column statistics, histograms and statistics on all dependent indexes, are considered to be locked.
-
The
SET_*,
DELETE_*,
IMPORT_*,
GATHER_*
procedures that modify statistics in the dictionary of an individual table, index or column will raise an error if statistics of the object is locked. -
Procedures that operates on multiple objects (such as
GATHER_SCHEMA_STATS
) will skip modifying the statistics of an object if it is locked. Many procedures have force argument to override the lock. -
This procedure either freezes the current set of the statistics or keeps the statistics empty (uncollected) to use dynamic statistics.
-
The locked or unlocked state is not exported along with the table statistics when using
EXPORT_*_STATS
procedures. -
Neither the UNLOCK_SCHEMA_STATS Procedure nor the UNLOCK_TABLE_STATS Procedure is designed to unlock statistics of corresponding partitions. When you invoke the LOCK_TABLE_STATS Procedure, it sets the statistics lock bit at the table level. In that case, you cannot gather statistics on dependent objects such as partitions and indexes. By the same token, if table statistics are locked, the dependents are locked and you do not need to explicitly invoke the LOCK_PARTITION_STATS Procedure.
159.7.81 LOCK_TABLE_STATS Procedure
This procedure locks the statistics on the table.
Syntax
DBMS_STATS.LOCK_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2);
Parameters
Table 159-85 LOCK_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table |
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
When statistics on a table are locked, all the statistics depending on the table, including table statistics, column statistics, histograms and statistics on all dependent indexes, are considered to be locked.
-
The
SET_*,
DELETE_*,
IMPORT_*,
GATHER_*
procedures that modify statistics in the dictionary of an individual table, index or column will raise an error if statistics of the object is locked. -
Procedures that operates on multiple objects (such as
GATHER_SCHEMA_STATS
) will skip modifying the statistics of an object if it is locked. Many procedures have force argument to override the lock. -
This procedure either freezes the current set of the statistics or keeps the statistics empty (uncollected) to use dynamic statistics.
-
The locked or unlocked state is not exported along with the table statistics when using
EXPORT_*_STATS
procedures. -
Neither the UNLOCK_SCHEMA_STATS Procedure nor the UNLOCK_TABLE_STATS Procedure is designed to unlock statistics of corresponding partitions. When you invoke the LOCK_TABLE_STATS Procedure, it sets the statistics lock bit at the table level. In that case, you cannot gather statistics on dependent objects such as partitions and indexes. By the same token, if table statistics are locked, the dependents are locked and you do not need to explicitly invoke the LOCK_PARTITION_STATS Procedure.
159.7.82 MERGE_COL_USAGE Procedure
This procedure merges column usage information from a source database by means of a dblink
into the local database.
Syntax
If column usage information already exists for a given table or column MERGE_COL_USAGE
will combine both the local and the remote information.
DBMS_STATS.MERGE_COL_USAGE ( dblink IN VARCHAR2);
Parameters
Table 159-86 MERGE_COL_USAGE Procedure Parameters
Parameter | Description |
---|---|
|
Name of |
Usage Notes
User must be SYS
to execute this procedure. addition the user specified during the creation of the dblink
is expected to have privileges to select from tables in the SYS
schema.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Parameter dblink
cannot be NULL
ORA-20002
: Unable to create a TEMP
table
159.7.83 PREPARE_COLUMN_VALUES Procedures
These procedures convert user-specified minimum, maximum, and histogram endpoint actual values into Oracle's internal representation for future storage using SET_COLUMN_STATS
.
Syntax
DBMS_STATS.PREPARE_COLUMN_VALUES ( srec IN OUT StatRec, charvals CHARARRAY); DBMS_STATS.PREPARE_COLUMN_VALUES ( srec IN OUT StatRec, datevals DATEARRAY); DBMS_STATS.PREPARE_COLUMN_VALUES ( srec IN OUT StatRec, dblvals DBLARRAY); DBMS_STATS.PREPARE_COLUMN_VALUES ( srec IN OUT StatRec, fltvals FLTARRAY); DBMS_STATS.PREPARE_COLUMN_VALUES ( srec IN OUT StatRec, numvals NUMARRAY); DBMS_STATS.PREPARE_COLUMN_VALUES ( srec IN OUT StatRec, rawvals RAWARRAY);
Parameters
Table 159-87 PREPARE_COLUMN_VALUES Procedure Parameters
Parameter | Description |
---|---|
|
Number of values specified in The first corresponding array entry should hold the minimum value for the column, and the last entry should hold the maximum. If there are more than two entries, then all the others hold the remaining height-balanced or frequency histogram endpoint values (with in-between values ordered from next-smallest to next-largest). This value may be adjusted to account for compression, so the returned value should be left as is for a call to |
|
If you want a frequency or hybrid histogram, this array contains the number of occurrences of each distinct value specified in |
|
If you want a hybrid histogram, this array contains the total frequency of values that are less than or equal to each distinct value specified in As an example, for a given array Note:
|
Datatype-specific input parameters (use one) are shown in Table 159-88.
Table 159-88 Datatype-Specific Input Parameters
Type | Description |
---|---|
|
The array of values when the column type is character-based. Up to the first 64 bytes of each string should be provided. Arrays must have between 2 and 2050 entries, inclusive. If the datatype is fixed |
|
Array of values when the column type is date-based |
|
Array of values when the column type is double-based |
|
Array of values when the column type is float-based |
|
Array of values when the column type is numeric-based |
|
Array of values when the column type is |
|
Minimum and maximum values when the column type is national character set based. No histogram information can be provided for a column of this type. If the datatype is fixed |
|
Minimum and maximum values when the column type is |
Output Parameters
Table 159-89 PREPARE_COLUMN_VALUES Procedure Output Parameters
Parameter | Description |
---|---|
|
Internal representation of the minimum suitable for use in a call to |
|
Internal representation of the maximum suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
Exceptions
ORA-20001
: Invalid or inconsistent input values
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.84 PREPARE_COLUMN_VALUES_NVARCHAR Procedure
This procedure converts user-specified minimum, maximum, and histogram endpoint actual values into Oracle's internal representation for future storage using the SET_COLUMN_STATS Procedures.
Syntax
DBMS_STATS.PREPARE_COLUMN_VALUES_NVARCHAR ( srec IN OUT StatRec, nvmin NVARCHAR2, nvmax NVARCHAR2);
Parameters
Table 159-90 PREPARE_COLUMN_VALUES_NVARCHAR Procedure Parameters
Parameter | Description |
---|---|
|
Number of values specified in The first corresponding array entry should hold the minimum value for the column, and the last entry should hold the maximum. If there are more than two entries, then all the others hold the remaining height-balanced or frequency histogram endpoint values (with in-between values ordered from next-smallest to next-largest). This value may be adjusted to account for compression, so the returned value should be left as is for a call to |
|
If you want a frequency or hybrid histogram, then this array contains the number of occurrences of each distinct value specified in |
|
If you want a hybrid histogram, this array contains the total frequency of values that are less than or equal to each distinct value specified in As an example, for a given array Note:
|
Datatype-specific input parameters (use one) are shown in Table 159-88.
Table 159-91 PREPARE_COLUMN_VALUES_NVARCHAR Datatype-Specific Input Parameters
Type | Description |
---|---|
|
The minimum and maximum values when the column type is national character set based. No histogram information can be provided for a column of this type. If the datatype is fixed |
Output Parameters
Table 159-92 PREPARE_COLUMN_VALUES_NVARCHAR Procedure Output Parameters
Parameter | Description |
---|---|
|
Internal representation of the minimum suitable for use in a call to |
|
Internal representation of the maximum suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
Exceptions
ORA-20001
: Invalid or inconsistent input values
Usage Notes
No special privilege or role is needed to invoke this procedure.
Related Topics
159.7.85 PREPARE_COLUMN_VALUES_ROWID Procedure
This procedure converts user-specified minimum, maximum, and histogram endpoint datatype-specific values into Oracle's internal representation for future storage using SET_COLUMN_STATS
.
Syntax
DBMS_STATS.PREPARE_COLUMN_VALUES_ROWID ( srec IN OUT StatRec, rwmin ROWID, rwmax ROWID);
Pragmas
pragma restrict_references(prepare_column_values_rowid, WNDS, RNDS, WNPS, RNPS);
Parameters
Table 159-93 PREPARE_COLUMN_VALUES_ROWID Procedure Parameters
Parameter | Description |
---|---|
srec |
Values (
Values (
|
rwmin |
Minimum value when the column type is |
rwmax |
Maximum value when the column type is |
Table 159-94 StatRec Record Type Fields
Field | Description |
---|---|
|
Number of values specified in The first corresponding array entry should hold the minimum value for the column, and the last entry should hold the maximum. If there are more than two entries, then all the others hold the remaining height-balanced or frequency histogram endpoint values (with in-between values ordered from next-smallest to next-largest). This value may be adjusted to account for compression, so the returned value should be left as is for a call to |
|
If you want a frequency or hybrid histogram, this array contains the number of occurrences of each distinct value specified in |
|
If you want a hybrid histogram, this array contains the total frequency of values that are less than or equal to each distinct value specified in As an example, for a given array Note:
|
|
Internal representation of the minimum suitable for use in a call to |
|
Internal representation of the maximum suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
|
Array suitable for use in a call to |
Usage Notes
No special privilege or role is needed to invoke this procedure.
159.7.86 PUBLISH_PENDING_STATS Procedure
This procedure is used to publish the statistics gathered and stored as pending.
Syntax
DBMS_STATS.PUBLISH_PENDING_STATS (
ownname IN VARCHAR2 DEFAULT USER,
tabname IN VARCHAR2,
no_invalidate BOOLEAN DEFAULT
TO_NO_INVALIDATE_TYPE(GET_PARAM('NO_INVALIDATE')),
force IN BOOLEAN DEFAULT FALSE);
Parameters
Table 159-95 PUBLISH_PENDING_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
|
Do not invalidate the dependent cursors if set to |
|
If |
Security Model
To run this procedure, you must have the same privilege for gathering statistics on the tables that will be touched by this procedure.
Exceptions
ORA-20000
: Insufficient privileges
Usage Notes
-
If the parameter
tabname
isNULL
then publish applies to all tables of the specified schema. -
The default owner/schema is the user who runs the procedure.
Examples
DBMS_STATS.PUBLISH_PENDING_STATS ('SH', null);
159.7.87 PURGE_STATS Procedure
This procedure purges old versions of statistics saved in the dictionary.
To run this procedure, you must have the SYSDBA
or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privilege.
Syntax
DBMS_STATS.PURGE_STATS( before_timestamp TIMESTAMP WITH TIME ZONE);
Parameters
Table 159-96 PURGE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Versions of statistics saved before this timestamp are purged. If |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
Usage Notes
To invoke this procedure you need the ANALYZE
ANY
privilege and the ANALYZE
ANY
DICTIONARY
privilege.
159.7.88 REMAP_STAT_TABLE Procedure
This procedure remaps the names of objects in the user statistics table. It allows you to import the statistics to objects with same definition but with different names.
Syntax
DBMS_STATS.REMAP_STAT_TABLE ( ownname IN VARCHAR2, stattab IN VARCHAR2, src_own IN VARCHAR2, src_tab IN VARCHAR2, tgt_own IN VARCHAR2, tgt_tab IN VARCHAR2);
Parameters
Table 159-97 REMAP_STAT_TABLE Procedure Parameters
Parameter | Description |
---|---|
|
Owner of the statistics table. |
|
User statistics table identifier |
|
Owner of the table to be renamed. This argument cannot be |
|
Name of the table to be renamed. If |
|
New name of the owner of the table. The owner name is also updated for the dependent objects such as columns and indexes. Note that an index of |
|
New name of the table. This argument is valid only if |
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Invalid input
Examples
The following statement remaps all objects of sh
to shsave
in user statistics table sh.ustat
:
DBMS_STATS.REMAP_STAT_TABLE ('sh', 'ustat', 'sh', NULL, 'shsave', NULL);
The following statement can be used to import statistics into objects of shsave
once the preceding remap procedure is completed:
DBMS_STATS.IMPORT_SCHEMA_STATS ('shsave', 'ustat', statown => 'sh');
The following statement remaps sh.customers
to shsave.customers_sav
:
DBMS_STATS.REMAP_STAT_TABLE ('sh', 'ustat', 'sh', 'customers','shsave', 'customers_sav');
159.7.89 REPORT_ADVISOR_TASK Function
This function reports the results of an Optimizer Statistics Advisor task.
Syntax
DBMS_STATS.REPORT_ADVISOR_TASK(
task_name IN VARCHAR2,
execution_name IN VARCHAR2 := NULL,
type IN VARCHAR2 := 'TEXT',
section IN VARCHAR2 := 'ALL',
level IN VARCHAR2 := 'TYPICAL')
RETURN CLOB;
Parameters
Table 159-98 REPORT_ADVISOR_TASK Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
A name that qualifies and identifies an advisor task execution. If not specified, the function uses the latest execution of the specified task. |
|
The type of the Optimizer Statistics Advisor report. Possible values are |
|
A section in the report. Possible values are |
|
The format of the report. Possible values are |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
You can execute this subprogram for
AUTO_STATS_ADVISOR_TASK
, which is predefined. -
This subprogram executes using invoker's rights.
The results of performing this task depend on the privileges of the executing user:
-
SYSTEM
levelOnly users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task on system-level rules. -
Operation level
The results depend on the following privileges:
-
Users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task for all statistics operations. -
Users with the
ANALYZE ANY
privilege but not theANALYZE ANY DICTIONARY
privilege can perform this task for statistics operations related to any schema exceptSYS
. -
Users with the
ANALYZE ANY DICTIONARY
privilege but not theANALYZE ANY
privilege can perform this task for statistics operations related to their own schema and theSYS
schema. -
Users with neither the
ANALYZE ANY
nor theANALYZE ANY DICTIONARY
privilege can only perform this operation for statistics operations relating to their own schema.
-
-
Object level
Users can perform this task for any object for which they have statistics collection privileges.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: User input errors -
ORA-20012
: Optimizer Statistics Advisor errors
Returns
This function returns a CLOB that contains the report.
Examples
(Optional) List and briefly describe the examples for using the API or subprogram here.
Example 159-12 Generating an HTML Report
This example creates a procedure named myrep
, and then calls this procedure to generate an HTML report.
SET ECHO ON
SET FEEDBACK ON
SET SERVEROUTPUT ON
SET TRIMS ON
SET LINESIZE 300
EXECUTE DBMS_OUTPUT.ENABLE (buffer_size => 10000000);
CREATE OR REPLACE PROCEDURE myrep(p_tname VARCHAR2, p_ftype VARCHAR2, which VARCHAR2)
IS
v_report CLOB := null;
v_script CLOB := null;
v_ftype VARCHAR2(400) := p_ftype;
v_tname VARCHAR2(400) := p_tname;
v_len NUMBER(10);
v_ps NUMBER(10) := 10000;
v_pn NUMBER(10) := 1;
v_ret VARCHAR2(32767);
BEGIN
IF which = 'REPORT'
THEN
-- generate a report
v_report := DBMS_STATS.REPORT_ADVISOR_TASK(
task_name => v_tname,
type => v_ftype,
section => 'ALL',
level => 'ALL');
v_len := DBMS_LOB.getlength(v_report);
WHILE (v_pn < v_len)
LOOP
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(v_report, v_ps, v_pn));
v_pn := v_pn + v_ps;
END LOOP;
ELSE
-- generate a script
v_script := DBMS_STATS.SCRIPT_ADVISOR_TASK(v_tname);
v_len := DBMS_LOB.getlength(v_script);
WHILE (v_pn < v_len)
LOOP
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR( v_script, v_ps, v_pn));
v_pn := v_pn + v_ps;
END LOOP;
END IF;
END;
/
SHOW ERRORS
SPOOL report.txt
EXECUTE myrep('my_task','HTML','REPORT');
SPOOL OFF
Example 159-13 Generating a Textual Report for AUTO_STATS_ADVISOR_TASK
The following example invokes the myrep
procedure created in the preceding example for AUTO_STATS_ADVISOR_TASK
:
EXEC myrep('AUTO_STATS_ADVISOR_TASK','TEXT','REPORT');
The following sample output shows part of the report:
GENERAL INFORMATION
-------------------------------------------------------------------------------
Task Name : AUTO_STATS_ADVISOR_TASK
Execution Name : EXEC_97
Created : 07-08-16 10:18:10
Last Modified : 07-11-16 03:02:30
-------------------------------------------------------------------------------
SUMMARY
-------------------------------------------------------------------------------
For execution EXEC_97 of task AUTO_STATS_ADVISOR_TASK, the Statistics Advisor
has 10 finding(s). The findings are related to the following rules:
COMPLETEAUTOJOB, MAINTAINSTATSHISTORY, USEDEFAULTPREFERENCE,
AVOIDSETPROCEDURES, USEDEFAULTPARAMS, USEGATHERSCHEMASTATS, AVOIDSTALESTATS,
UNLOCKNONVOLATILETABLE, USEINCREMENTAL, AVOIDANALYZETABLE. Please refer to the
finding section for detailed information.
-------------------------------------------------------------------------------
FINDINGS
-------------------------------------------------------------------------------
Rule Name: MaintainStatsHistory
Rule Description: Maintain Statistics History
Finding: Statistics history tables are too big.
Recommendation: Check the other findings of this rule, as well as the
findings for the rules AvoidFrequentStatsCollection,
UseDefaultPreference, UseDefaultParams for possible causes
and recommendations.
Rationale: The size of the statistics history table could be big because of
violations of other rules.
----------------------------------------------------
Rule Name: UseDefaultPreference
Rule Description: Use Default Preference for Stats Collection
Finding: Global preference SYS_FLAGS is set to a non-default value '1'.
Recommendation: Set the value of preference SYS_FLAGS to '0'.
Example:
-- Setting preference cascade to default value:
dbms_stats.set_global_prefs('CASCADE', NULL);
Rationale: Preference SYS_FLAGS is for Oracle internal use only, setting it
to nondefault value '1' could cause unforeseen consequences.
.
.
.
159.7.90 REPORT_COL_USAGE Function
This function reports the recorded column (group) usage information.
Syntax
DBMS_STATS.REPORT_COL_USAGE ( ownname IN VARCHAR2, tabname IN VARCHAR2) RETURN CLOB;
Parameters
Table 159-99 REPORT_COL_USAGE Function Parameters
Parameter | Description |
---|---|
|
Owner name. If |
|
Table name. If |
Usage Notes
To run this procedure, you need to have the SYSDBA
administrative privilege or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privileges.
159.7.91 REPORT_GATHER_AUTO_STATS Function
This function runs the auto statistics gathering job in reporting mode. That is, statistics are not actually collected, but all the objects that will be affected when auto statistics gathering is invoked are reported.
Syntax
DBMS_STATS.REPORT_GATHER_AUTO_STATS ( detail_level VARCHAR2 DEFAULT 'TYPICAL', format VARCHAR2 DEFAULT 'TEXT') RETURN CLOB;
Parameters
Table 159-100 REPORT_GATHER_AUTO_STATS Function Parameters
Parameter | Description |
---|---|
|
Detail level for the content of the report
Note that several fields (such as job name, estimated task cost) in the report are populated only when an operation is executed concurrently ( |
|
Report format:
|
Usage Notes
Only user SYS
can run the REPORT_GATHER_AUTO_STATS
function.
159.7.92 REPORT_GATHER_DATABASE_STATS Functions
This function runs the GATHER_DATABASE_STATS
function in reporting mode.
The database does not collect statistics, but reports all objects that would be affected when invoking GATHER_DATABASE_STATS
. The input set of parameters is the same as in GATHER_DATABASE_STATS
, with two extra parameters.
Syntax
DBMS_STATS.REPORT_GATHER_DATABASE_STATS (
estimate_percent IN NUMBER DEFAULT to_estimate_percent_type (
GET_PARAM('ESTIMATE_PERCENT')),
block_sample IN BOOLEAN DEFAULT FALSE,
method_opt IN VARCHAR2 DEFAULT GET_PARAM('METHOD_OPT'),
degree IN NUMBER DEFAULT TO_DEGREE_TYPE(
GET_PARAM('DEGREE')),
granularity IN VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade IN BOOLEAN DEFAULT to_cascade_type (
GET_PARAM('CASCADE')),
stattab IN VARCHAR2 DEFAULT NULL,
statid IN VARCHAR2 DEFAULT NULL,
options IN VARCHAR2 DEFAULT 'GATHER',
statown IN VARCHAR2 DEFAULT NULL,
gather_sys IN BOOLEAN DEFAULT TRUE,
no_invalidate IN BOOLEAN DEFAULT TO_NO_INVALIDATE_TYPE (
GET_PARAM('NO_INVALIDATE')),
gather_temp IN BOOLEAN DEFAULT FALSE,
gather_fixed IN BOOLEAN DEFAULT FALSE,
stattype IN VARCHAR2 DEFAULT DATA,
obj_filter_list IN ObjectTab DEFAULT NULL,
detail_level IN VARCHAR2 DEFAULT 'TYPICAL',
format IN VARCHAR2 DEFAULT 'TEXT')
RETURN CLOB;
Parameters
Table 159-101 REPORT_GATHER_DATABASE_STATS Function Parameters
Parameter | Description |
---|---|
|
The percentage of rows to use for the sample size. The valid range is between 0.000001 and 100. The null value means to compute. Use the constant |
|
Whether or not to use random block sampling instead of random row sampling. Random block sampling is more efficient, but if the data is not randomly distributed on disk, then the sample values may be somewhat correlated. This parameter is only relevant when estimating statistics. |
|
Method options. This parameter accepts the following values:
The default is |
|
Degree of parallelism. The default for |
|
Determines the granularity of statistics to collect. This preference is only relevant for partitioned tables. The following values are valid:
|
|
Gather statistics on the indexes as well. Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the indexes in the database in addition to gathering table and column statistics. Use the constant |
|
User statistics table identifier describing where to save the current statistics. The database assumes that the statistics table resides in the same schema as the object being analyzed. Thus, to use this option, one such table must exist in each schema. |
|
Identifier (optional) to associate with these statistics within |
|
Further specification of which objects to gather statistics for:
|
|
Schema containing |
|
Gathers statistics on the objects owned by the |
|
Does not invalidate the dependent cursors if set to |
|
Gathers statistics on global temporary tables when The temporary table must be created with the |
|
Gather statistics on fixed tables when Only user
The database does not invalidate the dependent cursors on fixed tables on which stats is collected. This option is meant for internal use only. |
|
The type of statistics:
|
|
A list of object filters. The attribute values specified in the object filter are case-insensitive unless double-quoted. Wildcards are allowed in the attribute values. When specified, |
|
The level of detail for the content of the report. Valid values are as follows:
Note that several fields (such as job name, estimated task cost) in the report are populated only when an operation is executed concurrently ( |
|
The format of the report. Valid values are:
|
Return Values
A CLOB
object that contains the report
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Bad input value
Usage Notes
To run this procedure, you need to have the SYSDBA
role or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privileges.
159.7.93 REPORT_GATHER_DICTIONARY_STATS Functions
This function runs the GATHER_DICTIONARY_STATS
procedure in reporting mode.
The database does not collect statistics, but reports all objects affected when invoking GATHER_DICTIONARY_STATS
. The detail level for the report is defined by the detail_level
input parameter. See the descriptions of detail_level
and format
in REPORT_GATHER_DICTIONARY_STATS Functions. For all other input parameters, see GATHER_DICTIONARY_STATS Procedure.
Syntax
DBMS_STATS.REPORT_GATHER_DICTIONARY_STATS (
comp_id IN VARCHAR2 DEFAULT NULL,
estimate_percent IN NUMBER DEFAULT TO_ESTIMATE_PERCENT_TYPE
(GET_PARAM('ESTIMATE_PERCENT')),
block_sample IN BOOLEAN DEFAULT FALSE,
method_opt IN VARCHAR2 DEFAULT GET_PARAM('METHOD_OPT'),
degree IN NUMBER DEFAULT TO_DEGREE_TYPE
(GET_PARAM('DEGREE')),
granularity IN VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'),
cascade IN BOOLEAN DEFAULT TO_CASCADE_TYPE
(GET_PARAM('CASCADE')),
stattab IN VARCHAR2 DEFAULT NULL,
options IN VARCHAR2 DEFAULT 'GATHER AUTO',
no_invalidate IN BOOLEAN DEFAULT TO_NO_INVALIDATE_TYPE
(GET_PARAM('NO_INVALIDATE')),
stattype IN VARCHAR2 DEFAULT 'DATA',
obj_filter_list IN ObjectTab DEFAULT NULL,
detail_level IN VARCHAR2 DEFAULT 'TYPICAL',
format IN VARCHAR2 DEFAULT 'TEXT')
RETURN CLOB;
Parameters
Table 159-102 REPORT_GATHER_DICTIONARY_STATS Function Parameters
Parameter | Description |
---|---|
|
Component ID of the schema to analyze. |
|
Percentage of rows to sample ( |
|
Determines whether to use random block sampling instead of random row sampling. Random block sampling is more efficient, but if the data is not randomly distributed on disk then the sample values may be somewhat correlated. Only pertinent when performing estimate statistics. |
|
The method options. This parameter accepts the following values:
The default is |
|
Degree of parallelism. The default for Use the constant |
|
Determines the granularity of statistics to collect. This preference is only relevant for partitioned tables. The following values are valid:
|
|
Gathers statistics on indexes also. Index statistics gathering will not be parallelized. Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the indexes in the schema in addition to gathering table and column statistics. Use the constant |
|
User statistics table identifier describing where to save the current statistics. |
|
Further specification of objects for which to gather statistics:
|
|
Does not invalidate the dependent cursors if set to |
|
The type of statistics:
|
|
A list of object filters. When provided, this will gather statistics only on objects which satisfy at least one object filter in the list as needed. In a single object filter, we can specify the constraints on the object attributes. The attribute values specified in the object filter are case- insensitive unless double-quoted. Wildcard is allowed in the attribute values. Suppose non- |
|
See the description in REPORT_GATHER_DICTIONARY_STATS Functions. |
|
See the description in REPORT_GATHER_DICTIONARY_STATS Functions. |
Return Values
A CLOB
object that contains the report
Usage Notes
You must have the SYSDBA
or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privilege to execute this procedure.
Exceptions
ORA-20000
: Index does not exist or insufficient privileges
ORA-20001
: Bad input value
ORA-20002
: Bad user statistics table, may need to upgrade it
159.7.94 REPORT_GATHER_FIXED_OBJ_STATS Function
This function runs the GATHER_FIXED_OBJECTS_STATS Procedure in reporting mode.
That is, statistics are not actually collected, but all the objects that will be affected when GATHER_FIXED_OBJ_STATS
is invoked are reported. The input set of parameters are exactly the same as in GATHER_FIXED_OBJ_STATS
with two extra parameters.
Syntax
DBMS_STATS.REPORT_GATHER_FIXED_OBJ_STATS ( stattab IN VARCHAR2 DEFAULT NULL, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL, no_invalidate IN BOOLEAN DEFAULT TO_NO_INVALIDATE_TYPE ( GET_PARAM('NO_INVALIDATE')), detail_level IN VARCHAR2 DEFAULT 'TYPICAL', format IN VARCHAR2 DEFAULT 'TEXT') RETURN CLOB;
Parameters
Table 159-103 REPORT_GATHER_FIXED_OBJ_STATS Procedure Parameters
Parameter | Description |
---|---|
|
User statistics table identifier describing where to save the current statistics |
|
Identifier to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Detail level for the content of the report
Note that several fields (such as job name, estimated task cost) in the report are populated only when an operation is executed concurrently ( |
|
Report format:
|
Return Values
A CLOB
object that contains the report
Usage Notes
You must have the SYSDBA
or ANALYZE
ANY
DICTIONARY
system privilege to execute this procedure.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Bad input value
ORA-20002
: Bad user statistics table, may need to upgrade it
Related Topics
159.7.95 REPORT_GATHER_SCHEMA_STATS Functions
This function runs the GATHER_SCHEMA_STATS
procedure in reporting mode.
The database does not actually gather statistics, but reports all objects that would be affected when invoking GATHER_SCHEMA_STATS
. The input set of parameters is exactly the same as in GATHER_SCHEMA_STATS
, with two extra parameters.
Syntax
DBMS_STATS.REPORT_GATHER_SCHEMA_STATS ( ownname IN VARCHAR2, estimate_percent IN NUMBER DEFAULT TO_ESTIMATE_PERCENT_TYPE ( GET_PARAM ('ESTIMATE_PERCENT')), block_sample IN BOOLEAN DEFAULT FALSE, method_opt IN VARCHAR2 DEFAULT GET_PARAM ('METHOD_OPT'), degree IN NUMBER DEFAULT TO_DEGREE_TYPE ( GET_PARAM('DEGREE')), granularity IN VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade IN BOOLEAN DEFAULT TO_CASCADE_TYPE ( GET_PARAM ('CASCADE')), stattab IN VARCHAR2 DEFAULT NULL, statid IN VARCHAR2 DEFAULT NULL, options IN VARCHAR2 DEFAULT 'GATHER', statown IN VARCHAR2 DEFAULT NULL, no_invalidate IN BOOLEAN DEFAULT TO_NO_INVALIDATE_TYPE ( GET_PARAM ('NO_INVALIDATE')), force IN BOOLEAN DEFAULT FALSE, obj_filter_list IN ObjectTab DEFAULT NULL, detail_level IN VARCHAR2 DEFAULT 'TYPICAL', format IN VARCHAR2 DEFAULT 'TEXT') RETURN CLOB;
Parameters
Table 159-104 REPORT_GATHER_SCHEMA_STATS Function Parameters
Parameter | Description |
---|---|
|
Schema to analyze ( |
|
Percentage of rows to estimate ( |
|
Whether or not to use random block sampling instead of random row sampling. Random block sampling is more efficient, but if the data is not randomly distributed on disk, then the sample values may be somewhat correlated. Only pertinent when doing an estimate statistics. |
|
Accepts:
The default is |
|
Degree of parallelism. The default for |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Gather statistics on the indexes as well. Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the indexes in the schema in addition to gathering table and column statistics. Use the constant |
|
User statistics table identifier describing where to save the current statistics |
|
Identifier (optional) to associate with these statistics within |
|
Further specification of which objects to gather statistics for:
|
|
List of objects found to be stale or empty |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Gather statistics on objects even if they are locked |
|
A list of object filters. When provided, |
|
Detail level for the content of the report
Note that several fields (such as job name, estimated task cost) in the report are populated only when an operation is executed concurrently ( |
|
Report format:
|
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Exceptions
ORA-20000
: Schema does not exist or insufficient privileges
ORA-20001
: Bad input value
Examples
Applying an Object Filter List
The following example specifies that any table with a "T
" prefix in the SAMPLE
schema or any table in the HR
schema, if stale, will have statistics gathered upon it.
DECLARE filter_lst DBMS_STATS.OBJECTTAB := DBMS_STATS.OBJECTTAB(); BEGIN filter_lst.extend(2); filter_lst(1).ownname := 'SAMPLE'; filter_lst(1).objname := 'T%'; filter_lst(2).ownname := 'HR'; DBMS_STATS.GATHER_SCHEMA_STATS(NULL, obj_filter_list => filter_lst, options => 'GATHER STALE'); END;
159.7.96 REPORT_GATHER_TABLE_STATS Function
This procedure runs the GATHER_TABLE_STATS Procedure in reporting mode.
That is, statistics are not actually collected, but all the objects that will be affected when GATHER_TABLE_STATS
is invoked are reported.
Syntax
DBMS_STATS.REPORT_GATHER_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2 DEFAULT NULL, estimate_percent NUMBER DEFAULT to_estimate_percent_type (get_param('ESTIMATE_PERCENT')), block_sample BOOLEAN DEFAULT FALSE, method_opt VARCHAR2 DEFAULT get_param('METHOD_OPT'), degree NUMBER DEFAULT to_degree_type(get_param('DEGREE')), granularity VARCHAR2 DEFAULT GET_PARAM('GRANULARITY'), cascade BOOLEAN DEFAULT to_cascade_type(get_param('CASCADE')), stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type ( get_param('NO_INVALIDATE')), stattype VARCHAR2 DEFAULT 'DATA', force BOOLEAN DEFAULT FALSE) detail_level VARCHAR2 DEFAULT 'TYPICAL', format VARCHAR2 DEFAULT 'TEXT') RETURN CLOB;
Parameters
Table 159-105 REPORT_GATHER_TABLE_STATS Function Parameters
Parameter | Description |
---|---|
|
Schema of table to analyze |
|
Name of table |
|
Name of partition |
|
Percentage of rows to estimate ( |
|
Whether or not to use random block sampling instead of random row sampling. Random block sampling is more efficient, but if the data is not randomly distributed on disk, then the sample values may be somewhat correlated. Only pertinent when doing an estimate statistics. |
|
Accepts either of the following options, or both in combination:
The default is |
|
Degree of parallelism. The default for |
|
Granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Gathers statistics on the indexes for this table. Using this option is equivalent to running the GATHER_INDEX_STATS Procedure on each of the table's indexes. Use the constant |
|
User statistics table identifier describing where to save the current statistics |
|
Identifier (optional) to associate with these statistics within |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Statistics type. The only value allowed is |
|
Gather statistics of table even if it is locked |
|
Detail level for the content of the report
Note that several fields (such as job name, estimated task cost) in the report are populated only when an operation is executed concurrently ( |
|
Report format:
|
Return Values
A CLOB
object that contains the report
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Related Topics
159.7.97 REPORT_SINGLE_STATS_OPERATION Function
This function generates a report for the provided operation optionally in a particular pluggable database (PDB) in a multitenant environment.
Syntax
DBMS_STATS.REPORT_SINGLE_STATS_OPERATIONS ( opid NUMBER, detail_level VARCHAR2 DEFAULT 'TYPICAL', format VARCHAR2 DEFAULT 'TEXT' container_id NUMBER DEFAULT NULL) RETURN CLOB;
Parameters
Table 159-106 REPORT_SINGLE_STATS_OPERATION Function Parameters
Parameter | Description |
---|---|
|
Operation ID |
|
Detail level for the content of the report
Note that several fields (such as job name, estimated task cost) in the report are populated only when an operation is executed concurrently ( |
|
Report format:
|
|
ID of the pluggable database (PDB) on which this operation was performed. Note that in a multitenant environment, operation ID does not uniquely identify an operation. That is, different operations from distinct PDBs may have the same operation ID. Hence, in a multitenant environment, if a PDB ID is not provided, then the report may contain multiple operations. In a typical (non-CDB) database environment, operation ID is unique to each operation. |
Usage Notes
To invoke this procedure you need the ANALYZE
ANY
privilege and the ANALYZE
ANY
DICTIONARY
privilege.
159.7.98 REPORT_STATS_OPERATIONS Function
This function generates a report of all statistics operations that take place between two timestamps which may or may not have been provided.
It allows the scope of the report to be narrowed down so that report will include only auto statistics gathering runs. Furthermore, in a multitenant environment, users may optionally provide a set of pluggable database (PDB) IDs so that only statistics operations from the specified pluggable databases will be reported.
Syntax
DBMS_STATS.REPORT_STATS_OPERATIONS ( detail_level VARCHAR2 DEFAULT 'TYPICAL', format VARCHAR2 DEFAULT 'TEXT', latestN NUMBER DEFAULT NULL, since TIMESTAMP WITH TIME ZONE DEFAULT NULL, until TIMESTAMP WITH TIME ZONE DEFAULT NULl, auto_only BOOLEAN DEFAULT FALSE, container_ids DBMS_UTILITY.NUMBER_ARRAY DEFAULT DBMS_STATS.NULL_NUMTAB) RETURN CLOB;
Parameters
Table 159-107 REPORT_STATS_OPERATIONS Function Parameters
Parameter | Description |
---|---|
|
Detail level for the content of the report
|
|
Report format:
|
|
Restricts the report to contain only the latest N operations that took place between the provided time points (since and until). The default value is |
|
The report will include only statistics operations that started after this timestamp. |
|
The report will include only statistics operations that before after this timestamp. |
|
When |
|
A multitenant environment contains one or more pluggable databases (PDBs). |
Usage Notes
To invoke this procedure you need the ANALYZE
ANY
privilege and the ANALYZE
ANY
DICTIONARY
privilege.
Examples
Note that the type for container_ids
input parameter is DBMS_UTILITY.NUMBER_ARRAY
which is an associative PL/SQL array collection. Although associative array type allows for more flexible harvals
table-like organization of entries, this function treats container_ids
as a regular table collection with the first ID located at index 1 and the last id located at index container_ids.count
without any empty array slot left between any two IDs. An example for 3 container ids is provided.
DECLARE conid_tab DBMS_UTILITY.NUMBER_ARRAY; report clob; BEGIN conid_tab(1) := 124; conid_tab(2) := 63; conid_tab(3) := 98; report := DBMS_STATS.REPORT_STATS_OPERATIONS (container_ids => conid_tab); END;
159.7.99 RESET_ADVISOR_TASK Procedure
This procedure resets an Optimizer Statistics Advisor task execution to its initial state. Only reset a task that is not currently executing.
Syntax
DBMS_STATS.RESET_ADVISOR_TASK (
task_name IN VARCHAR2);
Parameters
Table 159-108 RESET_ADVISOR_TASK Procedure Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
159.7.100 RESET_COL_USAGE Procedure
This procedure deletes the recorded column (group) usage information.
This procedure should only be used in very rare cases when the seed column usage needs to be initialized.
Syntax
DBMS_STATS.RESET_COL_USAGE ( ownname IN VARCHAR2, tabname IN VARCHAR2);
Parameters
Table 159-109 RESET_COL_USAGE Procedure Parameters
Parameter | Description |
---|---|
|
Owner name. If |
|
Table name. If |
Usage Notes
To run this procedure, you need to have the SYSDBA
administrative privilege, or both the ANALYZE ANY DICTIONARY
and the ANALYZE ANY
system privileges.
159.7.101 RESET_GLOBAL_PREF_DEFAULTS Procedure
This procedures sets global preference, such as CASCADE
, ESTIMATE_PERCENT
and GRANULARITY
, to default values.
This reverses the global preferences set by the SET_GLOBAL_PREFS Procedure.
Syntax
DBMS_STATS.RESET_GLOBAL_PREF_DEFAULTS;
Usage Notes
To invoke this procedure you need the ANALYZE
ANY
privilege and the ANALYZE
ANY
DICTIONARY
privilege.
159.7.102 RESET_PARAM_DEFAULTS Procedure
This deprecated procedure resets the default values of all parameters to Oracle recommended values.
Note:
This subprogram has been replaced by improved technology and is maintained only for purposes of backward compatibility. Instead of this procedure, use the RESET_GLOBAL_PREF_DEFAULTS Procedure.
See also . DBMS_STATS Deprecated Subprograms
Syntax
DBMS_STATS.RESET_PARAM_DEFAULTS;
159.7.103 RESTORE_DATABASE_STATS Procedure
This procedure restores statistics of all tables of the database as of a specified timestamp (as_of_timestamp
).
Syntax
DBMS_STATS.RESTORE_DATABSE_STATS( as_of_timestamp TIMESTAMP WITH TIME ZONE, force BOOLEAN DEFAULT FALSE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')));
Parameters
Table 159-110 RESTORE_DATABASE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
The timestamp to which to restore statistics |
|
Restores statistics even if their statistics are locked |
|
Does not invalidate the dependent cursors if set to |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
ORA-20006
: Unable to restore statistics, statistics history not available
159.7.104 RESTORE_DICTIONARY_STATS Procedure
This procedure restores statistics of all dictionary tables (tables of 'SYS
', 'SYSTEM
' and RDBMS component schemas) as of a specified timestamp (as_of_timestamp
).
Syntax
DBMS_STATS.RESTORE_DICTIONARY_STATS( as_of_timestamp TIMESTAMP WITH TIME ZONE, force BOOLEAN DEFAULT FALSE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')));
Parameters
Table 159-111 RESTORE_DICTIONARY_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Timestamp to which to restore statistics |
|
Restores statistics even if their statistics are locked |
|
Does not invalidate the dependent cursors if set to |
Usage Notes
To run this procedure, you must have the SYSDBA
or both ANALYZE
ANY
DICTIONARY
and ANALYZE
ANY
system privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
ORA-20006
: Unable to restore statistics, statistics history not available
159.7.105 RESTORE_FIXED_OBJECTS_STATS Procedure
This procedure restores statistics of all fixed tables as of a specified timestamp (as_of_timestamp
).
Syntax
DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS( as_of_timestamp TIMESTAMP WITH TIME ZONE, force BOOLEAN DEFAULT FALSE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')));
Parameters
Table 159-112 RESTORE_FIXED_OBJECTS_STATS Procedure Parameters
Parameter | Description |
---|---|
|
The timestamp to which to restore statistics |
|
Restores statistics even if their statistics are locked |
|
Does not invalidate the dependent cursors if set to |
Usage Notes
To run this procedure, you must have the SYSDBA
or ANALYZE
ANY
DICTIONARY
system privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
ORA-20006
: Unable to restore statistics, statistics history not available
159.7.106 RESTORE_SCHEMA_STATS Procedure
This procedure restores statistics of all tables of a schema as of a specified timestamp (as_of_timestamp
).
Syntax
DBMS_STATS.RESTORE_SCHEMA_STATS( ownname VARCHAR2, as_of_timestamp TIMESTAMP WITH TIME ZONE, force BOOLEAN DEFAULT FALSE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')));
Parameters
Table 159-113 RESTORE_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Schema of the tables for which the statistics are to be restored |
|
The timestamp to which to restore statistics |
|
Restores statistics even if their statistics are locked |
|
Does not invalidate the dependent cursors if set to |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
ORA-20006
: Unable to restore statistics, statistics history not available
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.107 RESTORE_SYSTEM_STATS Procedure
This procedure restores system statistics as of a specified timestamp (as_of_timestamp
).
Syntax
DBMS_STATS.RESTORE_SCHEMA_STATS( as_of_timestamp TIMESTAMP WITH TIME ZONE);
Parameters
Table 159-114 RESTORE_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
The timestamp to which to restore statistics |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
ORA-20006
: Unable to restore statistics, statistics history not available
Usage Notes
To run this procedure, you need the GATHER_SYSTEM_STATISTICS
role.
159.7.108 RESTORE_TABLE_STATS Procedure
This procedure restores statistics of a table as of a specified timestamp (as_of_timestamp
). It also restores statistics of associated indexes and columns.
If the table statistics were locked at the specified timestamp the procedure will lock the statistics. The procedure will not restore user defined statistics.
Syntax
DBMS_STATS.RESTORE_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2, as_of_timestamp TIMESTAMP WITH TIME ZONE, restore_cluster_index BOOLEAN DEFAULT FALSE, force BOOLEAN DEFAULT FALSE, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (GET_PARAM('NO_INVALIDATE')));
Parameters
Table 159-115 RESTORE_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
The schema of the table for which the statistics are to be restored |
|
The table name |
|
The timestamp to which to restore statistics |
|
If the table is part of a cluster, restore statistics of the cluster index if set to |
|
Restores statistics even if the table statistics are locked. If the table statistics were not locked at the specified timestamp, it unlocks the statistics. |
|
Does not invalidate the dependent cursors if set to |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent values
ORA-20006
: Unable to restore statistics, statistics history not available
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.109 RESUME_ADVISOR_TASK Procedure
This procedure resumes an interrupted task. It only resumes the execution that was most recently interrupted.
Syntax
DBMS_STATS.RESUME_ADVISOR_TASK (
task_name IN VARCHAR2);
Parameters
Table 159-116 RESUME_ADVISOR_TASK Procedure Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Consider a case in which a task is executed by one user, interrupted, and then resumed by a different user. In this case, Optimizer Statistics Advisor bases its checks of the resumed execution on the privilege of the user who resumed the task.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-14 Resuming an Interrupted Task
In this example, you start a SQL*Plus session, and then create and execute an advisor task named my_task
:
DECLARE
v_tname VARCHAR2(128) := 'my_task';
v_ename VARCHAR2(128) := NULL;
BEGIN
-- create a task
v_tname := DBMS_STATS.CREATE_ADVISOR_TASK(v_tname);
-- execute the task
v_ename := DBMS_STATS.EXECUTE_ADVISOR_TASK(v_tname);
END;
/
In a separate terminal, you start a second SQL*Plus session, and then execute the following program:
XEC DBMS_STATS.INTERRUPT_ADVISOR_TASK('my_task');
The first session returns an ORA-13632
to indicate the cancelation of the task:
ORA-13638: The user interrupted the current operation.
In the second SQL*Plus session, you resume the task execution as follows:
XEC DBMS_STATS.RESUME_ADVISOR_TASK('my_task');
159.7.110 SCRIPT_ADVISOR_TASK Function
Retrieves the script that implements the recommended actions for the problems found by Optimizer Statistics Advisor.
The generated script contains PL/SQL statements that you can choose to execute. Preceding the commands for each action are comments that list the potential side effects. You can review the comments, and choose to execute only the desired sections.
Syntax
DBMS_STATS.SCRIPT_ADVISOR_TASK ( task_name IN VARCHAR2, execution_name IN VARCHAR2 := NULL, dir_name IN VARCHAR2 := NULL, level IN VARCHAR2 := 'TYPICAL') RETURN CLOB;
Parameters
Table 159-117 SCRIPT_ADVISOR_TASK Function Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
A name that qualifies and identifies an advisor execution. If not specified, then the advisor automatically generates it. If the specified execution conflicts with the name of an existing execution, then the function returns an error. |
|
Directory name to which to write the generated script. If the name is not specified (NULL), then the function includes the script in the returned CLOB. If the name is specified, then the function returns the script as a CLOB and as a new file in the specified directory. |
|
The level of the script to generate. Possible values are
|
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
You can execute this subprogram for
AUTO_STATS_ADVISOR_TASK
, which is predefined. -
This subprogram executes using invoker's rights.
The results of performing this task depend on the privileges of the executing user:
-
SYSTEM
levelOnly users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task on system-level rules. -
Operation level
The results depend on the following privileges:
-
Users with both the
ANALYZE ANY
andANALYZE ANY DICTIONARY
privileges can perform this task for all statistics operations. -
Users with the
ANALYZE ANY
privilege but not theANALYZE ANY DICTIONARY
privilege can perform this task for statistics operations related to any schema exceptSYS
. -
Users with the
ANALYZE ANY DICTIONARY
privilege but not theANALYZE ANY
privilege can perform this task for statistics operations related to their own schema and theSYS
schema. -
Users with neither the
ANALYZE ANY
nor theANALYZE ANY DICTIONARY
privilege can only perform this operation for statistics operations relating to their own schema.
-
-
Object level
Users can perform this task for any object for which they have statistics collection privileges.
Return Values
This function returns a CLOB that contains the script.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
Example 159-15 Creating an Optimizer Statistics Advisor Script
This example creates a procedure named myrep
, and then calls this procedure to print the script the implements the recommendations.
SET ECHO ON
SET FEEDBACK ON
SET SERVEROUTPUT ON
SET TRIMS ON
SET LINESIZE 300
EXECUTE DBMS_OUTPUT.ENABLE (buffer_size => 10000000);
CREATE OR REPLACE PROCEDURE myrep(p_tname VARCHAR2, p_ftype VARCHAR2, which VARCHAR2)
IS
v_report CLOB := null;
v_script CLOB := null;
v_ftype VARCHAR2(400) := p_ftype;
v_tname VARCHAR2(400) := p_tname;
v_len NUMBER(10);
v_ps NUMBER(10) := 10000;
v_pn NUMBER(10) := 1;
v_ret VARCHAR2(32767);
BEGIN
IF which = 'REPORT'
THEN
-- generate a report
v_report := DBMS_STATS.REPORT_ADVISOR_TASK(
task_name => v_tname,
type => v_ftype,
section => 'ALL',
level => 'ALL');
v_len := DBMS_LOB.getlength(v_report);
WHILE (v_pn < v_len)
LOOP
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(v_report, v_ps, v_pn));
v_pn := v_pn + v_ps;
END LOOP;
ELSE
-- generate a script
v_script := DBMS_STATS.SCRIPT_ADVISOR_TASK(v_tname);
v_len := DBMS_LOB.getlength(v_script);
WHILE (v_pn < v_len)
LOOP
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.SUBSTR(v_script, v_ps, v_pn));
v_pn := v_pn + v_ps;
END LOOP;
END IF;
END;
/
SHOW ERRORS
SPOOL report.txt
EXECUTE myrep('my_task','-','SCRIPT');
SPOOL OFF
See Also:
159.7.111 SEED_COL_USAGE Procedure
This procedure seeds column usage information from a statements in the specified SQL tuning set, or in the database.
The procedure iterates over the SQL statements, compiles them, and then seeds column usage information for the columns that appear in these statements. You can monitor the workload on the system for given amount of time and seed the and seed the column usage information based on the columns that appear in statements executed during the monitoring window.
Syntax
DBMS_STATS.SEED_COL_USAGE ( sqlset_name IN VARCHAR2, owner_name IN VARCHAR2, time_limit IN POSITIVE DEFAULT NULL);
Parameters
Table 159-118 SEED_COL_USAGE Procedure Parameters
Parameter | Description |
---|---|
|
Name of the SQL tuning set that contains the statements to be monitored. If this parameter and |
|
Owner of the SQL tuning set that contains the statements to be monitored. If this parameter and |
|
Time limit (in seconds). |
Security Model
To invoke this procedure you must have the ANALYZE
ANY
privilege and the ANALYZE
ANY
DICTIONARY
privilege.
Exceptions
ORA-20000
: Insufficient privileges
Usage Notes
This procedure also records group of columns. You can create extensions for the recorded group of columns using the CREATE_EXTENDED_STATS Function procedure. If sqlset_name
and owner_name
are NULL
, then the procedure records the column (group) usage information for the statements executed in the system in next time_limit
seconds.
This monitoring procedure records different information from the traditional column usage information that is visible in SYS.COL_USAGE$
. The procedure stores information in SYS.COL_GROUP_USAGE$
.
Examples
The following example turns on monitoring for 5 minutes or 300 seconds.
BEGIN DBMS_STATS.SEED_COL_USAGE (null,null,300); END;
159.7.112 SET_ADVISOR_TASK_PARAMETER Procedure
This procedure updates the value of an Optimizer Statistics Advisor task parameter.
Syntax
DBMS_STATS.SET_ADVISOR_TASK_PARAMETER ( task_name IN VARCHAR2, parameter IN VARCHAR2, value IN VARCHAR2);
Parameters
Table 159-119 SET_ADVISOR_TASK_PARAMETER Procedure Parameters
Parameter | Description |
---|---|
|
The name of the Optimizer Statistics Advisor task. |
|
The name of the parameter to set. The function returns an error if the specified parameter does not exist. |
|
The new value of the parameter. |
Security Model
Note the following:
-
To execute this subprogram, you must have the
ADVISOR
privilege. -
You must be the owner of the task.
-
This subprogram executes using invoker's rights.
Exceptions
-
ORA-20000
: Insufficient privileges -
ORA-20001
: Invalid input values -
ORA-20012
: Optimizer Statistics Advisor errors
See Also:
Oracle Database SQL Tuning Guide to learn how to manage Optimizer Statistics Advisor
159.7.113 SET_COLUMN_STATS Procedures
This procedure sets column-related information.
In the version of this procedure that deals with user-defined statistics, the statistics type specified is the type to store in the dictionary, in addition to the actual user-defined statistics. If this statistics type is NULL
, the statistics type associated with the index or column is stored.
Syntax
DBMS_STATS.SET_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, distcnt NUMBER DEFAULT NULL, density NUMBER DEFAULT NULL, nullcnt NUMBER DEFAULT NULL, srec StatRec DEFAULT NULL, avgclen NUMBER DEFAULT NULL, flags NUMBER DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Use the following for user-defined statistics:
DBMS_STATS.SET_COLUMN_STATS ( ownname VARCHAR2, tabname VARCHAR2, colname VARCHAR2, partname VARCHAR2 DEFAULT NULL, stattab VARCHAR2 DEFAULT NULL, statid VARCHAR2 DEFAULT NULL, ext_stats RAW, stattypown VARCHAR2 DEFAULT NULL, stattypname VARCHAR2 DEFAULT NULL, statown VARCHAR2 DEFAULT NULL, no_invalidate BOOLEAN DEFAULT to_no_invalidate_type( get_param('NO_INVALIDATE')), force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-120 SET_COLUMN_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema. |
|
Name of the table to which this column belongs. |
|
Name of the column or extension |
|
Name of the table partition in which to store the statistics. If the table is partitioned and |
|
User statistics table identifier describing where to store the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
User-defined statistics |
|
Schema of the statistics type |
|
Name of the statistics type |
|
Number of distinct values |
|
Column density. If this value is |
|
Number of |
|
|
|
Average length for the column (in bytes) |
|
For internal Oracle use (should be left as |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Sets the values even if statistics of the column are locked |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or inconsistent input values
ORA-20005
: Object statistics are locked
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.114 SET_DATABASE_PREFS Procedure
This procedure sets the statistics preferences of all the tables, excluding the tables owned by the database. These tables can by included by passing TRUE
for the add_sys
parameter.
Syntax
DBMS_STATS.SET_DATABASE_PREFS ( pname IN VARCHAR2, pvalue IN VARCHAR2, add_sys IN BOOLEAN DEFAULT FALSE);
Parameters
Table 159-121 SET_DATABASE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Preference name. The existing value for following preferences can be set and default preference values will be used:
|
|
Preference value. If |
|
Value |
Table 159-122 Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. Consider a synopsis as an internal management structure that samples distinct values. You can delete the following preferences:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Determines whether to collect index statistics as part of gathering table statistics. |
|
Determines the degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to sample. The valid range is between 0.000001 and 100. Use the constant |
|
Controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. This preference takes two values:
|
|
Determines the granularity of statistics to collect. This preference is only relevant for partitioned tables. The following values are valid:
|
|
Determines whether the global statistics for a partitioned table are maintained without performing a full table scan. When a table is partitioned, an application typically loads data into a new partition. As new partitions are added and data is loaded, global table statistics must be kept up to date. If the following conditions are met, then the database updates the global table statistics by scanning only the changed partitions instead of the entire table:
If the |
|
Controls which synopses to collect when
|
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
Controls column statistics collection and histogram creation. When setting preferences at the global, schema, database, or dictionary level, only
The
The default is |
|
Controls the invalidation of dependent cursors of the tables for which statistics are being gathered. The default is If set to |
|
Specifies which objects require statistics to be gathered. Valid values are as follows:
|
|
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether the database publishes newly gathered statistics after the gathering job completes. You can gather statistics without publishing them immediately. This technique enables you to test new statistics before publishing them. |
|
Determines the percentage of rows in a table that must change before the statistics on that table are stale and need to be regathered. The valid domain for |
|
Specifies which statistics to import or export, accepting multiple values separated by a comma. Values supported:
The value ' |
|
Specifies the average number of blocks assumed to be cached in the buffer cache when calculating the index clustering factor. |
Security Model
To run this procedure, you must have the SYSDBA
role or both ANALYZE ANY DICTIONARY
and ANALYZE ANY
system privileges.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Invalid or illegal input values
Usage Notes
Both arguments are of type VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Examples
DBMS_STATS.SET_DATABASE_PREFS('CASCADE', 'DBMS_STATS.AUTO_CASCADE'); DBMS_STATS.SET_DATABASE_PREFS('ESTIMATE_PERCENT','9'); DBMS_STATS.SET_DATABASE_PREFS('DEGREE','99');
See Also:
Oracle Database SQL Tuning Guide to learn how to set optimizer statistics preferences
159.7.115 SET_GLOBAL_PREFS Procedure
This procedure sets statistics preferences at the global level.
Syntax
DBMS_STATS.SET_GLOBAL_PREFS (
pname IN VARCHAR2,
pvalue IN VARCHAR2);
Parameters
Table 159-123 SET_GLOBAL_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Preference name. The default value for the following preferences can be set:
|
|
Preference value. If |
Table 159-124 Global Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. Consider a synopsis as an internal management structure that samples distinct values. You can delete the following preferences:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Controls the objects considered for statistics collection. It takes the following values:
This preference is applicable only for automatic statistics collection. |
|
Determines whether to collect index statistics as part of gathering table statistics. |
|
Determines whether statistics are gathered concurrently on multiple objects, or serially, one object at a time. Valid values are:
|
|
Determines the degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to sample. The valid range is between 0.000001 and 100. Use the constant |
|
Controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. This preference takes two values:
|
|
Determines the granularity of statistics to collect. This preference is only relevant for partitioned tables. The following values are valid:
|
|
Determines whether the global statistics for a partitioned table are maintained without performing a full table scan. When a table is partitioned, an application typically loads data into a new partition. As new partitions are added and data is loaded, global table statistics must be kept up to date. If the following conditions are met, then the database updates the global table statistics by scanning only the changed partitions instead of the entire table:
If the |
|
Controls which synopses to collect when
|
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
Controls column statistics collection and histogram creation. It accepts either of the following options, or both in combination:
The default is |
|
Controls the invalidation of dependent cursors of the tables for which statistics are being gathered. The default is If set to |
|
Determines the
|
|
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether the database publishes newly gathered statistics after the gathering job completes. You can gather statistics without publishing them immediately. This technique enables you to test new statistics before publishing them. |
|
Determines the percentage of rows in a table that must change before the statistics on that table are stale and need to be regathered. The valid domain for |
|
Specifies which statistics to import or export, accepting multiple values separated by a comma. Values supported:
The value |
|
Specifies the average number of blocks assumed to be cached in the buffer cache when calculating the index clustering factor. |
|
Specifies the number of minutes before timing out for locks and pins required for updating statistics. It accepts values in the range |
Security Model
To run this procedure, you must have the SYSDBA
or both ANALYZE ANY DICTIONARY
and ANALYZE ANY
system privilege.
Exceptions
ORA-20000
: Insufficient privileges
ORA-20001
: Invalid or illegal input values
Usage Notes
-
This setting is honored only if there is no preference specified for the table to be analyzed.
-
Both arguments are of type
VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Example 159-16 Overriding Statistics Preferences at the Global Level
You use the SET_GLOBAL_PREFS
procedure to set the ESTIMATE_PERCENT
preference to 5
for every table in the database that does not have a table preference set. Because sh.costs
does not have a preference set, the global setting applies to this table.
SQL> EXEC DBMS_STATS.SET_GLOBAL_PREFS ('ESTIMATE_PERCENT', '5');
PL/SQL procedure successfully completed.
You use SET_TABLE_PREFS
to set the PREFERENCE_OVERRIDES_PARAMETER
preference to true for the sh.sales
table only.
SQL> EXEC DBMS_STATS.SET_TABLE_PREFS('sh','sales','PREFERENCE_OVERRIDES_PARAMETER','TRUE');
PL/SQL procedure successfully completed.
A script attempts to set ESTIMATE_PERCENT
to 10
when gathering statistics for sh.sales
. However, because PREFERENCE_OVERRIDES_PARAMETER
is TRUE
for this table, and because a global preference is defined, Oracle Database gathers statistics using the global setting of 5
rather than the specified setting of 10
:
SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS ('sh', 'costs', ESTIMATE_PERCENT=>10);
PL/SQL procedure successfully completed.
See Also:
Oracle Database SQL Tuning Guide to learn how to set optimizer statistics preferences
159.7.116 SET_INDEX_STATS Procedures
These procedures set index-related statistics.
The version of this procedure that accepts ext_stats
sets statistics for use with domain indexes. The statistics type specified is the type to store in the dictionary, in addition to the actual user-defined statistics. If this statistics type is null, then the database stores the statistics type associated with the index or column.
Syntax
DBMS_STATS.SET_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numlblks NUMBER DEFAULT NULL,
numdist NUMBER DEFAULT NULL,
avglblk NUMBER DEFAULT NULL,
avgdblk NUMBER DEFAULT NULL,
clstfct NUMBER DEFAULT NULL,
indlevel NUMBER DEFAULT NULL,
flags NUMBER DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
get_param('NO_INVALIDATE')),
guessq NUMBER DEFAULT NULL,
cachedblk NUMBER DEFAULT NULL,
cachehit NUMBER DEFUALT NULL,
force BOOLEAN DEFAULT FALSE);
Use the following syntax for user-defined domain index statistics:
DBMS_STATS.SET_INDEX_STATS (
ownname VARCHAR2,
indname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
ext_stats RAW,
stattypown VARCHAR2 DEFAULT NULL,
stattypname VARCHAR2 DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type(
get_param('NO_INVALIDATE')),
force BOOLEAN DEFAULT FALSE);
Parameters
Table 159-125 SET_INDEX_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the index |
|
Name of the index partition in which to store the statistics. If the index is partitioned and if |
|
User statistics table identifier describing where to store the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
User-defined statistics |
|
Schema of the statistics type |
|
Name of the statistics type |
|
Number of rows in the index (partition) |
|
Number of leaf blocks in the index (partition) |
|
Number of distinct keys in the index (partition) |
|
Average integral number of leaf blocks in which each distinct key appears for this index (partition). If not provided, then this value is derived from |
|
Average integral number of data blocks in the table pointed to by a distinct key for this index (partition). If not provided, then this value is derived from |
|
See |
|
Height of the index (partition) |
|
For internal Oracle use (should be left as |
|
Schema containing |
|
Does not invalidate the dependent cursors if set to |
|
Guess quality. See the |
|
Internal use only. Do not set. |
|
Internal use only. Do not set. |
|
Sets the values even if statistics of the index are locked |
Security Model
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid input value
ORA-20005
: Object statistics are locked
Usage Notes
-
The Optimizer uses the cached data to estimate number of cached blocks for index or statistics table access. The total cost of the operation will be combined from the I/O cost of reading not cached blocks from disk, the CPU cost of getting cached blocks from the buffer cache, and the CPU cost of processing the data.
-
Oracle maintains
cachedblk
andcachehit
at all times but uses correspondent caching statistics for optimization as part of the table and index statistics only when the user callsDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATS
procedure for auto mode orDBMS_STATS.GATHER_SYSTEM_STATS
for manual mode. In order to prevent the user from utilizing inaccurate and unreliable data, the optimizer will compute a 'confidence factor' for eachcachehit
and acachedblk
for each object. If the 'confidence factor' for the value meets confidence criteria, this value will be used, otherwise the defaults will be used. -
The automatic maintenance algorithm for object caching statistics assumes that there is only one major workload for the system and adjusts statistics to this workload, ignoring other "minor" workloads. If this is not the case, you must use manual mode for maintaining object caching statistics.
-
The object caching statistics maintenance algorithm for auto mode prevents you from using statistics in the following situations
-
When not enough data has been analyzed, such as when an object has been recently create
-
When the system does not have one major workload resulting in averages not corresponding to real values.
-
See Also:
Oracle Database SQL Tuning Guide to learn how to set artificial statistics
159.7.117 SET_PARAM Procedure
This deprecated procedure sets default values for parameters of DBMS_STATS
procedures.
Note:
This subprogram has been replaced by improved technology and is maintained only for purposes of backward compatibility. In this case, use the SET_GLOBAL_PREFS Procedure.
See also DBMS_STATS Deprecated Subprograms.
You can use the GET_PARAM
Function
to get the current default value of a parameter.
Syntax
DBMS_STATS.SET_PARAM ( pname IN VARCHAR2, pval IN VARCHAR2);
Parameters
Table 159-126 SET_PARAM Procedure Parameters
Parameter | Description |
---|---|
|
The parameter name The default value for following parameters can be set.
|
|
The parameter value. If
|
Usage Notes
-
To run this procedure, you must have the
SYSDBA
or both theANALYZE
ANY
DICTIONARY
andANALYZE
ANY
system privileges. -
Note that both arguments are of type
VARCHAR2
and the values need to be enclosed in quotes even when they represent numbers. -
Note also the difference between
NULL
and'NULL'
:-
When
NULL
is unquoted, this sets the parameter to the value Oracle recommends. -
In the case of the quoted
'NULL'
, this sets the value of the parameter toNULL
.
-
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or illegal input value
Examples
DBMS_STATS.SET_PARAM('CASCADE','DBMS_STATS.AUTO_CASCADE'); DBMS_STATS.SET_PARAM('ESTIMATE_PERCENT','5'); DBMS_STATS.SET_PARAM('DEGREE','NULL');
159.7.118 SET_PROCESSING_RATE Procedure
This procedure sets the value of rate of processing for a given operation.
Syntax
DBMS_STATS.SET_PROCESSING_RATE (
opname IN VARCHAR2,
procrate IN NUMBER);
Parameters
Table 159-127 SET_PROCESSING_RATE Procedure Parameters
Parameter | Description |
---|---|
|
Name of the operation. |
|
Processing rate. Valid values are as follows:
|
Security Model
You must have the OPTIMIZER_PROCESSING_RATE
role to run this procedure.
Usage Notes
AUTO DOP
uses processing rates to determine the optimal degree of parallelism for a SQL statement.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or illegal input value
159.7.119 SET_SCHEMA_PREFS Procedure
This procedure sets the statistics preferences of all tables owned by the specified user.
Syntax
DBMS_STATS.SET_SCHEMA_PREFS ( ownname IN VARCHAR2, pname IN VARCHAR2, pvalue IN VARCHAR2);
Parameters
Table 159-128 SET_SCHEMA_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Preference name. You can set the default value for the following preferences:
|
|
Preference value. If |
Table 159-129 Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. You can consider a synopsis as an internal management structure that samples distinct values. You can set the following preferences:
|
|
Determines whether index statistics are collected as part of gathering table statistics. |
|
Determines degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to estimate. The valid range is [0.000001,100]. Use the constant |
|
This preference takes the following values:
|
|
Determines the granularity of statistics to collect (only pertinent if the table is partitioned). Possible values are:
'
|
|
Determines whether the global statistics of a partitioned table will be maintained without doing a full table scan. With partitioned tables it is very common to load new data into a new partition. As new partitions are added and data loaded, the global table statistics need to be kept up to date. Oracle will update the global table statistics by scanning only the partitions that have been changed instead of the entire table if the following conditions hold:
If the |
|
Controls which synopses to collect when
|
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
Controls column statistics collection and histogram creation. It accepts either of the following options, or both in combination:
The default is |
|
Controls the invalidation of dependent cursors of the tables for which statistics are gathered. If set to |
OPTIONS |
Determines the
|
|
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether newly gathered statistics will be published after the statistics gathering job completes. In releases before Oracle Database 11g Release 1 (11.1), when a statistic gathering job completed, the new statistics were automatically published in the dictionary tables. In subsequent releases, you can gather statistics without publishing them immediately. Thus, you can test new statistics before publishing them. |
|
Determines the percentage of rows in a table that have to change before the statistics on that table are deemed stale and should be regathered. The valid domain for |
|
Specifies the average number of blocks cached in the buffer cache for any table when calculating the index clustering factor. |
Security Model
To run this procedure, you must be the schema owner, or have the SYSDBA
privilege, or have the ANALYZE ANY
system privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or illegal input value
Usage Notes
Both arguments are of type VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Examples
DBMS_STATS.SET_SCHEMA_PREFS('SH','CASCADE','DBMS_STATS.AUTO_CASCADE'); DBMS_STATS.SET_SCHEMA_PREFS('SH','ESTIMATE_PERCENT','9'); DBMS_STATS.SET_SCHEMA_PREFS('SH','DEGREE','99');
See Also:
Oracle Database SQL Tuning Guide to learn how to set optimizer statistics preferences
159.7.120 SET_SYSTEM_STATS Procedure
This procedure sets systems statistics.
Syntax
DBMS_STATS.SET_SYSTEM_STATS ( pname VARCHAR2, pvalue NUMBER, stattab IN VARCHAR2 DEFAULT NULL, statid IN VARCHAR2 DEFAULT NULL, statown IN VARCHAR2 DEFAULT NULL);
Parameters
Table 159-130 SET_SYSTEM_STATS Procedure Parameters
Parameter | Description |
---|---|
|
The parameter name to get, which can have one of the following values:
|
|
Parameter value to get |
|
Identifier of the user statistics table where the statistics will be obtained. If |
|
Optional identifier associated with the statistics saved in the |
|
Schema containing |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid input value
ORA-20002
: Bad user statistics table; may need to be upgraded
ORA-20003
: Unable to set system statistics
ORA-20004
: Parameter does not exist
Usage Notes
To run this procedure, you need the GATHER_SYSTEM_STATISTICS
role.
159.7.121 SET_TABLE_PREFS Procedure
This procedure sets the statistics preferences of the specified table in the specified schema.
Syntax
DBMS_STATS.SET_TABLE_PREFS ( ownname IN VARCHAR2, tabname IN VARCHAR2, pname IN VARCHAR2, pvalue IN VARCHAR2);
Parameters
Table 159-131 SET_TABLE_PREFS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name |
|
Table name |
|
Preference name. You can set the default value for following preferences:
|
|
Preference value. If |
Table 159-132 Statistics Preferences
Preference | Description |
---|---|
|
Specifies the synopsis generation algorithm. A synopsis is special type of statistic that tracks the number of distinct values (NDV) for each column in a partition. Consider a synopsis as an internal management structure that samples distinct values. You can delete the following preferences:
|
|
Controls the automatic creation of extensions when database statistics are gathered. You can set the following values:
|
|
Determines whether to collect index statistics as part of gathering table statistics. |
|
This preference determines whether statistics will be gathered concurrently on multiple objects, or serially, one object at a time:
|
|
Determines degree of parallelism used for gathering statistics. |
|
Determines the percentage of rows to estimate. The valid range is [0.000001,100]. Use the constant |
|
This controls whether the statistics gathered for a global temporary table should be stored as shared statistics or session statistics. It takes two values:
|
|
Determines granularity of statistics to collect (only pertinent if the table is partitioned).
'
|
|
Determines whether or not the global statistics of a partitioned table will be maintained without doing a full table scan. With partitioned tables it is very common to load new data into a new partition. As new partitions are added and data loaded, the global table statistics need to be kept up to date. Oracle will update the global table statistics by scanning only the partitions that have been changed instead of the entire table if the following conditions hold:
If the |
|
This value controls what synopses to collect when
|
|
Specifies when a partition or subpartition is considered stale. This parameter takes an enumeration of values, such as The parameter accepts the following values:
Note that the following two executions are different:
The first execution uses single quotes to set the preference to the value |
|
The value controls column statistics collection and histogram creation. It accepts either of the following options, or both in combination:
The default is |
|
The value controls the invalidation of dependent cursors of the tables for which statistics are being gathered. Does not invalidate the dependent cursors if set to |
|
Determines the
|
|
Determines whether to override the input value of a parameter with the preference value of that parameter for a statistics operation. Possible values are:
Specifying this preference does not change the order of precedence of table, global, and default. |
|
Determines whether the database publishes newly gathered statistics after the gathering job completes. You can gather statistics without publishing them immediately. This technique enables you to test new statistics before publishing them. |
|
Determines the percentage of rows in a table that must change before the statistics on that table are stale and need to be regathered. The valid domain for |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid or illegal input values
Usage Notes
-
To run this procedure, you must connect as owner of the table or have the
ANALYZE ANY
system privilege. -
All arguments are of type
VARCHAR2
and values are enclosed in quotes, even when they represent numbers.
Examples
DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'CASCADE', 'DBMS_STATS.AUTO_CASCADE'); DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'ESTIMATE_PERCENT', '9'); DBMS_STATS.SET_TABLE_PREFS('SH', 'SALES', 'DEGREE', '99');
Example 159-17 Overriding Statistics Preferences
In this example, legacy scripts set ESTIMATE_PERCENT
explicitly rather than using the recommended AUTO_SAMPLE_SIZE
. Your goal is to prevent users from using these scripts to set preferences on the sh.costs
table.
No preference for ESTIMATE_PERCENT
is set for sh.costs
or at the global level, so the preference defaults to AUTO_SAMPLE_SIZE
:
SELECT DBMS_STATS.GET_PREFS ('ESTIMATE_PERCENT', 'sh','costs') AS "STAT_PREFS" FROM DUAL;
STAT_PREFS
----------
DBMS_STATS.AUTO_SAMPLE_SIZE
By default, Oracle Database accepts preferences that are passed to the statistics gathering procedures. To override these parameters, use SET_TABLE_PREFS
to set the PREFERENCE_OVERRIDES_PARAMETER
preference to TRUE
for the costs
table only:
EXEC DBMS_STATS.SET_TABLE_PREFS ('sh', 'costs', 'PREFERENCE_OVERRIDES_PARAMETER', 'TRUE');
A user-created script attempts to set estimate_percent
to 100
when gathering statistics for sh.costs
.
EXEC DBMS_STATS.GATHER_TABLE_STATS('sh', 'costs', ESTIMATE_PERCENT=>100);
However, because PREFERENCE_OVERRIDES_PARAMETER
is TRUE
for this table, Oracle Database gathers statistics using AUTO_SAMPLE_SIZE
, which is the default, rather than the specified value of 100
.
See Also:
Oracle Database SQL Tuning Guide to learn how to set optimizer statistics preferences
159.7.122 SET_TABLE_STATS Procedure
This procedure creates artificial table statistics for testing purposes.
Syntax
DBMS_STATS.SET_TABLE_STATS (
ownname VARCHAR2,
tabname VARCHAR2,
partname VARCHAR2 DEFAULT NULL,
stattab VARCHAR2 DEFAULT NULL,
statid VARCHAR2 DEFAULT NULL,
numrows NUMBER DEFAULT NULL,
numblks NUMBER DEFAULT NULL,
avgrlen NUMBER DEFAULT NULL,
flags NUMBER DEFAULT NULL,
statown VARCHAR2 DEFAULT NULL,
no_invalidate BOOLEAN DEFAULT to_no_invalidate_type (
get_param('NO_INVALIDATE')),
cachedblk NUMBER DEFAULT NULL,
cachehit NUMBER DEFAULT NULL,
force BOOLEAN DEFAULT FALSE,
im_imcu_count NUMBER DEFAULT NULL,
im_block_count NUMBER DEFAULT NULL,
scanrate NUMBER DEFAULT NULL);
Parameters
Table 159-133 SET_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema. |
|
Name of the table. |
|
Name of the table partition in which to store the statistics. If the table is partitioned and |
|
Table in which to store the statistics. If |
|
Identifier (optional) to associate with these statistics within |
|
Number of rows in the table or partition. |
|
Number of blocks that the table or partition occupies. |
|
Average row length for the table or partition. |
|
For internal use only. Do not set. |
|
Schema containing |
|
The validation setting for dependent cursors. If set to |
|
For internal use only. Do not set. |
|
For internal use only. Do not set. |
|
A flag that determines the behavior when statistics are locked. If |
|
The number of In-Memory Compression Units (IMCUs) in the table or partition. |
|
The number of In-Memory blocks in the table or partition. |
|
The rate, in MB/s, at which the database scans external tables. This parameter is relevant only for external tables. |
Security Model
To invoke this procedure you must be owner of the table, or have the ANALYZE
ANY
privilege. For objects owned by SYS
, you must be either the owner of the table, or have the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Invalid input value
ORA-20002
: Bad user statistics table; may need to upgrade it
ORA-20005
: Object statistics are locked
Usage Notes
For testing purposes, you can manually create artificial statistics for a table, index, or the system using the DBMS_STATS.SET_*_STATS
procedures. These procedures insert the artificial statistics into the data dictionary directly (when stattab
is null) or into a user-created table.
Note:
The DBMS_STATS.SET_*_STATS
procedures are intended for development testing only. Do not use them in a production database. If you set statistics in the data dictionary, then Oracle Database considers the set statistics as the “real” statistics, which means that statistics gathering jobs may not re-gather artificial statistics when they do not meet the criteria for staleness.
The most typical use cases for the DBMS_STATS.SET_*_STATS
procedures are showing how execution plans change as the numbers of rows or blocks in a table change, or creating realistic statistics for temporary tables.
-
The optimizer uses the cached data to estimate number of cached blocks for index or statistics table access. The database calculates the total cost of the operation by combining the I/O cost of reading not cached blocks from disk, the CPU cost of getting cached blocks from the buffer cache, and the CPU cost of processing the data.
-
The database maintains
cachedblk
andcachehit
at all times. However, the database uses the corresponding caching statistics for optimization as part of the table and index statistics only when the user calls theDBMS_STATS.GATHER_[TABLE/INDEX/SCHEMA/DATABASE]_STATS
procedure for automatic mode orDBMS_STATS.GATHER_SYSTEM_STATS
for manual mode. To prevent the user from utilizing inaccurate and unreliable data, the optimizer computes a “confidence factor” for eachcachehit
and acachedblk
for each object. If the confidence factor for the value meets confidence criteria, then the database uses this value; otherwise, the database uses defaults. -
The automatic maintenance algorithm for object caching statistics assumes that only one major database workload exists. The algorithm adjusts statistics to this workload, ignoring other "minor" workloads. If this assumption is false, then you must use manual mode for maintaining object caching statistics.
-
The object caching statistics maintenance algorithm for automatic mode prevents you from using statistics in the following situations:
-
When not enough data has been analyzed, such as when an object has been recently created
-
When the database does not have one major workload, resulting in averages that do not correspond to real values
-
See Also:
Oracle Database SQL Tuning Guide to learn how to set artificial statistics
159.7.123 SHOW_EXTENDED_STATS_NAME Function
This function returns the name of the statistics entry that is created for the user-specified extension. It raises an error if no extension has been created.
Syntax
DBMS_STATS.SHOW_EXTENDED_STATS_NAME ( ownname VARCHAR2, tabname VARCHAR2, extension VARCHAR2) RETURN VARCHAR2;
Parameters
Table 159-134 SHOW_EXTENDED_STATS_NAME Function Parameters
Parameter | Description |
---|---|
|
Owner name of a table |
|
Name of the table |
|
Can be either a column group or an expression. Suppose the specified table has two column |
Exceptions
ORA-20000
: Object does not exist or insufficient privileges
ORA-20001
: Error when processing extension
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.124 TRANSFER_STATS Procedure
This procedure transfers statistics for specified table(s) from a remote database specified by dblink
to the local database.
The statistics at the source database are retained. It likewise transfers statistics-related structures such as synopses and DML monitoring information.
Syntax
DBMS_STATS.TRANSFER_STATS ( ownname IN VARCHAR2, tabname IN VARCHAR2, dblink IN VARCHAR2, options IN NUMBER DEFAULT NULL);
Parameters
Table 159-135 TRANSFER_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Owner name of a table. If |
|
Name of the table. If |
|
Database link name |
|
By default the procedure does not transfer the global preferences. Specifying |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.125 UNLOCK_PARTITION_STATS Procedure
This procedure enables the user to unlock statistics for a partition.
Syntax
DBMS_STATS.UNLOCK_PARTITION_STATS ( ownname VARCHAR2, tabname VARCHAR2, partname VARCHAR2);
Parameters
Table 159-136 UNLOCK_PARTITION_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema to unlock |
|
Name of the table |
|
[Sub]Partition name |
Usage Notes
To invoke this procedure you must be owner of the table, or you need the ANALYZE
ANY
privilege. For objects owned by SYS
, you need to be either the owner of the table, or you need the ANALYZE
ANY
DICTIONARY
privilege or the SYSDBA
privilege.
159.7.126 UNLOCK_SCHEMA_STATS Procedure
This procedure unlocks the statistics on all the tables in schema.
Syntax
DBMS_STATS.UNLOCK_SCHEMA_STATS ( ownname VARCHAR2);
Parameters
Table 159-137 UNLOCK_SCHEMA_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
When statistics on a table is locked, all the statistics depending on the table, including table statistics, column statistics, histograms and statistics on all dependent indexes, are considered to be locked.
-
The
SET_*,
DELETE_*,
IMPORT_*,
GATHER_*
procedures that modify statistics in the dictionary of an individual table, index or column will raise an error if statistics of the object is locked. -
Procedures that operates on multiple objects (such as
GATHER_SCHEMA_STATS
) will skip modifying the statistics of an object if it is locked. Many procedures have force argument to override the lock. -
Neither the UNLOCK_SCHEMA_STATS Procedure nor the UNLOCK_TABLE_STATS Procedure is designed to unlock statistics of corresponding partitions. When you invoke theLOCK_TABLE_STATS Procedure, it sets the statistics lock bit at the table level. In that case, you cannot gather statistics on dependent objects such as partitions and indexes. By the same token, if table statistics are locked, the dependents are locked and you do not need to explicitly invoke the LOCK_PARTITION_STATS Procedure.
159.7.127 UNLOCK_TABLE_STATS Procedure
This procedure unlocks the statistics on the table.
Syntax
DBMS_STATS.UNLOCK_TABLE_STATS ( ownname VARCHAR2, tabname VARCHAR2);
Parameters
Table 159-138 UNLOCK_TABLE_STATS Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table |
Usage Notes
-
To invoke this procedure you must be owner of the table, or you need the
ANALYZE
ANY
privilege. For objects owned bySYS
, you need to be either the owner of the table, or you need theANALYZE
ANY
DICTIONARY
privilege or theSYSDBA
privilege. -
When statistics on a table is locked, all the statistics depending on the table, including table statistics, column statistics, histograms and statistics on all dependent indexes, are considered to be locked.
-
The
SET_*,
DELETE_*,
IMPORT_*,
GATHER_*
procedures that modify statistics in the dictionary of an individual table, index or column will raise an error if statistics of the object is locked. -
Procedures that operates on multiple objects (such as
GATHER_SCHEMA_STATS
) will skip modifying the statistics of an object if it is locked. Many procedures have force argument to override the lock. -
Neither the UNLOCK_SCHEMA_STATS Procedure nor the UNLOCK_TABLE_STATS Procedure is designed to unlock statistics of corresponding partitions. When you invoke theLOCK_TABLE_STATS Procedure, it sets the statistics lock bit at the table level. In that case, you cannot gather statistics on dependent objects such as partitions and indexes. By the same token, if table statistics are locked, the dependents are locked and you do not need to explicitly invoke the LOCK_PARTITION_STATS Procedure.
159.7.128 UPGRADE_STAT_TABLE Procedure
This procedure upgrades a user statistics table from an older version.
Syntax
DBMS_STATS.UPGRADE_STAT_TABLE ( ownname VARCHAR2, stattab VARCHAR2);
Parameters
Table 159-139 UPGRADE_STAT_TABLE Procedure Parameters
Parameter | Description |
---|---|
|
Name of the schema |
|
Name of the table |
Exceptions
ORA-20000
: Unable to upgrade table
Usage Notes
To invoke this procedure you need the privileges to drop and create a table.