Итак, давайте попробуем разобраться, с самой фундаментальной частью БД Oracle, которая называется «блок БД». Блоки являются самой элементарной единицей выборки данных. И стоят на самом нижнем уровне организации собственно самой БД. Блоки хранят всю информацию, из которой собственно и состоит ваша БД. Сразу оговариваюсь, не путайте блоки БД с блоками файловой системы, какая бы она не была на вашем сервере, FAT, FAT32, NTFS и т.д. Блоки БД, естественно базируются на блоках файловой системы, но с последними ничего общего не имеют. 🙂 Хотя блоки БД, должны быть, кратны блокам файловой системы. Например, для UNIX это 8192, 16384 и т.д. Выбирать, размер блока БД можно самостоятельно при создании экземпляра БД, либо система задает этот параметр сама. В том случае как мы с вами устанавливали БД, размер блока у вас, скорее всего будет 2048 байт. В этом легко убедиться, проверив значение параметра db_block_size, в уже известном вам файле init.ora. Естественно при чтении данных из БД, считывается столько байт, сколько входит в один блок или кратное этому числу, в зависимости от количества информации, например, в запросе. Так же запомните сразу, единожды установленный размер блока БД, в процессе уже не может быть изменен. Если вы, по какой либо причине захотите изменить, размер блока БД, то необходимо сохранить ваши данные, затем удалить ваш экземпляр БД, и создать его вновь с новым значением блока БД! Что же представляет из себя блок БД? На рисунке представлено схематичное изображение блока.
А значение параметров PCTFREE и PCTUSED можно посмотреть, войдя пользователем SYS или SYSTEM в SQL*Plus и написав такой запрос:
Как видно, в нашем случае PCTFREE = 10% и PCTUSED = 40%, в чем мы с вами и убедились! В дальнейшем мы еще, вернемся к этой теме, так как она еще далеко не полностью раскрыта. Но пока на этом с системными объектами БД мы закончили. Советую, еще раз все осмыслить и хорошенечко и запомнить на будущее.
Вы создаете табличные пространства для того, чтобы в них можно было создать объекты различного типа, такие как таблицы и индексы. Когда вы создаете новый сегмент таблицы или индекса, Oracle использует определенные параметры хранения для выделения начального пространства и для изменения размеров выделяемого места по мере роста объекта.
При создании в табличном пространстве объектов типа таблиц или индексов можно пропустить спецификации параметров хранения вроде INITIAL, NEXT, MINEXTENTS, MAXEXTENTS и PCTINCREASE. Для локально управляемых табличных пространств Oracle будет управлять экстентами хранения, поэтому вам мало что придется указывать из параметров хранения. Oracle сохраняет параметры хранения только для обратной совместимости.
Если используются локально управляемые табличные пространства, указывать параметр PCTUSED не нужно. Если вы установите их, оператор создания объекта не выдаст ошибки, но Oracle проигнорирует этот параметр. Однако можно использовать параметр PCTFREE для указания свободного места, которое Oracle должен оставлять в каждом блоке для последующих обновлений данных. По умолчанию принято 10, что нормально, если вы не ожидаете значительного удлинения строк со временем. Если же это не так, можете изменить параметр PCTFREE в сторону увеличения, скажем, до 20 или 30%.
Конечно, за это приходится платить определенную цену — чем выше значение параметра PCTREE, тем больше места вы тратите “впустую” в базе данных Oracle Database.
В данном разделе представлены выдержки и некоторые программы из моего диплома, посвященного настройке и оптимизации работы сервер ORACLE.
Параметры PCTFREE и PCTUSED.
Оба эти параметра служат для управления пространством в блоках данных. Точнее PCTFREE и PCTUSED позволяют управлять использованием свободного пространства для вставки и обновления строк в блоках данных.
Параметр PCTFREE устанавливает процент памяти блока, резервируемой для возможных обновлений строк, уже содержащихся в блоке. Как только блок данных будет заполнен до процента PCTFREE, в этот блок не возможно будет вставить новые строки до тех пор, пока процент памяти используемой в этом блоке не упадет ниже значения параметра PCTUSED. Параметр PCTUSED задает нижнюю границу, достижение которой вызывает возврат блока данных в список свободных областей. Оба параметра настраиваются в паре. Устанавливая разные варианты значений для этих параметров, можно оптимизировать использование дискового пространства.
Параметры PCTFREE и PCTUSED задаются при создании таблиц и индексов и указываются в конструкциях CREATE TABLE и CREATE INDEX соответственно, а так же могут быть изменены для уже созданных таблиц и индексов при помощи конструкций ALTER TABLE и ALTER INDEX.
При настройке PCTFREE и PCTUSED необходимо помнить о двух ограничения. Во-первых, их сумма не может превышать 100. Во-вторых, PCTFREE нельзя устанавливать равным 0, так как это вызовет проблемы распределения памяти для внутренних операций.
Дальше я приведу несколько стандартных вариантов установки данных параметров:
1. Большая часть запросов содержит операторы UPDATE, которые увеличиваю размеры записей.
PCTFREE = 20 PCTUSED = 40
PCTFREE установлен в 20, чтобы оставить достаточно места для записей, увеличивающихся в размере при обновлении. PCTUSED оставлен по умолчанию.
2. В основном запросы состоят из операторов INSERT и DELETE, а операторы DELETE в среднем не увеличивают размер записи.
PCTFREE = 5 PCTUSED = 60
PCTFREE установлен в 5, так как в основном длины записей не изменяются. PCTUSED установлен в 60, чтобы избежать дополнительного выделения большого числа блоков данных, так как память, освобождаемая оператором DELETE, почти сразу же используется оператором INSERT.
3. Данные из таблицы выбираются в основном на чтение.
PCTFREE = 5 PCTUSED = 90
PCTFREE установлен в 5, так как операторы UPDATE используются редко. PCTUSED установлен в 90, так что для хранения данных используется большая часть блока. В результате уменьшается общее число используемых блоков.
This chapter offers guidelines for managing space for schema objects. It contains the following topics:
You should familiarize yourself with the concepts in this chapter before attempting to manage specific schema objects as described in later chapters.
Managing Space in Data Blocks
This section describes aspects of managing space in data blocks. Data blocks are the finest level of granularity of the structure in which database data is stored on disk. The size of a data block is specified (or defaulted) at database creation.
The PCTFREE and PCTUSED parameters are physical attributes that can be specified when a schema object is created or altered. These parameters allow you to control the use of the free space within a data block. This free space is available for inserts and updates of rows of data.
The PCTFREE and PCTUSED parameters allow you to:
The INITRANS and MAXTRANS parameters are also physical attributes that can be specified when schema objects are created or altered. These parameters control the number of concurrent update transactions allocated for data blocks of a schema object, which in turn affects space usage in data block headers and can have an impact upon data block free space.
The following topics are contained in this section:
Specifying the PCTFREE Parameter
The PCTFREE parameter is used to set the percentage of a block to be reserved for possible updates to rows that already are contained in that block. For example, assume that you specify the following parameter within a CREATE TABLE statement:
Figure 14-1 PCTFREE
The default for PCTFREE is 10 percent. You can use any integer between 0 and 99, inclusive, as long as the sum of PCTFREE and PCTUSED does not exceed 100.
Effects of Specifying a Smaller PCTFREE
A smaller PCTFREE has the following effects:
A small PCTFREE might be suitable, for example, for a segment that is rarely changed.
Effects of Specifying a Larger PCTFREE
A larger PCTFREE has the following effects:
A large PCTFREE is suitable, for example, for segments that are frequently updated.
PCTFREE for Nonclustered Tables
If the data in the rows of a nonclustered table is likely to increase in size over time, reserve some space for these updates. Otherwise, updated rows are likely to be chained among blocks.
PCTFREE for Clustered Tables
The discussion for nonclustered tables also applies to clustered tables. However, if PCTFREE is reached, new rows from any table contained in the same cluster key go into a new data block that is chained to the existing cluster key.
PCTFREE for Indexes
You can specify PCTFREE only when initially creating an index.
Specifying the PCTUSED Parameter
In this case, a data block used for this table’s data segment is not considered for the insertion of any new rows until the amount of used space in the block falls to 39% or less (assuming that the block’s used space has previously reached PCTFREE ). Figure 14-2 illustrates this.
Figure 14-2 PCTUSED
Effects of Specifying a Smaller PCTUSED
A smaller PCTUSED has the following effects:
Effects of Specifying a Larger PCTUSED
A larger PCTUSED has the following effects:
Selecting Associated PCTUSED and PCTFREE Values
The following table contains examples that show how and why specific values for PCTFREE and PCTUSED are specified for tables.
Example
Scenario
Settings
Explanation
Common activity includes UPDATE statements that increase the size of the rows.
PCTFREE is set to 20 to allow enough room for rows that increase in size as a result of updates. PCTUSED is set to 40 so that less processing is done during high update activity, thus improving performance.
Most activity includes INSERT and DELETE statements, and UPDATE statements that do not increase the size of affected rows.
PCTFREE is set to 5 because most UPDATE statements do not increase row sizes. PCTUSED is set to 60 so that space freed by DELETE statements is used soon, yet processing is minimized.
The table is very large and storage is a primary concern. Most activity includes read-only transactions.
PCTFREE is set to 5 because this is a large table and you want to completely fill each block.
Specifying the Transaction Entry Parameters: INITRANS and MAXTRANS
INITRANS specifies the number of DML transaction entries for which space is initially reserved in the data block header. Space is reserved in the headers of all data blocks in the associated segment.
The INITRANS and MAXTRANS parameters for the data blocks allocated to a specific schema object should be set individually for each schema object based on the following criteria:
For example, if a table is very large and only a small number of users simultaneously access the table, the chances of multiple concurrent transactions requiring access to the same data block is low. Therefore, INITRANS can be set low, especially if space is at a premium in the database.
Setting Storage Parameters
This section describes the storage parameters that you can set for various data structures. These storage parameters apply to the following types of structures and schema objects:
The following topics are discussed:
Identifying the Storage Parameters
Storage parameters determine space allocation for objects when they are created in a dictionary-managed tablespace. Locally managed tablespaces provide a simpler means of space allocation, and most storage parameters have no meaning in their context.
When you create a dictionary-managed tablespace you can specify default storage parameters. These values override the system defaults to become the defaults for objects created in that tablespace only. You specify the default storage values in the DEFAULT STORAGE clause of a CREATE or ALTER TABLESPACE statement.
Furthermore, for objects created in dictionary-managed tablespaces, you can specify storage parameters for each individual schema object. These parameter settings override any default storage settings. Use the STORAGE clause of the CREATE or ALTER statement for specifying storage parameters for the individual object. The following example illustrates specifying storage parameters when a table is being created:
Not all storage parameters can be specified for every type of database object, and not all storage parameters can be specified in both the CREATE and ALTER statements.
The following table contains a brief description of each storage parameter. For a complete description of these parameters, including their default, minimum, and maximum settings, see the Oracle9i SQL Reference.
Parameter
Description
The size, in bytes, of the first extent allocated when a segment is created. This parameter cannot be specified in an ALTER statement.
The new NEXT equals 1 + PCTINCREASE /100, multiplied by the size of the last incremental extent (the old NEXT ) and rounded up to the next multiple of a block size.
The total number of extents to be allocated when the segment is created. This allows for a large allocation of space at creation time, even if contiguous space is not available.
The total number of extents, including the first, that can ever be allocated for the segment.
The number of groups of free lists for the database object you are creating. Oracle uses the instance number of Oracle Real Application Cluster instances to map each instance to one free list group. For information on the use of this parameter, see Oracle9i Real Application Clusters Administration.
Specifies the number of free lists for each of the free list groups for the schema object. Not valid for tablespaces.The use of this parameter is discussed in Oracle9i Database Performance Tuning Guide and Reference.
Relevant only to rollback segments. See Chapter 13, «Managing Undo Space» for information on the use of this parameter.
Defines a default buffer pool (cache) for a schema object. Not valid for tablespaces or rollback segments. For information on the use of this parameter, see Oracle9i Database Performance Tuning Guide and Reference.
Setting Default Storage Parameters for Segments in a Tablespace
You can set default storage parameters for each tablespace of a database. Any storage parameter that you do not explicitly set when creating or subsequently altering a segment in a tablespace automatically is set to the corresponding default storage parameter for the tablespace in which the segment resides.
When specifying MINEXTENTS at the tablespace level, any extent allocated in the tablespace is rounded to a multiple of the number of minimum extents.
Setting Storage Parameters for Data Segments
You set the storage parameters for the data segment of a nonclustered table, materialized view, or materialized view log using the STORAGE clause of the CREATE or ALTER statement for tables, materialized views, or materialized view logs.
In contrast, you set the storage parameters for the data segments of a cluster using the STORAGE clause of the CREATE CLUSTER or ALTER CLUSTER statement, rather than the individual CREATE or ALTER statements that put tables and materialized views into the cluster. Storage parameters specified when creating or altering a clustered table or materialized view are ignored. The storage parameters set for the cluster override the table’s storage parameters.
With partitioned tables, you can set default storage parameters at the table level. When creating a new partition of the table, the default storage parameters are inherited from the table level (unless you specify them for the individual partition). If no storage parameters are specified at the table level, then they are inherited from the tablespace.
Setting Storage Parameters for Index Segments
Storage parameters for an index segment created for a table index can be set using the STORAGE clause of the CREATE INDEX or ALTER INDEX statement.
Storage parameters of an index segment created for the index used to enforce a primary key or unique key constraint can be set in either of the following ways:
Setting Storage Parameters for LOBs, Varrays, and Nested Tables
All of the above books contain more information about creating tables containing LOB s, varrays, and nested tables.
Changing Values for Storage Parameters
You can alter default storage parameters for tablespaces and specific storage parameters for individual segments if you so choose. Default storage parameters can be reset for a tablespace. However, changes affect only new objects created in the tablespace, or new extents allocated for a segment.
Understanding Precedence in Storage Parameters
The storage parameters in effect at a given time are determined by the following types of SQL statements, listed in order of precedence (where higher numbers take precedence over lower numbers):
Any storage parameter specified at the object level overrides the corresponding option set at the tablespace level. When storage parameters are not explicitly set at the object level, they default to those at the tablespace level. When storage parameters are not set at the tablespace level, Oracle system defaults apply. If storage parameters are altered, the new options apply only to the extents not yet allocated.
The storage parameters for temporary segments always use the default storage parameters set for the associated tablespace.
Example of How Storage Parameters Effect Space Allocation
Assume the following statement has been executed:
Also assume that the initialization parameter DB_BLOCK_SIZE is set to 2K. The following table shows how extents are allocated for the TEST_STORAGE table. Also shown is the value for the incremental extent, as can be seen in the NEXT column of the USER_SEGMENTS or DBA_SEGMENTS data dictionary views:
Table 14-1 Extent Allocations
Extent#
Extent Size
Value for NEXT
50 blocks or 102400 bytes
50 blocks or 102400 bytes
50 blocks or 102400 bytes
75 blocks or153600 bytes
75 blocks or 153600 bytes
113 blocks or 231424 bytes
115 blocks or 235520 bytes
170 blocks or 348160 bytes
170 blocks or 348160 bytes
No next value, MAXEXTENTS=5
If you change the NEXT or PCTINCREASE storage parameters with an ALTER statement (such as ALTER TABLE ), the specified value replaces the current value stored in the data dictionary. For example, the following statement modifies the NEXT storage parameter of the test_storage table before the third extent is allocated for the table:
As a result, the third extent is 500K when allocated, the fourth is (500K*1.5)=750K, and so forth.
Managing Resumable Space Allocation
Oracle provides a means for suspending, and later resuming, the execution of large database operations in the event of space allocation failures. This enables you to take corrective action instead of the Oracle database server returning an error to the user. After the error condition is corrected, the suspended operation automatically resumes. This feature is called resumable space allocation. The statements that are affected are called resumable statements.
This section contains the following topics:
Resumable Space Allocation Overview
This section provides an overview of resumable space allocation. It describes how resumable statements work, and specifically defines qualifying statements and error conditions.
How Resumable Statements Work
The following is an overview of how resumable statements work. Details are contained in later sections.
What Operations are Resumable?
Resumable space allocation is fully supported when using locally managed tablespaces. There are certain limitations when using dictionary-managed tablespaces. See «Resumable Space Allocation Limitations for Dictionary-Managed Tablespaces» for details.
The following operations are resumable:
SELECT statements that run out of temporary space (for sort areas) are candidates for resumable execution. When using OCI, the calls LNOCIStmtExecute() and LNOCIStmtFetch() are candidates.
As for SQL*Loader, a command line parameter controls whether statements are resumable after recoverable errors.
The following statements are candidates for resumable execution:
What Errors are Correctable?
There are three classes of correctable errors:
The operation cannot acquire any more extents for a table/index/temporary segment/rollback segment/undo segment/cluster/LOB/table partition/index partition in a tablespace. For example, the following errors fall in this category:
The number of extents in a table/index/temporary segment/rollback segment/undo segment/cluster/LOB/table partition/index partition equals the maximum extents defined on the object. For example, the following errors fall in this category:
The user has exceeded his assigned space quota in the tablespace. Specifically, this is noted by the following error:
Resumable Space Allocation Limitations for Dictionary-Managed Tablespaces
There are certain limitations of resumable space allocation when using dictionary-managed tablespaces. These limitations are listed below:
Resumable Statements and Distributed Operations
Remote operations are not supported in resumable mode.
Parallel Execution and Resumable Statements
In parallel execution, if one of the parallel execution server processes encounters a correctable error, that server process suspends its execution. Other parallel execution server processes will continue executing their respective tasks, until either they encounter an error or are blocked (directly or indirectly) by the suspended server process. When the correctable error is resolved, the suspended process resumes execution and the parallel operation continues execution. If the suspended operation is terminated, the parallel operation aborts, throwing the error to the user.
Different parallel execution server processes may encounter one or more correctable errors. This may result in firing an AFTER SUSPEND trigger multiple times, in parallel. Also, if a parallel execution server process encounters a noncorrectable error while another parallel execution server process is suspended, the suspended statement is immediately aborted.
For parallel execution, every parallel execution coordinator and server process has its own entry in DBA / USER_RESUMABLE view.
Enabling and Disabling Resumable Space Allocation
Resumable space allocation is only possible when statements are executed within a session that has resumable mode enabled.
To enable resumable mode for a session, use the following SQL statement:
Because suspended statements can hold up some system resources, users must be granted the RESUMABLE system privilege before they are allowed to enable and execute resumable statements.
To disable resumable mode, issue the following statement:
The default for a new session is resumable mode disabled.
You can also specify a timeout interval, and you can provide a name used to identify a resumable statement. These are discussed separately in following sections.
Specifying a Timeout Interval
When you enable resumable mode for a session, you can also specify a timeout interval, after which a suspended statement will error if no intervention has taken place. The following statement specifies that resumable transactions will time out and error after 3600 seconds:
The value of TIMEOUT remains in effect until it is changed by another ALTER SESSION ENABLE RESUMABLE statement, it is changed by another means, or the session ends. The default timeout interval is 7200 seconds.
«Changing the Timeout Interval» for other methods of changing the timeout interval for resumable statements
Naming Resumable Statements
Resumable statements can be identified by name. The following statement assigns a name to resumable statements:
The NAME value remains in effect until it is changed by another ALTER SESSION ENABLE RESUMABLE statement, or the session ends. The default value for NAME is:
User USERNAME(USERID), Session SESSIONID, Instance INSTANCEID
The name of the statement is used to identify the resumable statement in the DBA_RESUMABLE and USER_RESUMABLE views.
Setting Default Resumable Mode
To set default resumable mode, a DBA can register a database level LOGON trigger to alter a user’s session to enable resumable and set a timeout interval.
If there are multiple triggers registered that change default mode and timeout for resumable statements, the result will be unspecified because Oracle does not guarantee the order of trigger invocation.
Changing the Timeout Interval
In addition to the ALTER SESSION ENABLE RESUMABLE statement, there are other methods for setting or changing the timeout interval.
The DBMS_RESUMABLE package contains procedures for setting the timeout period for a specific session or for the current session. A DBA can change the default system timeout by creating a system wide AFTER SUSPEND trigger that calls DBMS_RESUMABLE to set it. For example, the following code sample sets a system wide default timeout to one hour:
Detecting Suspended Statements
When a resumable statement is suspended, the error is not raised to the client. In order for corrective action to be taken, Oracle provides alternative methods for notifying users of the error and for providing information about the circumstances.
AFTER SUSPEND System Event and Trigger
When a resumable statement encounter a correctable error, the system internally generates the AFTER SUSPEND system event. Users can register triggers for this event at both the database and schema level. If a user registers a trigger to handle this system event, the trigger is executed after a SQL statement has been suspended.
SQL statements executed within a AFTER SUSPEND trigger are always nonresumable and are always autonomous. Transactions started within the trigger use the SYSTEM rollback segment. These conditions are imposed to overcome deadlocks and reduce the chance of the trigger experiencing the same error condition as the statement.
Users can use the USER_RESUMABLE or DBA_RESUMABLE views, or the DBMS_RESUMABLE.SPACE_ERROR_INFO function, within triggers to get information about the resumable statements.
Triggers can also call the DBMS_RESUMABLE package to abort suspended statements and modify resumable timeout values.
Views Containing Information About Resumable Statements
The following views can be queried to obtain information about the status of resumable statements:
View
Description
These views contain rows for all currently executing or suspended resumable statements. They can be used by a DBA, AFTER SUSPEND trigger, or another session to monitor the progress of, or obtain specific information about, resumable statements.
When a statement is suspended the session invoking the statement is put into a wait state. A row is inserted into this view for the session with the EVENT column containing «statement suspended, wait error to be cleared».
Oracle9i Database Reference for specific information about the columns contained in these views
DBMS_RESUMABLE Package
The DBMS_RESUMABLE package helps control resumable statements. The following procedures are available:
Procedure
Description
This procedure aborts a suspended resumable statement. The parameter sessionID is the session ID in which the statement is executing. For parallel DML/DDL, sessionID is any session ID which participates in the parallel DML/DDL.
Oracle guarantees that the ABORT operation always succeeds. It may be called either inside or outside of the AFTER SUSPEND trigger.
This function returns the current timeout value of resumable statements for the current session. The returned value is in seconds.
This procedure sets a timeout value for resumable statements for the current session. The parameter timeout is in seconds. The new timeout setting applies to the session immediately.
Resumable Space Allocation Example: Registering an AFTER SUSPEND Trigger
In the following example, a system wide AFTER SUSPEND trigger is created and registered as user SYS at the database level. Whenever a resumable statement is suspended in any session, this trigger can have either of two effects:
Here are the statements for this example:
Deallocating Space
This section describes aspects of deallocating unused space.
Viewing the High Water Mark
Prior to deallocation, you can use the DBMS_SPACE package, which contains a procedure ( UNUSED_SPACE ) that returns information about the position of the high water mark and the amount of unused space in a segment.
Issuing Space Deallocation Statements
The following statements deallocate unused space in a segment (table, index or cluster). The KEEP clause is optional.
If you do not specify the KEEP clause, all unused space (everything above the high water mark) is deallocated, as long as the size of the initial extent and MINEXTENTS are preserved. Thus, even if the high water mark occurs within the MINEXTENTS boundary, MINEXTENTS remains and the initial extent size is not reduced.
You can verify the deallocated space is freed by examining the DBA_FREE_SPACE view.
Examples of Deallocating Space
This section provides some space deallocation examples.
Deallocating Space Example 1:
A table consists of three extents. The first extent is 10K, the second is 20K, and the third is 30K. The high water mark is in the middle of the second extent, and there is 40K of unused space. Figure 14-3 illustrates the effect of issuing the following statement:
All unused space is deallocated, leaving table dquon with two remaining extents. The third extent disappears, and the second extent size is 10K.
Figure 14-3 Deallocating All Unused Space
In effect, the third extent is deallocated and the second extent remains intact.
Figure 14-4 illustrates this situation.
Figure 14-4 Deallocating Unused Space, KEEP 10K
Further, if you deallocate all unused space from dquon and keep 20K, as specified in the following statement, the third extent is cut to 10K, and the size of the second extent remains the same.
Deallocating Space Example 2:
Consider the situation illustrated by Figure 14-3. Extent 3 is completely deallocated, and the second extent is left with 10K. Further, the size of the next allocated extent defaults to the size of the last completely deallocated extent, which in this case, is 30K. If this is not what you want, you can explicitly set the size of the next extent using the ALTER TABLE statement, specifying a new value for NEXT in the storage clause.
The following statement sets the next extent size for table dquon to 20K:
Deallocating Space Example 3:
To preserve the MINEXTENTS number of extents, DEALLOCATE can retain extents that were originally allocated to a segment. This capacity is influenced by the KEEP parameter and was explained earlier.
If table dquon has a MINEXTENTS value of 2, the statements illustrated in Figure 14-3 and Figure 14-4 still yield the same results as shown, and further, the initial value of MINEXTENTS is preserved.
However, if the MINEXTENTS value is 3, then the statement illustrated in Figure 14-4 produces the same result as shown (the third extent is removed), but the value of MINEXTENTS is changed to 2. However, the statement illustrated in Figure 14-3 does not produce the same result. In this case, the statement has no effect.
Understanding Space Use of Datatypes
When creating tables and other data structures, you need to know how much space they will require. Each datatype has different space requirements. The PL/SQL User’s Guide and Reference and Oracle9i SQL Reference contain extensive descriptions of datatypes and their space requirements.