Oracle® Database SQL Reference 10g Release 2 (10.2) Part Number B14200-02 |
|
|
View PDF |
Purpose
The storage_clause
lets you specify how Oracle Database should store a database object. Storage parameters affect both how long it takes to access data stored in the database and how efficiently space in the database is used.
See Also: Oracle Database Performance Tuning Guide for a discussion of the effects of the storage parameters |
When you create a cluster, index, materialized view, materialized view log, rollback segment, table, or partition, you can specify values for the storage parameters for the segments allocated to these objects. If you omit any storage parameter, then Oracle uses the value of that parameter specified for the tablespace in which the object resides.
Note: The specification of storage parameters for objects in locally managed tablespaces is supported for backward compatibility. If you are using locally managed tablespaces, you can omit these storage parameter when creating objects in those tablespaces. |
When you alter a cluster, index, materialized view, materialized view log, rollback segment, table, or partition, you can change the values of storage parameters. The new values affect only future extent allocations.
The storage_clause
is part of the physical_attributes_clause
, so you can specify this clause in any of the statements where you can specify the physical attributes clause (see physical_attributes_clause). In addition, you can specify the storage_clause
in the following statements:
CREATE
CLUSTER
and ALTER
CLUSTER
: to set or change the storage characteristics of the cluster and all tables in the cluster (see CREATE CLUSTER and ALTER CLUSTER).
CREATE
INDEX
and ALTER
INDEX
: to set or change the storage characteristics of an index or index partition (see CREATE INDEX and ALTER INDEX).
CREATE
MATERIALIZED
VIEW
and ALTER
MATERIALIZED
VIEW
: to set or change the storage characteristics of a materialized view, one of its partitions, or the index Oracle generates to maintain the materialized view (see CREATE MATERIALIZED VIEW and ALTER MATERIALIZED VIEW).
CREATE
MATERIALIZED
VIEW
LOG
and ALTER
MATERIALIZED
VIEW
LOG
: to set or change the storage characteristics of the materialized view log (see CREATE MATERIALIZED VIEW LOG and ALTER MATERIALIZED VIEW LOG).
CREATE ROLLBACK SEGMENT
and ALTER ROLLBACK SEGMENT
: to set or change the storage characteristics of a rollback segment (see CREATE ROLLBACK SEGMENT and ALTER ROLLBACK SEGMENT).
CREATE
TABLE
and ALTER
TABLE
: to set the storage characteristics of a LOB data segment of the table or one of its partitions or subpartitions (see CREATE TABLE and ALTER TABLE).
CREATE
TABLESPACE
and ALTER
TABLESPACE
: to set or change the default storage characteristics for objects created in the tablespace (see CREATE TABLESPACE and ALTER TABLESPACE).
constraint
: to specify storage for the index (and its partitions, if it is a partitioned index) used to enforce the constraint (see constraint).
Prerequisites
To change the value of a STORAGE
parameter, you must have the privileges necessary to use the appropriate CREATE
or ALTER
statement.
Syntax
storage_clause::=
Semantics
This section describes the parameters of the storage_clause
. For additional information, refer to the SQL statement in which you set or reset these parameters for a particular database object.
Note: Thestorage_clause is interpreted differently for locally managed tablespaces. At creation, Oracle ignores MAXEXTENTS and uses the remaining parameter values to calculate the initial size of the segment. For more information, see CREATE TABLESPACE. |
Specify the size of the first extent of the object. Oracle allocates space for this extent when you create the schema object. Please refer to size_clause for information on that clause.
The default value is the size of 5 data blocks. In tablespaces with manual segment-space management, the minimum value is the size of 2 data blocks plus one data block for each free list group you specify. In tablespaces with automatic segment-space management, the minimum value is 5 data blocks. The maximum value depends on your operating system. Please refer to FREELIST GROUPS for information on freelist groups for more information.
In dictionary-managed tablespaces, if MINIMUM
EXTENT
was specified for the tablespace when it was created, then Oracle rounds the value of INITIAL
up to the specified MINIMUM
EXTENT
size if necessary. If MINIMUM
EXTENT
was not specified, then Oracle rounds the INITIAL
extent size for segments created in that tablespace up to the minimum value (see preceding paragraph), or to multiples of 5 blocks if the requested size is greater than 5 blocks.
In locally managed tablespaces, Oracle uses the value of INITIAL
in conjunction with the size of extents specified for the tablespace to determine the first extent of the object. For example, in a uniform locally managed tablespace with 5M extents, if you specify an INITIAL
value of 1M, then Oracle creates five 1M extents.
Restriction on INITIAL You cannot specify INITIAL
in an ALTER
statement.
Specify in bytes the size of the next extent to be allocated to the object. Please refer to size_clause for information on that clause.
The default value is the size of 5 data blocks. The minimum value is the size of 1 data block. The maximum value depends on your operating system. Oracle rounds values up to the next multiple of the data block size for values less than 5 data blocks. For values greater than 5 data blocks, Oracle rounds up to a value that minimizes fragmentation, as described in Oracle Database Administrator's Guide.
If you change the value of the NEXT
parameter (that is, if you specify it in an ALTER
statement), then the next allocated extent will have the specified size, regardless of the size of the most recently allocated extent and the value of the PCTINCREASE
parameter.
See Also: Oracle Database Administrator's Guide for information on how Oracle minimizes fragmentation |
Specify the percent by which the third and subsequent extents grow over the preceding extent. The default value is 50, meaning that each subsequent extent is 50% larger than the preceding extent. The minimum value is 0, meaning all extents after the first are the same size. The maximum value depends on your operating system.
Oracle rounds the calculated size of each new extent to the nearest multiple of the data block size.
If you change the value of the PCTINCREASE
parameter (that is, if you specify it in an ALTER
statement), then Oracle calculates the size of the next extent using this new value and the size of the most recently allocated extent.
Suggestion: If you want to keep all extents the same size, you can prevent theSMON background process from coalescing extents by setting the value of PCTINCREASE to 0. In general, Oracle recommends a setting of 0 as a way to minimize fragmentation and avoid the possibility of very large temporary segments during processing. |
Restriction on PCTINCREASE You cannot specify PCTINCREASE
for rollback segments. Rollback segments always have a PCTINCREASE
value of 0.
Specify the total number of extents to allocate when the object is created. This parameter lets you allocate a large amount of space when you create an object, even if the space available is not contiguous. The default and minimum value is 1, meaning that Oracle allocates only the initial extent, except for rollback segments, for which the default and minimum value is 2. The maximum value depends on your operating system.
If the MINEXTENTS
value is greater than 1, then Oracle calculates the size of subsequent extents based on the values of the INITIAL
, NEXT
, and PCTINCREASE
storage parameters.
When changing the value of MINEXTENTS
(that is, in an ALTER
statement), you can reduce the value from its current value, but you cannot increase it. Resetting MINEXTENTS
to a smaller value might be useful, for example, before a TRUNCATE
... DROP
STORAGE
statement, if you want to ensure that the segment will maintain a minimum number of extents after the TRUNCATE
operation.
Restriction on MINEXTENTS You cannot change the value of MINEXTENTS
for an object that resides in a locally managed tablespace.
Specify the total number of extents, including the first, that Oracle can allocate for the object. The minimum value is 1 except for rollback segments, which always have a minimum of 2. The default value depends on your data block size.
Restriction on MAXEXTENTS You cannot change the value of MAXEXTENTS
for an object that resides in a locally managed tablespace.
UNLIMITED Specify UNLIMITED
if you want extents to be allocated automatically as needed. Oracle recommends this setting as a way to minimize fragmentation.
Do not use this clause for rollback segments. Doing so allows the possibility that long-running rogue DML transactions will continue to create new extents until a disk is full.
Caution: A rollback segment that you create without specifying thestorage_clause has the same storage parameters as the tablespace in which the rollback segment is created. Thus, if you create a tablespace with MAXEXTENTS UNLIMITED , then the rollback segment will have this same default. |
Specify the number of groups of free lists for the database object you are creating. The default and minimum value for this parameter is 1. Oracle uses the instance number of Real Application Clusters instances to map each instance to one free list group.
Each free list group uses one database block. Therefore:
If you do not specify a large enough value for INITIAL
to cover the minimum value plus one data block for each free list group, then Oracle increases the value of INITIAL
the necessary amount.
If you are creating an object in a uniform locally managed tablespace, and the extent size is not large enough to accommodate the number of freelist groups, then the create operation will fail.
Oracle ignores a setting of FREELIST
GROUPS
if the tablespace in which the object resides is in automatic segment-space management mode. If you are running your database in this mode, please refer to the FREEPOOLS
parameter of the LOB_storage_clause.
Restriction on FREELIST GROUPS You can specify the FREELIST
GROUPS
parameter only in CREATE
TABLE
, CREATE
CLUSTER
, CREATE
MATERIALIZED
VIEW
, CREATE
MATERIALIZED
VIEW
LOG
, and CREATE
INDEX
statements.
See Also: Oracle Real Application Clusters Administrator's Guide for information on associating instances with free list groups |
For objects other than tablespaces and rollback segments, specify the number of free lists for each of the free list groups for the table, partition, cluster, or index. The default and minimum value for this parameter is 1, meaning that each free list group contains one free list. The maximum value of this parameter depends on the data block size. If you specify a FREELISTS
value that is too large, then Oracle returns an error indicating the maximum value.
Oracle ignores a setting of FREELISTS
if the tablespace in which the object resides is in automatic segment-space management mode. If you are running your database in this mode, please refer to the FREEPOOLS
parameter of the LOB_storage_clause.
Restriction on FREELISTS You can specify FREELISTS
in the storage_clause
of any statement except when creating or altering a tablespace or rollback segment.
The BUFFER_POOL
clause lets you specify a default buffer pool or cache for a schema object. All blocks for the object are stored in the specified cache.
If you define a buffer pool for a partitioned table or index, then the partitions inherit the buffer pool from the table or index definition unless overridden by a partition-level definition.
For an index-organized table, you can specify a buffer pool separately for the index segment and the overflow segment.
Restrictions on the BUFFER_POOL Parameter BUFFER_POOL
is subject to the following restrictions:
You cannot specify this clause for a cluster table. However, you can specify it for a cluster.
You cannot specify this clause for a tablespace or a rollback segment.
KEEP Specify KEEP
to put blocks from the segment into the KEEP
buffer pool. Maintaining an appropriately sized KEEP
buffer pool lets Oracle retain the schema object in memory to avoid I/O operations. KEEP
takes precedence over any NOCACHE
clause you specify for a table, cluster, materialized view, or materialized view log.
RECYCLE Specify RECYCLE
to put blocks from the segment into the RECYCLE
pool. An appropriately sized RECYCLE
pool reduces the number of objects whose default pool is the RECYCLE
pool from taking up unnecessary cache space.
DEFAULT Specify DEFAULT
to indicate the default buffer pool. This is the default for objects not assigned to KEEP
or RECYCLE
.
See Also: Oracle Database Performance Tuning Guide for more information about using multiple buffer pools |
The OPTIMAL
keyword is relevant only to rollback segments. It specifies an optimal size in bytes for a rollback segment. Please refer to size_clause for information on that clause.
Oracle tries to maintain this size for the rollback segment by dynamically deallocating extents when their data is no longer needed for active transactions. Oracle deallocates as many extents as possible without reducing the total size of the rollback segment below the OPTIMAL
value.
The value of OPTIMAL
cannot be less than the space initially allocated by the MINEXTENTS
, INITIAL
, NEXT
, and PCTINCREASE
parameters. The maximum value depends on your operating system. Oracle rounds values up to the next multiple of the data block size.
NULL Specify NULL
for no optimal size for the rollback segment, meaning that Oracle never deallocates the extents of the rollback segment. This is the default behavior.
Example
Specifying Table Storage Attributes: Example The following statement creates a table and provides storage parameter values:
CREATE TABLE divisions (div_no NUMBER(2), div_name VARCHAR2(14), location VARCHAR2(13) ) STORAGE ( INITIAL 100K NEXT 50K MINEXTENTS 1 MAXEXTENTS 50 PCTINCREASE 5);
Oracle allocates space for the table based on the STORAGE
parameter values as follows:
The MINEXTENTS
value is 1, so Oracle allocates 1 extent for the table upon creation.
The INITIAL
value is 100K, so the size of the first extent is 100 kilobytes.
If the table data grows to exceed the first extent, then Oracle allocates a second extent. The NEXT
value is 50K, so the size of the second extent will be 50 kilobytes.
If the table data subsequently grows to exceed the first two extents, then Oracle allocates a third extent. The PCTINCREASE
value is 5, so the calculated size of the third extent is 5% larger than the second extent, or 52.5 kilobytes. If the data block size is 2 kilobytes, then Oracle rounds this value to 52 kilobytes.
If the table data continues to grow, then Oracle allocates more extents, each 5% larger than the previous one.
The MAXEXTENTS
value is 50, so Oracle can allocate as many as 50 extents for the table.