Data Dictionary in Oracle
4 min readThe central set of read-only reference tables and views of each Oracle database is known collectively as the data dictionary.
Overview of the Data Dictionary An important part of an Oracle database is its data dictionary, which is a read-only set of tables that provides administrative metadata about the database. A data dictionary contains information such as the following: • The definitions of every schema object in the database, including default values for columns and integrity constraint information • The amount of space allocated for and currently used by the schema objects • The names of Oracle Database users, privileges and roles granted to users, and auditing information related to users The data dictionary is a central part of data management for every Oracle database. For example, the database performs the following actions: • Accesses the data dictionary to find information about users, schema objects, and storage structures • Modifies the data dictionary every time that a DDL statement is issued . Because Oracle Database stores data dictionary data in tables, just like other data, users can query the data with SQL. For example, users can run SELECT statements to determine their privileges, which tables exist in their schema, which columns are in these tables, whether indexes are built on these columns, and so on.
Contents of the Data Dictionary
The data dictionary consists of base tables and views.
These objects are defined as follows:
• Base tables
These store information about the database. Only Oracle Database should write to and read these tables. Users rarely access the base tables directly because they are normalized and most data is stored in a cryptic format.
• Views
These decode the base table data into useful information, such as user or table names, using joins and WHERE clauses to simplify the information. The views contain the names and description of all objects in the data dictionary. Some views are accessible to all database users, whereas others are intended for administrators only.
Typically, data dictionary views are grouped in sets. In many cases, a set consists of three views containing similar information and distinguished from each other by their prefixes, as shown in the following table. By querying the appropriate views, you can access only the information relevant for you.
Prefix | User Access | Contents | Notes |
DBA_ | Database administrators | All objects | Some DBA_ views have additional columns containing information useful to the administrator. |
ALL_ | All users | Objects to which user has privileges | Includes objects owned by user. These views obey the current set of enabled roles. |
USER_ | All users | Objects owned by user | Views with the prefix USER_ usually exclude the column OWNER. This column is implied in the USER_ views to be the user issuing the query |
The system-supplied DICTIONARY view contains the names and abbreviated descriptions of all data dictionary views. The following query of this view includes partial sample output:
SQL> SELECT * FROM DICTIONARY ORDER BY TABLE_NAME;
TABLE_NAME COMMENTS
------------------------------ ----------------------------------------
ALL_ALL_TABLES Description of all object and relational tables accessible to the user
ALL_APPLY Details about each apply process that dequeues from the queue visible to the current user
.
.
.
Views with the Prefix DBA_:
The following sample query shows information about all objects in the database:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;
Views with the Prefix ALL_ :
Views with the prefix ALL_ refer to the user's overall perspective of the database.
These views return information about schema objects to which the user has access through public or explicit grants of privileges and roles, in addition to schema objects that the user owns.
For example, the following query returns information about all the objects to which you have access:
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM ALL_OBJECTS
ORDER BY OWNER, OBJECT_NAME;
Because the ALL_ views obey the current set of enabled roles, query results depend on which roles are enabled, as shown in the following example:
SQL> SET ROLE ALL;
Role set.
SQL> SELECT COUNT(*) FROM ALL_OBJECTS;
COUNT(*)
----------
68295
SQL> SET ROLE NONE;
Role set.
SQL> SELECT COUNT(*) FROM ALL_OBJECTS;
COUNT(*)
----------
53771
Views with the Prefix USER_:
The views most likely to be of interest to typical database users are those with the prefix USER_.
These views:
• Refer to the user's private environment in the database, including metadata about schema objects created by the user, grants made by the user, and so on
• Display only rows pertinent to the user, returning a subset of the information in the ALL_ views
• Has columns identical to the other views, except that the column OWNER is implied
• Can have abbreviated PUBLIC synonyms for convenience
For example, the following query returns all the objects contained in your schema:
SELECT OBJECT_NAME, OBJECT_TYPE
FROM USER_OBJECTS
ORDER BY OBJECT_NAME;
Storage of the Data Dictionary
The data dictionary base tables are the first objects created in any Oracle database.
All data dictionary tables and views for a database are stored in the SYSTEM tablespace. Because the SYSTEM tablespace is always online when the database is open, the data dictionary is always available when the database is open.