This chapter explains the nature of an Oracle database instance, the parameter and diagnostic files associated with an instance, and what occurs during instance creation and the opening and closing of a database.
This chapter contains the following sections:
A database instance is a set of memory structures that manage database files.
A database is a set of physical files on disk created by the
CREATE DATABASE statement. The instance manages its associated data and serves the users of the database.
Every running Oracle database is associated with at least one Oracle database instance. Because an instance exists in memory and a database exists on disk, an instance can exist without a database and a database can exist without an instance.
When an instance is started, Oracle Database allocates a memory area called the system global area (SGA) and starts one or more background processes.
The SGA serves various purposes, including the following:
Maintaining internal data structures that many processes and threads access concurrently
Caching data blocks read from disk
Buffering redo data before writing it to the online redo log files
Storing SQL execution plans
Oracle processes running on a single computer share the SGA. The way in which Oracle processes associate with the SGA varies according to operating system.
A database instance includes background processes. Server processes, and the process memory allocated in these processes, also exist in the instance. The instance continues to function when server processes terminate.
The following graphic shows the main components of an Oracle database instance.
Figure 13-1 Database Instance
Oracle Database runs in either a single-instance configuration or an Oracle Real Application Clusters (Oracle RAC) configuration. These configurations are mutually exclusive.
In a single-instance configuration, a one-to-one relationship exists between the database and a database instance. In Oracle RAC, a one-to-many relationship exists between the database and database instances.
The following figure shows possible database instance configurations.
Figure 13-2 Database Instance Configurations
Whether in a single-instance or Oracle RAC configuration, a database instance is associated with only one database at a time. You can start a database instance and mount (associate the instance with) one database, but not mount two databases simultaneously with the same instance.
This chapter discusses a single-instance database configuration unless otherwise noted.
Multiple instances can run concurrently on the same computer, each accessing its own database. For example, a computer can host two distinct databases:
prod2. One database instance manages
prod1, while a separate instance manages
Oracle Real Application Clusters Administration and Deployment Guide for information specific to Oracle RAC
A database instance begins when it is created with the
STARTUP command and ends when it is terminated.
During this period, a database instance can associate itself with one and only one database. Furthermore, the instance can mount a database only once, close it only once, and open it only once. After a database has been closed or shut down, you must start a different instance to mount and open this database.
The following table illustrates a database instance attempting to reopen a database that it previously closed.
Table 13-1 Duration of an Instance
SQL> STARTUP ORACLE instance started. Total System Global Area 468729856 bytes Fixed Size 1333556 bytes Variable Size 440403660 bytes Database Buffers 16777216 bytes Redo Buffers 10215424 bytes Database mounted. Database opened.
SQL> SELECT TO_CHAR(STARTUP_TIME,'MON-DD-RR HH24:MI:SS') AS "Inst Start Time" FROM V$INSTANCE; Inst Start Time ------------------ JUN-18-14 13:14:48
This query shows the time that the current instance was started.
SQL> SHUTDOWN IMMEDIATE
The instance closes the database and shuts down, ending the life of this instance.
SQL> STARTUP Oracle instance started. . . .
SQL> SELECT TO_CHAR(STARTUP_TIME, 'MON-DD-RR HH24:MI:SS') AS "Inst Start Time" FROM V$INSTANCE; Inst Start Time ------------------ JUN-18-14 13:16:40
This query shows the time that the current instance was started. The different start time shows that this instance is different from the one that shut down the database.
The system identifier (SID) is a unique name for an Oracle database instance on a specific host.
On UNIX and Linux, Oracle Database uses the SID and Oracle home values to create a key to shared memory. Also, Oracle Database uses the SID by default to locate the initialization parameter file, which locates relevant files such as the database control files.
On most platforms, the
ORACLE_SID environment variable sets the SID, whereas the
ORACLE_HOME variable sets the Oracle home. When connecting to an instance, clients can specify the SID in an Oracle Net connection or use a net service name. Oracle Database converts a service name into an
A database instance provides user access to a database. The instance and the database can be in various states.
Typically, you manually start an instance, and then mount and open the database, making it available for users. You can use the SQL*Plus
STARTUP command, Oracle Enterprise Manager (Enterprise Manager), or the SRVCTL utility to perform these steps.
To start a database instance using Oracle Net, the following must be true:
The database is statically registered with an Oracle Net listener.
Your client is connected to the database with the
The listener creates a dedicated server, which can start the database instance.
The following graphic shows the database progressing from a shutdown state to an open state.
Figure 13-3 Instance and Database Startup Sequence
A database goes through the following phases when it proceeds from a shutdown state to an open database state:
Instance started without mounting database
The instance is started, but is not yet associated with a database.
"How an Instance Is Started" explains this stage.
The instance is started and is associated with a database by reading its control file. The database is closed to users.
"How a Database Is Mounted" explains this stage.
The instance is started and is associated with an open database. The data contained in the data files is accessible to authorized users.
"How a Database Is Opened" explains this stage.
Database startup and shutdown are powerful administrative options that are restricted to users who connect to Oracle Database with administrator privileges.
Normal users do not have control over the current status of an Oracle database. Depending on the operating system, one of the following conditions establishes administrator privileges for a user:
The operating system privileges of the user enable him or her to connect using administrator privileges.
The user is granted special system privileges, and the database uses password files to authenticate database administrators over the network.
The following special system privileges enable access to a database instance even when the database is not open:
Control of the preceding privileges is outside of the database itself. When you connect to a database with the
SYSDBA system privilege, you are in the schema owned by
SYS. When you connect as
SYSOPER, you are in the public schema.
SYSOPER privileges are a subset of
"Overview of Database Security" to learn about password files and authentication for database administrators
Oracle Database Security Guide to learn about managing administrative privileges
Oracle Database Administrator’s Guide to learn about system privileges
Oracle Database Installation Guide to learn more about operating system privilege groups
When Oracle Database starts an instance, it proceeds through stages.
The stages are as follows:
Searches for a server parameter file in a platform-specific default location and, if not found, for a text initialization parameter file (specifying
STARTUP with the
PFILE parameters overrides the default behavior)
Reads the parameter file to determine the values of initialization parameters
Allocates the SGA based on the initialization parameter settings
Starts the Oracle background processes
Opens the alert log and trace files and writes all explicit parameter settings to the alert log in valid parameter syntax
At this stage, no database is associated with the instance. Scenarios that require a
NOMOUNT state include database creation and certain backup and recovery operations.
Oracle Database Administrator’s Guide to learn how to manage initialization parameters using a server parameter file
The instance mounts a database to associate the database with this instance.
To mount the database, the instance obtains the names of the database control files specified in the
CONTROL_FILES initialization parameter and opens the files. Oracle Database reads the control files to find the names of the data files and the online redo log files that it will attempt to access when opening the database.
In a mounted database, the database is closed and accessible only to database administrators. Administrators can keep the database closed while completing specific maintenance operations. However, the database is not available for normal operations.
If Oracle Database allows multiple instances to mount the same database concurrently, then the
CLUSTER_DATABASE initialization parameter setting can make the database available to multiple instances. Database behavior depends on the setting:
false (default) for the first instance that mounts a database, then only this instance can mount the database.
true for the first instance, then other instances can mount the database if their
CLUSTER_DATABASE parameter settings are set to
true. The number of instances that can mount the database is subject to a predetermined maximum specified when creating the database.
Oracle Database Administrator’s Guide to learn how to mount a database
Oracle Real Application Clusters Administration and Deployment Guide for more information about the use of multiple instances with a single database
Opening a mounted database makes it available for normal database operation.
Any valid user can connect to an open database and access its information. Usually, a database administrator opens the database to make it available for general use.
When you open the database, Oracle Database performs the following actions:
Opens the online data files in tablespaces other than undo tablespaces
If a tablespace was offline when the database was previously shut down, then the tablespace and its corresponding data files will be offline when the database reopens.
Acquires an undo tablespace
If multiple undo tablespaces exists, then the
UNDO_TABLESPACE initialization parameter designates the undo tablespace to use. If this parameter is not set, then the first available undo tablespace is chosen.
Opens the online redo log files
By default, the database opens in read/write mode. In this mode, users can make changes to the data, generating redo in the online redo log. Alternatively, you can open in read-only mode to prevent data modification by user transactions.
By default, a physical standby database opens in read-only mode.
Read-only mode restricts database access to read-only transactions, which cannot write to data files or to online redo log files. However, the database can perform recovery or operations that change the database state without generating redo. For example, in read-only mode:
Data files can be taken offline and online. However, you cannot take permanent tablespaces offline.
Offline data files and tablespaces can be recovered.
The control file remains available for updates about the state of the database.
Temporary tablespaces created with the
CREATE TEMPORARY TABLESPACE statement are read/write.
Writes to operating system audit trails, trace files, and alert logs can continue.
If any of the data files or redo log files are not present when the instance attempts to open the database, or if the files are present but fail consistency tests, then the database returns an error. Media recovery may be required.
In a typical use case, you manually shut down the database, making it unavailable for users while you perform maintenance or other administrative tasks. You can use the SQL*Plus
SHUTDOWN command or Enterprise Manager to perform these steps.
The following figure shows the progression from an open state to a consistent shutdown.
Figure 13-4 Instance and Database Shutdown Sequence
Oracle Database automatically performs the following steps whenever an open database is shut down consistently:
The database is mounted, but online data files and redo log files are closed.
"How a Database Is Closed" explains this stage.
The instance is started, but is no longer associated with the control file of the database.
"How a Database Is Unmounted" explains this stage.
Database instance shut down
The database instance is no longer started.
"How an Instance Is Shut Down" explains this stage.
Oracle Database does not go through all of the preceding steps in an instance failure or
SHUTDOWN ABORT, which immediately terminates the instance.
Oracle Database Administrator’s Guide to learn how to shut down a database
A database administrator with
SYSOPER privileges can shut down the database using the SQL*Plus
SHUTDOWN command or Enterprise Manager. The
SHUTDOWN command has options that determine shutdown behavior.
The following table summarizes the behavior of the different shutdown modes.
Table 13-2 Database Shutdown Modes
Permits new user connections
Waits until current sessions end
Waits until current transactions end
Performs a checkpoint and closes open files
SHUTDOWN statements are:
This mode is intended for emergency situations, such as when no other form of shutdown is successful. This mode of shutdown is the fastest. However, a subsequent open of this database may take substantially longer because instance recovery must be performed to make the data files consistent.
ABORT does not checkpoint the open data files, instance recovery is necessary before the database can reopen. The other shutdown modes do not require instance recovery before the database can reopen.
In a CDB, issuing
SHUTDOWN ABORT on a PDB is equivalent to issuing
SHUTDOWN IMMEDIATE on a non-CDB.
This mode is typically the fastest next to
ABORT. Oracle Database terminates any executing SQL statements and disconnects users. Active transactions are terminated and uncommitted changes are rolled back.
This mode prevents users from starting new transactions, but waits for all current transactions to complete before shutting down. This mode can take a significant amount of time depending on the nature of the current transactions.
This is the default mode of shutdown. The database waits for all connected users to disconnect before shutting down.
The database close operation is implicit in a database shutdown. The nature of the operation depends on whether the database shutdown is normal or abnormal.
When a database is closed as part of a
SHUTDOWN with any option other than
ABORT, Oracle Database writes data in the SGA to the data files and online redo log files.
Afterward, the database closes online data files and online redo log files. Any offline data files of offline tablespaces have been closed already. When the database reopens, any tablespace that was offline remains offline.
At this stage, the database is closed and inaccessible for normal operations. The control files remain open after a database is closed.
SHUTDOWN ABORT or abnormal termination occurs, then the instance of an open database closes and shuts down the database instantaneously.
In an abnormal shutdown, Oracle Database does not write data in the buffers of the SGA to the data files and redo log files. The subsequent reopening of the database requires instance recovery, which Oracle Database performs automatically.
After the database is closed, Oracle Database unmounts the database to disassociate it from the instance.
After a database is unmounted, Oracle Database closes the control files of the database. At this point, the database instance remains in memory.
The final step in database shutdown is shutting down the instance. When the database instance shuts down, the SGA ceases to occupy memory, and the background processes terminate.
In unusual circumstances, shutdown of an instance may not occur cleanly. Memory structures may not be removed from memory or one of the background processes may not be terminated. When remnants of a previous instance exist, a subsequent instance startup may fail. In such situations, you can force the new instance to start by removing the remnants of the previous instance and then starting a new instance, or by issuing a
SHUTDOWN ABORT statement in SQL*Plus or using Enterprise Manager.
Oracle Database Administrator’s Guide for more detailed information about database shutdown
A checkpoint is a crucial mechanism in consistent database shutdowns, instance recovery, and Oracle Database operation generally.
The term has the following related meanings:
A data structure that indicates the checkpoint position, which is the SCN in the redo stream where instance recovery must begin
The checkpoint position is determined by the oldest dirty buffer in the database buffer cache. The checkpoint position acts as a pointer to the redo stream and is stored in the control file and in each data file header.
The writing of modified database buffers in the database buffer cache to disk
Oracle Database uses checkpoints to achieve multiple goals.
Goals include the following:
Reduce the time required for recovery in case of an instance or media failure
Ensure that the database regularly writes dirty buffers in the buffer cache to disk
Ensure that the database writes all committed data to disk during a consistent shutdown
The checkpoint process (CKPT) is responsible for writing checkpoints to the data file headers and control file.
Checkpoints occur in a variety of situations. For example, Oracle Database uses the following types of checkpoints:
The database writes to disk all buffers modified by redo in a specific thread before a certain target. The set of thread checkpoints on all instances in a database is a database checkpoint. Thread checkpoints occur in the following situations:
Consistent database shutdown
ALTER SYSTEM CHECKPOINT statement
Online redo log switch
ALTER DATABASE BEGIN BACKUP statement
Tablespace and data file checkpoints
The database writes to disk all buffers modified by redo before a specific target. A tablespace checkpoint is a set of data file checkpoints, one for each data file in the tablespace. These checkpoints occur in a variety of situations, including making a tablespace read-only or taking it offline normal, shrinking a data file, or executing
ALTER TABLESPACE BEGIN BACKUP.
An incremental checkpoint is a type of thread checkpoint partly intended to avoid writing large numbers of blocks at online redo log switches. DBW checks at least every three seconds to determine whether it has work to do. When DBW writes dirty buffers, it advances the checkpoint position, causing CKPT to write the checkpoint position to the control file, but not to the data file headers.
Other types of checkpoints include instance and media recovery checkpoints and checkpoints when schema objects are dropped or truncated.
Oracle Real Application Clusters Administration and Deployment Guide for information about global checkpoints in Oracle RAC
Instance recovery is the process of applying records in the online redo log to data files to reconstruct changes made after the most recent checkpoint.
Instance recovery occurs automatically when an administrator attempts to open a database that was previously shut down inconsistently.
Instance recovery ensures that the database is in a consistent state after an instance failure. The files of a database can be left in an inconsistent state because of how Oracle Database manages database changes.
A redo thread is a record of all of the changes generated by an instance. A single-instance database has one thread of redo, whereas an Oracle RAC database has multiple redo threads, one for each database instance.
When a transaction is committed, log writer process (LGWR) writes both the remaining redo entries in memory and the transaction SCN to the online redo log. However, the database writer (DBW) process writes modified data blocks to the data files whenever it is most efficient. For this reason, uncommitted changes may temporarily exist in the data files while committed changes do not yet exist in the data files.
If an instance of an open database fails, either because of a
SHUTDOWN ABORT statement or abnormal termination, then the following situations can result:
Data blocks committed by a transaction are not written to the data files and appear only in the online redo log. These changes must be reapplied to the data files.
The data files contains changes that had not been committed when the instance failed. These changes must be rolled back to ensure transactional consistency.
Instance recovery uses only online redo log files and current online data files to synchronize the data files and ensure that they are consistent.
Whether instance recovery is required depends on the state of the redo threads.
A redo thread is marked open in the control file when a database instance opens in read/write mode, and is marked closed when the instance is shut down consistently. If redo threads are marked open in the control file, but no live instances hold the thread enqueues corresponding to these threads, then the database requires instance recovery.
Oracle Database performs instance recovery automatically in the following situations:
The database opens for the first time after the failure of a single-instance database or all instances of an Oracle RAC database. This form of instance recovery is also called crash recovery. Oracle Database recovers the online redo threads of the terminated instances together.
Some but not all instances of an Oracle RAC database fail. Instance recovery is performed automatically by a surviving instance in the configuration.
The SMON background process performs instance recovery, applying online redo automatically. No user intervention is required.
Oracle Real Application Clusters Administration and Deployment Guide to learn about instance recovery in an Oracle RAC database
Instance recovery uses checkpoints to determine which changes must be applied to the data files. The checkpoint position guarantees that every committed change with an SCN lower than the checkpoint SCN is saved to the data files.
The following figure depicts the redo thread in the online redo log.
Figure 13-5 Checkpoint Position in Online Redo Log
During instance recovery, the database must apply the changes that occur between the checkpoint position and the end of the redo thread. As shown in Figure 13-5, some changes may already have been written to the data files. However, only changes with SCNs lower than the checkpoint position are guaranteed to be on disk.
Oracle Database Performance Tuning Guide to learn how to limit instance recovery time
The first phase of instance recovery is called cache recovery or rolling forward, and reapplies all changes recorded in the online redo log to the data files. Because the online redo log contains undo data, rolling forward also regenerates the corresponding undo segments.
Rolling forward proceeds through as many online redo log files as necessary to bring the database forward in time. After rolling forward, the data blocks contain all committed changes recorded in the online redo log files. These files could also contain uncommitted changes that were either saved to the data files before the failure, or were recorded in the online redo log and introduced during cache recovery.
After the roll forward, any changes that were not committed must be undone. Oracle Database uses the checkpoint position, which guarantees that every committed change with an SCN lower than the checkpoint SCN is saved on disk. Oracle Database applies undo blocks to roll back uncommitted changes in data blocks that were written before the failure or introduced during cache recovery. This phase is called rolling back or transaction recovery.
The following figure illustrates rolling forward and rolling back, the two steps necessary to recover from database instance failure.
Figure 13-6 Basic Instance Recovery Steps: Rolling Forward and Rolling Back
Oracle Database can roll back multiple transactions simultaneously as needed. All transactions that were active at the time of failure are marked as terminated. Instead of waiting for the SMON process to roll back terminated transactions, new transactions can roll back individual blocks themselves to obtain the required data.
To start a database instance, Oracle Database must read either a server parameter file, which is recommended, or a text initialization parameter file, which is a legacy implementation. These files contain a list of configuration parameters.
To create a database manually, you must start an instance with a parameter file and then issue a
CREATE DATABASE statement. Thus, the instance and parameter file can exist even when the database itself does not exist.
Initialization parameters are configuration parameters that affect the basic operation of an instance. The instance reads initialization parameters from a file at startup.
Oracle Database provides many initialization parameters to optimize its operation in diverse environments. Only a few of these parameters must be explicitly set because the default values are usually adequate.
Initialization parameters fall into different functional groups.
Most initialization parameters belong to one of the following groups:
Parameters that name entities such as files or directories
Parameters that set limits for a process, database resource, or the database itself
Parameters that affect capacity, such as the size of the SGA (these parameters are called variable parameters)
Variable parameters are of particular interest to database administrators because they can use these parameters to improve database performance.
Initialization parameters are divided into two groups: basic and advanced.
Typically, you must set and tune only the approximately 30 basic parameters to obtain reasonable performance. The basic parameters set characteristics such as the database name, locations of the control files, database block size, and undo tablespace.
In rare situations, modification to the advanced parameters may be required for optimal performance. The advanced parameters enable expert DBAs to adapt the behavior of the Oracle Database to meet unique requirements.
Oracle Database provides values in the starter initialization parameter file provided with your database software, or as created for you by the Database Configuration Assistant. You can edit these Oracle-supplied initialization parameters and add others, depending on your configuration and how you plan to tune the database. For relevant initialization parameters not included in the parameter file, Oracle Database supplies defaults.
Oracle Database Administrator’s Guide to learn how to specify initialization parameters
Oracle Database Reference for an explanation of the types of initialization parameters
A server parameter file is a repository for initialization parameters. A server parameter file has the following key characteristics:
Only Oracle Database reads and writes to the server parameter file.
Only one server parameter file exists for a database. This file must reside on the database host.
The server parameter file is binary and cannot be modified by a text editor.
Initialization parameters stored in the server parameter file are persistent. Any changes made to the parameters while a database instance is running can persist across instance shutdown and startup.
A server parameter file eliminates the need to maintain multiple text initialization parameter files for client applications. A server parameter file is initially built from a text initialization parameter file using the
CREATE SPFILE statement. It can also be created directly by the Database Configuration Assistant.
A text initialization parameter file is a text file that contains a list of initialization parameters.
This type of parameter file, which is a legacy implementation of the parameter file, has the following key characteristics:
When starting up or shutting down a database, the text initialization parameter file must reside on the same host as the client application that connects to the database.
A text initialization parameter file is text-based, not binary.
Oracle Database can read but not write to the text initialization parameter file. To change the parameter values you must manually alter the file with a text editor.
Changes to initialization parameter values by
ALTER SYSTEM are only in effect for the current instance. You must manually update the text initialization parameter file and restart the instance for the changes to be known.
The text initialization parameter file contains a series of
key=value pairs, one per line. For example, a portion of an initialization parameter file could look as follows:
db_name=sample control_files=/disk1/oradata/sample_cf.dbf db_block_size=8192 open_cursors=52 undo_management=auto shared_pool_size=280M pga_aggregate_target=29M . . .
To illustrate the manageability problems that text parameter files can create, assume that you use computers
clientb and must be able to start the database with SQL*Plus on either computer. In this case, two separate text initialization parameter files must exist, one on each computer, as shown in Figure 13-7. A server parameter file solves the problem of the proliferation of parameter files.
Figure 13-7 Multiple Initialization Parameter Files
You can adjust initialization parameters to modify the behavior of a database. The classification of parameters as static or dynamic determines how they can be modified.
The following table summarizes the differences.
Table 13-3 Static and Dynamic Initialization Parameters
Requires modification of the parameter file (text or server)
Requires database instance restart before setting takes affect
Described as "Modifiable" in Oracle Database Reference initialization parameter entry
Modifiable only for the database or instance
Static parameters include
COMPATIBLE. Dynamic parameters are grouped into session-level parameters, which affect only the current user session, and system-level parameters, which affect the database and all sessions. For example,
MEMORY_TARGET is a system-level parameter, while
NLS_DATE_FORMAT is a session-level parameter.
The scope of a parameter change depends on when the change takes effect. When an instance has been started with a server parameter file, you can use the
SET statement to change values for system-level parameters as follows:
Changes apply to the database instance only. The change will not persist if the database is shut down and restarted.
Changes apply to the server parameter file but do not affect the current instance. Thus, the changes do not take effect until the instance is restarted.
You must specify
SPFILE when changing the value of a parameter described as not modifiable in Oracle Database Reference.
Oracle Database writes changes both to memory and to the server parameter file. This is the default scope when the database is using a server parameter file.
The database prints the new value and the old value of an initialization parameter to the alert log. As a preventative measure, the database validates changes of basic parameter to prevent invalid values from being written to the server parameter file.
Oracle Database includes a fault diagnosability infrastructure for preventing, detecting, diagnosing, and resolving database problems. Problems include critical errors such as code bugs, metadata corruption, and customer data corruption.
The goals of the advanced fault diagnosability infrastructure are the following:
Detecting problems proactively
Limiting damage and interruptions after a problem is detected
Reducing problem diagnostic and resolution time
Improving manageability by enabling trace files to be partitioned, allowing user to define the size per piece and maximum number of pieces to retain, and disabling tracing after a user-specified disk space limit is reached
Simplifying customer interaction with Oracle Support
Multitenant container databases (CDBs) and non-CDBs have architectural differences. This section assumes the architecture of a non-CDB unless indicated otherwise.
Oracle Database Administrator’s Guide to learn how to manage diagnostic files in a CDB
Automatic Diagnostic Repository (ADR) is a file-based repository that stores database diagnostic data such as trace files, the alert log, DDL log, and Health Monitor reports.
Key characteristics of ADR include:
Unified directory structure
Consistent diagnostic data formats
Unified tool set
The preceding characteristics enable customers and Oracle Support to correlate and analyze diagnostic data across multiple Oracle instances, components, and products.
ADR is located outside the database, which enables Oracle Database to access and manage ADR when the physical database is unavailable. A database instance can create ADR before a database has been created.
ADR proactively tracks problems, which are critical errors in the database.
Critical errors manifest as internal errors, such as
ORA-600, or other severe errors. Each problem has a problem key, which is a text string that describes the problem.
When a problem occurs multiple times, ADR creates a time-stamped incident for each occurrence. An incident is uniquely identified by a numeric incident ID. When an incident occurs, ADR sends an incident alert to Enterprise Manager. Diagnosis and resolution of a critical error usually starts with an incident alert.
Because a problem could generate many incidents in a short time, ADR applies flood control to incident generation after certain thresholds are reached. A flood-controlled incident generates an alert log entry, but does not generate incident dumps. In this way, ADR informs you that a critical error is ongoing without overloading the system with diagnostic data.
Oracle Database Administrator’s Guide for detailed information about the fault diagnosability infrastructure
Figure 13-8 illustrates the ADR directory hierarchy for a database instance. Other ADR homes for other Oracle products or components, such as Oracle ASM or Oracle Net Services, can exist within this hierarchy, under the same ADR base.
Figure 13-8 ADR Directory Structure for an Oracle Database Instance
As the following Linux example shows, when you start an instance with a unique SID and database name before creating a database, Oracle Database creates ADR by default as a directory structure in the host file system. The SID and database name form part of the path name for files in the ADR Home.
Example 13-1 Creation of ADR
% setenv ORACLE_SID osi % echo "DB_NAME=dbn" > init.ora % sqlplus / as sysdba . . . Connected to an idle instance. SQL> STARTUP NOMOUNT PFILE="./init.ora" ORACLE instance started. Total System Global Area 146472960 bytes Fixed Size 1317424 bytes Variable Size 92276176 bytes Database Buffers 50331648 bytes Redo Buffers 2547712 bytes SQL> COL NAME FORMAT a21 SQL> COL VALUE FORMAT a60 SQL> SELECT NAME, VALUE FROM V$DIAG_INFO; NAME VALUE --------------------- -------------------------------------------------------- Diag Enabled TRUE ADR Base /d1/3910926111/oracle/log ADR Home /d1/3910926111/oracle/log/diag/rdbms/dbn/osi Diag Trace /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/trace Diag Alert /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/alert Diag Incident /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/incident Diag Cdump /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/cdump Health Monitor /d1/3910926111/oracle/log/diag/rdbms/dbn/osi/hm Default Trace File /d1/3910926111/oracle/log ... osi/trace/osi_ora_6825.trc Active Problem Count 0 Active Incident Count 0
Every database has an alert log, which is an XML file containing a chronological log of database messages and errors.
The alert log contents include the following:
All internal errors (
ORA-600), block corruption errors (
ORA-1578), and deadlock errors (
Administrative operations such as the SQL*Plus commands
ARCHIVE LOG, and
Several messages and errors relating to the functions of shared server and dispatcher processes
Errors during the automatic refresh of a materialized view
Oracle Database uses the alert log as an alternative to displaying information in the Enterprise Manager GUI. If an administrative operation is successful, then Oracle Database writes a message to the alert log as "completed" along with a time stamp.
Oracle Database creates an alert log in the
alert subdirectory shown in Figure 13-8 when you first start a database instance, even if no database has been created yet. This file is in the XML format. The trace subdirectory contains a text-only alert log, a portion of which appears in the following example:
Fri Nov 02 12:41:58 2014 SMP system found. enable_NUMA_support disabled (FALSE) Starting ORACLE instance (normal) CLI notifier numLatches:3 maxDescs:189 LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Initial number of CPU is 2 Number of processor cores in the system is 2 Number of processor sockets in the system is 2 Shared memory segment for instance monitoring created Picked latch-free SCN scheme 3 Using LOG_ARCHIVE_DEST_1 parameter default value as /disk1/oracle/dbs/arch Autotune of undo retention is turned on. IMODE=BR ILAT =10 LICENSE_MAX_USERS = 0 SYS auditing is disabled NOTE: remote asm mode is local (mode 0x1; from cluster type) Starting up: Oracle Database 12c Enterprise Edition Release 18.104.22.168.0 - 64bit Production With the Partitioning, Advanced Analytics and Real Application Testing options. . . . Using parameter settings in client-side pfile System parameters with nondefault values: processes = 100 sessions = 172
As shown in Example 13-1, query
V$DIAG_INFO to locate the alert log.
The DDL log has the same format and basic behavior as the alert log but contains only DDL statements and details. The database writes DDL information to its own file to reduce the clutter in the alert log.
DDL log records are DDL text, optionally augmented with supplemental information. One log record exists for each DDL statement. The DDL log is stored in the
log/ddl subdirectory of the ADR home.
A trace file is a file that contains diagnostic data used to investigate problems. Also, trace files can provide guidance for tuning applications or an instance.
Each server and background process can periodically write to an associated trace file. The files contain information on the process environment, status, activities, and errors.
The SQL trace facility also creates trace files, which provide performance information on individual SQL statements. You can enable tracing for a client identifier, service, module, action, session, instance, or database in various ways. For example, you can execute the appropriate procedures in the
DBMS_MONITOR package or set events.
ADR stores trace files in the
trace subdirectory. Trace file names are platform-dependent and use the extension
Typically, database background process trace file names contain the Oracle SID, the background process name, and the operating system process number. An example of a trace file for the
RECO process is
Server process trace file names contain the Oracle SID, the string
ora, and the operating system process number. An example of a server process trace file name is
Sometimes trace files have corresponding trace metadata files, which end with the extension
.trm. These files contain structural information called trace maps that the database uses for searching and navigation.
When the trace file size is limited, the database may automatically split it into a maximum of five segments. Segments are separate files that have the same name as the active trace file, but with a segment number appended, as in
Each segment is typically 20% of the limit set by
MAX_DUMP_FILE_SIZE. When the combined size of all segments exceeds the limit, the database deletes the oldest segment (although never the first segment, which may contain relevant information about the initial state of the process), and then creates a new, empty segment.
Oracle Database Administrator’s Guide to learn how to control the size of trace files
A diagnostic dump file is a special type of trace file that contains detailed point-in-time information about a state or structure.
A trace tends to be continuous output of diagnostic data. In contrast, a dump is typically a one-time output of diagnostic data in response to an event.
Most dumps occur because of incidents.
When an incident occurs, the database writes one or more dumps to the incident directory created for the incident. Incident dumps also contain the incident number in the file name.
During incident creation, an application may take a heap or system state dump as part of an action. In such cases, the database appends the dump name to the incident file name instead of the default trace file name. For example, because of an incident in a process, the database creates file
prod_ora_90348.trc. A dump in the incident generates the file
incident_id is the numeric ID of the incident. A heap dump action created as part of the incident generates the heap dump file
dump_id is the numeric ID of the trace dump.