Overview of Tablespaces
A database is divided into one or more logical storage units
called tablespaces. Tablespaces are divided into logical units of storage
called segments, which are further divided into extents.
Extents are a collection of contiguous blocks.
This
section includes the following topics about tablespaces:
- Bigfile Tablespaces
- The SYSTEM Tablespace
- The SYSAUX Tablespace
- Undo Tablespaces
- Default Temporary Tablespace
- Using Multiple Tablespaces
- Managing Space in Tablespaces
- Multiple Block Sizes
- Online and Offline Tablespaces
- Read-Only Tablespaces
- Temporary Tablespaces for Sort Operations
- Transport of Tablespaces Between
Databases
Oracle lets you create bigfile tablespaces. This
allows Oracle Database to contain tablespaces made up of single large files
rather than numerous smaller ones. This lets Oracle Database utilize the
ability of 64-bit systems to create and manage ultralarge files. The
consequence of this is that Oracle Database can now scale up to 8 exabytes in
size.
With
Oracle-managed files, bigfile tablespaces make datafiles completely transparent
for users. In other words, you can perform operations on tablespaces, rather
than the underlying datafile. Bigfile tablespaces make the tablespace the main
unit of the disk space administration, backup and recovery, and so on. Bigfile
tablespaces also simplify datafile management with Oracle-managed files and
Automatic Storage Management by eliminating the need for adding new datafiles
and dealing with multiple files.
The
system default is to create a smallfile tablespace, which is the traditional
type of Oracle tablespace. The SYSTEM and SYSAUX tablespace types are always created
using the system default type.
Bigfile
tablespaces are supported only for locally managed tablespaces with automatic
segment-space management. There are two exceptions: locally managed undo and
temporary tablespaces can be bigfile tablespaces, even though their segments
are manually managed.
An
Oracle database can contain both bigfile and smallfile tablespaces. Tablespaces
of different types are indistinguishable in terms of execution of SQL
statements that do not explicitly refer to datafiles.
You
can create a group of temporary tablespaces that let a user consume temporary
space from multiple tablespaces. A tablespace group can also be specified as
the default temporary tablespace for the database. This is useful with bigfile
tablespaces, where you could need a lot of temporary tablespace for sorts.
- Bigfile tablespaces
can significantly increase the storage capacity of an Oracle database.
Smallfile tablespaces can contain up to 1024 files, but bigfile
tablespaces contain only one file that can be 1024 times larger than a
smallfile tablespace. The total tablespace capacity is the same for
smallfile tablespaces and bigfile tablespaces. However, because there is
limit of 64K datafiles for each database, a database can contain 1024
times more bigfile tablespaces than smallfile tablespaces, so bigfile
tablespaces increase the total database capacity by 3 orders of magnitude.
In other words, 8 exabytes is the maximum size of the Oracle database when
bigfile tablespaces are used with the maximum block size (32 k).
- Bigfile tablespaces simplify
management of datafiles in ultra large databases by reducing the number of
datafiles needed. You can also adjust parameters to reduce the SGA space
required for datafile information and the size of the control file.
- They simplify database
management by providing datafile transparency.
- Bigfile tablespaces
are intended to be used with Automatic Storage Management or other logical
volume managers that support dynamically extensible logical volumes and
striping or RAID.
- Avoid creating bigfile
tablespaces on a system that does not support striping because of negative
implications for parallel execution and RMAN backup parallelization.
- Avoid using bigfile tablespaces
if there could possibly be no free space available on a disk group, and
the only way to extend a tablespace is to add a new datafile on a
different disk group.
- Using bigfile tablespaces on
platforms that do not support large file sizes is not recommended and can
limit tablespace capacity. Refer to your operating system specific
documentation for information about maximum supported file sizes.
- Performance of database opens,
checkpoints, and DBWR processes should improve if data is stored in
bigfile tablespaces instead of traditional tablespaces. However,
increasing the datafile size might increase time to restore a corrupted
file or create a new datafile.
Every Oracle database
contains a tablespace named SYSTEM, which Oracle creates automatically when the
database is created. The SYSTEM tablespace is always online when the
database is open.
To
take advantage of the benefits of locally managed tablespaces, you can create a
locally managed SYSTEM tablespace, or you can migrate an existing dictionary
managed SYSTEM tablespace to a locally managed format.
In
a database with a locally managed SYSTEM tablespace, dictionary managed
tablespaces cannot be created. It is possible to plug in a dictionary managed
tablespace using the transportable feature, but it cannot be made writable.
Note:
If a tablespace is locally managed, then it
cannot be reverted back to being dictionary managed.
The SYSTEM tablespace always contains the data
dictionary tables for the entire database. The data dictionary tables are
stored in datafile 1.
All data stored on behalf of stored PL/SQL
program units (that is, procedures, functions, packages, and triggers) resides
in the SYSTEM tablespace. If the database contains many of these program
units, then the database administrator must provide the space the units need in
the SYSTEM tablespace.
The SYSAUX tablespace is an
auxiliary tablespace to the SYSTEM tablespace. Many database components use
the SYSAUX tablespace as their default location to store data.
Therefore, the SYSAUX tablespace is always created during database creation or
database upgrade.
The SYSAUX tablespace
provides a centralized location for database metadata that does not reside in
the SYSTEM tablespace. It reduces the number of tablespaces created
by default, both in the seed database and in user-defined databases.
During
normal database operation, the Oracle database server does not allow the SYSAUX tablespace to be
dropped or renamed. Transportable tablespaces for SYSAUX is not
supported.
Note:
If the SYSAUX tablespace is unavailable, such as due
to a media failure, then some database features might fail.
Undo
tablespaces are special tablespaces used solely for storing undo information.
You cannot create any other segment types (for example, tables or indexes) in
undo tablespaces. Each database contains zero or more undo tablespaces. In
automatic undo management mode, each Oracle instance is assigned one (and only
one) undo tablespace. Undo data is managed within an undo tablespace using undo
segments that are automatically created and maintained by Oracle.
When
the first DML operation is run within a transaction, the transaction is bound
(assigned) to an undo segment (and therefore to a transaction table) in the
current undo tablespace. In rare circumstances, if the instance does not have a
designated undo tablespace, the transaction binds to the system undo segment.
Caution:
Do not run any user transactions before
creating the first undo tablespace and taking it online.
Each
undo tablespace is composed of a set of undo files and is locally managed. Like
other types of tablespaces, undo blocks are grouped in extents and the status
of each extent is represented in the bitmap. At any point in time, an extent is
either allocated to (and used by) a transaction table, or it is free.
You
can create a bigfile undo tablespace.
A
database administrator creates undo tablespaces individually, using the CREATE UNDO TABLESPACE statement. It
can also be created when the database is created, using the CREATE DATABASE statement. A set
of files is assigned to each newly created undo tablespace. Like regular
tablespaces, attributes of undo tablespaces can be modified with the ALTER TABLESPACE statement and
dropped with the DROP TABLESPACE statement.
Note:
An undo tablespace cannot be dropped if it is
being used by any instance or contains any undo information needed to recover
transactions.
You
assign an undo tablespace to an instance in one of two ways:
- At instance startup. You can
specify the undo tablespace in the initialization file or let the system
choose an available undo tablespace.
- While the instance is running.
Use ALTER SYSTEM SET UNDO_TABLESPACE to replace the active undo tablespace with
another undo tablespace. This method is rarely used.
You
can add more space to an undo tablespace by adding more datafiles to the undo
tablespace with the ALTER TABLESPACE statement.
You
can have more than one undo tablespace and switch between them. Use the
Database Resource Manager to establish user quotas for undo tablespaces. You
can specify the retention period for undo information.
When
the SYSTEM tablespace is locally managed, you must define at least
one default temporary tablespace when creating a database. A locally managedSYSTEM tablespace
cannot be used for default temporary storage.
If SYSTEM is dictionary
managed and if you do not define a default temporary tablespace when creating
the database, then SYSTEM is still used for default temporary
storage. However, you will receive a warning in ALERT.LOG saying that a
default temporary tablespace is recommended and will be necessary in future
releases.
Specify
default temporary tablespaces when you create a database, using the DEFAULT TEMPORARY TABLESPACE extension to
the CREATE DATABASE statement.
If
you drop all default temporary tablespaces, then the SYSTEM tablespace is
used as the default temporary tablespace.
You
can create bigfile temporary tablespaces. A bigfile temporary tablespaces uses
tempfiles instead of datafiles.
Note:
You cannot make a default temporary tablespace
permanent or take it offline.
A
very small database may need only the SYSTEM tablespace; however, Oracle recommends
that you create at least one additional tablespace to store user data separate
from data dictionary information. This gives you more flexibility in various
database administration operations and reduces contention among dictionary
objects and schema objects for the same datafiles.
You
can use multiple tablespaces to perform the following tasks:
- Control disk space allocation
for database data
- Assign specific space quotas
for database users
- Control availability of data by
taking individual tablespaces online or offline
- Perform partial database backup
or recovery operations
- Allocate data storage across
devices to improve performance
A
database administrator can use tablespaces to do the following actions:
- Create new tablespaces
- Add datafiles to tablespaces
- Set and alter default segment
storage settings for segments created in a tablespace
- Make a tablespace read only or
read/write
- Make a tablespace temporary or
permanent
- Rename tablespaces
- Drop tablespaces
Tablespaces allocate space in extents.
Tablespaces can use two different methods to keep track of their free and used
space:
- Locally managed tablespaces: Extent management by the tablespace
- Dictionary managed tablespaces: Extent management by the data dictionary
When
you create a tablespace, you choose one of these methods of space management.
Later, you can change the management method with theDBMS_SPACE_ADMIN PL/SQL
package.
Note:
If you do not specify extent management when
you create a tablespace, then the default is locally managed.
A tablespace that manages its own extents maintains a bitmap in
each datafile to keep track of the free or used status of blocks in that
datafile. Each bit in the bitmap corresponds to a block or a group of blocks.
When an extent is allocated or freed for reuse, Oracle changes the bitmap
values to show the new status of the blocks. These changes do not generate
rollback information because they do not update tables in the data dictionary
(except for special cases such as tablespace quota information).
Locally
managed tablespaces have the following advantages over dictionary managed
tablespaces:
- Local management of extents
automatically tracks adjacent free space, eliminating the need to coalesce
free extents.
- Local management of extents
avoids recursive space management operations. Such recursive operations
can occur in dictionary managed tablespaces if consuming or releasing
space in an extent results in another operation that consumes or releases
space in a data dictionary table or rollback segment.
The
sizes of extents that are managed locally can be determined automatically by
the system. Alternatively, all extents can have the same size in a locally
managed tablespace and override object storage options.
The LOCAL clause of
the CREATE TABLESPACE or CREATE TEMPORARY TABLESPACE statement is specified to create locally
managed permanent or temporary tablespaces, respectively.
When
you create a locally managed tablespace using the CREATE TABLESPACE statement,
the SEGMENT SPACE MANAGEMENT clause lets you specify how free and used space within a
segment is to be managed. Your choices are:
- AUTO
This keyword tells Oracle that you want to use bitmaps to manage
the free space within segments. A bitmap, in this case, is a map that describes
the status of each data block within a segment with respect to the amount of
space in the block available for inserting rows. As more or less space becomes
available in a data block, its new state is reflected in the bitmap. Bitmaps
enable Oracle to manage free space more automatically; thus, this form of space
management is called automatic segment-space management.
Locally managed tablespaces using automatic segment-space
management can be created as smallfile (traditional) or bigfile
tablespaces. AUTO is the default.
- MANUAL
This keyword tells Oracle that you want to use free lists for
managing free space within segments. Free lists are lists of data blocks that
have space available for inserting rows.
If you
created your database with an earlier version of Oracle, then you could be
using dictionary managed tablespaces. For a tablespace that uses the data
dictionary to manage its extents, Oracle updates the appropriate tables in the
data dictionary whenever an extent is allocated or freed for reuse. Oracle also
stores rollback information about each update of the dictionary tables. Because
dictionary tables and rollback segments are part of the database, the space
that they occupy is subject to the same space management operations as all
other data.
Oracle
supports multiple block sizes in a database. The standard block size is
used for the SYSTEM tablespace. This is set when the database is created and
can be any valid size. You specify the standard block size by setting the
initialization parameter DB_BLOCK_SIZE.
Legitimate values are from 2K to 32K.
In
the initialization parameter file or server parameter, you can configure
subcaches within the buffer cache for each of these block sizes. Subcaches can
also be configured while an instance is running. You can create tablespaces
having any of these block sizes. The standard block size is used for the system
tablespace and most other tablespaces.
Note:
All partitions of a partitioned object must
reside in tablespaces of a single block size.
Multiple
block sizes are useful primarily when transporting a tablespace from an OLTP
database to an enterprise data warehouse. This facilitates transport between
databases of different block sizes.
A database
administrator can bring any tablespace other than the SYSTEM tablespace online (accessible)
or offline (not accessible) whenever the database is open.
The SYSTEM tablespace is always online when the database is open
because the data dictionary must always be available to Oracle.
A
tablespace is usually online so that the data contained within it is available
to database users. However, the database administrator can take a tablespace
offline for maintenance or backup and recovery purposes.
When
a tablespace goes offline, Oracle does not permit any subsequent SQL statements
to reference objects contained in that tablespace. Active transactions with
completed statements that refer to data in that tablespace are not affected at
the transaction level. Oracle saves rollback data corresponding to those
completed statements in a deferred rollback segment in the SYSTEM tablespace. When
the tablespace is brought back online, Oracle applies the rollback data to the
tablespace, if needed.
When a tablespace goes offline or comes back
online, this is recorded in the data dictionary in the SYSTEM tablespace. If a
tablespace is offline when you shut down a database, the tablespace remains
offline when the database is subsequently mounted and reopened.
You
can bring a tablespace online only in the database in which it was created
because the necessary data dictionary information is maintained in the SYSTEMtablespace of that
database. An offline tablespace cannot be read or edited by any utility other
than Oracle. Thus, offline tablespaces cannot be transposed to other databases.
Oracle
automatically switches a tablespace from online to offline when certain errors
are encountered. For example, Oracle switches a tablespace from online to
offline when the database writer process, DBWn, fails in several
attempts to write to a datafile of the tablespace. Users trying to access
tables in the offline tablespace receive an error. If the problem that causes
this disk I/O to fail is media failure, you must recover the tablespace after
you correct the problem.
If
you create multiple tablespaces to separate different types of data, you take
specific tablespaces offline for various procedures. Other tablespaces remain
online, and the information in them is still available for use. However,
special circumstances can occur when tablespaces are taken offline. For
example, if two tablespaces are used to separate table data from index data,
the following is true:
- If
the tablespace containing the indexes is offline, then queries can still
access table data because queries do not require an index to access the
table data.
- If the tablespace containing
the tables is offline, then the table data in the database is not
accessible because the tables are required to access the data.
If
Oracle has enough information in the online tablespaces to run a statement, it
does so. If it needs data in an offline tablespace, then it causes the
statement to fail.
The primary purpose of
read-only tablespaces is to eliminate the need to perform backup and recovery
of large, static portions of a database. Oracle never updates the files of a
read-only tablespace, and therefore the files can reside on read-only media
such as CD-ROMs or WORM drives.
Note:
Because you can only bring a tablespace online
in the database in which it was created, read-only tablespaces are not meant to
satisfy archiving requirements.
Read-only
tablespaces cannot be modified. To update a read-only tablespace, first make
the tablespace read/write. After updating the tablespace, you can then reset it
to be read only.
Because
read-only tablespaces cannot be modified, and as long as they have not been
made read/write at any point, they do not need repeated backup. Also, if you
need to recover your database, you do not need to recover any read-only
tablespaces, because they could not have been modified.
You can manage space for sort operations more
efficiently by designating one or more temporary tablespaces exclusively for
sorts. Doing so effectively eliminates serialization of space management
operations involved in the allocation and deallocation of sort space. A single
SQL operation can use more than one temporary tablespace for sorting. For
example, you can create indexes on very large tables, and the sort operation
during index creation can be distributed across multiple tablespaces.
All operations
that use sorts, including joins, index builds, ordering, computing aggregates (GROUP BY), and collecting
optimizer statistics, benefit from temporary tablespaces. The performance gains
are significant with Real Application Clusters.
One or more temporary tablespaces can be used
only for sort segments. A temporary tablespace is not the same as a tablespace
that a user designates for temporary segments, which can be any tablespace
available to the user. No permanent schema objects can reside in a temporary
tablespace.
Sort
segments are used when a segment is shared by multiple sort operations. One
sort segment exists for every instance that performs a sort operation in a
given tablespace.
Temporary
tablespaces provide performance improvements when you have multiple sorts that
are too large to fit into memory. The sort segment of a given temporary
tablespace is created at the time of the first sort operation. The sort segment
expands by allocating extents until the segment size is equal to or greater
than the total storage demands of all of the active sorts running on that
instance.
Create
temporary tablespaces by using the CREATE TABLESPACE or CREATE TEMPORARY TABLESPACE statement.
A transportable
tablespace lets you move a subset of an Oracle database from one
Oracle database to another, even across different platforms. You can clone a
tablespace and plug it into another database, copying the tablespace between
databases, or you can unplug a tablespace from one Oracle database and plug it
into another Oracle database, moving the tablespace between databases.
Moving
data by transporting tablespaces can be orders of magnitude faster than either
export/import or unload/load of the same data, because transporting a
tablespace involves only copying datafiles and integrating the tablespace
metadata. When you transport tablespaces you can also move index data, so you
do not have to rebuild the indexes after importing or loading the table data.
You
can transport tablespaces across platforms. (Many, but not all, platforms are
supported for cross-platform tablespace transport.) This can be used for the
following:
- Provide an easier and more
efficient means for content providers to publish structured data and
distribute it to customers running Oracle on a different platform
- Simplify the distribution of
data from a data warehouse environment to data marts which are often
running on smaller platforms
- Enable the sharing of read only
tablespaces across a heterogeneous cluster
- Allow a database to be migrated
from one platform to another
A
tablespace repository is a collection of tablespace sets.
Tablespace repositories are built on file group repositories, but tablespace
repositories only contain the files required to move or copy tablespaces
between databases. Different tablespace sets may be stored in a tablespace
repository, and different versions of a particular tablespace set also may be
stored. A version of a tablespace set in a tablespace repository consists of
the following files:
- The Data Pump export dump file
for the tablespace set
- The Data Pump log file for the
export
- The datafiles that comprise the
tablespace set
To move or copy a set of tablespaces, you must
make the tablespaces read only, copy the datafiles of these tablespaces, and
use export/import to move the database information (metadata) stored in the
data dictionary. Both the datafiles and the metadata export file must be copied
to the target database. The transport of these files can be done using any
facility for copying flat files, such as the operating system copying facility,
ftp, or publishing on CDs.
After
copying the datafiles and importing the metadata, you can optionally put the
tablespaces in read/write mode.
The
first time a tablespace's datafiles are opened under Oracle Database with
the COMPATIBLE initialization parameter set to 10 or higher, each file
identifies the platform to which it belongs. These files have identical on disk
formats for file header blocks, which are used for file identification and
verification. Read only and offline files get the compatibility advanced after
they are made read/write or are brought online. This implies that tablespaces
that are read only prior to Oracle Database 10g must be made
read/write at least once before they can use the cross platform transportable
feature.
Note:
In a database with a locally managed SYSTEM tablespace,
dictionary tablespaces cannot be created. It is possible to plug in a
dictionary managed tablespace using the transportable feature, but it cannot be
made writable.
No comments:
Post a Comment