Oracle Multitenant Environment (四) Create One or More CDBs
Using the CREATE DATABASE Statement to Create a CDB
This section describes creating a CDB using the CREATE
DATABASE
SQL statement.
Note:
Oracle strongly recommends using the Database Configuration Assistant (DBCA) instead of theCREATE
DATABASE
SQL statement to create a CDB, because using DBCA is a more automated approach, and your CDB is ready to use when DBCA completes.This section contains the following topics:
About Creating a CDB with the CREATE DATABASE Statement
Creating a CDB using the CREATE
DATABASE
SQL statement is very similar to creating a non-CDB. This section describes additional requirements for creating a CDB.
Using the CREATE
DATABASE
SQL statement is a more manual approach to creating a CDB than using DBCA. One advantage of using this statement over using DBCA is that you can create CDBs from within scripts.
When you create a CDB using the CREATE
DATABASE
SQL statement, you must enable PDBs and specify the names and locations of the root's files and the seed's files.
This section contains the following topics:
See Also:
Oracle Database Concepts for information about a CDB's filesAbout Enabling PDBs
To create a CDB, the CREATE
DATABASE
statement must include the ENABLE
PLUGGABLE
DATABASE
clause. When this clause is included, the statement creates a CDB with the root and the seed.
When the ENABLE
PLUGGABLE
DATABASE
clause is not included in the CREATE
DATABASE
statement, the newly created database is a non-CDB. The statement does not create the root and the seed, and the non-CDB can never contain PDBs.
About the Names and Locations of the Root's Files and the Seed's Files
The CREATE
DATABASE
statement uses the root's files (such as data files) to generate the names of the seed's files. You must specify the names and locations of the root's files and the seed's files. After the CREATE
DATABASE
statement completes successfully, you can use the seed and its files to create new PDBs. The seed cannot be modified after it is created.
You must specify the names and locations of the seed's files in one of the following ways:
If you use more than one of these methods, then the CREATE
DATABASE
statement uses one method in the order of precedence of the previous list. For example, if you use all of the methods, then the CREATE
DATABASE
statement only uses the specifications in the SEED
FILE_NAME_CONVERT
clause.
The SEED FILE_NAME_CONVERT Clause
The SEED
FILE_NAME_CONVERT
clause of the CREATE
DATABASE
statement specifies how to generate the names of the seed's files using the names of root's files.
You can use this clause to specify one of the following options:
-
One or more file name patterns and replacement file name patterns, in the following form:
'string1' , 'string2' , 'string3' , 'string4' , ...
The string2 file name pattern replaces the string1 file name pattern, and the string4 file name pattern replaces the string3 file name pattern. You can use as many pairs of file name pattern and replacement file name pattern strings as required.
If you specify an odd number of strings (the last string has no corresponding replacement string), then an error is returned. Do not specify more than one pattern/replace string that matches a single file name or directory.
File name patterns cannot match files or directories managed by Oracle Managed Files.
-
NONE
when no file names should be converted. Omitting theSEED
FILE_NAME_CONVERT
clause is the same as specifyingNONE
.
Example 37-1 SEED FILE_NAME_CONVERT Clause
This SEED
FILE_NAME_CONVERT
clause generates file names for the seed's files in the /oracle/pdbseed directory using file names in the /oracle/dbs directory.
SEED FILE_NAME_CONVERT = ('/oracle/dbs/', '/oracle/pdbseed/')
Oracle Managed Files
When Oracle Managed Files is enabled, it can determine the names and locations of the seed's files.
The PDB_FILE_NAME_CONVERT Initialization Parameter
The PDB_FILE_NAME_CONVERT
initialization parameter can specify the names and locations of the seed's files. To use this technique, ensure that thePDB_FILE_NAME_CONVERT
initialization parameter is included in the initialization parameter file when you create the CDB.
File name patterns specified in this initialization parameter cannot match files or directories managed by Oracle Managed Files.
About the Attributes of the Seed's Data Files
The seed can be used as a template to create new PDBs. The attributes of the data files for the root's SYSTEM
and SYSAUX
tablespaces might not be suitable for the seed. In this case, you can specify different attributes for the seed's data files by using the tablespace_datafile
clauses. Use these clauses to specify attributes for all data files comprising the SYSTEM
and SYSAUX
tablespaces in the seed. The values inherited from the root are used for any attributes whose values have not been provided.
The syntax of the tablespace_datafile
clauses is the same as the syntax for a data file specification, excluding the name and location of the data file and the REUSE
attribute. You can use the tablespace_datafile
clauses with any of the methods for specifying the names and locations of the seed's data files described in "About the Names and Locations of the Root's Files and the Seed's Files".
The tablespace_datafile
clauses do not specify the names and locations of the seed's data files. Instead, they specifies attributes of SYSTEM
and SYSAUX
data files in the seed that differ from those in the root. If SIZE
is not specified in the tablespace_datafile
clause for a tablespace, then data file size for the tablespace is set to a predetermined fraction of the size of a corresponding root data file.
Example 37-2 Using the tablespace_datafile Clauses
Assume the following CREATE
DATABASE
clauses specify the names, locations, and attributes of the data files that comprise the SYSTEM
and SYSAUX
tablespaces in the root.
DATAFILE '/u01/app/oracle/oradata/newcdb/system01.dbf' SIZE 325M REUSE SYSAUX DATAFILE '/u01/app/oracle/oradata/newcdb/sysaux01.dbf' SIZE 325M REUSE
You can use the following tablespace_datafile
clauses to specify different attributes for these data files:
SEED SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED SYSAUX DATAFILES SIZE 100M
In this example, the data files for the seed's SYSTEM
and SYSAUX
tablespaces inherit the REUSE
attribute from the root's data files. However, the following attributes of the seed's data files differ from the root's:
-
The data file for the
SYSTEM
tablespace is 125 MB for the seed and 325 MB for the root. -
AUTOEXTEND
is enabled for the seed'sSYSTEM
data file, and it is disabled by default for the root'sSYSTEM
data file. -
The data file for the
SYSAUX
tablespace is 100 MB for the seed and 325 MB for the root.
Creating a CDB with the CREATE DATABASE Statement
When you use the CREATE DATABASE
statement to create a CDB, you must complete additional actions before you have an operational CDB. These actions include building views on the data dictionary tables and installing standard PL/SQL packages in the root. You perform these actions by running the supplied catcdb.sql script.
The examples in the following steps create a CDB named newcdb
.
To create a CDB with the CREATE
DATABASE
statement:
-
Complete steps 1 - 8 in "Creating a Database with the CREATE DATABASE Statement".
To create a CDB, the
ENABLE_PLUGGABLE_DATABASE
initialization parameter must be set toTRUE
.In a CDB, the
DB_NAME
initialization parameter specifies the name of the root. Also, it is common practice to set the SID to the name of the root. The maximum number of characters for this name is 30. For more information, see the discussion of theDB_NAME
initialization parameter in Oracle Database Reference. -
Use the
CREATE
DATABASE
statement to create a new CDB.The following examples illustrate using the
CREATE
DATABASE
statement to create a new CDB:Example 1: Creating a CDB Without Using Oracle Managed Files
The following statement creates a CDB named
newcdb
. This name must agree with theDB_NAME
parameter in the initialization parameter file. This example assumes the following:-
The initialization parameter file specifies the number and location of control files with the
CONTROL_FILES
parameter. -
The directory
/u01/app/oracle/oradata/newcdb
exists. -
The directory
/u01/app/oracle/oradata/pdbseed
exists. -
The directories
/u01/logs/my
and/u02/logs/my
exist.
This example includes the
ENABLE
PLUGGABLE
DATABASE
clause to create a CDB with the root and the seed. This example also includes theSEED
FILE_NAME_CONVERT
clause to specify the names and locations of the seed's files. This example also includestablespace_datafile
clauses that specify attributes of the seed's data files for theSYSTEM
andSYSAUX
tablespaces that differ from the root's.CREATE DATABASE newcdb USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512, GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512, GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log') SIZE 100M BLOCKSIZE 512 MAXLOGHISTORY 1 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 1024 CHARACTER SET AL32UTF8 NATIONAL CHARACTER SET AL16UTF16 EXTENT MANAGEMENT LOCAL DATAFILE '/u01/app/oracle/oradata/newcdb/system01.dbf' SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED SYSAUX DATAFILE '/u01/app/oracle/oradata/newcdb/sysaux01.dbf' SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED DEFAULT TABLESPACE deftbs DATAFILE '/u01/app/oracle/oradata/newcdb/deftbs01.dbf' SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED DEFAULT TEMPORARY TABLESPACE tempts1 TEMPFILE '/u01/app/oracle/oradata/newcdb/temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED UNDO TABLESPACE undotbs1 DATAFILE '/u01/app/oracle/oradata/newcdb/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED ENABLE PLUGGABLE DATABASE SEED FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/newcdb/', '/u01/app/oracle/oradata/pdbseed/') SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED SYSAUX DATAFILES SIZE 100M USER_DATA TABLESPACE usertbs DATAFILE '/u01/app/oracle/oradata/pdbseed/usertbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
A CDB is created with the following characteristics:
-
The CDB is named
newcdb
. Its global database name isnewcdb.us.example.com
, where the domain portion (us.example.com
) is taken from the initialization parameter file. -
Three control files are created as specified by the
CONTROL_FILES
initialization parameter, which was set before CDB creation in the initialization parameter file. See "Sample Initialization Parameter File" and "Specifying Control Files". -
The passwords for user accounts
SYS
andSYSTEM
are set to the values that you specified. The passwords are case-sensitive. The two clauses that specify the passwords forSYS
andSYSTEM
are not mandatory in this release of Oracle Database. However, if you specify either clause, then you must specify both clauses. For further information about the use of these clauses, see "Protecting Your Database: Specifying Passwords for Users SYS and SYSTEM". -
The new CDB has three online redo log file groups, each with two members, as specified in the
LOGFILE
clause.MAXLOGFILES
,MAXLOGMEMBERS
, andMAXLOGHISTORY
define limits for the redo log. See "Choosing the Number of Redo Log Files". The block size for the redo logs is set to 512 bytes, the same size as physical sectors on disk. TheBLOCKSIZE
clause is optional if block size is to be the same as physical sector size (the default). Typical sector size and thus typical block size is 512. Permissible values forBLOCKSIZE
are 512, 1024, and 4096. For newer disks with a 4K sector size, optionally specifyBLOCKSIZE
as 4096. See "Planning the Block Size of Redo Log Files" for more information. -
MAXDATAFILES
specifies the maximum number of data files that can be open in the CDB. This number affects the initial sizing of the control file.Note:
You can set several limits during CDB creation. Some of these limits are limited by and affected by operating system limits. For example, if you setMAXDATAFILES
, then Oracle Database allocates enough space in the control file to storeMAXDATAFILES
filenames, even if the CDB has only one data file initially. However, because the maximum control file size is limited and operating system dependent, you might not be able to set allCREATE DATABASE
parameters at their theoretical maximums.For more information about setting limits during CDB creation, see the Oracle Database SQL Language Referenceand your operating system–specific Oracle documentation.
-
The
AL32UTF8
character set is used to store data in this CDB. -
The
AL16UTF16
character set is specified as theNATIONAL CHARACTER SET
used to store data in columns specifically defined asNCHAR
,NCLOB
, orNVARCHAR2
. -
The
SYSTEM
tablespace, consisting of the operating system file/u01/app/oracle/oradata/newcdb/system01.dbf
, is created as specified by theDATAFILE
clause. If a file with that name already exists, then it is overwritten. -
The
SYSTEM
tablespace is created as a locally managed tablespace. See "Creating a Locally Managed SYSTEM Tablespace". -
A
SYSAUX
tablespace is created, consisting of the operating system file/u01/app/oracle/oradata/newcdb/sysaux01.dbf
as specified in theSYSAUX DATAFILE
clause. See "About the SYSAUX Tablespace". -
The
DEFAULT
TABLESPACE
clause creates and names a default permanent tablespace for this CDB. -
The
DEFAULT TEMPORARY TABLESPACE
clause creates and names a default temporary tablespace for this CDB. See "Creating a Default Temporary Tablespace". -
The
UNDO TABLESPACE
clause creates and names an undo tablespace that is used to store undo data for this CDB. In a CDB, an undo tablespace is required to manage the undo data, and theUNDO_MANAGEMENT
initialization parameter must be set toAUTO
. If you omit this parameter, then it defaults toAUTO
. See "Using Automatic Undo Management: Creating an Undo Tablespace". -
Redo log files will not initially be archived, because the
ARCHIVELOG
clause is not specified in thisCREATE
DATABASE
statement. This is customary during CDB creation. You can later use anALTER DATABASE
statement to switch toARCHIVELOG
mode. The initialization parameters in the initialization parameter file fornewcdb
relating to archiving areLOG_ARCHIVE_DEST_1
andLOG_ARCHIVE_FORMAT
. See Chapter 12, "Managing Archived Redo Log Files". -
The
ENABLE
PLUGGABLE
DATABASE
clause creates a CDB with the root and the seed. -
SEED
is required for theFILE_NAME_CONVERT
clause and thetablespace_datafile
clauses. -
The
FILE_NAME_CONVERT
clause generates file names for the seed's files in the /u01/app/oracle/oradata/pdbseed directory using file names in the /u01/app/oracle/oradata/newcdb directory. -
The
SYSTEM
DATAFILES
clause specifies attributes of the seed'sSYSTEM
tablespace data file(s) that differ from the root's. -
The
SYSAUX
DATAFILES
clause specifies attributes of the seed'sSYSAUX
tablespace data file(s) that differ from the root's. -
The
USER_DATA
TABLESPACE
clause creates and names the seed's tablespace for storing user data and database options such as Oracle XML DB. PDBs created using the seed include this tablespace and its data file. The tablespace and data file specified in this clause are not used by the root.
Note:
-
Ensure that all directories used in the
CREATE
DATABASE
statement exist. TheCREATE
DATABASE
statement does not create directories. -
If you are not using Oracle Managed Files, then every tablespace clause must include a
DATAFILE
orTEMPFILE
clause. -
If CDB creation fails, then you can look at the alert log to determine the reason for the failure and to determine corrective actions. See "Viewing the Alert Log". If you receive an error message that contains a process number, then examine the trace file for that process. Look for the trace file that contains the process number in the trace file name. See "Finding Trace Files" for more information.
-
To resubmit the
CREATE
DATABASE
statement after a failure, you must first shut down the instance and delete any files created by the previousCREATE
DATABASE
statement.
-