Create 12c Container Database Using OMF


Overview

Create a container database manually with using OMF.

References

Procedure

Preliminaries

The procedure to follow can be found in Creating a CDB with the CREATE DATABASE Statement , and Create 12C Non-CDB Database Using OMF .

Step 1: Specify an Instance Identifier (SID)

The database and instance name is JAR .

Step 2: Ensure That the Required Environment Variables Are Set

The following update is made to /etc/oratab :

jar:/opt/app/oracle/product/12.1.0/dbhome_1:N

The appropriate environment variables are set as follows:

. oraenv

Step 3: Choose a Database Administrator Authentication Method

The password file is created as follows:

cd ${ORACLE_HOME}/dbs orapwd file=orapwd${ORACLE_SID}

Step 4: Create the Initialization Parameter File

The following data is entered into /home/oracle/initjar.ora :

cat >initjar.ora <<DONE *.audit_file_dest='/opt/app/oracle/admin/jar/adump' *.audit_trail='db' *.compatible='12.1.0.2.0' *.db_block_size=8192 *.db_create_file_dest='/opt/app/oracle/oradata' *.db_create_online_log_dest_1='/opt/app/oracle/oradata' *.db_create_online_log_dest_2='/opt/app/oracle/fast_recovery_area' *.db_domain='yaocm.id.au' *.db_name='jar' *.db_recovery_file_dest='/opt/app/oracle/fast_recovery_area' *.db_recovery_file_dest_size=9G *.diagnostic_dest='/opt/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=jarXDB)' *.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST' *.memory_target=1470m *.open_cursors=300 *.processes=300 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' *.enable_pluggable_database=TRUE DONE

The key difference with the non-CDB case is the inclusion of the last parameter.

The following directories are created:

mkdir -p /opt/app/oracle/admin/jar/adump mkdir -p /opt/app/oracle/oradata mkdir -p /opt/app/oracle/fast_recovery_area

Set Up PERL Environment

According to "ORA-01917: User Or Role 'PDB_DBA' Does Not Exist" while creating container enabled (cdb) database manually (Doc ID 1967358.1) , the PERL environment should reference the one supplied by the Oracle RDBMS installation. The PATH variable to reflect this:

export PATH=${ORACLE_HOME}/perl/bin:${PATH}

Step 6: Connect to the Instance

Instead of following the procedure, I used the following commands instead:

sqlplus / as sysdba startup nomount pfile='/home/oracle/initjar.ora'

The reason is to check the syntax and validity of the initialization parameters before creating the spfile.

Step 7: Create a Server Parameter File

The spfile is created in the default location ( ${ORACLE_HOME}/dbs ) as follows:

CREATE SPFILE FROM PFILE='/home/oracle/initjar.ora';

Step 8: Start the Instance

The instance is started using the spfile:

startup nomount force

Step 9: Issue the CREATE DATABASE Statement

The database is created using the following command:

create database jar user sys identified by "&pw_sys" user system identified by "&pw_system" logfile group 1 size 50m, group 2 size 50m, group 3 size 50m character set al32utf8 national character set al16utf16 set default bigfile tablespace archivelog set time_zone='+10:00' extent management local default temporary tablespace temp default tablespace users undo tablespace undotbs1 enable pluggable database /

The key difference with the non-CDB case is the inclusion of the following:

enable pluggable database

Install CDB Components

The key difference with the non-CDB case is the replacement of the catalog.sql and catproc.sql with catcdb.sql .

According to "ORA-01917: User Or Role 'PDB_DBA' Does Not Exist" while creating container enabled (cdb) database manually (Doc ID 1967358.1) , the following commands are run to install the CDB components:

connect / as sysdba @?/rdbms/admin/catcdb.sql connect system @?/sqlplus/admin/pupbld.sql

Gotchas

Using SQL*Plus Error Handling

The use of WHENEVER OSERROR EXIT FAILURE ROLLBACK gives the following messages:

catcon.pl: completed successfully
O/S Message: No child processes

And the catcdb.sql script finishes prematurely.

PRODUCT_USER_PROFILE Missing From SEED Database

Using this method means that the PRODUCT_USER_PROFILE table is missing from the SEED database. After a pluggable database is created from the SEED, you will have to run the following commands:

CONNECT SYSTEM ALTER SESSION SET container=&pdb.; @?/sqlplus/admin/pupbld.sql