Notes on ORACLE 10 g taken from
docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm
docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm
Tablespaces, Datafiles, and
Control Files
Introduction to Tablespaces, Datafiles, and Control
Files
Oracle
stores data logically in tablespaces and physically in datafiles associated
with the corresponding tablespace. Figure 3-1 illustrates this relationship.
Figure
3-1 Datafiles and Tablespaces
Databases,
tablespaces, and datafiles are closely related, but they have important
differences:
- An Oracle database consists of one or more logical storage units called tablespaces, which collectively store all of the database's data.
- Each tablespace in an Oracle database consists of one or more files called datafiles,
- A database's data is collectively stored in the datafiles that constitute each tablespace of the database.
Oracle-Managed Files
Oracle-managed
files eliminate the need for the DBA, to directly manage the operating system
files comprising an Oracle database. You specify operations in terms of
database objects rather than filenames. Oracle internally uses standard file
system interfaces to create and delete files as needed for the following
database structures:
- Tablespaces
- Redo log files
- Control files
Through
initialization parameters, you specify the file system directory to be used for
a particular type of file. Oracle then ensures that a unique file, an
Oracle-managed file, is created and deleted when no longer needed.
Allocate More Space for a Database
The size
of a tablespace is the size of the datafiles that constitute the tablespace.
The size of a database is the collective size of the tablespaces that
constitute the database.
You can
enlarge a database in three ways:
- Add a datafile to a tablespace
- Add a new tablespace
- Increase the size of a datafile
When you
add another datafile to an existing tablespace, you increase the amount of disk
space allocated for the corresponding tablespace. Figure 3-2 illustrates this kind of space
increase.
Figure
3-2 Enlarging a Database by Adding a Datafile to a Tablespace
Alternatively,
you can create a new tablespace (which contains at least one additional
datafile) to increase the size of a database. Figure 3-3 illustrates this.
Figure
3-3 Enlarging a Database by Adding a New Tablespace
The third
option for enlarging a database is to change a datafile's size or let datafiles
in existing tablespaces grow dynamically as more space is needed. You
accomplish this by altering existing files or by adding files with dynamic
extension properties. Figure 3-4 illustrates this.
Figure
3-4 Enlarging a Database by Dynamically Sizing Datafiles
Notes on ORACLE 10 g
from the book Oracle Database 10g DBA Handbook By Kevin Loney
Description of "Figure 3-4 Enlarging a Database by Dynamically Sizing Datafiles"
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
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.
Benefits of Bigfile Tablespaces
- 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.
Considerations with Bigfile Tablespaces
- 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.
The SYSTEM Tablespace
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.
The Data Dictionary
The SYSTEM tablespace always contains the data dictionary
tables for the entire database. The data dictionary tables are stored in datafile 1.
PL/SQL Program Units Description
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
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.
Undo Tablespaces
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.
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.
Creation of Undo Tablespaces
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.
Assignment of Undo Tablespaces
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.
Using Multiple Tablespaces
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
Managing Space in 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 the DBMS_SPACE_ADMIN PL/SQL package.
Locally Managed Tablespaces
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.
Segment Space Management in Locally Managed
Tablespaces
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.
Online and Offline Tablespaces
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.
Bringing Tablespaces Offline
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 SYSTEM tablespace 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.
Use of Tablespaces for Special Procedures
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.
Read-Only Tablespaces
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.
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.
Overview of Datafiles
A
tablespace in an Oracle database consists of one or more physical datafiles. A
datafile can be associated with only one tablespace and only one database.
Oracle
creates a datafile for a tablespace by allocating the specified amount of disk
space plus the overhead required for the file header. When a datafile is
created, the operating system under which Oracle runs is responsible for
clearing old information and authorizations from a file before allocating it to
Oracle. If the file is large, this process can take a significant amount of
time. The first tablespace in any database is always the SYSTEM tablespace, so Oracle automatically allocates the
first datafiles of any database for the SYSTEM
tablespace during database creation.
Datafile Contents
When a
datafile is first created, the allocated disk space is formatted but does not
contain any user data. However, Oracle reserves the space to hold the data for
future segments of the associated tablespace—it is used exclusively by Oracle.
As the data grows in a tablespace, Oracle uses the free space in the associated
datafiles to allocate extents for the segment.
The data
associated with schema objects in a tablespace is physically stored in one or
more of the datafiles that constitute the tablespace. Note that a schema object
does not correspond to a specific datafile; rather, a datafile is a repository
for the data of any schema object within a specific tablespace. Oracle
allocates space for the data associated with a schema object in one or more
datafiles of a tablespace. Therefore, a schema object can span one or more
datafiles. Unless table striping is used (where data is spread across more than
one disk), the database administrator and end users cannot control which
datafile stores a schema object.
Size of Datafiles
You can
alter the size of a datafile after its creation or you can specify that a
datafile should dynamically grow as schema objects in the tablespace grow. This
functionality enables you to have fewer datafiles for each tablespace and can
simplify administration of datafiles.
Offline Datafiles
You can
take tablespaces offline or bring them online at any time, except for the SYSTEM tablespace. All of the datafiles of a tablespace
are taken offline or brought online as a unit when you take the tablespace
offline or bring it online, respectively.
You can
take individual datafiles offline. However, this is usually done only during
some database recovery procedures.
Temporary Datafiles
Locally
managed temporary tablespaces have temporary datafiles (tempfiles), which are similar to ordinary
datafiles, with the following exceptions:
- Tempfiles are always set to NOLOGGING mode.
- You cannot make a tempfile read only.
- You cannot create a tempfile with the ALTER DATABASE statement.
- Media recovery does not recognize tempfiles:
- BACKUP CONTROLFILE does not generate any information for tempfiles.
- CREATE CONTROLFILE cannot specify any information about tempfiles.
- When you create or resize tempfiles, they are not always guaranteed allocation of disk space for the file size specified. On certain file systems (for example, UNIX) disk blocks are allocated not at file creation or resizing, but before the blocks are accessed.
Caution:
This enables fast tempfile creation and resizing;
however, the disk could run of space later when the tempfiles are accessed.
- Tempfile information is shown in the dictionary view DBA_TEMP_FILES and the dynamic performance view V$TEMPFILE, but not in DBA_DATA_FILES or the V$DATAFILE view.
Overview of Control Files
The
database control file is a small binary file necessary for the database to
start and operate successfully. A control file is updated continuously by
Oracle during database use, so it must be available for writing whenever the
database is open. If for some reason the control file is not accessible, then
the database cannot function properly.
Each
control file is associated with only one Oracle database.
Control File Contents
A control
file contains information about the associated database that is required for
access by an instance, both at startup and during normal operation. Control
file information can be modified only by Oracle; no database administrator or
user can edit a control file.
Among
other things, a control file contains information such as:
- The database name
- The timestamp of database creation
- The names and locations of associated datafiles and redo log files
- Tablespace information
- Datafile offline ranges
- The log history
- Archived log information
- Backup set and backup piece information
- Backup datafile and redo log information
- Datafile copy information
- The current log sequence number
- Checkpoint information
The
database name and timestamp originate at database creation. The database name
is taken from either the name specified by the DB_NAME initialization parameter or the name used in the CREATE DATABASE
statement.
Each time
that a datafile or a redo log file is added to, renamed in, or dropped from the
database, the control file is updated to reflect this physical structure
change. These changes are recorded so that:
- Oracle can identify the datafiles and redo log files to open during database startup
- Oracle can identify files that are required or available in case database recovery is necessary
Therefore,
if you make a change to the physical structure of your database (using ALTER DATABASE
statements), then you should immediately make a backup of your control file.
Control
files also record information about checkpoints. Every three seconds, the
checkpoint process (CKPT) records information in the control file about the
checkpoint position in the redo log. This information is used during database
recovery to tell Oracle that all redo entries recorded before this point in the
redo log group are not necessary for database recovery; they were already
written to the datafiles.
Multiplexed Control Files
As with
redo log files, Oracle enables multiple, identical control files to be open
concurrently and written for the same database. By storing multiple control
files for a single database on different disks, you can safeguard against a
single point of failure with respect to control files. If a single disk that
contained a control file crashes, then the current instance fails when Oracle
attempts to access the damaged control file. However, when other copies of the
current control file are available on different disks, an instance can be
restarted without the need for database recovery.
If all
control files of a database are permanently lost during operation, then the
instance is aborted and media recovery is required. Media recovery is not
straightforward if an older backup of a control file must be used because a
current copy is not available. It is strongly recommended that you adhere to
the following:
- Use multiplexed control files with each database
- Store each copy on a different physical disk
- Use operating system mirroring
- Monitor backups
No comments:
Post a Comment